hadoop笔记.docx

上传人:b****6 文档编号:7973304 上传时间:2023-01-27 格式:DOCX 页数:23 大小:29KB
下载 相关 举报
hadoop笔记.docx_第1页
第1页 / 共23页
hadoop笔记.docx_第2页
第2页 / 共23页
hadoop笔记.docx_第3页
第3页 / 共23页
hadoop笔记.docx_第4页
第4页 / 共23页
hadoop笔记.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

hadoop笔记.docx

《hadoop笔记.docx》由会员分享,可在线阅读,更多相关《hadoop笔记.docx(23页珍藏版)》请在冰豆网上搜索。

hadoop笔记.docx

hadoop笔记

一.操作过程中的总结

1.jps查看启动的java进程

2.Reduce作业运行时错误:

Toomanyfetch-failures

root@ubuntu:

/usr/local/hadoop#bin/hadoopjarhadoop-*-examples.jarwordcount/test1/test2

11/11/2220:

42:

33INFOinput.FileInputFormat:

Totalinputpathstoprocess:

14

11/11/2220:

42:

33INFOmapred.JobClient:

Runningjob:

job_201111222034_0001

11/11/2220:

42:

34INFOmapred.JobClient:

 map0%reduce0%

11/11/2220:

45:

07INFOmapred.JobClient:

 map14%reduce0%

11/11/2220:

45:

43INFOmapred.JobClient:

 map14%reduce4%

11/11/2220:

45:

54INFOmapred.JobClient:

 map28%reduce4%

11/11/2220:

46:

43INFOmapred.JobClient:

 map57%reduce4%

11/11/2220:

46:

52INFOmapred.JobClient:

 map85%reduce4%

11/11/2220:

46:

55INFOmapred.JobClient:

 map92%reduce4%

11/11/2220:

46:

58INFOmapred.JobClient:

 map100%reduce4%

11/11/2220:

56:

19INFOmapred.JobClient:

TaskId:

attempt_201111222034_0001_m_000002_0,Status:

FAILED

Toomanyfetch-failures

11/11/2220:

56:

19WARNmapred.JobClient:

ErrorreadingtaskoutputConnectionrefused

11/11/2220:

56:

19WARNmapred.JobClient:

ErrorreadingtaskoutputConnectionrefused

一、错误分析

Reducetask启动后第一个阶段是shuffle,即向map端fetch数据。

每次fetch都可能因为connect超时,read超时,checksum错误等原因而失败。

Reducetask为每个map设置了一个计数器,用以记录fetch该map输出时失败的次数。

当失败次数达到一定阈值时,会通知JobTrackerfetch该map输出操作失败次数太多了,并打印如下log:

Failedtofetchmap-outputfromattempt_201105261254_102769_m_001802_0evenafterMAX_FETCH_RETRIES_PER_MAPretries...reportingtotheJobTracker

其中阈值计算方式为:

max(MIN_FETCH_RETRIES_PER_MAP,

getClosestPowerOf2((this.maxBackoff*1000/BACKOFF_INIT)+1));

默认情况下MIN_FETCH_RETRIES_PER_MAP=2maxBackoff=300BACKOFF_INIT=4000,因此默认阈值为6,可通过修改mapred.reduce.copy.backoff参数来调整。

当达到阈值后,Reducetask通过umbilical协议告诉TaskTracker,TaskTracker在下一次heartbeat时,通知JobTracker。

当JobTracker发现超过50%的Reduce汇报fetch某个map的输出多次失败后,JobTracker会failed掉该map并重新调度,打印如下log:

"Toomanyfetch-failuresforoutputoftask:

attempt_201105261254_102769_m_001802_0...killingit"

二、出错原因及更正:

很可能是节点间的联通不够全面.  

1)检查、/etc/hosts

   要求本机ip对应 服务 器名

   要求要包含所有的服务器ip+服务器名

本人使用的是虚拟机OS为:

ubuntu11.04,重启系统后出现该错误,最后发现ubuntu系统在每次启动时,会在/etc/hosts文件最前端添加如下信息:

127.0.0.1localhost    your_hostname

:

:

1           localdata1  your_hostname

若将这两条信息注销掉,(或者把your_hostname删除掉)上述错误即可解决。

2)检查.ssh/authorized_keys

   要求包含所有服务器(包括其自身)的publickey

 尽管我们在安装hadoop之前已经配置了各节点的SSH无密码通信,假如有3个IP分别为192.168.128.131 192.168.128.132 192.168.133,对应的主机名为master、slave1、slave2。

从每个节点第一次执行命令$ssh 主机名(master、slave1、slave2)的时候,会出现一行关于密钥的yesorno?

的提示信息,Enter确认后再次连接就正常了。

如果我们没有手动做这一步,如果恰好在hadoop/conf/core-site.xml及mpred-site.xml中相应的IP用主机名代替了,则很可能出现该异常。

3.ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode:

java.io.IOException:

IncompatiblenamespaceID

问题的产生:

今天遇到了一个问题

我执行了./hadoopnamenode-format之后

启动hadoop:

 ./start-all.sh  的时候

运行jps发现datanode没有起来但是TaskTracker是正常启动的

然后我去datanode的错误日志里面发现的下面的问题:

2012-11-2314:

31:

14,319INFOorg.apache.hadoop.metrics2.impl.MetricsConfig:

loadedpropertiesfromhadoop-metrics2.properties

2012-11-2314:

31:

14,334INFOorg.apache.hadoop.metrics2.impl.MetricsSourceAdapter:

MBeanforsourceMetricsSystem,sub=Statsregistered.

2012-11-2314:

31:

14,335INFOorg.apache.hadoop.metrics2.impl.MetricsSystemImpl:

Scheduledsnapshotperiodat10second(s).

2012-11-2314:

31:

14,335INFOorg.apache.hadoop.metrics2.impl.MetricsSystemImpl:

DataNodemetricssystemstarted

2012-11-2314:

31:

14,406INFOorg.apache.hadoop.metrics2.impl.MetricsSourceAdapter:

MBeanforsourceugiregistered.

2012-11-2314:

31:

14,798ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode:

java.io.IOException:

IncompatiblenamespaceIDsin/data/hdfs/data:

namenodenamespaceID=971169702;datanodenamespaceID=1507918015

       atorg.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:

232)

       atorg.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:

147)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:

385)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.(DataNode.java:

299)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:

1582)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:

1521)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:

1539)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:

1665)

       atorg.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:

1682)

/data/hdfs/data

这个目录是我  hdfs-site.xml配置文件里面dfs.data.dir的值:

  

               dfs.data.dir 

               /data/hdfs/data

   

解决的办法:

1.进入每个datanode的dfs.data.dir的current目录,修改里面的文件VERSION

#FriNov2315:

00:

17CST2012

namespaceID=246015542

storageID=DS-2085496284-192.168.1.244-50010-135********03

cTime=0

storageType=DATA_NODE

layoutVersion=-32

里面有个namespaceID将其修改成为报错信息中的

namenodenamespaceID=971169702

相同的namespaceID .

然后重新启动datanode全部都能正常启动了。

2.由于是测试环境,于是产生的第一个想法是直接删除每个datanode上面dfs.data.dir目录下所有的文件

rm-rf*

删除之后

重新启动也是可以正常的启动所有的datanode

进到dfs.data.dir目录下所有的datanode又全部重新生成了。

4.ssh中“Hostkeyverificationfailed.“的解决方案

所有的节点都要配置

我们使用ssh链接linux主机时,可能出现“Hostkeyverificationfailed.“的提示,ssh连接不成功。

可能的提示信息如下:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@WARNING:

REMOTEHOSTIDENTIFICATIONHASCHANGED!

@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ITISPOSSIBLETHATSOMEONEISDOINGSOMETHINGNASTY!

Someonecouldbeeavesdroppingonyourightnow(man-in-the-middleattack)!

ItisalsopossiblethattheRSAhostkeyhasjustbeenchanged.

ThefingerprintfortheRSAkeysentbytheremotehostis

23:

00:

20:

83:

de:

02:

95:

f1:

e3:

34:

be:

57:

3f:

cf:

2c:

e7.

Pleasecontactyoursystemadministrator.

Addcorrecthostkeyin/home/xahria/.ssh/known_hoststogetridofthismessage.

Offendingkeyin/home/xahria/.ssh/known_hosts:

8

RSAhostkeyforlocalhosthaschangedandyouhaverequestedstrictchecking.

Hostkeyverificationfailed.

网上很多的解决方案是:

vi~/.ssh/known_hosts删除与想要连接的主机相关的行;或者直接删除known_hosts这个文件。

当然这个方案也是可行的,但并非解决问题的根本办法,因为继续使用,今后还会出现这样的情况,还得再删除。

下面简单讲一下这个问题的原理和比较长久的解决方案。

用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(publickey)都记录在~/.ssh/known_hosts。

当下次访问相同计算机时,OpenSSH会核对公钥。

如果公钥不同,OpenSSH会发出警告,避免你受到DNSHijack之类的攻击。

SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。

默认情况下,StrictHostKeyChecking=ask。

简单所下它的三种配置值:

1.StrictHostKeyChecking=no  

#最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。

如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。

2.StrictHostKeyChecking=ask #默认的级别,就是出现刚才的提示了。

如果连接和key不匹配,给出提示,并拒绝登录。

3.StrictHostKeyChecking=yes #最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。

对于我来说,在内网的进行的一些测试,为了方便,选择最低的安全级别。

在.ssh/config(或者/etc/ssh/ssh_config)中配置:

StrictHostKeyCheckingno

UserKnownHostsFile/dev/null

(注:

这里为了简便,将knownhostfile设为/dev/null,就不保存在known_hosts中了)

二.配置hadoop

1.伪分布式模式

 

新建用户和组

addgrouphadoop

adduser--ingrouphadoophadoop

注销root以hadoop用户登录

配置SSH

ssh-keygen-trsa(密码为空,路径默认)

cp.ssh/id_rsa.pub.ssh/authorized_keys

准备HADOOP运行环境

wgethttps:

//archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gz

tar-xzvfhadoop-1.1.2.tar.gz

在/home/hadoop/.bashrc中追加:

exportPATH=/home/hadoop/hadoop-1.1.2/bin:

$PATH

重新登录就生效

sshlocalhost

whichhadoop

配置HADOOP运行参数

viconf/hadoop-env.sh

exportJAVA_HOME=/usr/lib/jvm/jdk1.8.0_11

 

viconf/core-site.xml

fs.default.name

hdfs:

//localhost:

9000

hadoop.tmp.dir

/home/hadoop/tmp

viconf/hdfs-site.xml

dfs.name.dir

/home/hadoop/dfs/filesystem/name

dfs.data.dir

/home/hadoop/dfs/filesystem/data

dfs.replication

1

viconf/mapred-site.xml

mapred.job.tracker

localhost:

9001

mapred.tasktracker.map.tasks.maximum

4

mapred.tasktracker.reduce.tasks.maximum

4

mapred.system.dir

/home/hadoop/mapreduce/system

mapred.local.dir

/home/hadoop/mapreduce/local

格式化名称节点并启动集群

hadoopnamenode-format

启动集群并查看WEB管理界面

start-all.sh

访问http:

//localhost:

50030可以查看JobTracker的运行状态

访问http:

//localhost:

50060可以查看TaskTracker的运行状态

访问http:

//localhost:

50070可以查看NameNode以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及log等

停止集群

stop-all.sh停止集群

2.多机完全分布式模式

三台机器

namenode(NameNode、SecondaryNameNode、JobTracker、DataNode、TaskTracker)

data1(DataNode、TaskTracker)

data2(DataNode、TaskTracker)

vi/etc/hostname(分别给每一台主机指定主机名,主机名必须唯一,如三台机器的主机名分别为namenode,data1,data2)

vi/etc/hosts(分别给每一台主机指定主机名到IP地址的映射)

新建用户和组

三台机器上面都要新建用户和组

addgrouphadoop

adduser--ingrouphadoophadoop

gpasswd-ahadoopsudo

更改临时目录权限

chmod777/tmp

注销root以hadoop用户登录

配置SSH

在namenode上面执行

ssh-keygen-trsa(密码为空,路径默认)

该命令会在用户主目录下创建.ssh目录,并在其中创建两个文件:

id_rsa私钥文件,是基于RSA算法创建,该私钥文件要妥善保管,不要泄漏。

id_rsa.pub公钥文件,和id_rsa文件是一对儿,该文件作为公钥文件,可以公开

把公钥追加到其他主机的authorized_keys文件中

ssh-copy-id-i.ssh/id_rsa.pubhadoop@namenode

ssh-copy-id-i.ssh/id_rsa.pubhadoop@data1

ssh-copy-id-i.ssh/id_rsa.pubhadoop@data2

可以在namenode上面通过ssh无密码登陆data1和data2

sshnamenode

sshdata1

sshdata2

同理在data1,data2,也执行相同的操作

准备HADOOP运行环境

wgethttps:

//archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gz

tar-xzvfhadoop-1.1.2.tar.gz

在/home/hadoop/.bashrc中追加:

exportPATH=/home/hadoop/hadoop-1.1.2/bin:

$PATH

source.bashrc

sshlocalhost

whichhadoop

配置HADOOP运行参数

viconf/masters

把localhost替换为:

namenode

vi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1