Spark读写Hbase示例代码

25 篇文章 0 订阅
4 篇文章 0 订阅
最少需要导入hbase以下4个jar:
  • hbase-client
  • hbase-common
  • hbase-protocol
  • hbase-server

写入Hbase
def writeHbaseFromRDD (tableName: String , columnFamily: String , column: String , rdd:RDD[( String , String )]): Unit ={
val hbaseConf = HBaseConfiguration.create()
// 新旧 API 都可以用 , 大部分 Hadoop 版本包含新旧两版的 API
/** hadoop API 写法 */
// val jobConf = new org.apache.hadoop.mapred.JobConf(hbaseConf)
// jobConf.setOutputFormat(classOf[org.apache.hadoop.hbase.mapred.TableOutputFormat])
// jobConf.set(org.apache.hadoop.hbase.mapred.TableOutputFormat.OUTPUT_TABLE,tableName)
// rdd.map{
// case(key,value) =>
// val p = new Put(Bytes.toBytes(key))
// p.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(value))
p.setWriteToWAL(false)
// (new ImmutableBytesWritable,p)
// }.saveAsHadoopDataset(jobConf)

/** hadoop API 写法 */
val job = new org.apache.hadoop.mapreduce.Job(hbaseConf)
job.setOutputFormatClass(
classOf[org.apache.hadoop.hbase.mapreduce.TableOutputFormat[ImmutableBytesWritable]])
job.setOutputKeyClass(
classOf[ImmutableBytesWritable])
job.setOutputValueClass(
classOf[Writable])
job.getConfiguration.set(org.apache.hadoop.hbase.mapreduce.TableOutputFormat.
OUTPUT_TABLE , tableName)
rdd.map{
case (key , value) =>
val p = new Put(Bytes. toBytes(key))
p.add(Bytes.
toBytes(columnFamily)
, Bytes.toBytes (column) , Bytes.toBytes(value))
// p.setWriteToWAL(false)
( new ImmutableBytesWritable , p)
}.saveAsNewAPIHadoopDataset(job.getConfiguration)
}

读取Hbase
def readAsRDD (): Unit ={
val sparkConf = new SparkConf().setAppName( "read-hbase-test" ).setMaster( "local" )
sparkConf.set(
"spark.serializer" , "org.apache.spark.serializer.KryoSerializer" )
val sc = new SparkContext(sparkConf)
val hbaseConf = HandleHbase. conf
/** hbase 中的 scan 可以在这里当做参数传入 */
val scan = new Scan()
scan.setStartRow(Bytes.
toBytes(
"row-1" ))
scan.setStopRow(Bytes.
toBytes(
"row-2" ))
def convertScanToString (scan: Scan) = {
val proto: ClientProtos.Scan = ProtobufUtil. toScan(scan)
Base64.
encodeBytes(proto.toByteArray)
}
/** TableInputFormat 中有若干参数可以用来过滤 , 可以参考看一下 TableInputFormat 的静态常量 */
hbaseConf.set(org.apache.hadoop.hbase.mapreduce.TableInputFormat. SCAN ,
convertScanToString(scan))

hbaseConf.set(org.apache.hadoop.hbase.mapreduce.TableInputFormat.
INPUT_TABLE , "spark_hbase_test" )
val rdd = sc.newAPIHadoopRDD(hbaseConf , classOf[org.apache.hadoop.hbase.mapreduce.TableInputFormat] ,
classOf[ImmutableBytesWritable] , classOf[org.apache.hadoop.hbase.client.Result])
rdd.foreach(
println)
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值