Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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
Java 使用自定义文件配置EMR节点_Java_Hadoop_Amazon Emr_Nutch - Fatal编程技术网

Java 使用自定义文件配置EMR节点

Java 使用自定义文件配置EMR节点,java,hadoop,amazon-emr,nutch,Java,Hadoop,Amazon Emr,Nutch,我正在尝试在AWS EMR Hadoop集群上使用ApacheNutch依赖运行jar。问题是Nutch找不到插件类(我用-Dplugin.folders指定插件位置)。 我在本地测试了这个选项,效果很好:java-cp-app.jar-Dplugin.folders=./nutch-plugins 我得到了这个错误: 19/07/24 15:42:26 INFO mapreduce.Job: Task Id : attempt_1563980669003_0005_m_000000_2, St

我正在尝试在AWS EMR Hadoop集群上使用ApacheNutch依赖运行jar。问题是Nutch找不到插件类(我用
-Dplugin.folders
指定插件位置)。 我在本地测试了这个选项,效果很好:
java-cp-app.jar-Dplugin.folders=./nutch-plugins

我得到了这个错误:

19/07/24 15:42:26 INFO mapreduce.Job: Task Id : attempt_1563980669003_0005_m_000000_2, Status : FAILED
Error: java.lang.RuntimeException: x point org.apache.nutch.net.URLNormalizer not found.
        at org.apache.nutch.net.URLNormalizers.<init>(URLNormalizers.java:146)
        at org.apache.nutch.crawl.Injector$InjectMapper.setup(Injector.java:139)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:796)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
然后我尝试将其复制到HDFS-没有帮助:

hadoop fs-cpfile:///tmp/nutch-plugins hdfs:///tmp/ hadoop jar app.jar-Dplugin.folders=hdfs:///tmp/nutch-plugins 并尝试将其上载到S3 bucket-没有帮助:

hadoop fs-cpfile:///tmp/nutch-plugins s3a:///mybucket/ hadoop jar app.jar-Dplugin.folders=s3a:///mybucket/nutch插件 如何为Hadoop节点提供Nutch插件?我所需要的只是将插件文件复制到某个地方,以便从集群中的任何节点访问它。

在分布式模式下(在Hadoop集群中),插件包含在作业文件中(
runtime/deploy/apache-nutch-1.x.job
):

  • 从源代码包或从git克隆的Nutch源代码开始
  • 调整
    conf/
    中的配置-注意:配置文件也在作业文件中提供
  • 构建Nutch(
    ant运行时
  • 运行
    runtime/deploy/bin/nutch
    runtime/deploy/bin/crawl
    hadoop jar
    被调用以启动nutch作业,因此可执行文件
    hadoop
    必须位于路径上
    我找到了一种使用EMR为所有节点提供所需文件的方法,因此我创建了一个脚本,将
    nutch插件
    从S3 bucket复制到
    /tmp/nutch插件
    目录:

    #/bin/bash
    aws s3 cp——递归s3://mybucket/nutch插件//tmp/nutch插件/
    
    然后将此脚本上传到S3 bucket, 并在配置集群时添加了“自定义引导操作”。可以通过AWS web控制台(EMR高级模式)或CLI参数添加:

    aws emr创建集群\
    # ... \
    --引导操作Path=“s3://mybucket/bootstrap.sh”
    
    完成这些步骤后,任何节点都可以访问
    /tmp/nutch plugins
    上的插件文件:

    hadoop jar app.jar-Dplugin.folders=/tmp/nutch plugins
    谢谢您的回答。如果我只运行Nutch本身会很有帮助,但我运行的是自定义jar,它使用Nutch类作为依赖项,所以我不能像Nutch那样部署我的应用程序