[英]Spark streaming not reading from local directory
我正在嘗試使用 Spark Python API 編寫一個 Spark 流應用程序。
應用程序應該從本地目錄讀取文本文件並將其發送到 Kafka 集群。
將python腳本提交給spark引擎時,根本沒有發送到kafka。
我嘗試打印事件而不是將其發送到 Kafka,但發現沒有讀取任何內容。
這是腳本的代碼。
#!/usr/lib/python
# -*- coding: utf-8 -*-
from pyspark import SparkContext, SparkConf
from pyspark.streaming import StreamingContext
from kafka import KafkaProducer
import sys
import time
reload(sys)
sys.setdefaultencoding('utf8')
producer = KafkaProducer(bootstrap_servers="kafka-b01.css.org:9092,kafka-b02.css.org:9092,kafka-b03.css.org:9092,kafka-b04.css.org:9092,kafka-b05.css.org:9092")
def send_to_kafka(rdd):
tweets = rdd.collect()
print ("--------------------------")
print (tweets)
print "--------------------------"
#for tweet in tweets:
# producer.send('test_historical_job', value=bytes(tweet))
if __name__ == "__main__":
conf = SparkConf().setAppName("TestSparkFromPython")
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 1)
tweetsDstream = ssc.textFileStream("/tmp/historical/")
tweetsDstream.foreachRDD(lambda rdd: send_to_kafka(rdd))
ssc.start()
ssc.awaitTermination()
我正在使用此命令提交腳本
./spark-submit --master spark://spark-master:7077 /apps/historical_streamer.py
打印語句的輸出是一個空列表。
--------------------------
[]
--------------------------
編輯
基於這個問題,我將數據目錄的路徑從"/tmp/historical/"
更改為"file:///tmp/historical/"
。
我嘗試先運行作業,然后將文件移動到目錄,但不幸的是它也不起作用。
基於文件流的源,如fileStream
或textFileStream
期望數據文件為:
通過將它們原子地移動或重命名到數據目錄中,在 dataDirectory 中創建。
如果給定窗口中沒有新文件,則無需處理任何內容,因此不會讀取預先存在的文件(此處似乎是這種情況)不會顯示在輸出中。
你的功能:
def send_to_kafka(rdd):
tweets = rdd.collect()
print ("--------------------------")
print (tweets)
print "--------------------------"
#for tweet in tweets:
# producer.send('test_historical_job', value=bytes(tweet))
將收集所有 rdd,但不會打印 rdd 的內容。 為此,您應該使用例程:
tweets.foreach(println)
這將為 RDD 中的每個元素提供元素作為輸出。 如 Spark 文檔中所述
希望這會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.