设为首页 加入收藏

TOP

spark 连接hbase
2019-02-09 01:54:01 】 浏览:12
Tags:spark 连接 hbase

一、环境准备

1、复制HBase目录下的lib文件 到 spark目录/lib/hbase。spark 依赖此lib

清单如下:guava-12.0.1.jar            htrace-core-3.1.0-incubating.jar protobuf-java-2.5.0.jar   这三个jar加上以hbase开头所有jar,其它就不必了。全部复制会引起报错。

2、修改spark配置文件(spark-env.sh),在最后面增加一行

export SPARK_CLASSPATH=/usr/local/spark-1.5.1-bin-hadoop2.4/lib/hbase/*

重启spark集群,然后执行操作

import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.hbase.HBaseConfiguration;  
import org.apache.hadoop.hbase.HColumnDescriptor;  
import org.apache.hadoop.hbase.HTableDescriptor;  
import org.apache.hadoop.hbase.client.Get;  
import org.apache.hadoop.hbase.client.HBaseAdmin;  
import org.apache.hadoop.hbase.client.HTable;  
import org.apache.hadoop.hbase.client.Put;  
import org.apache.hadoop.hbase.client.Result;  
import org.apache.hadoop.hbase.client.ResultScanner;  
import org.apache.hadoop.hbase.client.Scan;  
import org.apache.hadoop.hbase.util.Bytes; 
#主要是下面几个包
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat

val conf = HBaseConfiguration.create()

conf.set(TableInputFormat.INPUT_TABLE,"thd")

val rdd = sc.newAPIHadoopRDD(conf,classOf[TableInputFormat],classOf[ImmutableBytesWritable],classOf[Result])

此时如果查看rdd.take(1)运行得到后可能会报错

 ERROR Executor: Exception in task 0.0 in stage 14.0 (TID 14)
java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable

排查了好久,后来参考链接中的解答
http://stackoverflow.com/questions/28159185/streaming-from-hbase-using-spark-not-serializable

rdd里的内容需要转化成string
执行rdd.map(_.toString)
之后正常,从而可以利用spark对hbase进行rdd操作了…


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入理解客户端和HBase系统的交互 下一篇Spring boot 消费kafka 写入hbase

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }