Spark将HDFS数据导入到HBase

14 篇文章 0 订阅
3 篇文章 0 订阅
本文档介绍了如何在Spark环境下,结合HDFS和Yarn,将数据从HDFS加载到HBase中。文章详细阐述了四个步骤:1.提供关键代码片段;2.将Spark程序打包并上传到HDFS;3.添加必要的JAR依赖;4.编写并执行Yarn提交脚本。整个流程参照了Cloudera官方文档。
摘要由CSDN通过智能技术生成

本程序运行环境:Spark+HDFS+HBase+Yarn
hadoop(HDFS+Yarn)集群搭建,参考:http://blog.csdn.net/korder/article/details/46909253
Spark on Yarn,参考:http://blog.csdn.net/korder/article/details/47422345
HBase集群搭建,参考:http://blog.csdn.net/korder/article/details/47423247

hbase表结构为:表名table,列族fam,列为col。

第一步:上代码
object inputHbase:


import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.hadoop.hbase._


/**
 * Created by Chensy on 15-8-10.
 */
object inputHbase {
  /**
   * hbase table:table col-family:fam col:col
   */

  def main(args: Array[String]) {
    val conf = new SparkConf()
    val sc = new SparkContext(conf)
    val readFile = sc.textFile(args(0)).map(x => x.split(","))
    val tableName = "table"

    readFile.foreachPartition{
        x=> {
          val myConf = HBaseConfiguration.create()
          myConf.set("hbase.zookeeper.quorum","172.23.27.45,172.23.27.46,172.23.27.47")
          myConf.set("hbase.zookeeper.property.clientPort","2181")
          myConf.set("hbase.defaults.for.version.skip","true")
          myConf.set("hbase.master","172.23.27.39:60000")
          myConf.set("hbase.cluster.distributed","true")
          myConf.set("hbase.rootdir","hdfs://cdh5-test/hbase")


          val myTable = new HTable(myConf,TableName.valueOf(tableName))
          //将自动提交关闭,如果不关闭,每写一条数据都会进行提交,是导入数据较慢的做主要因素。
          myTable.setAutoFlush(false,false)
          //设置缓存大小,当缓存大于设置值时,hbase会自动提交。此处可自己尝试大小,一般对大数据量,设置为5M即可。
          myTable.setWriteBufferSize(5*1024*1024)

          x.foreach{ y=> {
                val p = new Put(Bytes.toBytes("row"+y(0)))
                p.add("fam".getBytes,"col".getBytes,Bytes.toBytes("value"+y(0)))
                myTable.put(p)
            }

          }
          //每一个分片结束后都进行flushCommits(),如果不执行,当hbase最后缓存小于上面设定值时,不会进行提交,导致数据丢失。
          myTable.flushCommits()
        }
    }
    System.exit(0)
  }

}


第二步:打包,并传至HDFS

idea打包就不说了,inputHbase.jar
hadoop fs -put inputHbase.jar /xxx/spark/streaming 

第三步:添加相关jars
建个公共库,把需要用到的jar包存放一起,方便添加
这里写图片描述

第四步:编写执行脚本:submit-yarn-inputHbase.sh

[root@JXQ-23-27-38 streaming]# vim submit-yarn-inputHbase.sh 

cd $SPARK_HOME

#pwd

./bin/spark-submit --name inputHbase \
                   --class com.wylog.hbase.inputHbase \
                   --master yarn-cluster \
                   --num-executors 8 \
                   --executor-memory 4g  \
                   --executor-cores 8 \
                   --driver-memory 4g \
                   --driver-cores 4 \
                   --jars /root/spark/streaming/public_lib/hbase-client-0.98.6-cdh5.3.2.jar,
/root/spark/streaming/public_lib/hbase-server-0.98.6-cdh5.3.2.jar,
/root/spark/streaming/public_lib/hbase-protocol-0.98.6-cdh5.3.2.jar,
/root/spark/streaming/public_lib/htrace-core-2.04.jar  \
                   hdfs://cdh5-test/xxx/spark/streaming/inputHbase.jar \
                   hdfs://cdh5-test/data/notify-server/172.17.88.88/notify-server2_detail.log.*

参考资料:
http://www.cloudera.com/content/cloudera/zh-CN/documentation/core/v5-3-x/topics/admin_hbase_import.html#concept_asc_ctz_wp_unique_1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸依天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值