使用自定义文件配置emr节点

aiqt4smr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(432)

我试图在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)

我试着把插件复制到 /tmp 文件夹(只是猜测它是共享文件夹)-没有帮助:

hadoop jar app.jar -Dplugin.folders=/tmp/nutch-plugins

然后我试着把它复制到hdfs上-没用:

hadoop fs -cp file:///tmp/nutch-plugins hdfs:///tmp/
hadoop jar app.jar -Dplugin.folders=hdfs:///tmp/nutch-plugins

并尝试将其上传到s3 bucket-没有帮助:

hadoop fs -cp file:///tmp/nutch-plugins s3a:///mybucket/
hadoop jar app.jar -Dplugin.folders=s3a:///mybucket/nutch-plugins

如何为hadoop节点提供nutch插件?我所需要的就是复制插件文件,从集群中的任何节点访问它。

iovurdzv

iovurdzv1#

在分布式模式下(在hadoop集群中),插件包含在作业文件中( runtime/deploy/apache-nutch-1.x.job ):
从源程序包或从git克隆的nutch源代码开始
调整中的配置 conf/ -注意:配置文件也在作业文件中提供
造坚果( ant runtime )
runtime/deploy/bin/nutch 或者 runtime/deploy/bin/crawl : hadoop jar <jobfile> 调用以启动nutch作业,因此 hadoop 一定在路上。

egmofgnx

egmofgnx2#

我发现了一种使用emr引导操作为所有节点提供所需文件的方法,因此我创建了一个要复制的脚本 nutch-plugins 从s3桶到 /tmp/nutch-plugins 目录:


# !/bin/bash

aws s3 cp --recursive s3://mybucket/nutch-plugins/ /tmp/nutch-plugins/

然后将这个脚本上传到s3 bucket,并在配置集群时添加了“custombootstrap action”。可以通过aws web控制台(emr高级模式)或cli参数添加:

aws emr create-cluster \
  # ... \
  --bootstrap-actions Path="s3://mybucket/bootstrap.sh"

在这些步骤之后,任何节点都可以访问插件文件 /tmp/nutch-plugins :

hadoop jar app.jar -Dplugin.folders=/tmp/nutch-plugins

相关问题