Hadoop2.5.2集群部署(完全分布式)

环境介绍

硬件环境

CPU 4 MEM 4G 磁盘 60G 

软件环境

OS:centos6.5版本 64位

Hadoop:hadoop2.5.2 64位

JDK: JDK 1.8.0_91

主机配置规划

Hadoop01  172.16.1.156   (NameNode)

Hadoop02  172.16.1.157     (DataNode)

Hadoop03  172.16.1.158     (DataNode)

设置主机名

这里主机名修改不是必须条件,但是为了操作简单,建议将主机名设置一下,需要修改调整各台机器的hosts文件配置,命令如下:

 /etc/init.d/networking restart

如果没有足够的权限,可以切换用户为root

三台机器统一增加以下host配置:

Hadoop2.5.2集群部署(完全分布式)

配置免密码登录SSH

1)生成**:

ssh-****** -t rsa  

2)将id_dsa.pub(公钥)追加到授权key中:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys    

3)将认证文件复制到另外两台DataNode节点上:

scp ~/.ssh/authorized_keys 172.16.1.157:~/.ssh/    

scp ~/.ssh/authorized_keys 172.16.1.158:~/.ssh/  

3)测试:

ssh hadoop02或ssh hadoop03

各节点安装JDK

(1)检查jdk版本、卸载openjdk版本

查看目前安装openjdk信息:rpm -qa|grep java

Hadoop2.5.2集群部署(完全分布式)

卸载以上三个文件(需要root权限,登录root权限卸载)

rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

rpm -e --nodeps tzdata-java-2013g-1.el6.noarch

 

Hadoop2.5.2集群部署(完全分布式)

(2)选择版本是jdk-8u91-linux-x64.gz

(3)解压安装:

Hadoop2.5.2集群部署(完全分布式)

 (4)重命名jdk为jdk1.8(用mv命令)

Hadoop2.5.2集群部署(完全分布式)

 (5) 配置环境变量:vi /etc/profile加入以下三行

        #JAVA_HOME  

        export JAVA_HOME=/home/hadoop/jdk1.8

        export PATH=$JAVA_HOME/bin:$PATH 

  (6)执行source /etc/profile使环境变量的配置生效

 (7)执行Java –version查看jdk版本,验证是否成功 (8)将hadoop01机器上安装好JDK复制到另外两台节点上

Hadoop2.5.2集群部署(完全分布式)

Hadoop2.5.2集群部署(完全分布式)

Hadoop安装

每台节点都要安装

 Hadoop。 

上传

 hadoop-2.5.2.tar.gz 

到用户

 /home/hadoop/software 

目录下。

 

解压

tar -zvxf hadoop-2.5.2.tar.gz  -C /home/hadoop/

添加环境变量

vi  /etc/profile,尾部添加如下

export JAVA_HOME=/home/hadoop/jdk1.8

export HADOOP_HOME=/home/hadoop/hadoop-2.5.2

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

 

export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH 

Hadoop2.5.2集群部署(完全分布式)

设置环境变量立即生效

source /etc/profile

配置Hadoop文件

(1) core-site.xml

 

<configuration>

     <property>

            <name>fs.defaultFS</name>

            <value>hdfs://hadoop01:9000</value>

     </property>

     <property>

            <name>hadoop.tmp.dir</name>

            <value>file:/home/hadoop/hadoop-2.5.2/hadoop_tmp</value>

     </property>

     <property>

            <name>io.file.buffer.size</name>

            <value>131072</value>

     </property>

</configuration>

(2)hdfs-site.xml 

<configuration>

       <property>

               <name>dfs.replication</name>

                <value>2</value>

       </property>

       <property>

                <name>dfs.namenode.secondary.http-address</name>

               <value> 

hadoop01

 :9001</value>

       </property>

       <property>

              <name>dfs.namenode.name.dir</name>

              <value>file: 

/home/hadoop/hadoop-2.5.2

 /dfs/name</value>              <description>namenode上存储hdfs元数据</description>

       </property>

       <property>

               <name>dfs.datanode.data.dir</name>

               <value>file:/ 

home/hadoop/hadoop-2.5.2

 /dfs/data</value>               <description>datanode上数据块物理存储位置</description>

       </property>

       <property>

               <name>dfs.webhdfs.enabled</name>

                <value>true</value>

       </property>

</configuration> 

注:访问namenode的 webhdfs 

使用50070端口,访问datanode的webhdfs使用50075端口。要想不区分端口,直接使用namenode的IP和端口进行所有webhdfs操作,就需要在所有datanode上都设置hdfs-site.xml中dfs.webhdfs.enabled为true。

 

 

(3)mapred-site.xml

<configuration>

       <property>

             <name>mapreduce.framework.name</name>

             <value>yarn</value>

      </property>

      <property>

             <name>mapreduce.jobhistory.address</name>

             <value>hadoop01:10020</value>

      </property>

      <property>

             <name>mapreduce.jobhistory.webapp.address</name>

             <value>hadoop01:19888</value>

      </property>

</configuration> 

jobhistory是Hadoop自带一个历史服务器,记录Mapreduce历史作业。默认情况下,jobhistory没有启动,可用以下命令启动:

sbin/mr-jobhistory-daemon.sh start historyserver  

(4)yarn-site.xml

<configuration>

       <property>

              <name>yarn.nodemanager.aux-services</name>

              <value>mapreduce_shuffle</value>

       </property>

       <property>

               <name>yarn.resourcemanager.address</name>

               <value> 

hadoop01

 :8032</value>

       </property>

       <property>

              <name>yarn.resourcemanager.scheduler.address</name>

              <value>hadoop01:8030</value>

       </property>

       <property>

              <name>yarn.resourcemanager.resource-tracker.address</name>

              <value>hadoop01:8031</value>

       </property>

       <property>

               <name>yarn.resourcemanager.admin.address</name>

               <value>hadoop01:8033</value>

       </property>

       <property>

               <name>yarn.resourcemanager.webapp.address</name>

               <value>hadoop01:8088</value>

       </property>

</configuration>  

(5)修改slaves文件,添加datanode节点hostname到slaves文件中

hadoop01

hadoop02

(6) 

配置,hadoop-env.sh与yarn-env.sh这两个文件JAVA_HOME环境变量

 最后,将整个hadoop-2.5.2文件夹及其子文件夹使用scp复制到两台Slave相同目录中:

Hadoop2.5.2集群部署(完全分布式)

Hadoop2.5.2集群部署(完全分布式)

运行Hadoop

格式化

hdfs namenode –format  

Hadoop2.5.2集群部署(完全分布式)

启动Hadoop

start-dfs.sh   

start-yarn.sh  

可以用一条命令:

start-all.sh

停止Hadoop

stop-all.sh 

JPS查看进程

master主节点进程:

Hadoop2.5.2集群部署(完全分布式)

slave数据节点进程:

Hadoop2.5.2集群部署(完全分布式)

通过浏览器查看集群运行状态

http://172.16.1.156:50070

Hadoop2.5.2集群部署(完全分布式)

http://172.16.1.156:8088/

Hadoop2.5.2集群部署(完全分布式)

http://172.16.1.156:19888

Hadoop2.5.2集群部署(完全分布式)

jobhistory是Hadoop自带一个历史服务器,记录Mapreduce历史作业。默认情况下,jobhistory没有启动,可用以下命令启动:

sbin/mr-jobhistory-daemon.sh start historyserver 

Hadoop2.5.2集群部署(完全分布式)

测试Hadoop

1)建立输入文件:

vi wordcount.txt   

输入内容为: 

hello you

hello me

hello everyone

2)建立目录

hadoop fs -mkdir /data/wordcount    

hadoop fs –mkdir /output/   

目录/data/wordcount用来存放Hadoop自带WordCount例子的数据文件,运行这个MapReduce任务结果输出到/output/wordcount目录中。

3)上传文件

hadoop fs -put wordcount.txt/data/wordcount/   

4)执行wordcount程序

hadoop jar usr/local/program/Hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar wordcount /data/wordcount /output/wordcount/    

5)查看结果

hadoop fs -text /output/wordcount/part-r-00000    

[[email protected]]# hadoop fs -text /output/wordcount/part-r-00000  

everyone  1 

hello  3  

me    1  

you   1 

搭建中遇到问题总结

问题一:在配置环境变量过程可能遇到输入命令ls命令不能识别问题ls -bash: ls: command not found

原因:在设置环境变量时,编辑profile文件没有写正确,将export PATH=$JAVA_HOME/bin:$PATH中冒号误写成分号 ,导致在命令行下ls等命令不能够识别。

解决方案:
 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

问题二:在主机上启动hadoop集群,然后使用jps查看主从机上进程状态,能够看到主机上的resourcemanager和各个从机上的nodemanager,但是过一段时间后,从机上的nodemanager就没有了,主机上的resourcemanager还在。

原因是防火墙处于开启状态:

注:nodemanager启动后要通过心跳机制定期与RM通信,否则RM会认为NM死掉,会停止NM服务。

service 方式
开启: service iptables start 
关闭: service iptables stop

 

Q1: 
Starting namenodes on [localhost] 
ERROR: Attempting to launch hdfs namenode as root 
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch. 
Hadoop2.5.2集群部署(完全分布式)
解决1: 
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本 
$ vim sbin/start-dfs.sh 
$ vim sbin/stop-dfs.sh 
在顶部空白处添加内容: 
HDFS_DATANODE_USER=root 
HADOOP_SECURE_DN_USER=hdfs 
HDFS_NAMENODE_USER=root 
HDFS_SECONDARYNAMENODE_USER=root 
Hadoop2.5.2集群部署(完全分布式)
Q2: 
Starting resourcemanager 
ERROR: Attempting to launch yarn resourcemanager as root 
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch. 
Starting nodemanagers 
ERROR: Attempting to launch yarn nodemanager as root 
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting launch. 
解决2: 
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本 
$ vim sbin/start-yarn.sh 
$ vim sbin/stop-yarn.sh

YARN_RESOURCEMANAGER_USER=root 

YARN_NODEMANAGER_USER=root 
Hadoop2.5.2集群部署(完全分布式)

转载于:https://my.oschina.net/jj2050/blog/912839