使用Idea提交Spark程序

前言

参考这个文章(使用Intellij IDEA开发并提交Spark应用到远程Spark集群)试了一下,把遇到问题记录一下。


正文

1,错误:Permission denied: user=root, access=WRITE, inode=”/user”:hdfs:supergroup:dr

这个问题的原因是因为Idea在执行程序时,使用了系统用户作为向Hadoop进行写的用户了。比如,你的电脑系统用户是:administrator,而你的Hadoop用户是:hadoop,用户不一样,所以写不进去。

解决办法:设置“HADOOP_USER_NAME=hadoop”为环境变量。
设置的办法有两个:

  • 在Idea里进行设置,点上面的“Edit Configurations”,然后选择要执行的Application,在右边进行设置“Environment Variables”。
  • 在系统里进行设置,可以编辑“.bash_profile”文件,添加export HADOOP_USER_NAME=hadoop

设置完后,可以用System.getenv()方法进行测试,看是否能读取到。


2,错误:java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field

这个问题的原因是:没有使用setJars方法,进行设置Jar文件。
在参考的文章中,进行了使用了setJars方法。但自己测试时没有使用,因为不知道这行语句的作用。
在网上查了一下,发生这个错误最根本的原因是因为Lambda表达式解析的问题,自己的测试程序中,使用了Lambda表达式,如果各个Worker中没有解析Lambda表达式的方法的话,就会产生这样的错误。setJars方法的目的就是把生成Lambda表达式的程序,给各个Worker,让他们知道如何解析。感兴趣的可以看一下:java.lang.ClassCastException using lambda expressions in spark job on remote server

如何使用setJars方法呢?把你要提交的类,生成一个Jar,把这个Jar的路径设置到setJars方法里就可以了。例如:

SparkConf conf = new SparkConf().setAppName("wordCount_111")
                .setMaster("spark://your-master-ip:7077")
                .setJars(new String[]{"/Users/myaccount/IdeaProjects/spark/spark-wordcount/out/artifacts/spark_word_count/spark_word_count.jar"});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值