繁体   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