在AWS EMR上从齐柏林飞艇内部加载Maven依赖项时使用Java NPE
我使用以下命令在EMR上创建了一个Spark群集:在AWS EMR上从齐柏林飞艇内部加载Maven依赖项时使用Java NPE,maven,amazon-web-services,apache-spark,amazon-emr,apache-zeppelin,Maven,Amazon Web Services,Apache Spark,Amazon Emr,Apache Zeppelin,我使用以下命令在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 Key
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(V1.5.2)集群,带有ApacheZeppelin(V0.5.5)UI
但是,当尝试使用z.load()
将依赖项从Maven加载到ZeppelinContext中时(在旋转集群之后,我没有做任何事情),我得到了一个Java空指针异常,似乎是由于某些Sonatype Repo错误:
- 我查看了几个链接,试图找出问题所在,但我无法解决问题
- 我正在运行纱线,我有另一个不相关的Spark应用程序(Spark Streaming)也在运行纱线
- 在此之前,我也尝试过调用
,但没有成功。事实上,它甚至抛出了一个错误:z.reset()
error:value reset不是org.apache.zeppelin.spark.ZeppelinContext的成员
- 我跟踪了错误消息中提到的文件和行,结果是,如下所示:
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
export SPARK_SUBMIT_OPTIONS="$SPARK_SUBMIT_OPTIONS --packages org.apache.spark:spark-streaming-kinesis-asl_2.10:1.5.2"
ArtifactRequestBuilder=新的ArtifactRequestBuilder(跟踪); DependencyFilter=request.getFilter(); DependencyVisitor=(筛选器!=null)?新建筛选器DependencyVisitor(生成器,筛选器):生成器; 访客=新树依赖访客(访客);
result.getRoot().accept(访问者)// 不管怎样,我找到了一个解决办法,如果不是问题的原因:- SSH到您的EMR实例中,并编辑文件
,更改最后一行,使其如下所示:/usr/lib/zeppelin/conf/zeppelin env.sh
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
export SPARK_SUBMIT_OPTIONS="$SPARK_SUBMIT_OPTIONS --packages org.apache.spark:spark-streaming-kinesis-asl_2.10:1.5.2"
显然,这是AWS的一个问题,将在下一个(4.3.0)版本标签中修复:更新:这在emr-4.3.0中不再是一个问题 - SSH到您的EMR实例中,并编辑文件