Spark读写Hbase的二种方式对比

编辑:光环大数据 来源: 互联网 时间: 2017-11-09 13:03 阅读:

  一.传统方式

  这种方式就是常用的TableInputFormat和TableOutputFormat来读写hbase,如下代码所示

  简单解释下,用sc.newAPIhadoopRDD根据conf中配置好的scan来从Hbase的数据列族中读取包含(ImmutableBytesWritable, Result)的RDD,

  随后取出rowkey和value的键值对儿利用StatCounter进行一些最大最小值的计算最终写入hbase的统计列族.

  二.SparkOnHbase方式

  重点介绍第二种方式,这种方式其实是利用Cloudera-labs开源的一个HbaseContext的工具类来支持spark用RDD的方式批量读写hbase,先给个传送门大家感受下

  https://github.com/cloudera-labs/SparkOnHBase/blob/cdh5-0.0.2/src/main/scala/com/cloudera/spark/hbase/HBaseContext.scala

  https://issues.apache.org/jira/browse/HBASE-13992

  https://issues.apache.org/jira/browse/HBASE-14160

  虽然这个hbase-spark的module在Hbase上的集成任务很早就完成了,但是已知发布的任何版本我还没找到该模块,不知道什么情况,再等等吧

  那么问题来了,这种方式的优势在哪儿呢,官方的解释我翻译如下

  1>无缝的使用Hbase connection

  2>和Kerberos无缝集成

  3>通过get或者scan直接生成rdd

  4>利用RDD支持hbase的任何组合操作

  5>为通用操作提供简单的方法,同时通过API允许不受限制的未知高级操作

  6>支持java和scala

  7>为spark和 spark streaming提供相似的API

  ok,由于hbaseContext是一个只依赖hadoop,hbase,spark的jar包的工具类,因此可以拿过来直接用

  废话不说,直接用我调试过的代码来感受下

  想用HbaseContext很简单,如上面代码所示,需要说明的是hbaseContext的hbaseScanRDD方法,这个方法返回的是一个

  (RowKey, List[(columnFamily, columnQualifier, Value)]类型的RDD,如下

  刚开始用的挺不习惯的.还得循环取出来rowkey对应的这么多列,这里你如果对它的RDD返回类型不爽,官方很贴心的提供了另外一个方法

  怎么样,是不是看着很眼熟了?你可以自定义第三个参数(ImmutableBytesWritable, Result),对函数f进行自定义来返回你自己喜欢的RDD格式,

  程序运行结果如下,过滤出了9:20到9:58所有的rowkey以及对应的列

  当然HbaseContext还有其他bulkGet,bulkPut,bulkDelete等,都是可以直接将hbase的操作转换成RDD,只要转成RDD了,那么rdd的这么多transform和action就可以玩的很happy了.

 

  大数据时代Hadoop培训大数据培训培训班,就选光环大数据!

 


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();