Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AWS EMR上从齐柏林飞艇内部加载Maven依赖项时使用Java NPE_Maven_Amazon Web Services_Apache Spark_Amazon Emr_Apache Zeppelin - Fatal编程技术网

在AWS EMR上从齐柏林飞艇内部加载Maven依赖项时使用Java NPE

在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

我使用以下命令在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(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"
      
    这将使Spark将其(以及您指定的任何一个包,用逗号分隔)加载到您的Spark解释器中,这正是我想要的

    p.S.:谢谢李孟秀在演讲中提到这一点


    显然,这是AWS的一个问题,将在下一个(4.3.0)版本标签中修复:更新:这在emr-4.3.0中不再是一个问题