Java 在 AWS EMR 上从 Zeppelin 中从 Maven 加载依赖项时出现 NPE

Java NPE when Loading a Dependency from Maven from within Zeppelin on AWS EMR

我使用以下命令在 EMR 上创建了一个 Spark 集群:

aws emr create-cluster \
  --name "2-node Zeppelin cluster (turn me off after use)" \
  --instance-type m3.xlarge \
  --release-label emr-4.2.0 \
  --instance-count 2 \
  --log-uri s3://redacted/logs \
  --ec2-attributes KeyName=redacted \
  --use-default-roles \
  --applications Name=Spark Name=Zeppelin-Sandbox\
  --configurations file://aws-emr/configs/spark.json \
  --no-auto-terminate

这让我在 EMR 上获得了一个 2 节点 Spark (v 1.5.2) 集群,带有 Apache Zeppelin (v 0.5.5) UI。

但是,当尝试使用 z.load() 将 Maven 的依赖项加载到 ZeppelinContext 时,(在旋转集群后立即 - 我在两者之间什么也没做)as per the docs 我得到了一个 Java 似乎是由于某些 Sonatype Repo 错误导致的空指针异常:

有没有人经历过这个and/or有什么信息可以帮助我?

没关系,我找到了解决方法,如果不是问题的原因:

  • 通过 SSH 连接到您的 EMR 实例并编辑文件 /usr/lib/zeppelin/conf/zeppelin-env.sh 更改最后一行,使其看起来像这样:

    export SPARK_SUBMIT_OPTIONS="$SPARK_SUBMIT_OPTIONS --packages org.apache.spark:spark-streaming-kinesis-asl_2.10:1.5.2"
    

这将使 Spark 将它(以及您指定的任何一个包,以逗号分隔)加载到您的 Spark 解释器中,这正是我想要的。

P.S.: Thank you Mon Soo Lee for mentioning this in this mailing list post