Java 火花流输出未保存到HDFS文件
我正在尝试将Spark流输出保存到HDFS上的一个文件中。现在,它没有保存任何文件 这是我的密码:Java 火花流输出未保存到HDFS文件,java,hadoop,apache-spark,Java,Hadoop,Apache Spark,我正在尝试将Spark流输出保存到HDFS上的一个文件中。现在,它没有保存任何文件 这是我的密码: StreamingExamples.setStreamingLogLevels(); SparkConf sparkConf = new SparkConf().setAppName("MyTestCOunt"); JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, new Duration(1000)); JavaR
StreamingExamples.setStreamingLogLevels();
SparkConf sparkConf = new SparkConf().setAppName("MyTestCOunt");
JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, new Duration(1000));
JavaReceiverInputDStream<String> lines = ssc.socketTextStream(args[0], Integer.parseInt(args[1]), StorageLevels.MEMORY_AND_DISK_SER);
JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String x) {
return Lists.newArrayList(SPACE.split(x));
}
});
JavaPairDStream<String, Integer> wordCounts = words.mapToPair(
new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
}).reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
wordCounts.print();
wordCounts.saveAsHadoopFiles("hdfs://mynamenode:8020/user/spark/mystream/","abc");
ssc.start();
ssc.awaitTermination();
StreamingExamples.setStreamingLogLevels();
SparkConf SparkConf=新的SparkConf().setAppName(“MyTestCOunt”);
JavaStreamingContext ssc=新的JavaStreamingContext(sparkConf,新的持续时间(1000));
JavaReceiveInputdStream lines=ssc.socketTextStream(args[0],Integer.parseInt(args[1]),StorageLevels.MEMORY_和_DISK_SER);
JavaDStream words=lines.flatMap(新的flatMap函数(){
@凌驾
公共Iterable调用(字符串x){
returnlists.newArrayList(SPACE.split(x));
}
});
JavaPairDStream wordCounts=words.mapToPair(
新PairFunction(){
@凌驾
公共元组2调用(字符串s){
返回新的Tuple2(s,1);
}
}).reduceByKey(新功能2(){
@凌驾
公共整数调用(整数i1、整数i2){
返回i1+i2;
}
});
wordCounts.print();
wordCounts.saveAsHadoopFiles(“hdfs://mynamenode:8020/user/spark/mystream/“,“abc”);
ssc.start();
ssc.终止();
wordCounts.print()
有效,但不能wordCounts.saveAsHadoopFiles
,你知道为什么吗
我正在运行以下命令:
1) nc-lk9999
2) /bin/run example org.apache.spark.examples.streaming.NetworkWordCount localhost 9999
提前谢谢 我通过将
master
指定为local[x]x>1
解决了相同的问题。若您以本地方式运行master,则Spark无法分配插槽来执行任务。
像
尝试:
wordCounts.dstream().saveAsTextFiles(“hdfs://mynamenode:8020/user/spark/mystream/“,“abc”)代码>
相反:
wordCounts.saveAsHadoopFiles(“hdfs://mynamenode:8020/user/spark/mystream/“,“abc”)代码>JavaDStream行代码>
用我们的数据初始化行
`
lines.foreachRDD(新的VoidFunction(){
公共void调用(JavaRDD)引发异常{
今天日期=新日期();
字符串日期=(新的SimpleDataFormat(“dd-MM-yyyy”).format(今天));
saveAsTextFile(输出位置+“/”+日期+“/”;
}});
`我通过将沙盒/服务器时区更改为我的本地时区来解决这个问题,因为我的Twitter帐户有GMT,沙盒有UTC。我已使用以下命令更改沙盒时区:
ntpdate pool.ntp.org
chkconfig ntpd on
ntpdate pool.ntp.org
/etc/init.d/ntpd start
date
时区更改后,我还没有重新启动Hadoop服务。您能断言我的编辑没有改变您的意思吗?另外,您是否能够通过spark shell连接到您的群集?嗯,您是否向netcat发送了任何信息?是的,我在nc-lk 9999此命令之后发送了一些数据。如果我禁用此“wordCounts.saveAshadopFiles()”,它将打印数据。我的hadoop版本是“2.3.0-cdh5.0.3”。因此,我使用maven进行编译,在pom中使用以下命令“mvn-Phadoop2-Dhadoop.version=2.3.0-cdh5.0.3-Dyarn.version=2.3.0-cdh5.0.3-DskipTests clean package”,在pom中,我将${protobuf.version}替换为2.5.0,现在它在HDFS中创建文件,但不显示任何数据
lines.foreachRDD(new VoidFunction<JavaRDD<String>>() {
public void call(JavaRDD<String > rdd) throws Exception {
Date today = new Date();
String date = (new SimpleDateFormat("dd-MM-yyyy").format(today));
rdd.saveAsTextFile(OUTPUT_LOCATION+"/"+date+"/");
}});
ntpdate pool.ntp.org
chkconfig ntpd on
ntpdate pool.ntp.org
/etc/init.d/ntpd start
date