使用SparkStreaming和Kafka从HBase获取数据

时间:2016-03-09 06:06:31

标签: hbase spark-streaming

我正在尝试将SparkStreaming与HBase集成。我正在调用以下API连接到HBase:

HConnection hbaseConnection = HConnectionManager.createConnection(conf);
hBaseTable = hbaseConnection.getTable(hbaseTable);

由于我无法获得连接并广播连接,因此从HBase获取数据的每个API调用都非常昂贵。我尝试在CDH 5.5中使用hbase-spark库来使用JavaHBaseContext (JavaHBaseContext hbaseContext = new JavaHBaseContext(jsc, conf)),但我无法从maven导入库。有没有人能够成功解决这个问题。

我正在尝试使用最新的API在Cloudera上连接HBase和SparkStreaming。

这里提到的一些JIRA项目。

http://blog.cloudera.com/blog/2015/08/apache-spark-comes-to-apache-hbase-with-hbase-spark-module/

我正在使用JavaHBaseContext hbaseContext = new JavaHBaseContext(jssc.sparkContext(), conf); 然后调用批量Get API hbaseContext.streamBulkGet(TableName.valueOf(tableName), 2, lines, new GetFunction2(), new ResultFunction());

但是在初始化期间调用此批量API而不是在每个流式消息期间调用。也用过:

hbaseContext.foreachPartition(jDStream,new VoidFunction<Tuple2<Iterator<String>, Connection>>() {
      public void call(Tuple2<Iterator<String>, Connection> t)throws Exception { ...}

API存在但不知何故它不适用于流式传输消息。还尝试了hbaseContext.streamMap(jdstream, new Function<Tuple2<Iterator<String>, Connection>, Iterator<String>>(),但它也无效。

我们是否有一个如何使用spark streaming API获取数据的示例。

1 个答案:

答案 0 :(得分:0)

您在哪里设置连接?如果您的连接代码仅在驱动程序上,请确保连接对象是可序列化的

我正在使用Cassandra,我所做的是我有一个scala对象,我有cassandra连接对象。这样,在驱动程序和工作者上,至少有一个执行器范围的连接对象