使用SparkStreaming和Kafka从HBase获取数据

使用SparkStreaming和Kafka从HBase获取数据,hbase,spark-streaming,Hbase,Spark Streaming,我正在尝试将SparkStreaming与HBase集成。我正在调用以下API以连接到HBase: HConnection hbaseConnection = HConnectionManager.createConnection(conf); hBaseTable = hbaseConnection.getTable(hbaseTable); 由于我无法获得连接并广播连接,因此每次从HBase获取数据的API调用都非常昂贵。我尝试使用CDH 5.5中的hbase spark库使用JavaHB

我正在尝试将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项目

我正在使用
JavaHBaseContext hbaseContext=newjavahbasecontext(jssc.sparkContext(),conf)
然后调用批量获取API
hbaseContext.streamBulkGet(TableName.valueOf(TableName),2行,新GetFunction2(),新ResultFunction())

但该批量API是在初始化期间调用的,而不是在每个流消息期间调用的。也用于:

hbaseContext.foreachPartition(jDStream,new VoidFunction<Tuple2<Iterator<String>, Connection>>() {
      public void call(Tuple2<Iterator<String>, Connection> t)throws Exception { ...}
hbaseContext.foreachPartition(jDStream,newvoidfunction()){
公共void调用(tuple2t)引发异常{…}
该API存在,但不知何故无法用于流式消息。还尝试了
hbaseContext.streamMap(jdstream,new Function()
,但也无法工作


我们有没有关于如何使用spark streaming API获取数据的示例。

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


我使用的是Cassandra,我所做的是我有一个scala对象,其中有Cassandra连接对象。这样,在驱动程序和工作程序上,至少有一个Executor范围的连接对象。在哪里设置连接?如果连接代码只在驱动程序上,请确保连接对象是可序列化的


我使用的是Cassandra,我所做的是我有一个scala对象,其中有Cassandra连接对象。这样,在驱动程序和工作程序上,至少有一个Executor范围的连接对象

我不能拉这里提到的maven存储库。我不能拉这里提到的maven存储库。感谢您的响应拨款。我很高兴直接调用HBAse API从HBAse获取数据,但这种方法成本很高,因为对象没有序列化。因此,尝试使用此处提到的较新版本的spark HBAse API,该API可以正常使用Rdd,但不能用于流。Cassandra spark connector有一些API可以将Rdd或数据流直接存储到Cassandra,但有时ese API不灵活。因此,我从不使用它们,而是使用其他API来设置连接、获取会话和执行语句等。因此,诀窍是您必须在每个spark executor上初始化连接。尽管连接器可以序列化,但最好为每个spark executor创建它们感谢您的响应授权。我曾直接调用HBAse API从HBAse获取数据,但这种方法成本高昂,因为对象没有序列化。因此,我尝试使用此处提到的较新版本的spark HBAse API,该API适用于普通Rdd,但不适用于流式传输。Cassandra spark connector的API可将Rdd或数据流直接存储到Cassandra,但有时这些API不灵活。因此我从不使用它们,而是使用其他API来设置连接、获取会话和执行语句等。因此,诀窍是您必须在每个spark executor上初始化连接。虽然连接器可以序列化,但最好按spark executor创建它们