在第一次接触大数据处理技术时,跟着老师的步骤写了一个MapReduce程序的统计单词案例,由于能力有限,一开始在hadoop集群上运行时就遇到了各种问题,所幸后面再老师和同学帮助下都一一解决了
MapReduce编程
MapReduce编写程序的步骤:
1,首先要自定义一个Map逻辑,即自定义一个MyMap类,这个自定义MyMap类去继承hadoop的Map类,然后重写Map类的map方法。
2,自定义一个MyReduce类,该类去继承hadoop的Reduce类,然后重写Reduce类的reduce方法。
3,定义一个myJob主类,这个主类要继承hadoop的Configuration类,实现Tool 接口,并重写Tool接口中的run方法。
在运行时遇到的问题:
一、运行时找不到主类
Exception in thread "main" java.lang.ClassNotFoundException: com.zdz.mayreduce.myJob
解决方法:
1、检查你的输入主类有没有写错。
如果没有输错执行第二步
2、在myJob主类中加入 job.setJarByClass(主类名xxx.class)
二、运行时虚拟机的内存不足,终端显示一直在杀进程。
报错信息:
Container killed on request. Exit code is 143
yarn.nodemanager.resource.
解决方法:更改hadoop的相关配置文件。
首先在yarn-site.xml中添加下面内容:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>22528</value>
<discription>每个节点可用内存,单位MB</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1500</value>
<discription>单个任务可申请最少内存,默认1024MB</discription>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
<discription>单个任务可申请最大内存,默认8192MB</discription>
</property>
再在mapred-site.xml中添加下面内容:
<property>
<name>mapreduce.map.memory.mb</name>
<value>1500</value>
<description>每个Map任务的物理内存限制</description>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3000</value>
<description>每个Reduce任务的物理内存限制</description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1200m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2600m</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
覆盖集群中的这两个文件,重启yarn再启动mapreduce任务,成功运行。
三、调用MapReduce程序INFO mapreduce.Job: Task Id : attempt_1607842602362_0032_m_000000_2, Status : FAIL
我在调用MapReduce程序执行程序时报了如下错误:
这里显示我的reduce程序读取数据类型设置不对,Text是大数据类型不是javax下的类型。
解决方法:在MyReduce程序中对Text重新导包,导入org.apache.hadoop.io.Text这个包,重新启动,就能重新运行了。
我写的WordsCount案例的源码:https://gitee.com/zhu-dezhong/briup_mapreduce欢迎大佬斧正。