【问题标题】:"User did not initialize spark context" Error when using Scala code in SPARK YARN Cluster mode“用户未初始化火花上下文”在 SPARK YARN 集群模式下使用 Scala 代码时出错
【发布时间】:2019-05-03 18:00:04
【问题描述】:

为了缩小问题的范围,我删除了其他类依赖项,并且我有这个干净的代码:

object LoaderProcessor extends App {

val logger = LoggerFactory.getLogger(this.getClass())
execute()

def execute(): Unit = {

val spark = get_spark()
import spark.implicits._

var df = spark.read
  .format("csv")
  .option("delimiter", ",")
  .option("header", true)
  .option("inferSchema", "true")
  .option("timestampFormat", "yyyy/MM/dd HH:mm:ss")
  .load(args(2))

df = df.withColumn("zs_source", lit(1)) //the only operation on dataframe

val o_file = Config().getString("myapp.dataFolder") + "/8/1/data.csv"
logger.info("Writing output to: {}", o_file)

df.write.mode("overwrite")
.option("header", "true").csv(o_file)

}

def get_spark(): SparkSession = {
val env = System.getenv("MYAPP_ENV")
var spark:SparkSession = null
if (env == null || env == "dev_local") {
  spark = org.apache.spark.sql.SparkSession.builder
    .master("local")
    .appName("MyApp")
    .getOrCreate;
}else{
  spark = org.apache.spark.sql.SparkSession.builder
    .appName("MyApp")
    //.enableHiveSupport()
    .getOrCreate;
}
spark.sparkContext.setCheckpointDir(Config().getString("myapp.rddcp"))
return spark
}
}

在客户端模式下运行良好。无法弄清楚问题所在。我的集群在 HDInsight 上。

注意到“写入”操作一直在这样的输出文件夹上写入:

part-00000-3e9566ae-c13c-468a-8732-e7b8a8df5335-c000.csv


然后几秒钟后:

part-00000-4f4979a0-d9f9-481b-aac4-115e63b9f59c-c000.csv


8/12/01 15:08:53 INFO ApplicationMaster:在单独的线程中启动用户应用程序 18/12/01 15:08:53 INFO ApplicationMaster:等待火花上下文初始化... 2001 年 18 月 12 日 15:08:55 信息配置 $:环境:开发 18/12/01 15:08:55 错误 ApplicationMaster:未捕获的异常: java.lang.IllegalStateException:用户没有初始化火花上下文! 在 org.apache.spark.deploy.yarn.ApplicationMaster.runDriver(ApplicationMaster.scala:510) 在 org.apache.spark.deploy.yarn.ApplicationMaster.org$apache$spark$deploy$yarn$ApplicationMaster$$runImpl(ApplicationMaster.scala:345) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$2.apply$mcV$sp(ApplicationMaster.scala:260) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$2.apply(ApplicationMaster.scala:260) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$2.apply(ApplicationMaster.scala:260) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anon$5.run(ApplicationMaster.scala:815) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.spark.deploy.yarn.ApplicationMaster.doAsUser(ApplicationMaster.scala:814) 在 org.apache.spark.deploy.yarn.ApplicationMaster.run(ApplicationMaster.scala:259) 在 org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:839) 在 org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)

spark-submit --master yarn --deploy-mode cluster --jars "wasb://xx@yy/zs/jars/config-1.3.1.jar" --class myapp.LoaderProcessor "wasb://xx@yy/zs/jars/myapp.jar" l 8 /data/8_data.csv 1 , true false -->问题

spark-submit --deploy-mode client --jars "wasb://xx@yy/zs/jars/config-1.3.1.jar" --class myapp.LoaderProcessor "wasb://xx@yy/zs/jars/myapp.jar" l 8 /data/8_data.csv 1 , true false -->工作!!!

【问题讨论】:

    标签: scala apache-spark hadoop hadoop-yarn


    【解决方案1】:

    编辑:根据我们在 cmets 中的交换更新

    问题是您总是使用if (env == null || env == "dev_local") 创建本地上下文(MYAPP_ENV 在分布式环境中为空)

    【讨论】:

    • 感谢您的帮助。是的,我已经有了那个设置,我想我在问题中有示例代码。我现在才添加。
    • 您是否使用 --master yarn 提交并正确设置了 YARN_CONF_DIR?
    • 我相信我们需要设置 HADOOP_CONF_DIR,并且当我使用 HDInsight 时,我可以在 Ambari 配置中看到它,如下所示:export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-{{hadoop_conf_dir}}} 是的,我我正在使用 --master yarn 提交工作
    • 我用更少的类依赖更新了我的代码,更容易理解。知道在哪里可以检查 Ambari 上的 YARN_CONF_DIR 吗?
    • 尝试导出 YARN_CONF_DIR=/etc/hadoop/conf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2020-06-25
    • 1970-01-01
    • 2018-07-10
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多