Giraph Job始终以本地模式运行

时间:2016-09-02 08:29:23

标签: hadoop mapreduce illegalargumentexception giraph

我在Hadoop 2.6.0上运行了Giraph 1.1.0。 mapredsite.xml看起来像这样

<configuration>

<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
  <description>The runtime framework for executing MapReduce jobs. Can be one of
    local, classic or yarn.</description>
</property>

<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
<name>mapreduce.reduce.memory.mb</name>
<value>8192</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072m</value>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6144m</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>4</value>
</property>
</configuration>

giraph-site.xml看起来像这样

<configuration>
<property>
        <name>giraph.SplitMasterWorker</name>
        <value>true</value>
</property>
<property>
        <name>giraph.logLevel</name>
        <value>error</value>
</property>
</configuration>

我不想在本地模式下运行作业。我还将环境变量MAPRED_HOME设置为HADOOP_HOME。这是运行程序的命令。

hadoop jar myjar.jar hu.elte.inf.mbalassi.msc.giraph.betweenness.BetweennessComputation /user/$USER/inputbc/inputgraph.txt /user/$USER/outputBC 1.0 1

当我运行此代码来计算图中顶点的中介中心性时,我得到以下异常

Exception in thread "main" java.lang.IllegalArgumentException: checkLocalJobRunnerConfiguration: When using LocalJobRunner, you cannot run in split master / worker mode since there is only 1 task at a time!
        at org.apache.giraph.job.GiraphJob.checkLocalJobRunnerConfiguration(GiraphJob.java:168)
        at org.apache.giraph.job.GiraphJob.run(GiraphJob.java:236)
        at hu.elte.inf.mbalassi.msc.giraph.betweenness.BetweennessComputation.runMain(BetweennessComputation.java:214)
        at hu.elte.inf.mbalassi.msc.giraph.betweenness.BetweennessComputation.main(BetweennessComputation.java:218)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

如何确保作业不以本地模式运行?

3 个答案:

答案 0 :(得分:2)

我几天前就遇到了这个问题。幸运的是我通过这样做解决了这个问题。

修改配置文件mapred-site.xml,确保property&#39; mapreduce.framework.name&#39;的值。是&#39;纱线&#39;并添加属性&#39; mapreduce.jobtracker.address&#39;哪个值是&#39; yarn&#39;如果没有。

mapred-site.xml如下所示:

<configuration>
   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>
   <property>
     <name>mapreduce.jobtracker.address</name>
     <value>yarn</value>
   </property>
</configuration>

修改mapred-site.xml后重新启动hadoop。然后运行程序并设置&#39; -w&#39;之后的值。超过1和&#39; giraph.SplitMasterWorker&#39;的价值是真的&#39;。它可能会奏效。

至于问题的原因,我引用某人的话说: 这些属性是为单节点执行而设计的,必须是 在节点集群中执行时更改。在这种情况下, jobtracker必须指向将要执行的一台机器 NodeManager守护程序(Hadoop从属)。至于框架,它应该是 改为&#39; yarn&#39;。

答案 1 :(得分:0)

我们可以看到在LocalJobRunner中的配置检查失败的堆栈跟踪中,这有点误导,因为它使我们假设我们在本地模型中运行。您已经找到了负责的配置选项:{{ 1}}但在您的情况下,您将其设置为giraph.SplitMasterWorker。但是,在具有最后一个参数true的命令行上,您指定仅使用单个工作程序。因此框架决定您必须以本地模式运行。作为解决方案,您有两种选择:

  • 虽然您正在群集上运行,但请将1设置为giraph.SplitMasterWorker
  • 通过将最后一个参数更改为命令行调用来增加工作者数量。

    hadoop jar myjar.jar hu.elte.inf.mbalassi.msc.giraph.betweenness.BetweennessComputation /user/$USER/inputbc/inputgraph.txt / user / $ USER / outputBC 1.0 4

有关本地模式问题的详细信息,请参阅my other answer at SO (Apache Giraph master / worker mode)

答案 2 :(得分:-1)

如果您要从节点中拆分主节点,则可以使用:

  

-ca giraph.SplitMasterWorker = true

还要指定您可以使用的工人数量:

  

-w#

其中&#34;#&#34;是你想要使用的工人数量。