hadoop完全分布式平台搭建详细讲解
此教程为 hadoop 完全分布式在VMware 虚拟机上的搭建过程
思路 :
在虚拟机上 , 配置一个老大 , 两个小弟 ! ( 一个NameNode节点 , 两个DataNode 节点 )
主机名:
miaomiao1 NameNode节点 ---老大
miaomiao2 DataNode 节点 ---小弟
miaomiao3 DataNode 节点 ---小弟
一定要修改好三台主机的 主机名 以及 host
- vim /etc/sysconfig/network #这种方法是永久修改,必须重启才生效
- 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>
</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 , 在所有副机上做 :
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
[[email protected] ~]# jps
14129 JobHistoryServer
10497 DataNode
78051 Jps
10966 ResourceManager
12950 NameNode
11065 NodeManager
[[email protected] ~]#
[[email protected] ~]# jps
2849 SecondaryNameNode
2788 DataNode
41113 Jps
2975 NodeManager
[[email protected] ~]#
[[email protected] ~]# jps
2762 DataNode
39371 Jps
2846 NodeManager
[[email protected] ~]#
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 查看文件系统中是否存在我们所复制的文件
如图操作:
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
16 , 检测 :
自此,hadoop集群搭建成功!