hadoop完全分布式平台搭建详细讲解

此教程为 hadoop 完全分布式在VMware 虚拟机上的搭建过程
思路 :

                在虚拟机上 , 配置一个老大 , 两个小弟 ! ( 一个NameNode节点 , 两个DataNode 节点  )
                    主机名:
                miaomiao1  NameNode节点        ---老大
                miaomiao2  DataNode 节点         ---小弟
                miaomiao3  DataNode 节点         ---小弟

一定要修改好三台主机的 主机名 以及 host
  1. vim /etc/sysconfig/network   #这种方法是永久修改,必须重启才生效  
  2. hostname miaomiao    #临时修改,立刻生效 

细节 :

1 , 首先需要先在 VMwear 上安装一个 centos , 然后在修改主机名为  miaomiao1 , 网络适配器选择使用 桥接模式 , 然后勾中复制网络网络连接状态 .

2 , 网络配置 :
DEVICE=eth0
HWADDR=00:0C:29:6F:98:8B
TYPE=Ethernet
UUID=d3097e8a-39d2-4682-88d3-65115d866008
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DNS1=8.8.8.8
DNS2=114.114.114.114
NETMASK=255.255.255.0
GATEWAY=10.0.118.1

只需要在之前的网络配置文件后面添加如下即可 :
DNS1=8.8.8.8
DNS2=114.114.114.114
NETMASK=255.255.255.0
GATEWAY=10.0.118.1

并且将  ONBOOT=no   改成   ONBOOT=yes     ----为了重启后主机自动联通网络
然后  [[email protected] ~]# chkconfig network on     网络的基本配置就大功告成 !

3 , 关闭防火墙 :
# 查看防火墙状态
service iptables status  
# 停止防火墙
service iptables stop  
# 启动防火墙
service iptables start  
# 重启防火墙
service iptables restart  
# 永久关闭防火墙
chkconfig iptables off  
# 永久关闭后重启
chkconfig iptables on
#查看防火墙状态的另一种方式 , 很实用 
chkconfig --list iptables   

4 , 修改 host :
[[email protected] ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.118.232  miaomiao1  www.miaomiao1.com
10.0.118.231  miaomiao2  www.miaomiao2.com
10.0.118.230  miaomiao3  www.miaomiao3.com

5 , 克隆出两台虚拟机  主机名分别是 miaomiao2 和 miaomiao3 .

6 , SSH  无密远程登录的设置 :  ......

6 , 上传 JDK 和 Hadoop  到 miaomiao1 主机下的 /home 目录下 , 然后在 miaomiao1 主机上准备安装: ......

7 , JDK 的安装以及环境变量的设置 :  ......

8 , Hadoop  的安装以及环境变量的设置 : ......

9 , hadoop 配置文档的修改 : ( 五大配置文件的修改如下 : )
( 1 ) 配置 JDK
 [[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/yarn-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_152/

( 2 )[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/core-site.xml
<configuration>
<!--指定namenode的命名空间地址 , 指定HDFS老大(namenode)的通信地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://miaomiao1:9000</value>
</property>

<!--指定存储文件i/o缓冲大小-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>              <value>131072</value>
</property>

<!--指定临时目录 ,
指定hadoop运行时产生文件的存储路径-->
<property>
<name>hadoop.tmp.dir</name>
<value>${HADOOP_HOME}tmp</value>
</property>
</configuration>

( 3 )[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--设置hdfs副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<!--指定block块-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>

<!--指定namenode的元数据的存储目录,可以使用 , 分割, 分开写多个 ,设置namenode存放的路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoopdata/dfs/name</value>
</property>

<!--指定datanode的数据块存储目录 , 设置datanode存放的路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoopdata/dfs/data</value>
</property>

<!--是否开启hdfs的权限-->
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>

<!--设置namenode的http通讯地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>miaomiao1:50070</value>
</property>

<!--指定secondarynamemode  的web ui 监控 ,设置secondarynamenode的http通讯地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>miaomiao2:50090</value>
</property>

<!--是否开启webhdfs的 ui 监控-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<!--指定edits的本地存储目录-->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>/home/hadoopdata/dfs/namesecondary/edits</value>
</property>

<!--指定检测目录-->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/home/hadoopdata/dfs/namesecondary</value>
</property>
</configuration>

( 4 )先备份 :  ( 此处备份的时候很多人使用 mv , 但是要注意 , mv 使用的时候要使用相对路径, 且原始文件会被删除, 相当于给文件改名字, 并且存放到另一个位置, 我个人喜欢使用 cp  )
[[email protected] ~]# cp /usr/local/hadoop-2.7.1/etc/hadoop/mapred-site.xml.temlate    /usr/local/hadoop-2.7.1/etc/hadoop/mapred-site.xml

[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/mapred-site.xml
<configuration>
<!--指定mapreduce 的运行框架名 ,通知框架MR使用YARN-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>

<!--指定historyserver 运行的内部通信地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>miaomiao1:10020</value>
</property>

<!--指定history 运行的web ui 通信地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>miaomiao1:19888</value>
</property>
</configuration>


( 5 )[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/yarn-site.xml
<configuration>
<!--指定mapreduce使用shuffle , reducer取数据的方式是mapreduce_shuffle-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

<!--指定yarn的rm所启动的主机 , 设置 resourcemanager 在哪个节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>miaomiao1</value>
</property>

<!--指定rm的内部通信地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>miaomiao1:8032</value>
</property>

<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>miaomiao1:8030</value>
</property>

<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>miaomiao1:8031</value>
</property>

<property>
<name>yarn.resourcemanager.admin.address</name>
<value>miaomiao1:8033</value>
</property>

<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>miaomiao1:8088</value>
</property>

<!--附加 , 哈-->
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>


( 6 )[[email protected] ~]# vi /usr/local/hadoop-2.7.1/etc/hadoop/slaves      ( 这个很重要的 ! )

miaomiao1
miaomiao2
miaomioa3

10 ,  将配置好的 hadoop 的根目录远程发送给另外的所有服务器 :
[[email protected] ~]# scp -r /usr/local/jdk1.8.0_152/     miaomiao3:/usr/local/
[[email protected] ~]# scp -r /usr/local/jdk1.8.0_152/     miaomiao3:/usr/local/
[[email protected] ~]# scp -r /usr/local/hadoop-2.7.1/   miaomiao3:/usr/local/
[[email protected] ~]# scp -r /usr/local/hadoop-2.7.1/   miaomiao3:/usr/local/

注意 : scp 只会把相应安装进行同步 , 但是有些东西是不会同步的 , 比如 JDK , Hadoop 的环境变量的东西 , 你可以在老二和老三上  -version 一下 , 因此必须要做第 11 , 步的操作  !!!

11 , 在所有副机上做  :
            hadoop完全分布式平台搭建详细讲解

12 , 格式化 namenode  , 只格式化一次 , 第一次启动得格式化
hdfs namenode -format
hadoop namenode -format


12.5 , 历史服务器 , 号称hadoop黑匣子 : ( 守护进程 ) Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,我们可以通过下面的命令来启动Hadoop历史服务器
$ sbin/mr-jobhistory-daemon.sh  start historyserver    或    mr-jobhistory-daemon.sh start historyserver
这样我们就可以在相应机器的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况。

13 , 开启hodoop 所有进程
start-dfs.sh  --- 启动dfs
start-yarn.sh   --- 启动yarn


14 , 查看进程启动情况 : jps
14129 JobHistoryServer
10497 DataNode
78051 Jps
10966 ResourceManager
12950 NameNode
11065 NodeManager

2849 SecondaryNameNode
2788 DataNode
41113 Jps
2975 NodeManager

2762 DataNode
39371 Jps
2846 NodeManager

15 , 向hadoop集群系统提交第一个mapreduce任务(wordcount)
进入本地hadoop目录(/usr/hadoop)
1、  hdfs  dfs  -mkdir  -p  /data/input   在虚拟分布式文件系统上创建一个测试目录/data/input
2、  hdfs  dfs  -put  README.txt   /data/input   将当前目录下的README.txt 文件复制到虚拟分布式文件系统中
3、  hdfs  dfs  -ls  /data/input    查看文件系统中是否存在我们所复制的文件
如图操作:

hadoop完全分布式平台搭建详细讲解

4、  运行如下命令向hadoop提交单词统计任务
进入jar文件目录,执行下面的指令。
hadoop jar  /usr/local/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar   wordcount  /data/input   /data/output/result
查看result,结果在result下面的part-r-00000中
hdfs dfs -cat /data/output/result/part-r-00000
hadoop完全分布式平台搭建详细讲解

16 , 检测 :
hadoop完全分布式平台搭建详细讲解hadoop完全分布式平台搭建详细讲解
自此,hadoop集群搭建成功!