Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Spark流媒体从HBase读取数据_Hbase_Spark Streaming_Dstream - Fatal编程技术网

通过Spark流媒体从HBase读取数据

通过Spark流媒体从HBase读取数据,hbase,spark-streaming,dstream,Hbase,Spark Streaming,Dstream,所以我的项目流程是 卡夫卡->火花流->HBase 现在,我想再次从HBase读取数据,它将遍历上一个作业创建的表,并进行一些聚合,然后以不同的列格式将其存储在另一个表中 卡夫卡->火花流(2ms)->HBase->火花流(10ms)->HBase 现在我不知道如何使用Spark Streaming从HBase读取数据。我发现了一个Cloudera实验室项目,该项目是SparkOnHbase()库,但我不知道如何从HBase获取用于流处理的输入流。 请提供任何指针或库链接,如果有任何将帮助我做到

所以我的项目流程是 卡夫卡->火花流->HBase

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

卡夫卡->火花流(2ms)->HBase->火花流(10ms)->HBase

现在我不知道如何使用Spark Streaming从HBase读取数据。我发现了一个Cloudera实验室项目,该项目是SparkOnHbase()库,但我不知道如何从HBase获取用于流处理的输入流。
请提供任何指针或库链接,如果有任何将帮助我做到这一点

您可以使用queueStream从RDD队列创建数据流:

JavaSparkContext sc=新的JavaSparkContext(conf);
org.apache.hadoop.conf.Configuration hconf=HBaseConfiguration.create();
JavaHBaseContext jhbc=新的JavaHBaseContext(sc,hconf);
扫描扫描1=新扫描();
scan1.setAttribute(Scan.Scan_ATTRIBUTES_TABLE_NAME,tableName.getBytes());
//创建RDD
rdd=jhbc.hbaseRDD(表名,扫描1,新函数(){
@凌驾
公共Tuple2调用(Tuple2 immutableBytesWritableResultTuple2)引发异常{
返回immutableBytesWritableResultTuple2;
}
});
//创建流上下文和队列
JavaSparkStreamingContext ssc=新的JavaSparkStramingContext(sc);
队列=新队列();
排队(rdd);
JavaDStream ssc.queueStream(queue);

PS:您可以只使用Spark(不使用流媒体)

您可以使用queueStream从RDD队列创建数据流:

JavaSparkContext sc=新的JavaSparkContext(conf);
org.apache.hadoop.conf.Configuration hconf=HBaseConfiguration.create();
JavaHBaseContext jhbc=新的JavaHBaseContext(sc,hconf);
扫描扫描1=新扫描();
scan1.setAttribute(Scan.Scan_ATTRIBUTES_TABLE_NAME,tableName.getBytes());
//创建RDD
rdd=jhbc.hbaseRDD(表名,扫描1,新函数(){
@凌驾
公共Tuple2调用(Tuple2 immutableBytesWritableResultTuple2)引发异常{
返回immutableBytesWritableResultTuple2;
}
});
//创建流上下文和队列
JavaSparkStreamingContext ssc=新的JavaSparkStramingContext(sc);
队列=新队列();
排队(rdd);
JavaDStream ssc.queueStream(queue);
PS:您可以使用Spark(无需流媒体)

Splice Machine(开源)有一个演示,显示Spark流媒体正在运行

下面是这个用例的示例代码

拼接机(开源)有一个演示,显示spark streaming正在运行

下面是这个用例的示例代码


是的,我只是想让我的spark工作追逐第一个流媒体工作。(我想做简单的Spark比这更容易)。我会尝试一下,但我正在使用Scala,我想知道同样的策略是否也适用于Scala…谢谢!是的,我只是想让我的spark工作去追逐第一个流媒体工作。(我想做简单的Spark比这更容易)。我会尝试一下,但我正在使用Scala,我想知道同样的策略是否也适用于Scala…谢谢!
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);