我过去经常在本地运行Spark,并将文件分发给节点从来没有给我带来过问题,但是现在我正在将东西转移到Amazon集群服务中,并且开始出现故障。基本上,我正在使用Maxmind GeoLiteCity.dat来处理一些IP,我把它放在主服务器上的本地文件系统(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从S3传输到主服务器:
#!/bin/bash
cd /home/hadoop
aws s3 cp s3://test/GeoLiteCity.dat GeoLiteCity.dat在检查文件在目录中之后,json然后执行Spark,但是失败了。Amazon生成的日志没有显示代码中断的位置。
发布于 2015-08-14 10:11:07
与其将文件复制到主程序中,不如将文件加载到s3中并从其中读取。
有关从analyzer/chapter2/s3.html读取文件的信息,请参阅S3。
您需要提供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)附加参考:How to read input from S3 in a Spark Streaming EC2 cluster application https://stackoverflow.com/a/30852341/4057655
https://stackoverflow.com/questions/32006215
复制相似问题