Java 使用自定义文件配置EMR节点
我正在尝试在AWS EMR Hadoop集群上使用ApacheNutch依赖运行jar。问题是Nutch找不到插件类(我用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
-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
):
conf/
中的配置-注意:配置文件也在作业文件中提供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那样部署我的应用程序