首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark Streaming如何读Kafka数据 Hbase如何设计表

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,避免单点过载。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G1W0VI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券