我在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>
<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)
如何确保作业不在本地模式下运行?
几天前我遇到了这个问题。幸运的是,我通过这样做解决了这个问题。
修改配置文件mapred-site.xml,确保属性"mapreduce.framework.name"的值为"yarn",并添加属性"mapreduce.jobtracker"。地址',如果没有'yarn',
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。然后运行程序并将'-w'后面的值设置为大于1和'giraph '的值。SplitMasterWorker'为'true'。它可能会工作。
至于问题的原因,我只是引用某人的话:这些属性是为单节点执行而设计的,而且必须如此在节点集群中执行操作时更改。在这种情况下,Jobtracker必须指向一台将要执行NodeManager守护进程(Hadoop slave)。至于框架,它应该是
我们可以看到,在LocalJobRunner
中的配置检查失败的堆栈跟踪中,这有点误导,因为它使我们假设我们在本地模型中运行。您已经找到了负责的配置选项:giraph.SplitMasterWorker
,但在您的情况下,您将其设置为true
。但是,在命令行中使用最后一个参数1
指定仅使用单个工作者。因此框架决定你必须在本地模式下运行。作为解决方案,您有两个选择:
- 设置
giraph.SplitMasterWorker
为false
,尽管您是在集群上运行。 -
通过更改命令行调用的最后一个参数来增加工作线程的数量。
hadoop jar myjar.jar hu.elte.inf.mbalassi.msc.giraph.betweenness.BetweennessComputation/user/$ user/inputbc/inputgraph.txt/user/$ user/outputBC 1.0 4
请参考我在SO (Apache Giraph主/工作模式)的其他答案,了解有关本地模式问题的详细信息。
如果你想从节点中分离主节点,你可以使用:
ca giraph。SplitMasterWorker = true
还可以指定工作人员的数量,您可以使用:
- w #