Spark将HDFS数据导入到HBase

程序运行环境: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)
  }

}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

第二步:打包,并传至HDFS

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

第三步:添加相关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.*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

转载于:https://my.oschina.net/sniperLi/blog/719144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值