root@ubuntu:/usr/local/hadoop# bin/hadoop jar hadoop-*-examples.jar wordcount /test1 /test211/11/22 20:42:33 INFO input.FileInputFormat: Total input paths to process : 1411/11/22 20:42:33 INFO mapred.JobClient: Running job: job_201111222034_000111/11/22 20:42:34 INFO mapred.JobClient: map 0% reduce 0%11/11/22 20:45:07 INFO mapred.JobClient: map 14% reduce 0%11/11/22 20:45:43 INFO mapred.JobClient: map 14% reduce 4%11/11/22 20:45:54 INFO mapred.JobClient: map 28% reduce 4%11/11/22 20:46:43 INFO mapred.JobClient: map 57% reduce 4%11/11/22 20:46:52 INFO mapred.JobClient: map 85% reduce 4%11/11/22 20:46:55 INFO mapred.JobClient: map 92% reduce 4%11/11/22 20:46:58 INFO mapred.JobClient: map 100% reduce 4%11/11/22 20:56:19 INFO mapred.JobClient: Task Id : attempt_201111222034_0001_m_000002_0, Status : FAILEDToo many fetch-failures11/11/22 20:56:19 WARN mapred.JobClient: Error reading task outputConnection refused11/11/22 20:56:19 WARN mapred.JobClient: Error reading task outputConnection refused
一、错误分析
Reduce task启动后第一个阶段是shuffle,即向map端fetch数据。每次fetch都可能因为connect超时,read超时,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_PER_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某个map的输出多次失败后,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.0.0.1 localhost your_hostname
::1 localdata1 your_hostname
若将这两条信息注销掉,(或者把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 、slave2) 的时候,会出现一行关于密钥的yes or no ?的提示信息,Enter确认后再次连接就正常了。如果我们没有手动做这一步,如果恰好在hadoop/conf/core-site.xml 及 mpred-site.xml中相应的IP 用主机名代替了,则很可能出现该异常。
问题的产生:
今天遇到了一个问题
我执行了 ./hadoop namenode -format 之后
启动hadoop: ./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.properties
2012-11-23 14:31:14,334 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.2012-11-23 14:31:14,335 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).2012-11-23 14:31:14,335 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started2012-11-23 14:31:14,406 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.2012-11-23 14:31:14,798 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: 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.recoverTransitionRead(DataStorage.java:147) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385) at org.apache.hadoop.hdfs.server.datanode.DataNode.
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682)
/data/hdfs/data
这个目录是我 hdfs-site.xml 配置文件里面 dfs.data.dir 的值:
解决的办法:
1.进入每个datanode的 dfs.data.dir 的 current目录,修改里面的文件VERSION
#Fri Nov 23 15:00:17 CST 2012namespaceID=246015542storageID=DS-2085496284-192.168.1.244-50010-1353654017403cTime=0storageType=DATA_NODElayoutVersion=-32
里面有个 namespaceID 将其修改成为报错信息中的
namenode namespaceID = 971169702
相同的 namespaceID .
然后重新启动 datanode全部都能正常启动了。
2.由于是测试环境,于是产生的第一个想法是 直接删除每个datanode 上面 dfs.data.dir目录下所有的文件
rm -rf *
删除之后
重新启动 也是可以正常的启动所有的datanode
进到dfs.data.dir目录下 所有的datanode又全部重新生成了。
所有的节点都要配置
我们使用ssh链接linux主机时,可能出现“Host key verification failed.“的提示,ssh连接不成功。可能的提示信息如下:
网上很多的解决方案是:vi ~/.ssh/known_hosts 删除与想要连接的主机相关的行;或者直接删除known_hosts这个文件。 当然这个方案也是可行的,但并非解决问题的根本办法,因为继续使用,今后还会出现这样的情况,还得再删除。下面简单讲一下这个问题的原理和比较长久的解决方案。用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。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)中配置:
(注:这里为了简便,将knownhostfile设为/dev/null,就不保存在known_hosts中了)
新建用户和组
addgroup hadoop
adduser --ingroup hadoop hadoop
注销root以hadoop用户登录
配置SSH
ssh-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.gz
tar -xzvf hadoop-1.1.2.tar.gz
在/home/hadoop/.bashrc 中追加:
export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
重新登录就生效
ssh localhost
which hadoop
配置HADOOP运行参数
vi conf/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11
vi conf/core-site.xml
vi conf/hdfs-site.xml
vi conf/mapred-site.xml
格式化名称节点并启动集群
hadoop namenode -format
启动集群并查看WEB管理界面
start-all.sh
访问 http://localhost:50030 可以查看 JobTracker 的运行状态
访问 http://localhost:50060 可以查看 TaskTracker 的运行状态
访问 http://localhost:50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及 log 等
停止集群
stop-all.sh停止集群
三台机器
namenode(NameNode、SecondaryNameNode、JobTracker、DataNode、TaskTracker)
data1(DataNode、TaskTracker)
data2(DataNode、TaskTracker)
vi /etc/hostname(分别给每一台主机指定主机名,主机名必须唯一,如三台机器的主机名分别为namenode,data1,data2)
vi /etc/hosts(分别给每一台主机指定主机名到IP地址的映射)
新建用户和组
三台机器上面都要新建用户和组
addgroup hadoop
adduser --ingroup hadoop hadoop
gpasswd -a hadoop sudo
更改临时目录权限
chmod 777 /tmp
注销root以hadoop用户登录
配置SSH
在namenode上面执行
ssh-keygen -t rsa(密码为空,路径默认)
该命令会在用户主目录下创建 .ssh 目录,并在其中创建两个文件:id_rsa 私钥文件,是基于 RSA 算法创建,该私钥文件要妥善保管,不要泄漏。id_rsa.pub 公钥文件,和 id_rsa 文件是一对儿,该文件作为公钥文件,可以公开
把公钥追加到其他主机的authorized_keys 文件中
ssh-copy-id -i .ssh/id_rsa.pub hadoop@namenode
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data1
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data2
可以在namenode上面通过ssh无密码登陆data1和data2
ssh namenode
ssh data1
ssh data2
同理在data1,data2,也执行相同的操作
准备HADOOP运行环境
wget https://archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gz
tar -xzvf hadoop-1.1.2.tar.gz
在/home/hadoop/.bashrc 中追加:
export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
source .bashrc
ssh localhost
which hadoop
配置HADOOP运行参数
vi conf/masters
把localhost替换为 :namenode
vi conf/slaves
删除localhost,加入两行:
namenode
data1
data2
vi conf/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11
vi conf/core-site.xml
vi conf/hdfs-site.xml
vi conf/mapred-site.xml
复制HADOOP文件到其他节点
scp -r /home/hadoop/hadoop-1.1.2 hadoop@data1:/home/hadoop/hadoop-1.1.2 scp -r /home/hadoop/hadoop-1.1.2 hadoop@data2:/home/hadoop/hadoop-1.1.2
格式化名称节点并启动集群
hadoop namenode -format
启动集群并查看WEB管理界面
start-all.sh
访问 http://localhost:50030 可以查看 JobTracker 的运行状态
访问 http://localhost:50060 可以查看 TaskTracker 的运行状态
访问 http://localhost:50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及 log 等
停止集群
stop-all.sh停止集群
cd /home/hadoop/software/hadoop/hadoop-1.2.1/bin
在当前目录新建一个文件夹叫input,在文件夹里新建三个文件f1.txt,f2.txt,f3.txt,并分别写入一些内容。
sudo mkdir input
sudo sh -c 'echo "hello hadoop" > input/f1.txt'
sudo sh -c 'echo "hello java" > input/f2.txt'
sudo sh -c 'echo "hello world" > input/f3.txt'
注意在操作之前,一定要保证这个时候hadoop已经正常运行,datanode、jodtracker、namenode等必要信息均显示正常。
使用如下的命令创建文件夹
hadoop dfs -mkdir /home/hadoop/input
/*注意相对路径,这里的/home/hadoop是我当前用户的目录,可根据自己具体情况进行改动*/
然后查看我们在hadoop中是否已经成功创建了该文件夹:
hadoop dfs -ls /home/hadoop
如果我们能看到类似drwr-xr-x ....../home/hadoop/input字样那表明我们这一步已经成功了。
hadoop dfs -put input/* /home/hadoop/input
/*记住此时用户所在的还是之前的bin文件夹,上面一行的/*表示文件夹所有文件,并非注释*/
然后查看文件是否在hadoop中,并查看文件内容是否和输入的一致:
hadoop dfs -ls /home/hadoop/input
hadoop dfs -cat /home/hadoop/input/f1.txt
注:我们可以通过10.1.151.168:50070/dfshealth.jsp来从浏览器中查看整个hdfs文件系统的目录,打开namenode的链接,点击其中的Browse the filesystem超级链接,就可以看到相应的目录结构了。
我们要运行的例子在hadoop的安装目录下,名称叫做hadoop-examples-1.2.1.jar。到了这一步,无疑是出错率最高的时候,运行命令如下:
./hadoop jar ../hadoop-examples-1.2.1.jar wordcount /home/hadoop/input /home/hadoop/output
/*请记住上述命令中三个比较重要的参数,请务必改成自己电脑中相应的examples所在路径、input、output所在路径*/
其中,output是输出文件夹,必须不存在,它由程序自动创建,如果预先存在output文件夹,则会报错。
在操作之前,请务必多次检查如下内容:
1. 自己的input目录是否已经存入输入内容;
2. output文件夹是否存在;
3. 运行的hadoop用jps查看一下是否所有应该运行的进程都存在;
4. 如果之前开过hadoop运行,这不是第一次开的话。可以试试先./stop-all.sh,然后把core-site.xml中的hadoop.tmp.dir的value所在路径,即/home/hadoop/tmp/hadoop_tmp删除,然后重新建立一遍,如果你是新建的hadoop用户,最好用chown指令再把文件的所属更改一下。如上一样的操作对hdfs-site.xml中的dfs.data.dir的value路径做一遍。最好对所有datanode和namenode也做一遍,保险起见。因为,我就是这些小细节上出了问题,由于之前运行导致这些本应该空的文件夹中存在文件,而频繁报错。
5. 如果之前运行过wordcount报错记住还要用命令hadoop dfs -rmr output/*output为你的输出文件夹路径*/把output文件夹删除。报错内容如下:
Exception inthread "main" org.apache.hadoop.mapred.FileAlreadyExistsException:Output directory output already exists atorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:134) atorg.apache.hadoop.mapred.JobClient$2.run(JobClient.java:830) atorg.apache.hadoop.mapred.JobClient$2.run(JobClient.java:791) atjava.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) atorg.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:791) atorg.apache.hadoop.mapreduce.Job.submit(Job.java:465) atorg.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:494) atorg.apache.hadoop.examples.WordCount.main(WordCount.java:67) atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) atjava.lang.reflect.Method.invoke(Method.java:601) at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
我们可以查看output文件夹的内容来检查程序是否成功创建文件夹,通过查看output文件里面的part-r-00000文件的内容来检查程序执行结果:
./hadoop dfs -cat /home/hadoop/output/part-r-00000
正常显示结果会像如下样式一样:
hadoop 1
hello 3
jave 1
world 1
我们可以看到hadoop出现一次,hello出现3次,java出现一次,world出现一次,这跟预期是一样的,说明执行成功。
如果我们要关闭hadoop集群,则只需要运行stop-all.sh:
cd /data/software/hadoop/hadoop-1.2.1/bin ./stop-all.sh
再次运行jps时,只有一个jps进程在运行,其它hadoop的进程都已经关闭了。
1. 启动时发现莫名其妙的datanode没有启动。
从logs日志中看到Incompatible namespaceIDs in /home/hadoop/tmp/hadoop_tmp,想起来这个文件夹是自己新建的,是不是伪分布式时在里面产生了垃圾?于是sudo rm -rf然后sudo mkdir重来了一次,想想不安全我再把其他的之前新建的文件夹全部重新按照这个方法操作了一次;最后-format然后./start-all.sh,搞定啦。Datanode、JobTracker、SecondaryNameNode、Jps、TaskTracker、NameNode全部启动。
2. 遇到sudo重定向权限不够的问题。
众所周知,使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式。比如要向 test.asc 文件中随便写入点内容,可以:
echo "信息" > test.asc echo "信息" >> test.asc /*以上两种写法都可以*/
下面,如果将 test.asc 权限设置为只有 root 用户才有权限进行写操作,则:
sudo chown root.root test.asc
然后,我们使用 sudo 并配合 echo 命令再次向修改权限之后的 test.asc 文件中写入信息:
sudo echo "又一行信息" >> test.asc -bash: test.asc: Permission denied
这时,可以看到 bash 拒绝这么做,说是权限不够。这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 test.asc 文件写入信息的权限。
解决办法如下:
sudo sh -c 'echo "又一行信息" >> test.asc' echo "第三条信息" | sudo tee -a test.asc /*以上两行任选一行即可实现*/
3. snappy native library not loaded
出现这种情况可能是你core-site.xml中文件路径写的不一致造成的,比如我的hadoop一致路径是/tmp/hadoop_tmp,但是在里面错写成了/temp,修改保存,重新格式化重启即可解决。
4. org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException
报错样式类似如下:
2014-02-18 23:36:22,717 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hadoop cause:java.io.IOException: File /usr/hadoop_dir/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 2014-02-18 23:36:22,718 INFO org.apache.hadoop.ipc.Server: IPC Server handler 4 on 49000, call addBlock(/usr/hadoop_dir/tmp/mapred/system/jobtracker.info, DFSClient_NONMAPREDUCE_1570390041_1, null) from 10.1.151.168:56700: error: java.io.IOException: File /usr/hadoop_dir/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
从网上搜了一下这个问题,解决方案可以试试如下几个:
∙ 将masters与slaves中的主机配置为IP地址。
∙ 网上也有说防火墙没有关,也请检查一下。
∙ 重新格式化namenode hadoop namenode -format,并检查version文件中的ID
∙ 检查core-stite.xml mapred-site.xml 文件地址换成IP
∙ 检查相关日志,查看错误信息
∙ 注意datanode目录权限一定是 755
∙ 也有可能是java的bug引起的
5. 其他N多错误
我在运行中也出现过其他很多方面的错误,最有效且最快找到出错的方法就是查看log文件了,哪个地方没有正常开启,就去对应进程的.log文件查看。比较烦人的是.log文件内容是按照日期递增顺序进行写入内容的,意思就是你每次要查看最新的运行信息必须要往下翻翻翻。
∙ 作用:
o HDFS的守护进程
o 记录文件是如何分割成数据块的, 以及这些数据块被存储到那些节点上
o 对内存和I/O进行集中管理
o 是个单点, 发生故障时集群将崩溃
∙ 作用:
o 监视HDFS状态的辅助后台进程
o 每个集群都有一个
o 与Namenode进行通讯,定期保存HDFS元数据快照
o 当Namenode发生故障时Secondary Namenode可以作为Namenode使用
∙ 作用:
o 每台从服务器都运行一个
o 负责把HDFS数据块读写到本地文件系统
∙ 作用:
o 用于处理作业(用户提交代码)的后台程序
o 决定哪些文件参与处理, 然后切割task 并分配节点
o 监视task ,重启失败的task (于不同的节点)
o 每个节点只有唯一的一个JobTracker位于master节点
∙ 作用:
o 位于slave节点上, 与datanode结合(代码与数据一起原则)
o 管理各自节点上的task(有jobtracker分配)
o 每个节点上只有一个tasktracker, 但一个tasktracker可以启动多个jvm,用于并行执行map或者reduce任务
o 与jobtracker交换
∙ master包括 Namenode, Secendory namenode, Jobtracker
∙ slave 包括Tasktractor, Datanode
∙ master不是唯一的
该文件中指定SecondaryNameNode所在的主机
详见同目录下的hadoop 三个配置文件详解.docx
三台机器,改变负载
namenode(NameNode、DataNode、TaskTracker)
data1(SecondaryNameNode、DataNode、TaskTracker)
data2(JobTracker 、DataNode、TaskTracker)
指定SecondaryNameNode为data1:
vi conf/masters指定data1
scp conf/masters data1:/home/hadoop/hadoop-1.1.2/conf/masters
scp conf/masters data2:/home/hadoop/hadoop-1.1.2/conf/masters
vi conf/hdfs-site.xml
scp conf/hdfs-site.xml data1:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml
scp conf/hdfs-site.xml data2:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml
指定JobTracker为data2:
vi conf/mapred-site.xml
scp conf/mapred-site.xml data1:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml
scp conf/mapred-site.xml data2:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml
vi conf/core-site.xml
scp conf/core-site.xml data1:/home/hadoop/hadoop-1.1.2/conf/core-site.xml
scp conf/core-site.xml data2:/home/hadoop/hadoop-1.1.2/conf/core-site.xml
配置data2:
data2上的脚本start-mapred.sh会启动namenode和data1上面的TaskTracker,所以需要对data2执行:
ssh-keygen -t rsa(密码为空,路径默认)
ssh-copy-id -i .ssh/id_rsa.pub hadoop@namenode
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data1
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data2
可以在data2上面通过ssh无密码登陆namenode和data1
ssh namenode
ssh data1
ssh data2
在/home/hadoop/.bashrc 中追加:
export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
namenode: 执行start-dfs.sh
data2: 执行start-mapred.sh
Hadoop默认情况下没有开启回收站, 这样删除的文件就不能找回, 开启回收站后,删除的文件在一定的时间内保存,超过了时间久删除.
vi conf/core-site.xml
10080是分钟数
ssh data1
停止secondarynamenode
hadoop-1.1.2/bin/hadoop-daemon.sh stop secondarynamenode
强制合并fsimage和eidts
hadoop-1.1.2/bin/hadoop secondarynamenode -checkpoint force
启动secondarynamenode
hadoop-1.1.2/bin/hadoop-daemon.sh start secondarynamenode
以data3为例
在data3上执行:
指定主机名
vi /etc/hostname
指定主机名到IP地址的映射
vi /etc/hosts
增加用户和组
addgroup hadoop
adduser --ingroup hadoop hadoop
更改临时目录权限
chmod 777 /tmp
在namenode上执行:
vi conf/slaves
增加data3
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data3
scp -r /home/hadoop/hadoop-1.1.2 hadoop@data3:/home/hadoop/hadoop-1.1.2
在host8上执行:
vi conf/slaves
增加data3
ssh-copy-id -i .ssh/id_rsa.pub hadoop@data3
在data3上面执行:
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
在/etc/hosts的配置文件中,localhost到ip地址的映射要放到ipv4的最后面
NameNode:
首先转到主机namenode(启动hdfs的主机)
vi conf/hdfs-site.xml
注意路径是绝对路径, 路径不能有多余的空格,否则系统无法定位文件
加入集群节点
vi /home/hadoop/hadoop-1.1.2/conf/include
添加
namenode
data1
data2
data3
JobTracker:
首先转到主机data2(启动mapreduce的主机)
vi conf/mapred-site.xml
加入集群节点
vi /home/hadoop/hadoop-1.1.2/conf/include
添加
namenode
data1
data2
data3
重启集群
删除namenode:
首先转到主机namenode(启动hdfs的主机)
vi conf/hdfs-site.xml
vi /home/hadoop/hadoop-1.1.2/conf/exclude
增加待删除的节点data3
在NameNode上面执行:
hadoop dfsadmin -refreshNodes
使用hadoop dfsadmin -report可以查看状态
vi hadoop-1.1.2/conf/slaves (去掉data3)
vi hadoop-1.1.2/conf/include (去掉data3)
rm hadoop-1.1.2/conf/exclude
hadoop dfsadmin -refreshNodes(使include的更改生效)
exclude主要是使一个datanode节点安全退役
首先转到主机data2(启动mapreduce的主机)
删除tasktracker:
vi conf/mapred-site.xml
vi /home/hadoop/hadoop-1.1.2/conf/exclude
增加待删除的节点data3
在JobTracker上面执行:
hadoop mradmin -refreshNodes
vi hadoop-1.1.2/conf/slaves (去掉data3)
vi hadoop-1.1.2/conf/include (去掉data3)
rm hadoop-1.1.2/conf/exclude
hadoop mradmin -refreshNodes(使include的更改生效)
hadoop jar hadoop-test-1.1.2.jar
hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 1024 -resFile test
hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -read -nrFiles 12 -fileSize 1024 -resFile test
hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -clear
本文来源:https://www.2haoxitong.net/k/doc/b9c3af1827284b73f3425055.html
文档为doc格式