IT技术互动交流平台

Hadoop2.2.0集群在RHEL6.2下的安装实战

来源:IT165收集  发布日期:2014-04-14 20:52:01

题记

本文介绍了一个Hadoop2.2.0集群的搭建过程,在2台4G内存的酷睿双核PC机上,使用VMWare WorkStation虚拟了4个RHEL6.2(1G内存、单核CPU、10G硬盘),总计用10个小时的时间,完成虚拟机制作和Hadoop建立过程,总体比较顺利。

本次集群搭建过程中,主要遇到两个问题:

(1)第一个是:DataNode启动了(使用jps可以看到进程),但是在NameNode中看不到(192.168.1.10:50070),花费大约3个小时时间查问题,根据logs目录的日志“org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:9000”,到百度搜索,有人遇到说是防火墙没关的问题,但是我的防火墙都关了。最后多种方式尝试,原来是/etc/hosts中,对于master除了对应到192.168.1.10之外,我还对应到了127.0.0.1,去掉之后,重新启动,就都好了。

(2)第二个是:常见问题,多次format namecode造成的DataNode不启动,删除/home/hadoop/dfs/data/current/VERSION就好了。

(3)多看日志,总能解决大笑

Hadoop是什么

Hadoop是Lucene创始人Doug Cutting,根据Google的相关内容山寨出来的分布式文件系统和对海量数据进行分析计算的基础框架系统,其中包含MapReduce程序,hdfs系统等。

名词解释

(1)Hadoop:Apache开源的分布式框架。

(2)HDSF:Hadoop的分布式文件系统。

(3)NameNode:Hadoop HDFS元数据主节点服务器,负责保存DataNode 文件存储元数据信息,这个服务器是单点的。

(4)JobTracker:Hadoop的Map/Reduce调度器,负责与TaskTracker通信分配计算任务并跟踪任务进度,这个服务器也是单点的。

(5)DataNode:Hadoop数据节点,负责存储数据。

(6)TaskTracker:Hadoop调度程序,负责Map,Reduce任务的启动和执行。

Hadoop1的集群部署结构图


Hadoop1的组件依赖关系图


Hadoop2的Yarn架构图


安装RHEL环境

使用VMWare WorkStation安装虚拟机:

http://blog.csdn.net/puma_dong/article/details/17889593#t0

http://blog.csdn.net/puma_dong/article/details/17889593#t1

安装Java环境:

http://blog.csdn.net/puma_dong/article/details/17889593#t10

安装完毕之后,4台虚拟机IP及机器名称如下:

192.168.1.10 master
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3

可以通过vim /etc/hosts查看。注意:在/etc/hosts中,不要把机器名字,同时对应到127.0.0.1这个地址,会导致数据节点连接不上命名节点,报错如下:

org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:9000

安装完毕之后,Java位置如下:/usr/jdk1.6.0_45 ,可以通过echo $JAVA_HOME查看。

配置Hadoop环境

创建Hadoop账号

(1)创建Hadoop用户组:groupadd hadoop

(2)创建Hadoop用户:useradd hadoop -g hadoop

(3)设置Hadoop用户密码:passwd 密码hadoop

(4)给hadoop账户增加sudo权限: vim /etc/sudoers ,增加内容:hduser ALL=(ALL) ALL

注意:以上对于每一台机器都要执行

创建master到slave的无密码登录

(1)切换到Hadoop 用户下:su hadoop cd /home/hadoop/

(2)生成公钥和私钥:ssh-keygen -q -t rsa -N "" -f /home/hadoop/.ssh/id_rsa

(3)查看密钥内容:cd /home/hadoop/.ssh cat id_rsa.pub

(4)复制id_rsa.pub公钥到 authorized_keys 文件:cat id_rsa.pub > authorized_keys

(5)修改master公钥权限:chmod 644 /home/hadoop/.ssh/authorized_keys

(6)把 master 机器上的 authorized_keys 文件 copy 到 node1 节点上:

scp /home/hadoop/.ssh/authorized_keys node1:/home/hadoop/.ssh/

如果node1/node2/node3机器上没有.ssh目录,则创建,并chmod 700 /home/hadoop/.ssh

安装Hadoop

安装目录

Hadoop安装目录:/home/hadoop/hadoop-2.2.0

文件目录:/home/hadoop/dfs/name ,/home/hadoop/dfs/data ,/home/hadoop/tmp

安装步骤

注意:以下步骤使用hadoop账号操作。

(1)转到 home/hadoop目录:cd /home/hadoop

(2)下载hadoop:wget http://mirror.esocc.com/apache/hadoop/common/stable2/hadoop-2.2.0.tar.gz

(3)解压hadoop并放到计划安装位置:tar zxvf hadoop-2.2.0.tar.gz

(4)创建文件目录:mkdir -p /home/hadoop/dfs/name /home/hadoop/dfs/data /home/hadoop/tmp

(5)修改7个配置文件,文件位置:/home/hadoop/hadoop-2.2.0/etc/hadoop/,文件名称:hadoop-env.sh、yarn-evn.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

配置文件hadoop-env.sh

如果系统环境变量有设置$JAVA_HOME,则这个文件不用修改,否则要修改${JAVA_HOME}通ky"http://www.it165.net/qq/" target="_blank" class="keylink">qqjui91c3IvamRrMS42LjBfNDU8L3A+Cgo8aDQ+xeTWw87EvP55YXJuLWVudi5zaDwvaDQ+Cgo8cD7I57n7z7XNs7u3vrOx5MG/09DJ6NbDJEpBVkFfSE9NRaOs1PLV4rj2zsS8/rK708PQ3rjEo6y38dTy0qrQ3rjEJHtKQVZBX0hPTUV9zqqjui91c3IvamRrMS42LjBfNDU8YnI+CjwvcD4KCjxoND7F5NbDzsS8/nNsYXZlczwvaDQ+Cgo8cD52aW0gL2hvbWUvaGFkb29wL2hhZG9vcC0yLjIuMC9ldGMvaGFkb29wL3NsYXZlc6Os0N64xMTayN3Oqsv509C1xERhdGFOb2RltcS7+sb3w/vX1qOsw7+49rv6xvfSu9DQo6zV4saqzsTVwrXExeTWw8jnz8KjujwvcD4KPHA+bm9kZTE8L3A+CjxwPm5vZGUyPC9wPgo8cD5ub2RlMzwvcD4KCjxoND7F5NbDzsS8/mNvcmUtc2l0ZS54bWw8L2g0PgoKPHA+dmltIC9ob21lL2hhZG9vcC9oYWRvb3AtMi4yLjAvZXRjL2hhZG9vcC9jb3JlLXNpdGUueG1so6zQ3rjEY29uZmlndXJhdGlvbsTayN3I58/Co7o8YnI+CjwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;"><configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>

配置文件hdfs-site.xml

vim /home/hadoop/hadoop-2.2.0/etc/hadoop/hdfs-site.xml,修改configuration内容如下:

<configuration>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:9001</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/dfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
</configuration>

配置文件mapred-site.xml

mv /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml.template /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml

vim /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml,修改configuration内容如下:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
  </property>
</configuration>

配置节点yarn-site.xml

vim /home/hadoop/hadoop-2.2.0/etc/hadoop/yarn-site.xml,修改configuration内容如下:

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>master:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>master:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>master:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>master:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>master:8088</value>
  </property>
</configuration>

复制Hadoop到其他节点

(1)scp -r /home/hadoop/hadoop-2.2.0 hadoop@node1:~/

(2)scp -r /home/hadoop/hadoop-2.2.0 hadoop@node2:~/

(3)scp -r /home/hadoop/hadoop-2.2.0 hadoop@node3:~/

启动Hadoop

(1)切换到hadoop用户:su hadoop

(2)进入安装目录: cd ~/hadoop-2.2.0/

(3)格式化namenode:./bin/hdfs namenode –format

(4)启动hdfs: ./sbin/start-dfs.sh

(5)jps查看,此时master有进程:NameNoce SecondaryNameNode,node1/node2/node3上有进程:DataNode

(6)启动yarn: ./sbin/start-yarn.sh

(7)jps查看,此时master有进程:NameNoce SecondaryNameNode ResourceManager,node1/node2/node3上有进程:DataNode NodeManager

(8)查看集群状态:./bin/hdfs dfsadmin -report

(9)查看文件块组成: ./bin/hdfs fsck / -files -blocks

(10)Web查看HDFS: http://192.168.1.10:50070

(11)Web查看RM: http://192.168.1.10:8088

HADOOP_HOME环境变量

在运行方便,我们设置一个HADOOP_HOME环境变量,并加入PATH目录,步骤如下:

(1)vim /etc/profile.d/java.sh #因为hadoop必用java,所有我们把使用这个文件即可。

(2)增加内容:

export HADOOP_HOME=/home/hadoop/hadoop-2.2.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

运行Hadoop计算任务

WordCount

(1)/home/hadoop目录下有两个文本文件file01.txt和file02.txt,文件内容分别为:

file01.txt:

kongxianghe
kong
yctc
Hello World

file02.txt:

11
2222
kong
Hello
yctc

(2)将这两个文件放入hadoop的HDFS中:

hadoop fs -ls //查看hdfs目录情况

hadoop fs -mkdir -p input

hadoop fs -put /home/hadoop/file*.txt input

hadoop fs -cat input/file01.txt //查看命令

(3)计算并查看结果:

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter input

hadoop fs -ls output

hadoop fs -cat output/part-r-00000

可以看到数据都已经被统计出来了。

运行排序计算

如下的这个程序,会现在每个节点生成10个G的随机数字,然后排序出结果:

(1)./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter rand

(2)./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar sort rand sort-rand

第一个命令会在rand 目录的生成没有排序的数据。第二个命令会读数据,排序,然后写入rand-sort 目录。

常见错误

(1)Name node is in safe mode

运行hadoop程序时, 异常终止了,然后再向hdfs加文件或删除文件时,出现Name node is in safe mode错误:

rmr: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode

解决的命令:

hadoop dfsadmin -safemode leave #关闭safe mode

(2)DataNode 无法启动

我遇到过两种情况的DataNode无法启动:第一种是/etc/hosts里面机器名字除了和IP对应之外,还和127.0.0.1对应,导致DataNode连接NameNode的9000端口一直连接不上;第二种是多次format namenode 造成namenode 和datanode的clusterID不一致,通过查看NameNode和DataNode的/home/hadoop/dfs/data/current/VERSION,发现确实不一致。

总之,遇到错误不要慌,多看看$HADOOP_HOME/logs下面的日志,就能找到问题。

Tag标签: 集群   实战  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规