我是Spark Streaming的新手,我正在尝试使用Spark-shell开始使用它。 假设我有一个名为“dataTest”的目录放在spark-1.2.0-bin-hadoop2.4的根目录中。
我想在shell中测试的简单代码是(在输入$。\ bin \ spark-shell之后):
import org.apache.spark.streaming._
val ssc = new StreamingContext(sc, Seconds(2))
val data = ssc.textFileStream("dataTest")
println("Nb lines is equal to= "+data.count())
data.foreachRDD { (rdd, time) => println(rdd.count()) }
ssc.start()
ssc.awaitTermination()
然后,我复制了“dataTest”目录中的一些文件(我也尝试重命名此目录中的一些现有文件)。
但不幸的是我没有得到我想要的东西(即,我没有得到任何outpout,所以看起来ssc.textFileStream不能正常工作),只是像:
15/01/15 19:32:46 INFO JobScheduler: Added jobs for time 1421346766000 ms
15/01/15 19:32:46 INFO JobScheduler: Starting job streaming job 1421346766000 ms
.0 from job set of time 1421346766000 ms
15/01/15 19:32:46 INFO SparkContext: Starting job: foreachRDD at <console>:20
15/01/15 19:32:46 INFO DAGScheduler: Job 69 finished: foreachRDD at <console>:20
, took 0,000021 s
0
15/01/15 19:32:46 INFO JobScheduler: Finished job streaming job 1421346766000 ms
.0 from job set of time 1421346766000 ms
15/01/15 19:32:46 INFO MappedRDD: Removing RDD 137 from persistence list
15/01/15 19:32:46 INFO JobScheduler: Total delay: 0,005 s for time 1421346766000
ms (execution: 0,002 s)
15/01/15 19:32:46 INFO BlockManager: Removing RDD 137
15/01/15 19:32:46 INFO UnionRDD: Removing RDD 78 from persistence list
15/01/15 19:32:46 INFO BlockManager: Removing RDD 78
15/01/15 19:32:46 INFO FileInputDStream: Cleared 1 old files that were older tha
n 1421346706000 ms: 1421346704000 ms
15/01/15 19:32:46 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer()
答案 0 :(得分:3)
您是否尝试将文本文件从其他目录移动到正在监控的目录中?要使文件流正常工作,您可以自动将文件放入受监视的目录中,这样只要文件在列表中可见,Spark就可以读取文件中的所有数据(如果您要复制,则可能不是这种情况)文件进入目录)。
中的基本来源小节中详细记录了这一点答案 1 :(得分:2)
复制文件/文档使用命令行或保存为文件/文档到我的工作目录。 当您正常复制(通过IDE)时,这不会影响修改日期作为流上下文监视器修改日期。
答案 2 :(得分:1)
我也遇到了同样的问题,对我来说解决方案是当流式传输正在运行时,我编辑并保存我想用作输入流的文件。然后我直接将输入文件移动到流式传输目录,同时流式传输仍处于打开状态。
答案 3 :(得分:1)
以下代码为我工作
data
只需要将文本文件保存为Unix格式 如果您在记事本++中打开文件,请转到 settings-&gt; Preferences-&gt; New Document-&gt; Unix / OSX 然后更改文件名以使其被Scala选中。 https://stackoverflow.com/a/41495776/5196927
参考上面的链接。
答案 4 :(得分:0)
我认为这通常应该有效,但问题可能是建议将Spark Streaming作为独立应用程序而不是spark-shell。
我将它作为一个独立的应用程序运行(在其他流数据上)并且它可以工作。
data.count()为您提供DStream的每个RDD中有多少元素,这与您在foreachRDD()中的计数相同。
答案 5 :(得分:0)
我做的几乎是同样的事情(作为Windows 8笔记本电脑上的独立应用程序),对我来说这很好但是我有&#34; dataTest&#34;文件夹位于&#34; bin&#34;的子文件夹中。也许尝试一下?
答案 6 :(得分:0)
我只是在shell中使用你的代码,它工作正常。当我把一些文件放到目录(HDFS)时,我得到了这样的输出日志:
15/07/23 10:46:36 INFO dstream.FileInputDStream: Finding new files took 9 ms
15/07/23 10:46:36 INFO dstream.FileInputDStream: New files at time 1437619596000 ms:
hdfs://master:9000/user/jared/input/hadoop-env.sh
15/07/23 10:46:36 INFO storage.MemoryStore: ensureFreeSpace(235504) called with curMem=0, maxMem=280248975
......
15/07/23 10:46:36 INFO input.FileInputFormat: Total input paths to process : 1
15/07/23 10:46:37 INFO rdd.NewHadoopRDD: Input split: hdfs://master:9000/user/jared/input/hadoop-env.sh:0+4387
15/07/23 10:46:42 INFO dstream.FileInputDStream: Finding new files took 107 ms
15/07/23 10:46:42 INFO dstream.FileInputDStream: New files at time 1437619598000 ms:
15/07/23 10:46:42 INFO scheduler.JobScheduler: Added jobs for time 1437619598000 ms
15/07/23 10:46:42 INFO dstream.FileInputDStream: Finding new files took 23 ms
15/07/23 10:46:42 INFO dstream.FileInputDStream: New files at time 1437619600000 ms:
15/07/23 10:46:42 INFO scheduler.JobScheduler: Added jobs for time 1437619600000 ms
15/07/23 10:46:43 INFO dstream.FileInputDStream: Finding new files took 42 ms
15/07/23 10:46:43 INFO dstream.FileInputDStream: New files at time 1437619602000 ms:
15/07/23 10:46:43 INFO scheduler.JobScheduler: Added jobs for time 1437619602000 ms
15/07/23 10:46:43 INFO executor.Executor: Finished task 0.0 in stage 0.0 (TID 0). 1830 bytes result sent to driver
15/07/23 10:46:43 INFO scheduler.TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 6098 ms on localhost (1/1)
15/07/23 10:46:43 INFO scheduler.DAGScheduler: ResultStage 0 (foreachRDD at <console>:29) finished in 6.178 s
15/07/23 10:46:43 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
15/07/23 10:46:43 INFO scheduler.DAGScheduler: Job 66 finished: foreachRDD at <console>:29, took 6.647137 s
101