Spark读写HBase实践

Posted 北邮郭大宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark读写HBase实践相关的知识,希望对你有一定的参考价值。

Spark经常会读写一些外部数据源,常见的有HDFS、HBase、JDBC、Redis、Kafka等。这些都是Spark的常见操作,做一个简单的Demo总结,方便后续开发查阅。


1. Maven依赖


需要引入Hadoop和HBase的相关依赖,版本信息根据实际情况确定。


        

    Spark读写HBase实践


    2. HBaseUtils


    为了方便使用,需要写HBaseUtils类,完成一些基本信息的配置。比如完成Configuration、zookeeper的配置,返回HBaseAdmin和HTable等操作。


    Spark读写HBase实践


    3. Spark读HBase


    读取HBase数据可以通过TableInputFormat,newAPIHadoopRDD,把HBase表里的数据读出来,转变成RDD,再做后续处理。


    Spark读写HBase实践


    4. Spark写HBase


    Spark写HBase有三种方法,方法一是通过HTable中put方法一条一条插入数据到HBase;方法二是通过TableOutputFormat、saveAsHadoopDataset的API;方法三是通过bulkload将数据写入HFile再完成导入。根据网上的资料显示,方法三的效率会更高,所以推荐使用bulkload的方式。


    4.1 通过HTable中put方法


    值得提醒的是,Spark在map,foreachPartition等算子内部使用了外部定义的变量和函数时,会引发Task未序列化问题。所以只能把配置信息放在foreachPartition中,效率很低。


    Spark读写HBase实践


    4.2 通过TableOutputFormat



    4.3 通过bulkload


    这个方法的思路就是将数据RDD先生成HFiles,然后通过org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles将事先生成Hfiles批量导入到Hbase中。bulkload性能提高的原因可以参阅这篇文章https://www.iteblog.com/archives/1889.html



    5. 参考

    • https://blog.csdn.net/qq_25954159/article/details/52848947?locationNum=12&fps=1

    • https://www.iteblog.com/archives/1891.html

    • https://www.iteblog.com/archives/1889.html

    • https://blog.csdn.net/gpwner/article/details/73530134

    以上是关于Spark读写HBase实践的主要内容,如果未能解决你的问题,请参考以下文章

    如何使用scala+spark读写hbase?

    SHC:使用 Spark SQL 高效地读写 HBase

    如何使用MaxCompute Spark读写阿里云Hbase

    大数据-05-Spark之读写HBase数据

    大数据(5e)Spark之Scala读写HBase之Phoenix表

    flink与hbase交互