前期准备

主机

系统

ip地址

master

CentOS7

192.168.11.61

slave

CentOS7

192.168.11.62

ps:大家使用克隆的方式复制多个独立的虚拟机,每个虚拟机创建一个hadoop用户并加入到root组中useradd -m hadoop -G root -s /bin/bash 利用 passwd hadoop 配置密码遇到提示说密码简单就再输入一次

 

配置ip和主机名称,hosts映射

利用root用户登录master

vi /etc/sysconfig/network-scripts/ifcfg-ens33

打开网卡编辑如下图:

centos7搭建Hadoop高可用集群_linux

注意如果你是克隆的虚拟机那么每个虚拟机的网卡UUID是一样的,这个不行,所有要删除这个,让它自动在生成一个

重启网络服务:systemctl restart network

我的实验是把上面图中的ip地址改为192.168.196.162 默认网关设置为192.168.196.2 为什么这么做,根据什么要看看你的虚拟机网络编辑器 这个在虚拟机菜单 编辑 中 我的设置如图:

centos7搭建Hadoop高可用集群_linux_02

如果你在上图中设置取消了DHCP那么你想让你的电脑访问虚拟机就设置你的电脑中

centos7搭建Hadoop高可用集群_linux_03

至此我们的主机和虚拟机就互通了,虚拟机还能访问外网。但是一定要明白我上面的设置。

如果到此互相ping还不能成功,那么检查这里:

centos7搭建Hadoop高可用集群_xml_04

修改hostname:vi /etc/hostname

删除原有内容添加:master

保存退出:esc按钮 + :wq

centos7搭建Hadoop高可用集群_hadoop_05

修改hosts: vi /etc/hosts 添加如下图内容

centos7搭建Hadoop高可用集群_linux_06

***保存退出,重启虚拟机。在每个虚拟机里重复修改网卡(ifcfg-enss*,hostname,hosts 的步骤,重启后测试互通性

要求在master中能ping通slave。其它任何一个虚拟机中都能ping通另外虚拟机才行

例如:

centos7搭建Hadoop高可用集群_xml_07

配置主机master虚拟机能够ssh无密码登录到slave上

检查每个虚拟机上是否安装了ssh 和 启动了sshd服务

rpm -qa | grep ssh

如图所示表示安装了

centos7搭建Hadoop高可用集群_linux_08

centos7搭建Hadoop高可用集群_linux_09

退出所有虚拟机上root登陆用户,使用hadoop用户登录

在每个虚拟机上执行 ssh localhost 测试一下,最好都做一下,非常有用,会生成 .ssh 隐藏文件夹,遇到提示输入yes

如图:

centos7搭建Hadoop高可用集群_hadoop_10

在master虚拟机上生成ssh密钥

cd .ssh ssh-keygen -t rsa #遇到提示一路回车就行 ll #会看到 id_rsa id_rsa.pub 两文件前为私钥,后为公钥 cat id_rsa.pub >> authorized_keys #把公钥内容追加到authorized_keys文件中 chmod 600 authorized_keys #修改文件权限,重要不要忽略

至此master可以无密码登陆自己了,测试 ssh localhost 不再提示输入密码,如果不争取请检查少了上面那一步

将master的公钥传送到所有的slave上,实现master无密码登陆到所有slave上

scp authorized_keys hadoop@slave:~/.ssh/

centos7搭建Hadoop高可用集群_linux_11

slave上登录hadoop用户执行如下代码

cd ~/.ssh

chmod 600 authorized_keys

centos7搭建Hadoop高可用集群_xml_12

然后回到master执行连接查看

测试master中ssh登陆slave观察是否需要输入密码,如果不需要则成功,否则失败,请检查以上步骤

centos7搭建Hadoop高可用集群_xml_13

到这里算是成功一半了,加~油~,看好你!!!👊

 

jdk8+

使用xftp把jdk-8u144-linux-x64.tar.gz传送到每个虚拟机hadoop用户上

centos7搭建Hadoop高可用集群_xml_14

使用下面代码安装

先将jdk-8u144-linux-x64.tar.gz文件解压:

tar -zxvf jdk-8u144-linux-x64.tar.gz

我这里将jdk源文件移动一个新文件

centos7搭建Hadoop高可用集群_hadoop_15

删除压缩包为:

rm -rf jdk-8u144-linux-x64.tar.gz

安装jdk:

一劳永逸的做法:

su

visudo

之后输入:89 回车 添加 hadoop ALL=(ALL) ALL 注意不是空格是制表符

如图:

centos7搭建Hadoop高可用集群_linux_16

保存后退出 就是先 esc 之后输入 :wq

之后退出root 就是输入exit

 

设置环境变量,我使用本地环境变量,默认安装的jdk在/usr/java/jdk

vi ~/.bashrc

添加
 

export JAVA_HOME=/home/hadoop/jdk

export PATH=$PATH:$JAVA_HOME/bin

centos7搭建Hadoop高可用集群_xml_17

退出保存

更新配置文件执行:source ~/.bashrc

测试java配置是否成功执行:java -version

centos7搭建Hadoop高可用集群_linux_18

记住每台上面都做

附:卸载用户自带的jdk

目标用户下执行:rpm -qa | grep jdk可以查看到jdk

centos7搭建Hadoop高可用集群_xml_19

切换到root下:

centos7搭建Hadoop高可用集群_hadoop_20

centos7搭建Hadoop高可用集群_xml_21

centos7搭建Hadoop高可用集群_hadoop_22

centos7搭建Hadoop高可用集群_linux_23

centos7搭建Hadoop高可用集群_linux_24

hadoop配置

使用xftp把hadoop-2.7.3.tar.gz传送到每个虚拟机上

解压 移动(改名)同jdk

tar -xzvf hadoop-2.7.3.tar.gz

改名:

mv hadoop-2.7.3 hadoop

配置hadoop环境变量 vi ~/.bashrc 我的hadoop安装目录/home/hadoop/hadoop

添加:

# Hadoop Environment Variables 
export HADOOP_HOME=/home/hadoop/hadoop 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

编辑如下5个文件 在 /home/hadoop/hadoop-2.7.3/etc/hadoop 目录中

1.core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/hadoop-2.7.3/tmp</value>
    </property>
</configuration>

2.hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/home/hadoop/hadoop-2.7.3/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/home/hadoop/hadoop-2.7.3/tmp/dfs/data</value>
        </property>
</configuration>

3.mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>

4.yarn-site.xml

<?xml version="1.0"?>
<configuration>
<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

5.slaves

slave

在每个虚拟机的/home/hadoop/hadoop/etc/hadoop 目录中都要改成一样的,不如改一份上传的每个地方来的方便。

 

运行案例

关闭防火墙和selinux

切换到root管理员用户上

systemctl stop firewalled.service #停止firewall,进本次停止,下次开机会开启
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看防火墙状态(关闭显示为not runing,开启显示为:runing)

启动hadoop集群

hdfs namenode -format #第一次启动要执行格式化,之后启动不用执行这个
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

在hadoop-master 执行 jps

看到如下算成功

[hadoop@slave ~]$ jps
6097 Jps
5848 DataNode
5976 NodeManager
[hadoop@slave ~]$

centos7搭建Hadoop高可用集群_xml_25

在slave上 执行jps,看到如下算成功

slave根目录中执行jps

[hadoop@slave ~]$ jps
6097 Jps
5848 DataNode
5976 NodeManager
[hadoop@slave ~]$

 

centos7搭建Hadoop高可用集群_hadoop_26

上面的信息中数字表示进程ID,后面的字符表示进程名字

缺少任何一个进程表示集群启动失败

失败可以通过查看日志查找原因。

 

如果要通过真机windos10访问hadoop web管理界面需要先配置真机的hosts文件,

它存在于C:\Windows\System32\drivers\etc 目录中

在该文件中添加
 

192.168.11.61 master

192.168.11.62 slave

之后浏览器中访问 master:50070 查看节点状态

centos7搭建Hadoop高可用集群_hadoop_27

执行个小案例

先在集群上创建用户目录 hdfs dfs -mkdir -p /user/hadoop 接着创建资源文件目录 hdfs dfs -mkdir input 上传要分析的数据文件到input中 hdfs dfs -put hadoop/etc/hadoop/*.xml input 执行hadoop自带的案例,统计dfs开头的信息 hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar grep input output 'dfs[a-z.]+'

通过web查看任务执行情况

master:8088/cluster

centos7搭建Hadoop高可用集群_xml_28

当然控台也有输出:

centos7搭建Hadoop高可用集群_xml_29

查看输出结果:

centos7搭建Hadoop高可用集群_xml_30

通过shell查看统计结果

centos7搭建Hadoop高可用集群_hadoop_31

关闭集群服务,在master上依次执行

stop-dfs.sh
stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver

 

怎么样你成功了吗?