簡體   English   中英

Spark將本地文件從主節點分發到節點

[英]Spark distribute local file from master to nodes

我以前在本地運行Spark並將文件分發到節點從來沒有給我帶來任何問題,但現在我正在將事情轉移到Amazon集群服務,事情開始崩潰。 基本上,我正在使用Maxmind GeoLiteCity.dat處理一些IP,我將它放在master上的本地文件系統上(file:///home/hadoop/GeoLiteCity.dat)。

根據前面的問題,我使用了sc.addFile:

sc.addFile("file:///home/hadoop/GeoLiteCity.dat")

並使用以下內容調用它:

val ipLookups = IpLookups(geoFile = Some(SparkFiles.get("GeoLiteCity.dat")), memCache = false, lruCache = 20000)

這在我的計算機上本地運行時有效,但似乎在群集上失敗(我不知道失敗的原因,但如果有人能告訴我如何顯示進程的日志,我會很感激從Amazon服務生成的不包含任何有關哪個步驟失敗的信息)。

我是否必須以某種方式將GeoLiteCity.dat加載到HDFS上? 是否還有其他方法可以將主節點中的本地文件分發到沒有HDFS的節點?

編輯:只是為了指定我運行的方式,我編寫了一個執行多個步驟的json文件,第一步是運行一個bash腳本,將GeoLiteCity.dat從Amazon S3傳輸到master:

#!/bin/bash
cd /home/hadoop
aws s3 cp s3://test/GeoLiteCity.dat GeoLiteCity.dat

在檢查文件是否在目錄中之后,json然后執行Spark Jar,但是失敗了。 Amazon Web UI生成的日志不會顯示代碼中斷的位置。

不是將文件復制到master中,而是將文件加載到s3中並從那里讀取

有關從S3讀取文件的信息,請參閱http://databricks.gitbooks.io/databricks-spark-reference-applications/content/logs_analyzer/chapter2/s3.html

您需要提供AWS訪問密鑰ID和密鑰。 設置環境變量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY或以編程方式設置它,如,

sc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", YOUR_ACCESS_KEY)
sc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", YOUR_SECRET_KEY)

然后您可以將文件作為文本文件讀取。 喜歡,

 sc.textFile(s3n://test/GeoLiteCity.dat)

附加參考: 如何在Spark Streaming EC2集群應用程序中讀取S3的輸入 https://stackoverflow.com/a/30852341/4057655

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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