spark rdd 怎么分区宽依赖和窄依赖
宽依赖:父RDD的分区被子RDD的多个分区使用。例如 groupByKey、reduceByKey、sortByKey等操作会产生宽依赖,会产生shuffle。
窄依赖:父RDD的每个分区都只被子RDD的一个分区使用。例如map、filter、union等操作会产生窄依赖
spark streaming如何读取kafka的数据
有两种方式读取数据。分别是:
Receiver-base方式:使用Kafka的高层次Consumer API来实现。receiver从Kafka中获取的数据都存储在Spark Executor的内存中,然后Spark Streaming启动的job会去处理那些数据。然而,在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制,让数据零丢失,就必须启用Spark Streaming的预写日志机制(Write Ahead Log,WAL)。该机制会同步地将接收到的Kafka数据写入分布式文件系统(比如HDFS)上的预写日志中。所以,即使底层节点出现了失败,也可以使用预写日志中的数据进行恢复。
Direct方式:Direct方式用来替代掉使用Receiver接收数据,这种方式会周期性地查询Kafka,获得每个topic+partition的最新的offset,从而定义每个batch的offset的范围。当处理数据的job启动时,就会使用Kafka的简单consumer api来获取Kafka指定offset范围的数据。
Spark SQL 与 Hvie的关系
Spark SQL并不是直接全部替换Hive,而只是替换了Hive的查询引擎部分,通过Spark SQL的查询引擎去操作表或是HDFS上的目录文件,从而提高了查询速度。
Hbase如何设计表
设计原则是:
宽表指的是行少列多,如果一行数据量过大,可能造成一个HFile放不下。但宽表有行级原子性的优势。高表指的是行多列少,Hbase只能按行分片,因此高表更有优势。
最好不要定义过多的ColumnFamily,一般来说, 一张表一个ColumnFamily就好。因为Flushing和压缩是基于Region的。当一个ColumnFamily所存储的数据达到Flushing阀值时,该表中的其他ColumnFamily可能没存储多少数据,也要跟着进行Flushing操作,这将会带来很多不必要的IO消耗。ColumFamily越多,对性能的影响也就越大。此外,同一个表中不同的ColumnFamily存储的数据量差别也不要太大,不然有些数据会分散在太多的Region上,会影响检索效率。
Hbase rowkey的设计:几个简单的原则:rowkey唯一,长度一致,能短则短。 然后考虑几个问题:a.读取方便:尽可能的把检索条件存储于rowkey中,同时访问的数据,rowkey尽量连接,即可以利用scan指定start和end rowkey直接访问。 b.提高写效率:评估业务场景,根据数据分布情况进行预分区,提高并发度。有些情况下,可以加入散列值,使写分散到各regionserver,避免单点过载。
领取专属 10元无门槛券
私享最新 技术干货