目录
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。因为在生产当中我们基本都使用完全分布式模式,所以在此只学习完全分布式集群搭建。
1.分析
• 准备3台客户机(关闭防火墙、静态ip、主机名称)
• 安装jdk 和 hadoop 并分别配置环境变量
• 编写集群分发脚本
• 配置集群
• 单点启动
• 配置ssh
• 群起并测试集群
2.编写集群分发脚本xsync
脚本需求分析:循环复制文件到所有节点的相同目录下。
2.1 原始拷贝:rsync -rvl /opt/module root@hadoop103:/opt/
2.2 期望脚本:xsync 要同步的文件名称
2.3 在/home/luomk/bin这个目录下存放的脚本,luomk用户可以在系统任何地方直接执行。
2.4 脚本实现:
2.4.1 在/home/luomk目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[luomk@hadoop102 ~]$ mkdir bin ; cd bin/
[luomk@hadoop102 bin]$ touch xsync ; vim xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环同步
for((host=102; host<105; host++)); do
echo --------------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
2.4.2 修改脚本 xsync 具有执行权限
[luomk@hadoop102 bin]$ chmod 777 xsync
2.4.3 调用脚本形式:xsync 文件名称
[luomk@hadoop102 bin]$ xsync /home/luomk/bin
3.SSH无密登录配置
3.1 生成公钥和私钥:
[luomk@hadoop102 bin]$ cd ~/.ssh
[luomk@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
3.2 将公钥拷贝到要免密登录的目标机器上
[luomk@hadoop102 .ssh]$ ssh-copy-id hadoop102
[luomk@hadoop102 .ssh]$ ssh-copy-id hadoop103
[luomk@hadoop102 .ssh]$ ssh-copy-id hadoop104
3.3 ssh文件夹下(~/.ssh)的文件功能解释
known_hosts :记录ssh访问过计算机的公钥(public key)
id_rsa :生成的私钥
id_rsa.pub :生成的公钥
authorized_keys :存放授权过得无密登录服务器公钥
3.4 说明:需要在102和103两台机器配置。
4.集群配置
4.1 集群部署规划
hadoop102
|
hadoop103
|
hadoop104
| |
HDFS
|
NameNode
DataNode
|
DataNode
|
SecondaryNameNode
DataNode
|
YARN
|
NodeManager
|
ResourceManager
NodeManager
|
NodeManager
|
4.2 配置集群
4.2.1 核心配置文件:core-site.xml
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
4.2.2 hdfs配置文件:
hadoop-env.sh
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
hdfs-site.xml
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
4.2.3 yarn配置文件:
yarn-env.sh
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
4.2.4 mapreduce配置文件:
mapred-env.sh
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
[luomk@hadoop102 hadoop]$ cp /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml.template /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
[luomk@hadoop102 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.3 在集群上分发配置好的Hadoop配置文件
[luomk@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
4.4 查看文件分发情况
[luomk@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
5.集群单点启动
// 如果集群是第一次启动,需要格式化NameNode
[luomk@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
// 在hadoop102上启动NameNode
[luomk@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[luomk@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
3531 Jps
// 在hadoop102、hadoop103以及hadoop104上分别启动DataNode
[luomk@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[luomk@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[luomk@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[luomk@hadoop103 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[luomk@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[luomk@hadoop104 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
6.集群测试
6.1 配置slaves
[luomk@hadoop102 hadoop-2.7.2]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/slaves
hadoop102
hadoop103
hadoop104
6.2 启动集群
• 如果集群是第一次启动,需要格式化NameNode
[luomk@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
• 启动HDFS和Yarn:
[luomk@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[luomk@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
• web端查看
(a)浏览器中输入:
http://hadoop102:50070 (NameNode)
(b)浏览器中输入:
http://hadoop104:50090/status.html (SecondaryNameNode)
(c)当启动发生错误的时候:
• 查看日志:/home/luomk/module/hadoop-2.7.2/logs
• 如果进入安全模式,可以通过hdfs dfsadmin -safemode leave
• 停止所有进程,删除data和log文件夹,然后hdfs namenode -format 来格式化
6.3 集群基本测试
// ① 上传文件到集群
[luomk@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir -p /user/luomk/input
[luomk@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/luomk/input
// ② 上传文件后查看文件存放在HDFS什么位置
[luomk@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
[luomk@hadoop102 subdir0]$ cat blk_1073741825
// ③ 下载
[luomk@hadoop102 hadoop-2.7.2]$ hadoop fs -get /user/luomk/input/hadoop-2.7.2.tar.gz ./
7.集群启动/停止方式
// 7.1 各个服务组件逐一启动/停止
// 分别启动/停止hdfs组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
// 启动/停止yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
7.2 各个模块分开启动/停止
// 整体启动/停止hdfs
start-dfs.sh
stop-dfs.sh
// 整体启动/停止yarn
start-yarn.sh
stop-yarn.sh
7.3 全部启动/停止集群(不建议使用)
start-all.sh
stop-all.sh