gpt4 book ai didi

eclipse - 从 eclipse 启动 mapreduce 作业

转载 作者:可可西里 更新时间:2023-11-01 14:13:40 26 4
gpt4 key购买 nike

我用 Java 编写了一个 mapreduce 程序,我可以将其提交到以分布式模式运行的远程集群。目前,我使用以下步骤提交作业:

  1. 将 mapreuce 作业导出为 jar(例如 myMRjob.jar)
  2. 使用以下 shell 命令将作业提交到远程集群:hadoop jar myMRjob.jar

我想在尝试运行程序时直接从 Eclipse 提交作业。我该怎么做?

我目前使用的是 CDH3,我的 conf 的删节版本是:

conf.set("hbase.zookeeper.quorum", getZookeeperServers());
conf.set("fs.default.name","hdfs://namenode/");
conf.set("mapred.job.tracker", "jobtracker:jtPort");
Job job = new Job(conf, "COUNT ROWS");
job.setJarByClass(CountRows.class);

// Set up Mapper
TableMapReduceUtil.initTableMapperJob(inputTable, scan,
CountRows.MyMapper.class, ImmutableBytesWritable.class,
ImmutableBytesWritable.class, job);

// Set up Reducer
job.setReducerClass(CountRows.MyReducer.class);
job.setNumReduceTasks(16);

// Setup Overall Output
job.setOutputFormatClass(MultiTableOutputFormat.class);

job.submit();

当我直接从 Eclipse 运行它时,作业已启动,但 Hadoop 找不到映射器/缩减器。我收到以下错误:

12/06/27 23:23:29 INFO mapred.JobClient:  map 0% reduce 0%  
12/06/27 23:23:37 INFO mapred.JobClient: Task Id : attempt_201206152147_0645_m_000000_0, Status : FAILED
java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mypkg.mapreduce.CountRows$MyMapper
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:996)
at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:212)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:602)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
...

有谁知道如何克服这些错误?如果我能解决这个问题,我就可以将更多 MR 作业集成到我的脚本中,这太棒了!

最佳答案

如果您从定义作业类的 Eclipse 项目中提交 hadoop 作业,那么您很可能遇到了类路径问题。

job.setjarByClass(CountRows.class) 调用是在构建类路径中查找类文件,而不是在 CountRows.jar(可能尚未构建,甚至可能尚未构建)中查找类文件在类路径上)。

在调用 job.setjarByClass(..) 之后,您应该能够通过打印出 job.getJar() 的结果来断言这是真的,如果它不显示 jar 文件路径,然后找到构建类,而不是 jar 类

关于eclipse - 从 eclipse 启动 mapreduce 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com