spark 读取hbase中的数据

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Scan
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.protobuf.ProtobufUtil
import org.apache.hadoop.hbase.util.{Base64, Bytes}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by lzz on 6/23/16.
  */
object HbaseRDD  extends  App{

  val sparkConf = new SparkConf().setMaster("local")
    .setAppName("My App")
    .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  val sc = new SparkContext(sparkConf)

  var hConf = HBaseConfiguration.create()
  hConf.set("hbase.zookeeper.property.clientPort", "2181" )
  hConf.set("hbase.zookeeper.quorum", "192.168.1.221,192.168.1.222,192.168.1.223" )
  hConf.set("hbase.master", "hadoop006:16010" )
  hConf.set(TableInputFormat.INPUT_TABLE, "user_tags")

  var scan = new Scan();
  scan.addFamily(Bytes.toBytes("cf"))
  var proto = ProtobufUtil.toScan(scan);
  var ScanToString = Base64.encodeBytes(proto.toByteArray());
  hConf.set(TableInputFormat.SCAN, ScanToString);

  val usersRDD = sc.newAPIHadoopRDD( hConf, classOf[TableInputFormat],
    classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
    classOf[org.apache.hadoop.hbase.client.Result])

  val users = usersRDD.map( x => x._2 )
    .map( result => ( result.getRow,  result.getValue( Bytes.toBytes("cf"),Bytes.toBytes("h1") )) )
      .map( row => ( new String(row._1), new String(row._2) ) )
        .foreach( r => ( println( r._1 + "----" + r._2 ) ) )


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值