2016-11-09 94 views
0

文件名是否應包含tetFileStream的數字?只有當文件名包含一個數字時,我的程序纔會提取新文件。忽略所有其他文件,即使它們是新的。是否有任何設置需要更改以提取所有文件?請幫助S3上的spark textFileStream

+0

不,它取得特定目錄中的所有文件。你可以粘貼一些代碼以獲得更好的幫助! –

+0

謝謝Srinivas。跑到另一個問題。當我在我的VM中本地提交它時,我的Spark流代碼工作正常。它從S3讀取文件並將輸出寫入ELK。但是,當我將jar提交到EMR集羣時,它會發出警告,提示「讀取文件時出錯」,並且根本不讀取。這是一種權限問題嗎?我爲我的S3存儲桶提供了所有必需的密鑰。任何意見? – Vamsi

回答

0

它會掃描目錄中顯示窗口內出現的新文件。如果你正在寫S3,直接寫你的代碼,因爲直到最後的close() - 不需要重命名爲止,文件纔會出現。相反,如果您正在使用針對正常文件系統的文件流源,則應該從掃描的目錄中創建並在最後重命名 - 否則可能會讀取正在工作的文件。一旦閱讀:從不重讀。

+0

謝謝史蒂夫。跑到另一個問題。當我在我的VM中本地提交它時,我的Spark流代碼工作正常。它從S3讀取文件並將輸出寫入ELK。但是,當我將jar提交到EMR集羣時,它會發出警告,提示「讀取文件時出錯」,並且根本不讀取。這是一種權限問題嗎?我爲我的S3存儲桶提供了所有必需的密鑰。任何意見? – Vamsi

+0

就是這麼說的?沒有堆棧跟蹤? –

+0

當我在YARN模式下使用EMR控制檯提交時,我沒有太多的信息。它說運行,但沒有讀取S3中的任何內容。如果我在EMR Master Instance終端上手動提交,以下是堆棧跟蹤。 FileInputDStream:查找新文件時出錯 java.lang.NullPointerException \t at scala.collection.mutable.ArrayOps $ ofRef $ .length $ extension(ArrayOps.scala:192)等等等等 – Vamsi

0

花了幾個小時來分析堆棧跟蹤,我發現問題是S3地址。我提供了「s3:// mybucket」,這是爲Spark 1.6和Scala 2.10.5工作的。在Spark 2.0(和Scala 2.11)上,它必須提供爲「s3:// mybucket /」。可能是一些正則表達式相關的東西。現在工作正常。感謝所有的幫助。

+0

哦,所以你使用了一個短路徑的「s3://桶」沒有路徑?這可能被解釋爲對主目錄的引用,因此將被限定爲bucket/users/$ USER的路徑,其中$ USER = you。這發生在命令行上,是一個真正的痛苦。我個人喜歡解決這個問題(https://issues.apache.org/jira/browse/HADOOP-13648),但是擔心什麼壞處 –