我试图在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插件?我所需要的就是复制插件文件,从集群中的任何节点访问它。
2条答案
按热度按时间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
一定在路上。egmofgnx2#
我发现了一种使用emr引导操作为所有节点提供所需文件的方法,因此我创建了一个要复制的脚本
nutch-plugins
从s3桶到/tmp/nutch-plugins
目录:然后将这个脚本上传到s3 bucket,并在配置集群时添加了“custombootstrap action”。可以通过aws web控制台(emr高级模式)或cli参数添加:
在这些步骤之后,任何节点都可以访问插件文件
/tmp/nutch-plugins
: