通过Spark Streaming从HBase读取数据

时间:2016-07-25 15:24:00

标签: hbase spark-streaming dstream

所以我的项目流程是 卡夫卡 - > Spark Streaming - > HBase

现在我想再次从HBase读取数据,这些数据将覆盖上一个作业创建的表并进行一些聚合,并以不同的列格式存储在另一个表中

Kafka - > Spark Streaming(2ms) - > HBase-> Spark Streaming(10ms) - > HBase

现在我不知道如何使用Spark Streaming从HBase读取数据。我找到了一个Cloudera Lab项目,它是SparkOnHbase(http://blog.cloudera.com/blog/2014/12/new-in-cloudera-labs-sparkonhbase/)库,但是我无法弄清楚如何从HBase获取用于流处理的inputDStream。 请提供任何指针或图书馆链接,如果有任何可以帮助我这样做。

2 个答案:

答案 0 :(得分:0)

您可以使用queueStream从RDD的队列创建DStream: StreamingContext

JavaSparkContext sc = new JavaSparkContext(conf);
org.apache.hadoop.conf.Configuration hconf = HBaseConfiguration.create();
JavaHBaseContext jhbc = new JavaHBaseContext(sc, hconf);
Scan scan1 = new Scan();           
scan1.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName.getBytes());

// Create RDD
         rdd = jhbc.hbaseRDD(tableName, scan1, new Function<Tuple2<ImmutableBytesWritable, Result>, Tuple2<ImmutableBytesWritable, Result>>() {
            @Override
            public Tuple2<ImmutableBytesWritable, Result> call(Tuple2<ImmutableBytesWritable, Result> immutableBytesWritableResultTuple2) throws Exception {
                return immutableBytesWritableResultTuple2;
            }
        });

   // Create streaming context and queue
   JavaSparkStreamingContext ssc = new JavaSparkStramingContext(sc);

   Queue<JavaRDD<Tuple2<ImmutableBytesWritable, Result> >> queue =new Queue<JavaRDD<Tuple2<ImmutableBytesWritable, Result>>>( );
        queue.enqueue(rdd);

JavaDStream<Tuple2<ImmutableBytesWritable, Result>> ssc.queueStream(queue);

PS:你可以使用Spark(没有流式传输)

答案 1 :(得分:0)