1、 map 92% reduce 4%58 INFO mapred.JobClient: map 100% reduce 4%56:19 INFO mapred.JobClient: Task Id : attempt_201111222034_0001_m_000002_0, Status : FAILED19 WARN mapred.JobClient: Error reading task outputConnection refused一、错误分析Reduce task启动后第一个阶段是shuffle,即向map端fetch数据。每次fetch都可能因为connect超时,read超时,
2、checksum错误等原因而失败。Reduce task为每个map设置了一个计数器,用以记录fetch该map输出时失败的次数。当失败次数达到一定阈值时,会通知JobTracker fetch该map输出操作失败次数太多了,并打印如下log:Failed to fetch map-output from attempt_201105261254_102769_m_001802_0 even after MAX_FETCH_RETRIES_PER_MAP retries. reporting to the JobTracker其中阈值计算方式为:max(MIN_FETCH_RETRIES_PE
3、R_MAP,getClosestPowerOf2(this.maxBackoff * 1000 / BACKOFF_INIT) + 1);默认情况下MIN_FETCH_RETRIES_PER_MAP=2 maxBackoff=300 BACKOFF_INIT=4000,因此默认阈值为6,可通过修改mapred.reduce.copy.backoff参数来调整。当达到阈值后,Reduce task通过umbilical协议告诉TaskTracker,TaskTracker在下一次heartbeat时,通知JobTracker。当JobTracker发现超过50%的Reduce汇报fetch某个m
4、ap的输出多次失败后,JobTracker会failed掉该map并重新调度,打印如下log:Too many fetch-failures for output of task: attempt_201105261254_102769_m_001802_0 . killing it二、出错原因及更正:很可能是节点间的联通不够全面.1) 检查 、/etc/hosts要求本机ip 对应服务器名要求要包含所有的服务器ip + 服务器名本人使用的是虚拟机OS为:ubuntu11.04 ,重启系统后出现该错误,最后发现ubuntu系统在每次启动时,会在/etc/hosts文件最前端添加如下信息:127
5、.0.0.1 localhost your_hostname:1 localdata1若将这两条信息注销掉,(或者把your_hostname删除掉)上述错误即可解决。2) 检查 .ssh/authorized_keys要求包含所有服务器(包括其自身)的public key 尽管我们在安装hadoop之前已经配置了各节点的SSH无密码通信,假如有3个IP分别为192.168.128.131 192.168.128.132 192.168.133 ,对应的主机名为master 、 slave1 、 slave2 。从每个节点第一次执行命令$ ssh 主机名(master 、slave1 、sla
6、ve2) 的时候,会出现一行关于密钥的yes or no ?的提示信息,Enter确认后再次连接就正常了。如果我们没有手动做这一步,如果恰好在hadoop/conf/core-site.xml 及 mpred-site.xml中相应的IP 用主机名代替了,则很可能出现该异常。3. ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceID问题的产生:今天遇到了一个问题 我执行了 ./hadoop namenode -format 之后启动hadoop:
7、./start-all.sh 的时候运行jps发现 datanode没有起来 但是 TaskTracker是正常启动的然后我去datanode的错误日志里面发现的下面的问题:2012-11-23 14:31:14,319 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties14,334 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source Metri
8、csSystem,sub=Stats registered.14,335 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s). DataNode metrics system started14,406 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.14,798 ERROR org.apache.hadoop.hdfs
9、.server.datanode.DataNode: Incompatible namespaceIDs in /data/hdfs/data: namenode namespaceID = 971169702; datanode namespaceID = 1507918015 at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitio
10、nRead(DataStorage.java:147) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385) at org.apache.hadoop.hdfs.server.datanode.DataNode.(DataNode.java:299) at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1582) at org.apache.hadoop.hdfs.server.
11、datanode.DataNode.instantiateDataNode(DataNode.java:1521) at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1539) at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1665) at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682
12、)/data/hdfs/data 这个目录是我hdfs-site.xml 配置文件里面 dfs.data.dir 的值: dfs.data.dirvalue/data/hdfs/data /property解决的办法:1.进入每个datanode的 dfs.data.dir 的 current目录,修改里面的文件VERSION#Fri Nov 23 15:00:17 CST 2012namespaceID=246015542storageID=DS-2085496284-192.168.1.244-50010-135*03cTime=0storageType=DATA_NODElayoutVe
13、rsion=-32里面有个 namespaceID 将其修改成为报错信息中的 namenode namespaceID = 971169702相同的 namespaceID .然后重新启动 datanode全部都能正常启动了。2.由于是测试环境,于是产生的第一个想法是 直接删除每个datanode 上面 dfs.data.dir目录下所有的文件rm -rf *删除之后 重新启动 也是可以正常的启动所有的datanode进到dfs.data.dir目录下 所有的datanode又全部重新生成了。4. ssh中“Host key verification failed.“的解决方案所有的节点都要配
14、置我们使用ssh链接linux主机时,可能出现“Host key verification failed.“的提示,ssh连接不成功。可能的提示信息如下: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has
15、 just been changed.The fingerprint for the RSA key sent by the remote host is23:20:83:de:02:95:f1:e3:34:be:57:3f:cf:2c:e7.Please contact your system administrator.Add correct host key in /home/xahria/.ssh/known_hosts to get rid of this message.Offending key in /home/xahria/.ssh/known_hosts:8RSA host
16、 key for localhost has changed and you have requested strict checking.Host key verification failed.网上很多的解决方案是:vi /.ssh/known_hosts 删除与想要连接的主机相关的行;或者直接删除known_hosts这个文件。 当然这个方案也是可行的,但并非解决问题的根本办法,因为继续使用,今后还会出现这样的情况,还得再删除。下面简单讲一下这个问题的原理和比较长久的解决方案。用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在/.ssh/know
17、n_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。默认情况下,StrictHostKeyChecking=ask。简单所下它的三种配置值:1.StrictHostKeyChecking=no#最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。2.Stri
18、ctHostKeyChecking=ask #默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。3.StrictHostKeyChecking=yes #最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。对于我来说,在内网的进行的一些测试,为了方便,选择最低的安全级别。在.ssh/config(或者/etc/ssh/ssh_config)中配置:StrictHostKeyChecking noUserKnownHostsFile /dev/null(注:这里为了简便,将knownhostfile设为/dev/null,就不保存在known_hos
19、ts中了)二. 配置hadoop1. 伪分布式模式新建用户和组addgroup hadoopadduser -ingroup hadoop hadoop注销root以hadoop用户登录配置SSHssh-keygen -t rsa(密码为空,路径默认)cp .ssh/id_rsa.pub .ssh/authorized_keys准备HADOOP运行环境wget https:/archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gztar -xzvf hadoop-1.1.2.tar.gz在/home/hadoop/
20、.bashrc 中追加:export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH重新登录就生效ssh localhostwhich hadoop配置HADOOP运行参数vi conf/hadoop-env.shexport JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11vi conf/core-site.xmlfs.default.namehdfs:/localhost:9000hadoop.tmp.dir/home/hadoop/tmpvi conf/hdfs-site.xmldfs.name.dir/home/hadoop/dfs
21、/filesystem/name/home/hadoop/dfs/filesystem/datadfs.replication1vi conf/mapred-site.xml mapred.job.trackerlocalhost:9001mapred.tasktracker.map.tasks.maximum4mapred.tasktracker.reduce.tasks.maximummapred.system.dir/home/hadoop/mapreduce/systemmapred.local.dir/home/hadoop/mapreduce/local格式化名称节点并启动集群ha
22、doop namenode -format启动集群并查看WEB管理界面start-all.sh访问 http:50030 可以查看 JobTracker 的运行状态50060 可以查看 TaskTracker 的运行状态50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及 log 等停止集群stop-all.sh停止集群2. 多机完全分布式模式三台机器namenode(NameNode、SecondaryNameNode、JobTracker、DataNode、TaskTracker) data1(DataNode、TaskTracker)dat
23、a2(DataNode、TaskTracker)vi /etc/hostname(分别给每一台主机指定主机名,主机名必须唯一,如三台机器的主机名分别为namenode,data1,data2)vi /etc/hosts(分别给每一台主机指定主机名到IP地址的映射)三台机器上面都要新建用户和组adduser -ingroup hadoop hadoop gpasswd -a hadoop sudo更改临时目录权限chmod 777 /tmp在namenode上面执行ssh-keygen -t rsa(密码为空,路径默认)该命令会在用户主目录下创建 .ssh 目录,并在其中创建两个文件:id_rs
24、a 私钥文件,是基于 RSA 算法创建,该私钥文件要妥善保管,不要泄漏。id_rsa.pub 公钥文件,和 id_rsa 文件是一对儿,该文件作为公钥文件,可以公开把公钥追加到其他主机的authorized_keys 文件中ssh-copy-id -i .ssh/id_rsa.pub hadoopnamenode ssh-copy-id -i .ssh/id_rsa.pub hadoopdata1 ssh-copy-id -i .ssh/id_rsa.pub hadoopdata2可以在namenode上面通过ssh无密码登陆data1和data2ssh namenodessh data1ssh data2同理在data1,data2,也执行相同的操作source .bashrcvi conf/masters把localhost替换为 :namenodevi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1