之前,实现了Hadoop的伪分布式安装。现在来讲述一下Hadoop的集群分布,在多个虚拟机上进行安装hadoop并进行集群管理。
首先需要将一个虚拟机作为namenode也就是总的管理节点。另外选择三个虚拟机,作为数据节点datanode进行备份。在选择一个备用的secondary namenode作为namenode的备份。
现在我将逐步来分析如何进行hadoop的集群安装。
首先我们要安装一个linux虚拟机。然后对这个虚拟机进行一些基础的配置。
第一步 启动网卡
安装完成之后进入root用户
输入命令 ifup ens33启动网卡
第二步 环境变量的设置
export JAVA_HOME=/root/app/jdk1.8.0_181
export HADOOP_HOME=/root/app/hadoop-2.8.4
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
上述的语句添加到 /etc/profile的底部
第三步 免密登录的实现
,,在实现与其他虚拟机的免密登录之前,需要将linux进行克隆。我们可以将我们之前安装好的mydb0虚拟机克隆出四个分别命名为mydb1,mydb2,mydb3,mydb4.
接下来需要修改主机名,按照刚才声明的名字依次修改各个主机的hostname(/etc/hostname)。
之后将这几个主机的ip和主机名添加到hosts文件中 。
vi /etc/hosts
我的是这样的,你们需要根据你们的linux的ip进行添加
192.168.196.136 mydb0
192.168.196.132 mydb1
192.168.196.134 mydb2
192.168.196.135 mydb3
192.168.196.131 mydb4
之后打开mydb0,进入到root目录中
生成公私密钥
ssh-keygen -t rsa
添加公钥到授权key 文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
给授权文件权限
chmod 600 ~/.ssh/authorized_keys
之后我们将这个authorized_keys发送到其他的虚拟机上
首先需要进入到 ~/.ssh目录下。
依次执行以下的命令。
scp authorized_keys root@mydb1:~/.ssh
scp authorized_keys root@mydb2:~/.ssh
scp authorized_keys root@mydb3:~/.ssh
scp authorized_keys root@mydb4:~/.ssh
这样免密登录就完成了。
第四步 shell文件生成
接下来,为了方便管理和监控其他四个结点的状态。我们可以声明一个shell文件。进入到root用户下的/user/local/bin文件夹下
声明一个xcall文件
粘贴如下的代码
pcount=$#
if((pcount < 1));
then
echo no args;
exit;
fi
for((host=4; host >=0; host--)); do
# echo $pdir/$dataFileName $cuser@xthadoop$host:$pdir
echo "-------主机:mydb$host execute Result:-----------------"
ssh mydb$host $@
echo -e "\n\n\n"
done
之后需要为它添加权限
chmod 777 /usr/local/bin/xcall 修改权限
,ssh 远程机器 运行的命令只会运行/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin这些目录下的文件。如果想要运行jps , java这些jdk为我们提供的命令。我们需要将它们链接(link)到这个xcall文件上。
xcall ln -s -f 、/root/app/jdk1.8.0_181/bin/jps /usr/local/bin/
这个路径是你的jdk安装的目录。
第五步 hadoop配置文件声明
和之前一样,我们在mydb0上安装一个hadoop然后进行解压。对其中的一些文件进行配置
进入到/etc/hadoop文件夹下
在hadoop-env.sh中首先设置jdk的绝对路径
接下来是core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mydb0:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/app/hadoop-2.8.4/tmp</value>
</property>
其次是hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>mydb4:50090</value>
</property>
这个地方设置的是secondary namenode的位置。这个交给了mydb4进行管理。HDFS的副本数量设置为3,对应mydb1
mydb2 mydb3
之后是mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
之后需要修改的是slaves文件,这个是设置数据节点的文件
之前伪分布式中设置的是localhost,现在需要修改为mydb1 mydb2 mydb3
最后yarn-site.xml文件(资源管理)
<!-- 指定YARN(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>mydb0</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
需要在etc/hadoop/hadoop-env.sh中设置jdk的绝对路径
在etc/hadoop/slave文件中加上你配置的作为datanode的主机的名字
这些设置完毕后,我们的hadoop就算是配置完成了。
第六步 hadoop集群搭建
这一步主要是将hadoop安装到其他的linux上。我编写了一个sh文件。
在这个文件里面输入以下内容
scp -r /root/app/hadoop-2.8.4 mydb1:/root/app/
scp -r /root/app/hadoop-2.8.4 mydb2:/root/app/
scp -r /root/app/hadoop-2.8.4 mydb3:/root/app/
scp -r /root/app/hadoop-2.8.4 mydb4:/root/app/
然后执行这个脚本文件。这个复制需要很长时间。
第七步 hadoop 的 格式化以及启动
复制完成之后 在mydb0虚拟机上进行hadoop的格式化
hadoop namenode -format
之后进入到sbin文件夹下启动start-all.sh脚本文件启动所有节点。
启动完成后运行xcall jps命令。如果出现以下情况就算安装成功
在mydb0上显示 namenode resourcemanager启动
在mydb1 , mydb2,mydb3上显示的datanode以及nodemanager启动
在mydb4上显示的是 secondary namenode启动。