【问题标题】:hadoop only launch local job by default why?hadoop默认只启动本地作业,为什么?
【发布时间】:2012-04-02 05:11:43
【问题描述】:

我已经编写了自己的 hadoop 程序,并且可以在自己的笔记本电脑上使用伪分发模式运行,但是,当我将程序放在可以运行 hadoop 示例 jar 的集群中时,它默认会启动本地作业,尽管我指明hdfs文件路径,下面是输出,给点建议?

./hadoop -jar MyRandomForest_oob_distance.jar  hdfs://montana-01:8020/user/randomforest/input/genotype1.txt hdfs://montana-01:8020/user/randomforest/input/phenotype1.txt hdfs://montana-01:8020/user/randomforest/output1_distance/ hdfs://montana-01:8020/user/randomforest/input/genotype101.txt hdfs://montana-01:8020/user/randomforest/input/phenotype101.txt 33 500 1
12/03/16 16:21:25 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
12/03/16 16:21:25 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
12/03/16 16:21:25 INFO mapred.JobClient: Running job: job_local_0001
12/03/16 16:21:25 INFO mapred.MapTask: io.sort.mb = 100
12/03/16 16:21:25 INFO mapred.MapTask: data buffer = 79691776/99614720
12/03/16 16:21:25 INFO mapred.MapTask: record buffer = 262144/327680
12/03/16 16:21:25 WARN mapred.LocalJobRunner: job_local_0001
java.io.FileNotFoundException: File /user/randomforest/input/genotype1.txt does not exist.
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:361)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356)
    at Data.Data.loadData(Data.java:103)
    at MapReduce.DearMapper.loadData(DearMapper.java:261)
    at MapReduce.DearMapper.setup(DearMapper.java:332)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
12/03/16 16:21:26 INFO mapred.JobClient:  map 0% reduce 0%
12/03/16 16:21:26 INFO mapred.JobClient: Job complete: job_local_0001
12/03/16 16:21:26 INFO mapred.JobClient: Counters: 0
Total Running time is: 1 secs

【问题讨论】:

    标签: local jobs


    【解决方案1】:

    已选择LocalJobRunner 作为您的配置,很可能将mapred.job.tracker 属性设置为local 或根本没有设置(在这种情况下,默认值为本地)。要检查,请转到“无论您提取/安装 hadoop 的位置”/etc/hadoop/ 并查看文件 mapred-site.xml 是否存在(对我来说它不存在,一个名为 mapped-site.xml.template 的文件在那里)。在该文件中(或者如果它不存在则创建它)确保它具有以下属性:

    <configuration>
    <property>  
     <name>mapreduce.framework.name</name>  
     <value>yarn</value>  
     </property>
    </configuration>
    
    • 查看org.apache.hadoop.mapred.JobClient.init(JobConf)的来源

    在您提交此文件的机器上的 hadoop 配置中,此配置属性的值是多少?还要确认您正在运行的 hadoop 可执行文件引用了此配置(并且您没有配置不同的 2 次以上安装) - 输入 which hadoop 并跟踪您遇到的任何符号链接。

    或者,如果您使用 -jt 选项知道 JobTracker 主机和端口号,则可以在提交作业时覆盖它:

    hadoop jar MyRandomForest_oob_distance.jar -jt hostname:port hdfs://montana-01:8020/user/randomforest/input/genotype1.txt hdfs://montana-01:8020/user/randomforest/input/phenotype1.txt hdfs://montana-01:8020/user/randomforest/output1_distance/ hdfs://montana-01:8020/user/randomforest/input/genotype101.txt hdfs://montana-01:8020/user/randomforest/input/phenotype101.txt 33 500 1
    

    【讨论】:

    • 我终于找到原因是因为我在运行程序时使用-jar而不是jar ..:(
    • @user974270 但是为什么它会在使用 -jar 时启动本地作业。你知道原因吗?
    • 我面临同样的问题,但在伪分布式模式下..stackoverflow.com/questions/32787996/…。请帮忙。
    • mapred.job.trackermapreduce.framework.name这两个设置之间的交互是什么?一个会覆盖另一个吗?一个申请mr1,另一个申请mr2吗?在 yarn 环境下提交 mr1 作业会发生什么?
    【解决方案2】:

    如果您使用 Hadoop 2 并且您的作业在本地而不是在集群上运行,请确保您已设置 mapred-site.xml 以包含值为 yarnmapreduce.framework.name 属性。你还需要在yarn-site.xml中设置一个辅助服务

    查看Cloudera Hadoop 2 operator migration blog 了解更多信息。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,每个 mapreduce v2 (mrv2) 或 yarn 任务只能使用 mapred.LocalJobRunner 运行

      INFO mapred.LocalJobRunner: Starting task: attempt_local284299729_0001_m_000000_0
      

      可以访问 Resourcemanager 和 Nodemanagers,并且将 mapreduce.framework.name 设置为 yarn。

      在执行作业之前设置 HADOOP_MAPRED_HOME 为我解决了这个问题。

      export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
      

      干杯 丹

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 2017-04-18
        相关资源
        最近更新 更多