簡體   English   中英

Spark 流無法從本地目錄讀取

[英]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/"

我嘗試先運行作業,然后將文件移動到目錄,但不幸的是它也不起作用。

基於文件流的源,如fileStreamtextFileStream期望數據文件為:

通過將它們原子地移動或重命名到數據目錄中,在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM