先贴代码
idea中运行SparkStreaming时,动态添加文件至指定目录下,结果没有任务信息输出
问题原因:
①idea所在主机时间和hdfs集群时间不同步
②代码中指定的hdfs目录为非空(启动之前已经有文件)
解决办法
①将hdfs集群时间与主机时间进行同步
1 首先停掉hdfs集群的所有进程
2 关闭虚拟机
3 为每台虚拟机勾选将客户机时间与主机同步(S)
4 重启虚拟机
5 启动集群 时间同步成功
②保证代码中指定的hdfs路径是空的或者路径不存在也可以,会自动创建
③以上两点做好后,就可以启动idea程序了,启动后,向指定目录下添加文件,可以看到成功读取到了hdfs的内容
下面是idea代码(scala编写),启动程序
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.streaming.{Durations, StreamingContext}
/**
* word功能
*/
object HdfsSparkStreamingTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("sparkStreaming-hdfs").setMaster("local[2]")
val sc = new SparkContext(conf)
//间隔5秒提交一次任务
val ssc = new StreamingContext(sc, Durations.seconds(5))
//监控hdfs集群的 "/spark_out10" 目录下的文件
val dStream: DStream[String] = ssc.textFileStream("hdfs://spark01:8020/spark_out10/")
//对读取到的文件内容按一额或者多个空格进行切分,转map,聚合,输出
dStream.flatMap(x=>x.split("\\s+"))
.map(x=>(x,1))
.reduceByKey(_+_)
.print()
ssc.start()
ssc.awaitTermination()
}
}
在虚拟机中通过命令提交一个单词文件到指定目录下
hdfs dfs -put ./word.txt /spark_out10
可以看到idea中输出了读取结果