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 错误导致的空指针异常:
我查看了几个链接试图找出问题所在,但我无法解决问题。
我是 运行 Yarn,我还有另一个不相关的 Spark 应用程序(Spark Streaming)也在 Yarn 上 运行。
之前我也试过给z.reset()
打电话,没用。事实上,它甚至抛出了一个错误:error: value reset is not a member of org.apache.zeppelin.spark.ZeppelinContext
我跟踪了错误消息中提到的文件和行,结果是this line,看起来像这样:
ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
DependencyFilter filter = request.getFilter();
DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
visitor = new TreeDependencyVisitor( visitor );
result.getRoot().accept( visitor ); //<<<<------- THIS
有没有人经历过这个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
我使用以下命令在 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 错误导致的空指针异常:
我查看了几个链接试图找出问题所在,但我无法解决问题。
我是 运行 Yarn,我还有另一个不相关的 Spark 应用程序(Spark Streaming)也在 Yarn 上 运行。
之前我也试过给
z.reset()
打电话,没用。事实上,它甚至抛出了一个错误:error: value reset is not a member of org.apache.zeppelin.spark.ZeppelinContext
我跟踪了错误消息中提到的文件和行,结果是this line,看起来像这样:
ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace ); DependencyFilter filter = request.getFilter(); DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder; visitor = new TreeDependencyVisitor( visitor ); result.getRoot().accept( visitor ); //<<<<------- THIS
有没有人经历过这个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