我是Spark的新手。我试着搜索,但找不到合适的解决方案。我已经在两个盒子上安装了hadoop 2.7.2(一个主节点和另一个工作节点)。我已经按照下面的链接设置了集群http://javadev.org/docs/hadoop/centos/6/installation/multi-node-installation-on-centos-6-non-sucure-mode/我作为根用户运行hadoop和spark应用程序来测试集群。
我已经在主节点上安装了火花,火花正在启动,没有任何错误。然而,当我使用spark-submit提交作业时,我会收到"找不到文件"异常,即使该文件存在于主节点中错误中的同一位置。我正在执行下面的Spark Submit命令,请在该命令下面找到日志输出。
/bin/spark-submit --class com.test.Engine --master yarn --deploy-mode cluster /app/spark-test.jar
16/04/21 19:16:13 WARN NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类21年4月16日19:16:13信息RM代理:正在连接到位于/0.0.0.0:8032的ResourceManager16/04/21 19:16:14信息客户端:正在从具有1个NodeManagers的集群请求新应用程序16/04/21 19:16:14信息客户端:验证我们的应用程序请求的内存没有超过集群的最大容量(每个容器8192 MB)21年4月16日19:16:14信息客户端:将分配AM容器,具有1408 MB内存,包括384 MB开销16/04/21 19:16:14信息客户端:为我们的AM设置容器启动上下文16/04/21 19:16:14信息客户端:为AM容器设置启动环境16/04/21 19:16:14信息客户端:为我们的AM容器准备资源16/04/21 19:16:14信息客户端:源文件系统和目标文件系统相同。未复制文件:/mi/spark/lib/spark-assembly1.6.1-hadoop2.6.0.jar16/04/21 19:16:14信息客户端:源文件系统和目标文件系统相同。未复制文件:/app/spark-test.jar16/04/21 19:16:14信息客户端:源文件系统和目标文件系统相同。未复制文件:/tmp/spark-120aeddc-0f87-4411-9400-22ba01096249/__spark_conf__5619348744221830008.zip21年4月16日19:16:14信息安全管理器:正在将视图ACL更改为:root16/04/21 19:16:14信息安全管理器:正在将修改acls更改为:root21年4月16日19:16:14信息SecurityManager:SecurityManager:身份验证已禁用;ui acls已禁用;具有查看权限的用户:Set(root);具有修改权限的用户:Set(root)21年4月16日19:16:15信息客户端:正在向ResourceManager提交应用程序121年4月16日19:16:15 INFO YarnClientImpl:已提交应用程序申请_1461246306015_000121年4月16日19:16:16信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:已接受)21年4月16日19:16:16信息客户端:客户端令牌:不适用诊断:不适用ApplicationMaster主机:不适用ApplicationMaster RPC端口:-1队列:默认开始时间:1461246375622最终状态:UNDEFINEDsparkcluster01.testing.com跟踪URL:http://sparkcluster01.testing.com:8088/proxy/application_1461246306015_0001/用户:root21年4月16日19:16:17信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:已接受)21年4月16日19:16:18信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:已接受)21年4月16日19:16:19信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:已接受)21年4月16日19:16:20信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:已接受)21年4月16日19:16:21信息客户端:应用程序的应用程序报告_1461246306015_0001(状态:失败)21年4月16日19:16:21信息客户端:客户端令牌:不适用诊断:应用程序Application_1461246306015_0001失败2次,原因是appattempt_146246306015/0001_00002的AM容器退出并退出exitCode:-1000有关更详细的输出,请查看应用程序跟踪页面:http://sparkcluster01.testing.com:8088/cluster/app/application_1461246306015_0001Then,单击指向每次尝试日志的链接。诊断:java.io.FileNotFoundException:文件文件:/app/spark-test.jar不存在尝试失败。应用程序失败。ApplicationMaster主机:不适用ApplicationMaster RPC端口:-1队列:默认开始时间:1461246375622最终状态:失败跟踪URL:http://sparkcluster01.testing.com:8088/cluster/app/application_1461246306015_0001用户:root线程"main"org.ap/app/park-test.jarache.spark.SparkException异常:应用程序Application_1461246306015_0001已完成,状态为失败网址:org.apache.spark.deploy.yarn.Client.run(Client.scala:1034)网址:org.apache.spark.deploy.yarn.Client$.main(Client.scala:1081)网址:org.apache.spark.deploy.yarn.Client.main(Client.scala)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:498)在org.apache.spark.deploy.SparkSubmit$org.apache$spark$deploy$SparkSubmit$$runMain(SparkSubmitte.scala:731)网址:org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)网址:org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmitte.scala:206)网址:org.apache.spark.deploy.SparkSubmit$.main(SparkSubmitte.scala:121)在org.apache.spark.deploy.SparkSubmit.main(SparkSubmitte.scala)
我甚至尝试在HDFS文件系统上运行spark,方法是将我的应用程序放在HDFS上,并在spark Submit命令中提供HDFS路径。即使在那时,它也会在一些Spark Conf文件上抛出File Not Found Exception。我正在执行下面的Spark Submit命令,请在该命令下面找到日志输出。
./bin/spark-submit --class com.test.Engine --master yarn --deploy-mode cluster hdfs://sparkcluster01.testing.com:9000/beacon/job/spark-test.jar
16/04/21 18:11:45 INFO RMProxy:正在连接到ResourceManager,网址为0.0.0.0:803216/04/21 18:11:46信息客户端:正在从具有1个NodeManagers的集群请求新应用程序21年4月16日18:11:46信息客户端:验证我们的应用程序请求的内存没有超过集群的最大容量(每个容器8192 MB)21年4月16日18:11:46信息客户端:将分配AM容器,具有1408 MB内存,包括384 MB开销21年4月16日18:11:46信息客户端:为我们的AM设置容器启动上下文21年4月16日18:11:46信息客户端:为我们的AM容器设置启动环境21年4月16日18:11:46信息客户端:为我们的AM容器准备资源21年4月16日18:11:46信息客户端:源文件系统和目标文件系统相同。未复制文件:/mi/spark/lib/spark-assembly1.6.1-hadoop2.6.0.jar21年4月16日18:11:47信息客户端:正在上传资源hdfs://sparkcluster01.testing.com:9000/beacon/job/spark-test.jar->文件:/root/.sparkStaging/application_1461234217994_0017/spark-test.jar21年4月16日18:11:49信息客户端:源文件系统和目标文件系统相同。未复制文件:/tmp/spark-f4eef3ac-2add-42f8-a204-be7959c26f21/__spark_conf__6818051470272245610.zip21年4月16日18:11:50信息安全管理器:正在将视图ACL更改为:root21年4月16日18:11:50信息安全管理器:正在将修改acls更改为:root21年4月16日18:11:50信息SecurityManager:SecurityManager:身份验证已禁用;ui acls已禁用;具有查看权限的用户:Set(root);具有修改权限的用户:Set(root)21年4月16日18:11:50信息客户端:正在向ResourceManager提交应用程序1721年4月16日18:11:50 INFO YarnClientImpl:已提交应用程序申请_1461234217994_001721年4月16日18:11:51信息客户端:应用程序的应用程序报告_1461234217994_0017(状态:已接受)21年4月16日18:11:51信息客户端:客户端令牌:不适用诊断:不适用ApplicationMaster主机:不适用ApplicationMaster RPC端口:-1队列:默认开始时间:1461242510849最终状态:未定义跟踪URL:http://sparkcluster01.testing.com:8088/proxy/application_1461234217994_0017/用户:root21年4月16日18:11:52信息客户端:应用程序的应用程序报告_1461234217994_0017(状态:已接受)21年4月16日18:11:53信息客户端:应用程序的应用程序报告_1461234217994_0017(状态:已接受)21年4月16日18:11:54信息客户端:应用程序的应用程序报告_1461234217994_0017(状态:失败)21年4月16日18:11:54信息客户端:客户端令牌:不适用诊断:应用程序Application_1461234217994_0017失败2次,原因是appattempt_146123217994_0017_00002的AM容器退出并退出exitCode:-1000有关更详细的输出,请查看应用程序跟踪页面:http://sparkcluster01.testing.com:8088/cluster/app/application_1461234217994_0017Then,单击指向每次尝试日志的链接。诊断:文件文件:/tmp/spark-f4eef3ac-2add-42f8-a204-be7959c26f21/__spark_conf__6818051470272245610.zip不存在java.io.FileNotFoundException:文件文件:/tmp/spark-f4eef3ac-2add-42f8-a204-be7959c26f21/__spark_conf__6818051470272245610.zip不存在网址:org.apache.hadop.fs.RawLocalFileSystem.depletedGetFileStatus(RawLocalFileSystem.java:609)网址:org.apache.hadop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822)网址:org.apache.hadop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599)网址:org.apache.hoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421)网址:org.apache.hadop.yarn.util.FSDownload.copy(FSDownload.java:253)网址:org.apache.hadop.yarn.util.FSDownload.access$000(FSDownload.java:63)网址:org.apache.hadop.yarn.util.FSDownload$2.run(FSDownload.java:361)网址:org.apache.hadop.yarn.util.FSDownload$2.run(FSDownload.java:359)位于java.security.AccessController.doPrivileged(本机方法)位于javax.security.auth.Subject.doAs(Subject.java:422)网址:org.apache.hadop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)网址:org.apache.hadop.yarn.util.FSDownload.call(FSDownload.java:358)网址:org.apache.hadop.yarn.util.FSDownload.call(FSDownload.java:62)位于java.util.concurrent.FFutureTask.run(FutureTask.java:266)位于java.util.concurrent.Executors$RunnableAdapter.call(Executitors.java:511)位于java.util.concurrent.FFutureTask.run(FutureTask.java:266)位于java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1142)位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(线程.java:745)尝试失败。应用程序失败。ApplicationMaster主机:不适用ApplicationMaster RPC端口:-1队列:默认开始时间:1461242510849最终状态:失败跟踪URL:http://sparkcluster01.testing.com:8088/cluster/app/application_1461234217994_0017用户:root线程"main"org.apache.spark.SparkException中的异常:应用程序应用程序_1461234217994_0017已完成,状态为失败网址:org.apache.spark.deploy.yarn.Client.run(Client.scala:1034)网址:org.apache.spark.deploy.yarn.Client$.main(Client.scala:1081)网址:org.apache.spark.deploy.yarn.Client.main(Client.scala)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:498)在org.apache.spark.deploy.SparkSubmit$org.apache$spark$deploy$SparkSubmit$$runMain(SparkSubmitte.scala:731)网址:org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)网址:org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmitte.scala:206)网址:org.apache.spark.deploy.SparkSubmit$.main(SparkSubmitte.scala:121)网址:org.apache.spark.deploy.SparkSubmit.main(SparkSubmitte.scala)21年4月16日18:11:55信息ShutdownHookManager:调用了Shutdownhook21年4月16日18:11:55信息关闭HookManager:正在删除目录/tmp/spark-f4eef3ac-2add-42f8-a204-be7959c26f21
spark配置没有指向正确的hadoop配置目录。2.7.2的hadoop配置位于文件路径hadoop 2.7.2./etc/hadoop/,而不是/root/hadop2.7.2/conf。当我在spark-env.sh下指向hadoop_conf_DIR=/root/haop2.7.2/etc/hadoop/时,spark-submit开始工作,file not found异常消失。早些时候,它指向/root/hadop2.7.2/conf(不存在)。如果spark没有指向正确的hadoop配置目录,可能会导致类似的错误。我认为这可能是spark中的一个bug,它应该优雅地处理它,而不是抛出模棱两可的错误消息。
Spark在EMR上运行时,我也遇到了类似的错误。我已经用Java 8编写了我的spark代码,在EMR集群中,默认情况下,spark在Java 8上运行。然后,我不得不用指向java8版本的JAVA_HOME重新创建集群。它解决了我的问题。请核对类似的行。
我有类似的问题,但问题与有两个核心站点.xml有关,一个在$HADOOP_CONF_DIR中,另一个在$SPARK_HOME/CONF中。当我删除$SPARK_HOME/conf 下的问题时,问题消失了
无论何时在yarn集群模式下运行,本地文件都应该放在所有节点中。因为,我们不知道哪个节点将是AM(应用程序主节点)节点。您的应用程序始终从AM节点查找文件。
我遇到过一种情况,在运行时,我必须将KeyStore和KeyPass密码保存在一个文件中,该文件由我的spark作业读取。我将该文件作为opt/datapipeline/config/keystorePass保存在/opt文件夹下。但是我的应用程序一直失败,出现FileNotFoundException。
在所有节点中放置keystorePass文件后,异常消失,作业成功。
另一种方法是,将文件保存在hdfs文件系统中,而不是本地文件系统中