spark中saveAsTextFile如何最終生成一個文件
http://www.lxway.com/641062624.htm
一般而言,saveAsTextFile會按照執行task的多少生成多少個文件,比如part-00一直到part-0n,n自然就是task的個數,亦即是最后的stage的分區數。那么有沒有辦法最后只生成一個文件,而不是成百上千個文件了?答案自然是有辦法。
在RDD上調用coalesce(1,true).saveAsTextFile()
,意味着做完計算之后將數據匯集到一個分區,然后再執行保存的動作,顯然,一個分區,Spark自然只起一個task來執行保存的動作,也就只有一個文件產生了。又或者,可以調用repartition(1),它其實是coalesce的一個包裝,默認第二個參數為true。
事情最終就這么簡單嗎?顯然不是。你雖然可以這么做,但代價是巨大的。因為Spark面對的是大量的數據,並且是並行執行的,如果強行要求最后 只有一個分區,必然導致大量的磁盤IO和網絡IO產生,並且最終執行reduce操作的節點的內存也會承受很大考驗。Spark程序會很慢,甚至死掉。
這往往是初學Spark的一個思維陷阱,需要改變原先那種單線程單節點的思維,對程序的理解要轉變多多個節點多個進程中去,需要熟悉多節點集群自然產生多個文件這種模式。
此外,saveAsTextFile要求保存的目錄之前是沒有的,否則會報錯。所以,最好程序中保存前先判斷一下目錄是否存在。
Spark與HDFS怎么加載本地文件
http://bbs.csdn.net/topics/390976410
spark默認是從hdfs讀取文件,也可以指定sc.textFile("路徑").在路徑前面加上hdfs://表示從hdfs文件系統上讀
本地文件讀取 sc.textFile("路徑").在路徑前面加上file:// 表示從本地文件系統讀,如file:///home/user/spark/README.md
Spark Streaming 保存日志文件到HDFS或本地沒有反應。(使用本地模式)
http://stackoverflow.com/questions/28050262/spark-streaming-network-wordcount-py-does-not-print-result
原因
提交應用時用該使用更多的executors,如
spark-submit --master local[4] your_file.py
Learning Spark 第十章:
在本地運行Spark Streaming程序時,master的參數不要設置為local或者local[1],只為任務分配一個CPU,如果某個receiver在上面運行,就沒有剩余資源來執行接受數據的過程。因此至少使用local[2]來保證更多的CPU核
saveAsTextFile源碼:http://www.myexception.cn/other/1961287.html
怎樣利用Spark Streaming和Hadoop實現近實時的會話連接 http://m.thebigdata.cn/show.aspx?articleid=14069fo
KAFKA sparkStreaming HBase http://www.aboutyun.com/thread-12123-1-1.html