java - 使用自定义文件配置 EMR 节点
问题描述
我正在尝试使用 Apache Nutch 依赖于 AWS EMR Hadoop 集群运行 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 存储桶 - 没有帮助:
hadoop fs -cp file:///tmp/nutch-plugins s3a:///mybucket/
hadoop jar app.jar -Dplugin.folders=s3a:///mybucket/nutch-plugins
如何使用 Nutch 插件配置 Hadoop 节点?我所需要的只是将插件文件复制到某个地方,以便从集群中的任何节点访问它。
解决方案
在分布式模式下(在 Hadoop 集群中),插件包含在作业文件 ( runtime/deploy/apache-nutch-1.x.job
) 中:
- 从源包或从 git 克隆的 Nutch 源代码开始
- 调整配置
conf/
- 注意:配置文件也包含在作业文件中 - 构建 Nutch (
ant runtime
) - 调用run
runtime/deploy/bin/nutch
或runtime/deploy/bin/crawl
:hadoop jar <jobfile>
来启动 Nutch 作业,因此可执行文件hadoop
必须在 PATH 上。
推荐阅读
- scala - 来自 spark shell 的 Hive 选择语句
- java - Spring Boot:在构造函数中加载属性文件并用作自动装配注释
- blockchain - 如何仅从保管库查询中获取数据
- javascript - 为什么我需要覆盖prototype.constructor 值?
- php - SQLSTATE [42S02]:未找到基表或视图:1146 表“fresh_start.event”不存在(SQL:从“事件”中选择计数(*)作为聚合)
- javascript - React/Redux,从模型调用方法抛出 TypeError
- ios - 如何在我的 UIPageViewController.swift 中添加另一个页面?
- google-cloud-platform - Swagger 文档位置不存在
- python - 如何在熊猫系列中为 NaN 赋值?
- visual-studio - 从 Visual Studio 部署到 Azure Analysis Services 会重置数据源“路径”属性