完全分布式环境安装

olivee 4年前 ⋅ 797 阅读

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.准备集群

  1. 克隆三台虚拟机
  • ① 在每台机器的/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

7. 启停服务

8. 测试