Java Spark Streaming:使用PairRDD.saveAsNewHadoopDataset函数将数据保存到HBase
我想在HBase数据库中保存一个Twitter流。我现在拥有的是用于接收和转换数据的Saprk应用程序。但我不知道如何将我的推特流保存到HBase 我发现唯一有用的是Java Spark Streaming:使用PairRDD.saveAsNewHadoopDataset函数将数据保存到HBase,java,hadoop,apache-spark,hbase,spark-streaming,Java,Hadoop,Apache Spark,Hbase,Spark Streaming,我想在HBase数据库中保存一个Twitter流。我现在拥有的是用于接收和转换数据的Saprk应用程序。但我不知道如何将我的推特流保存到HBase 我发现唯一有用的是pairdd.saveAsNewAPIHadoopDataset(conf)方法。但是我应该如何使用它,我必须进行哪些配置才能将RDD数据保存到我的HBase表中 我唯一找到的是HBase客户端库,它可以通过Put对象将数据插入表中。但这不是Spark程序内部的解决方案,是不是(有必要迭代RDD中的所有项!!) 有人能举一个JAVA
pairdd.saveAsNewAPIHadoopDataset(conf)
方法。但是我应该如何使用它,我必须进行哪些配置才能将RDD数据保存到我的HBase表中
我唯一找到的是HBase客户端库,它可以通过Put对象将数据插入表中。但这不是Spark程序内部的解决方案,是不是(有必要迭代RDD中的所有项!!)
有人能举一个JAVA的例子吗?我的主要问题似乎是org.apache.hadoop.conf.Configuration
实例的设置,我必须在saveAsNewAPIHadoopDataset
中提交
下面是一段代码片段:
JavaReceiverInputDStream<Status> statusDStream = TwitterUtils.createStream(streamingCtx);
JavaPairDStream<Long, String> statusPairDStream = statusDStream.mapToPair(new PairFunction<Status, Long, String>() {
public Tuple2<Long, String> call(Status status) throws Exception {
return new Tuple2<Long, String> (status.getId(), status.getText());
}
});
statusPairDStream.foreachRDD(new Function<JavaPairRDD<Long,String>, Void>() {
public Void call(JavaPairRDD<Long, String> status) throws Exception {
org.apache.hadoop.conf.Configuration conf = new Configuration();
status.saveAsNewAPIHadoopDataset(conf);
// HBase PUT here can't be correct!?
return null;
}
});
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
....
public static void processYourMessages(final JavaRDD<YourMessage> rdd, final HiveContext sqlContext,
, MyMessageUtil messageutil) throws Exception {
final JavaRDD<Row> yourrdd = rdd.filter(msg -> messageutil.filterType(.....) // create a java rdd
final JavaPairRDD<ImmutableBytesWritable, Put> yourrddPuts = yourrdd.mapToPair(row -> messageutil.getPuts(row));
yourrddPuts.saveAsNewAPIHadoopDataset(conf);
}
JavaReceiverInputDStream statusDStream=TwitterUtils.createStream(streamingCtx);
JavaPairDStream statusPairDStream=statusDStream.mapToPair(新的PairFunction(){
公共Tuple2调用(状态)引发异常{
返回新的Tuple2(status.getId(),status.getText());
}
});
statusPairDStream.foreachRDD(新函数(){
公共Void调用(javapairdd状态)引发异常{
org.apache.hadoop.conf.Configuration conf=new Configuration();
status.saveAsNewAPIHadoopDataset(conf);
//放在这里的HBase不可能是正确的!?
返回null;
}
});
下面的代码片段可以解决您的所有查询
示例代码段:
JavaReceiverInputDStream<Status> statusDStream = TwitterUtils.createStream(streamingCtx);
JavaPairDStream<Long, String> statusPairDStream = statusDStream.mapToPair(new PairFunction<Status, Long, String>() {
public Tuple2<Long, String> call(Status status) throws Exception {
return new Tuple2<Long, String> (status.getId(), status.getText());
}
});
statusPairDStream.foreachRDD(new Function<JavaPairRDD<Long,String>, Void>() {
public Void call(JavaPairRDD<Long, String> status) throws Exception {
org.apache.hadoop.conf.Configuration conf = new Configuration();
status.saveAsNewAPIHadoopDataset(conf);
// HBase PUT here can't be correct!?
return null;
}
});
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
....
public static void processYourMessages(final JavaRDD<YourMessage> rdd, final HiveContext sqlContext,
, MyMessageUtil messageutil) throws Exception {
final JavaRDD<Row> yourrdd = rdd.filter(msg -> messageutil.filterType(.....) // create a java rdd
final JavaPairRDD<ImmutableBytesWritable, Put> yourrddPuts = yourrdd.mapToPair(row -> messageutil.getPuts(row));
yourrddPuts.saveAsNewAPIHadoopDataset(conf);
}
MyMessageUtil
有getput
方法,如下所示
private Configuration conf = HBaseConfiguration.create();
conf.set(ZOOKEEPER_QUORUM, "comma seperated list of zookeeper quorum");
conf.set("hbase.mapred.outputtable", "your table name");
conf.set("mapreduce.outputformat.class", "org.apache.hadoop.hbase.mapreduce.TableOutputFormat");
public Tuple2<ImmutableBytesWritable, Put> getPuts(Row row) throws Exception {
Put put = ..// prepare your put with all the columns you have.
return new Tuple2<ImmutableBytesWritable, Put>(new ImmutableBytesWritable(), put);
}
public Tuple2 getput(行)引发异常{
Put Put=..//准备包含所有列的Put。
返回新的Tuple2(newImmutableBytesWritable(),put);
}
希望这有帮助 谢谢你的解决方案,看起来不错。我会在周一尝试并给出反馈。非常感谢。如果有任何问题,请保持完美的后期编辑工作,谢谢!另一个例子可以在这里找到: