spark-submit 报配置文件not existed

Nebula Version : 2.0-Beta
Spark-submit standalone测试环境:一台机器上的三个docker容器(docker与spark一台机器上)(在某一个docker中submit)
Submit Yarn的环境:nebula server(三台机器(HDD)),spark submit在一个Yarn集群上

standalone提交:

$SPARK_HOME/bin/spark-submit \
--master spark://master:7077 \
--class com.vesoft.nebula.exchange.Exchange \
/opt/Code/nebula/nebula-exchange-2.0.0.jar \
-c /opt/Code/nebula/test2/app.conf

在公司的yarn-cluster提交:

/usr/bin/hadoop/software/spark2.4/bin/spark-submit \
 --master yarn-cluster \
--class com.vesoft.nebula.exchange.Exchange  \
nebula-exchange-2.0.0.jar \
-c json_app.conf

报错:

3:09:09 INFO ApplicationMaster: Preparing Local resources
21/01/15 13:09:10 INFO ApplicationMaster: ApplicationAttemptId: appattempt_1608801054019_1051147_000004
21/01/15 13:09:10 INFO ApplicationMaster: Starting the user application in a separate Thread
21/01/15 13:09:10 INFO ApplicationMaster: Waiting for spark context initialization...
21/01/15 13:09:10 ERROR ApplicationMaster: User class threw exception: java.lang.IllegalArgumentException: json_app.conf not exist
java.lang.IllegalArgumentException: json_app.conf not exist
	at com.vesoft.nebula.exchange.config.Configs$.parse(Configs.scala:213)
	at com.vesoft.nebula.exchange.Exchange$.main(Exchange.scala:67)
	at com.vesoft.nebula.exchange.Exchange.main(Exchange.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:685)
21/01/15 13:09:10 INFO ApplicationMaster: Final app status: FAILED, exitCode: 13, (reason: User class threw exception: java.lang.IllegalArgumentException: json_app.conf not exist
	at com.vesoft.nebula.exchange.config.Configs$.parse(Configs.scala:213)
	at com.vesoft.nebula.exchange.Exchange$.main(Exchange.scala:67)
	at com.vesoft.nebula.exchange.Exchange.main(Exchange.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:685)
)
21/01/15 13:09:10 ERROR ApplicationMaster: Uncaught exception: 
org.apache.spark.SparkException: Exception thrown in awaitResult: 
	at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:227)
	at org.apache.spark.deploy.yarn.ApplicationMaster.runDriver(ApplicationMaster.scala:469)
	at org.apache.spark.deploy.yarn.ApplicationMaster.org$apache$spark$deploy$yarn$ApplicationMaster$$runImpl(ApplicationMaster.scala:305)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$1.apply$mcV$sp(ApplicationMaster.scala:245)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$1.apply(ApplicationMaster.scala:245)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$1.apply(ApplicationMaster.scala:245)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$3.run(ApplicationMaster.scala:780)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
	at org.apache.spark.deploy.yarn.ApplicationMaster.doAsUser(ApplicationMaster.scala:779)
	at org.apache.spark.deploy.yarn.ApplicationMaster.run(ApplicationMaster.scala:244)
	at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:804)
	at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)
Caused by: java.lang.IllegalArgumentException: json_app.conf not exist
	at com.vesoft.nebula.exchange.config.Configs$.parse(Configs.scala:213)
	at com.vesoft.nebula.exchange.Exchange$.main(Exchange.scala:67)
	at com.vesoft.nebula.exchange.Exchange.main(Exchange.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:685)
21/01/15 13:09:10 INFO ApplicationMaster: Deleting staging directory hdfs://namenode.safe.lycc.qihoo.net:9000/home/yarn/spark/cache/hdp-safe-cloud/.sparkStaging/application_1608801054019_1051147

就是我想知道后面的 -c 是jar包的配置,他的路径该填哪里,我之前以standalone模式,在本地是可以的,现在换到yarn-cluster上面就出错了。

报错信息挺明显的,你用yarn-cluster模式提交的话,会随机选择一台机器作为driver进行任务提交,那么此时就会读取driver机器上的json_app.conf, 而你提交任务的机器节点恰好没有被选择为driver,所以会找不到配置文件。
你在yarn每台机器上要拷贝一份json_app.conf,并在提交任务命令中写json_app.conf的绝对路径。

好头疼呀,公司的后台都是不暴露出来的,很难copy到每台机器。。。。
我试过了-c hdfs://xxxxxxxxxx:9000/home/hdp-safe-cloud/xxxxx10/test1/json_app.conf,也同样是报not existed

还是试过,–files json_app.conf,都不行,求解。。。。

你一定要使用yarn-cluster模式么,如果不能copy到每台机器的话,你可以使用yarn-client模式,该模式会在本地起Driver进程的。

ps:配置文件不支持使用hdfs路径哈 & -c是exchange中指定的配置参数,不能使用-file

悟了,,,现在痛点就是集群不暴露问题,,,如果能够异地拉取配置文件,或者–files,然后driver中拉去对应文件就好了

有个办法或许可以解决你的痛点:将配置文件打在jar包中,修改主类中读取配置文件的方式:

请问一下,您这个是直接写死在jar包里面吗

github上代码没有写死的,是配置的。
你可以修改后重新打包

直接读取jar中 配置文件的路径要把包路径写全的,我上图是给出一个示例 :rofl:
文件路径要这么写:
“nebula-exchange/src/main/resources/application.conf”

这样的话,你就只能使用导数据功能,且无法导入hive数据,需要把 配置c相关的注释掉。

2 个赞

可以读取配置了,但是在

      case SourceCategory.JSON =>
        System.out.println("*****************match--3**************")
        val jsonConfig = config.asInstanceOf[FileBaseSourceConfigEntry]
        LOG.info(s"""Loading JSON files from ${jsonConfig.path}""")
        val reader = new JSONReader(session, jsonConfig)
        System.out.println("*****************step3**************")
        Some(reader.read()) //这一步定位出错误

也就是sparksession.read.json(path)

错误代码:

21/01/18 13:10:26 ERROR LzoCodec: Failed to load/initialize native-lzo library

你可以参考下StackOverFlow上这个问题,调整下你的Hadoop环境。

你看下你的Hadoop配置,core-site.xml或者mapred-site.xml中是否有配置lzo数据压缩。 没有特殊需求的话一般安装的hadoop是不用配置lzo或者gpl的。

在spark-shell中测试下SparkSession能否正常读取HDFS上的文件。

之前,使用sparksession.sparkContext.textFile可以,使用spark.read.json(path_hdfs),我toString打印出来一看

21/01/18 14:56:20 ERROR LzoCodec: Failed to load/initialize native-lzo library
[likeness: double, source: bigint ... 1 more field] 

读取一半,就抛出Izo Error

你使用的spark版本是多少,exchange中使用的spark客户端版本是2.4.4的。

  1. 如果spark服务端版本太低,考虑升级下spark服务
  2. 在Spark 的spark-env.sh中增加以下配置(注意lib包的路径):
    export SPARK_SUBMIT_LIBRARY_PATH=/usr/lib/hadoop/lib/native/:$SPARK_SUBMIT_LIBRARY_PATH
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/hadoop/lib/native/
    export SPARK_LIBRARY_PATH=/usr/lib/hadoop/lib/native/:$SPARK_LIBRARY_PATH
    export SPARK_CLASSPATH=/usr/local/spark/lib/hadoop-lzo-cdh4-0.4.15-gplextras.jar:$CLASSPATH
2 个赞

老哥,我定位出来原因了,
1,我的配置文件:中文逗号
2,系统部可能没有把spark集群授权给我nebula集群这三台机器,我可能,要另开重搭spark QAQ

赞,配置文件中地址写错的话会连接失败,但这个错误应该是在 read.json()操作之后的,请问下LziCodec这个问题是怎么修复? 可以总结下以防后续用户踩到同样的坑。

你可以在Spark集群中ping一下Nebula Graph服务所在的机器,看能否访问,无法访问的话就需要在Nebula集群中搭Spark了。

ERROR LzoCodec这个错误可以忽略,在read.json时候虽然报了这个错误,但是rdd.show()之后,发现实际数据是完整的。然后继续往后面定位才发现,processor.process()中的address处理出错了,才发现配置文件,,,,中文逗号(捂脸,,,,之后在定位还是在这里发现new MetaProvider(address)里面的metaClient.connect()这一步,所以,端口开放问题。。。。。

好的
地址配置这里,虽然配置中有说明要用英文逗号,但已经有好几位用户踩坑了,我们可以考虑针对地址加一些check

1 个赞

老哥,接着上述的问题,解决了后续问题
1,之前connection refused虽然解了(注意集群环境变动,一但机器宕机,配置文件和graph meta对应不上,而且重新拉起服务的时候要删除cluster.id),
2,后面遇到配置文件的error logs,如果公司对权限要求很严格的话,这个地方换成自己的hadoop home目录,


3,改完这个错误之后,虽然代码流程跑完了,但是数据库还是没有录入数据,在import edge和点的时候,报了这个错误。
代码:

错误代码:

21/01/21 16:02:05 ERROR NebulaGraphClientWriter: write vertex failed for Request to storage failed, without failedCodes.
21/01/21 16:02:06 ERROR NebulaGraphClientWriter: write edge failed for Request to storage failed, without failedCodes.

一旦出现数据没录入8成就是schema,VID是String的关系,然后我改了schama的space定义CREATE SPACE json (partition_num=1, replica_factor=1,vid_type=fixed_string(16));,,,,,之前是没有vid_type伸长String的。

哎,终于解决完毕了所有问题

2 个赞

:+1:

1 个赞