spark-submit 报配置文件not existed

报错信息挺明显的,你用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 个赞

遇到同样的问题,但还需要hive导入数据咋办呢