1.规划
Hadoop中的进程在多台机器运行!
HDFS: 1个nn+N个DN n个2nn
YARN: 1个RM+N个NM
避免单点故障,NN和RM建议分散到多台机器
!注意负载均衡
hadoop101 hadoop102 hadoop103
192.168.19.101 192.168.19.101 192.168.19.101
DN DN DN
NM NM NM
NN RM 2NN
2.准备集群
- 克隆三台虚拟机
- ① 在每台机器的/etc/hosts中配置集群所有机器的ip和主机名的映射
192.168.19.101 hadoop101
192.168.19.102 hadoop102
192.168.19.103 hadoop103
- ② 提供hadoop用户,配置hadoop用户具有root权限
- ③ 保证三台机器可以互相联通
# 配置免密认证
3. 准备xsync和xcall两个常用脚本
3.1 xsync
xsync的作用是同步某一个文件到三个服务器,比如xsync /opt/hadoop2.10.1
,表示同步/opt/hadoop2.10.1
文件夹到三台服务器,具体脚本如下:
#!/bin/bash
#校验参数是否合法
if(($#==0))
then
echo 请输入要分发的文件!
exit;
fi
#获取分发文件的绝对路径
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`
echo 要分发的文件的路径是:$dirpath/$filename
#循环执行rsync分发文件到集群的每条机器
for((i=101;i<=103;i++))
do
echo ---------------------hadoop$i---------------------
rsync -rvlt $dirpath/$filename atguigu@hadoop$i:$dirpath
done
3.2 xcall
这个脚本的目的是同时在三台服务器都执行命令,如xcall ps -ef
,表示在三台服务器同时执行ps -ef命令
,xcall的实现如下:
#!/bin/bash
#在集群的所有机器上批量执行同一条命令
if(($#==0))
then
echo 请输入您要操作的命令!
exit
fi
echo 要执行的命令是$*
#循环执行此命令
for((i=101;i<=103;i++))
do
echo ---------------------hadoop$i-----------------
ssh hadoop$i $*
done
4. 安装jdk
5. 安装Hadoop软件
5.1 安装软件
在一台机器安装,再将这台机器的软件复制到其他机器
tar -xzvf hadoop-2.10.1.tar.gz -C /opt/
5.2 修改配置文件
5.2.1 core-site.xml
修改core-site.xml文件中的configuration如下:
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
5.2.2 hdfs-site.xml
修改hdfs-site.xml文件中的configuration如下:
<configuration>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
</configuration>
5.2.3 yarn-site.xml
修改yarn-site.xml文件中的configuration如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
5.2.4 mapred-site.xml
先cp mapred-site.xml.template mapred-site.xml
拷贝出来一个mapred-site.xml文件,再修改文件中的configuration如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
<!--第三方框架使用yarn计算的日志聚集功能 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop101:19888/jobhistory/logs</value>
</property>
</configuration>
5.2.5 slaves
配置slaves文件如下:
hadoop101
hadoop102
hadoop103
5.3 分发配置好的hadoop文件
xsync /opt/hadoop-2.10.1
6. 配置环境变量
三台机器配置环境变量
vi /etc/profile
再编辑.bashrc(由于Hadoop采用non-login模式远程调用脚本来启动集群环境的服务,而non-login模式不会加重/etc/profile中的环境变量,因此需要将source /etc/profile
加入到bashrc):
# 加入到.bashrc
source /etc/profile