怎么在CentOS Linux 8上安装Hadoop?安装配置Hadoop的详细步骤

前期准备

必备软件

安装好CentOS Linux 8 并升级完内核和软件包之后再进行Hadoop的安装。
参考:
1、大数据处理和软件开发第一步:VMware下安装CentOS 8 Linux操作系统
2、怎么给CentOS Linux 8升级内核并开启BBR

手里有一台Dell R620服务器,共有8块硬盘,通过VMware将虚拟机分布在这8块硬盘上,模拟8台服务器,在一个机架上:
编号:/BJ0/LG0/hadoop221-228
221-222:NameNode,223-228:DataNode

集群规划

集群规划如下:(服务器为hadoop221-hadoop228)

221 222 223 224 225 226 227 228
时间服务 chrony
Zookeeper集群(选举) Zookeeper(QuorumPeerMain)
HDFS集群(存储) journalnode(负责NameNode同步)
NameNodes
DFSZKFailoverController(zkfc)
DataNode
YARN集群(计算) ResourceManager(资源分配与调度)
NodeManager
MapReduce开发包 MapReduce(JobHistoryServer)
SYNC 同步文件服务器
HBase NoSQL

注:1、NameNodes和zkfc一一对应;2、DataNode和NodeManager都是works文件配置;3、Zookeeper至少3个,必须奇数台;4、journalnode至少3个,必须奇数;5、NameNodes一个active另一个Standby;6、ResourceManager一个active另一个Standby;
zkfc :DFSZKFailoverControlle作为一个ZK集群的客户端,用来监控NN的状态信息

特别提示:

我们以下所有操作都可以先在一台服务器上操作,完毕以后再将这个虚拟服务器复制成出来7份,完成最终的部署。

软件安装及配置

安装时间同步软件chrony

根据上面的集群规划,在221-228这8台服务器上安装chrony。从CentOS7开始已经默认使用chrony作为网络时间同步软件了,ntpd作为过时的产品,我们也就不在研究使用了。
若要安装使用chrony,参考下面这篇文章:
如何在CentOS Linux 8上安装时间同步服务chrony集群?(ntp被代替了)
配置时我们把服务端server都配置成192.168.1.222,这样后面复制出来的其它服务器就能直接在222服务器上获取时间了。

防火墙和SELINUX设置

因为Hadoop需要开启的端口很多,而且牵涉到很多的权限,所以我们在测试时将防火墙和SELINUX都关掉。
在生产环境中,需要针对不同的开放端口做针对性的设置。

关闭防火墙

运行以下命令,关闭防火墙

systemctl stop firewalld       #临时关闭防火墙
systemctl disable firewalld    #禁止开机启动防火墙
systemctl status  firewalld	   #查看防火墙状态。

关闭SELINUX

运行以下命令:

vi /etc/selinux/config         #SELINUX配置文件

相关参数修改如下:

#SELINUX=enforcing
SELINUX=disabled

重启服务器,然后查看SELINUX状态:

reboot       #重启
getenforce   #查询SELinux的运行模式,permissive(宽容模式);enforcing(强制模式);
/usr/sbin/sestatus -v  #查看SELINUX的状态

显示如下内容,则说明SELINUX已经关闭了

SELinux status:                 disabled

hostname相关设置

运行下面的命令,修改本机的hostname:

hostnamectl set-hostname hadoop221  #修改hostname

运行下面的命令查看设置好的hostname:

cat /etc/hostname

如果显示如下的内容,则说明修改成功

hadoop221

222-228服务器上的hostname修改,等服务器安装完毕以后统一操作(本文的底部有相关内容)

hosts相关设置

由于一次次的录入IP地址,不利于管理,我们在hosts里面把服务器的hostname跟IP地址对应起来,输入下面的命令开始操作:

vi /etc/hosts

内容设置成如下所示:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.221  hadoop221
192.168.1.222  hadoop222
192.168.1.223  hadoop223
192.168.1.224  hadoop224
192.168.1.225  hadoop225
192.168.1.226  hadoop226
192.168.1.227  hadoop227
192.168.1.228  hadoop228
192.168.1.229  hadoop229
192.168.1.230  hadoop230

添加Hadoop用户

录入下述命令

useradd hadoop  #添加hadoop用户,我们默认登录的是9Tristone用户,需要切换到root目录
passwd hadoop   #录入一遍“jiqun996”回车,再录入一遍“jiqun996”回车后将hadoop用户密码设置为“jiqun996”

安装jdk

从Oracle上下载jdk,下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
尽量不要使用其他版本的jdk,容易出现一些奇怪的问题,比如:没有jps命令,自己都不知道哪里出问题了。CSDN的下载镜像:jdk-8u231-linux-x64.tar.gz下载。Oracle不允许随意设立下载镜像,我就在CSDN这里就设置了1个积分下载,以便绕过Oracle限制。

上述文件下载完成以后,解压出来(如果是官网下载的可以不解压,直接上传到服务器上)。然后把解压出来的“jdk-8u231-linux-x64.tar.gz”传到服务器上。如果本地没有解压,那么传到服务器上可能要解压两次。
进入服务器保存这个文件的目录以后进行如下操作(下面的命令都是以root的权限操作的):

mkdir /usr/java                         #建立java的工作目录(文件夹)
tar -zxvf jdk-8u231-linux-x64.tar.gz    #解压JDK
mv jdk1.8.0_231/ /usr/java/             #将JDK移动(剪切)到/usr/java/目录
chown -R root:root /usr/java/jdk1.8.0_231/       #将JDK所有者设置为root
ln -sf /usr/java/jdk1.8.0_231 /usr/local/jdk   #设置JDK的软链接

上述的软链接的意思是:访问/usr/local/jdk就是访问/usr/java/jdk1.8.0_231,有点类似于Windows的快捷方式,但是比快捷方式更强大。

修改全局环境变量:

vi /etc/profile       #文件底部添加以下内容

在文件底部添加以下内容:

export JAVA_HOME="/usr/local/jdk"
export PATH=$JAVA_HOME/bin:$PATH

加载新的全局环境变量:

source /etc/profile
jps              

显示类似以下内容,就算安装jdk成功了

2491 Jps

安装并配置Zookeeper

由于Zookeeper类似于民主选举,每台服务器分别投票共同选举一个作为leader,剩下的都是follower。基于这个原因,官方建议服务器集群设置为奇数台,偶数台的话会有一台的资源浪费。根据咱们的集群规划:226-228为我们的Zookeeper服务器。
先用root权限操作:
先用root权限操作:
先用root权限操作:

cd     #进入root主目录
wget  https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz
mkdir /home/hadoop/server
mkdir -p /home/hadoop/data/zkdata
mkdir -p /home/hadoop/log/zklog
mv apache-zookeeper-3.5.6-bin/ /home/hadoop/server/
ln -sf /home/hadoop/server/apache-zookeeper-3.5.6-bin/  /home/hadoop/zookeeper
chown -R hadoop:hadoop /home/hadoop/*
vi /etc/profile       #文件底部添加以下内容

文件底部添加以下内容

export ZOOKEEPER_HOME="/home/hadoop/zookeeper"
export PATH=$ZOOKEEPER_HOME/bin:$PATH 

执行下述命令加载全局环境变量,然后切换到hadoop用户开始操作:

source /etc/profile
su hadoop

下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作

重要的事情说三遍:

cd /home/hadoop/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi /home/hadoop/zookeeper/conf/zoo.cfg      #对应内容调整如下

内容调整如下:

dataDir=/home/hadoop/data/zkdata
dataLogDir=/home/hadoop/log/zklog/
server.226=hadoop226:2888:3888
server.227=hadoop227:2888:3888
server.228=hadoop228:2888:3888

如果存在的内容则修改,不存在的内容,直接添加即可,解释如下:

格式:server.serverid=host:tickpot:electionport
server:固定写法
serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
host:主机名
tickpot:心跳通信端口
electionport:选举端口

最后不要忘了在每个服务器“/home/hadoop/data/zkdata/”下新建文件“myid”并把当前服务器编号写进去,举例:

echo 1 > /home/hadoop/data/zkdata/myid

以下内容只能在226-228上执行才能看到正确的结果:

zkServer.sh stop    #停止Zookeeper服务
zkServer.sh start   #开启Zookeeper服务
zkServer.sh status   #开启Zookeeper服务

正常情况下会看到下面的内容:

ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

如果启动失败,可以到“/home/hadoop/zookeeper/logs/”这个目录里面看看启动日志。

录入下面的命令:

jps

可以看到如下的结果:

2690 Jps
2473 QuorumPeerMain

查看Zookeeper的运行状态

zkServer.sh status

显示内容如下:

ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader      (或者显示:follower)

注意:虽然我们在配置文件中写明了服务器的列表信息,但是,我们还是需要去每一台服务 器去启动,不是一键启动集群模式。
每启动一台查看一下状态再启动下一台
三台机器上都要有QuorumPeerMain进程,都能显示follower或者leader

安装并配置Hadoop

下载Hadoop

先用root权限操作:
先用root权限操作:
先用root权限操作:

cd /home/hadoop/server
wget https://mirrors.aliyun.com/apache/hadoop/core/hadoop-3.2.1/hadoop-3.2.1.tar.gz
tar -zxvf hadoop-3.2.1.tar.gz
ln -sf /home/hadoop/server/hadoop-3.2.1/  /home/hadoop/hadoop
chown -R hadoop:hadoop /home/hadoop/*

配置全局环境变量文件profile

vi /etc/profile      #在文件尾部添加以下内容,用root用户操作
#####################################################################
export HADOOP_HOME="/home/hadoop/hadoop"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source /etc/profile
echo $HADOOP_HOME

显示如下内容就对了

/home/hadoop/hadoop

下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作

建立相关的目录

执行以下命令

su hadoop
rm -rf /home/hadoop/hadoop/share/doc      #删除文档,很大,又没用
mkdir -p /home/hadoop/data/dfs/data
mkdir /home/hadoop/data/dfs/name
mkdir /home/hadoop/data/dfs/tmp
mkdir /home/hadoop/data/journaldata
cd /home/hadoop/hadoop/etc/hadoop
vi /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh

添加一行内容:

export JAVA_HOME="/usr/local/jdk"

修改配置文件core-site.xml

vi /home/hadoop/hadoop/etc/hadoop/core-site.xml

内容如下:

xml version="1.0" encoding="UTF-8"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
     <!-- 指定hdfs的nameservice为myha01 -->
     <property>
         <name>fs.defaultFS</name>
         <value>hdfs://myha01/
     </property>
     <!-- 指定hadoop临时目录 -->
     <property>
         <name>hadoop.tmp.dir</name>
         <value>/home/hadoop/data/dfs/tmp</value>
     </property>
     <!-- 指定zookeeper地址 -->
     <property>
         <name>ha.zookeeper.quorum</name>
         <value>hadoop226:2181,hadoop227:2181,hadoop228:2181</value>
     </property>
     <!-- hadoop链接zookeeper的超时时长设置 -->
     <property>
         <name>ha.zookeeper.session-timeout.ms</name>
         <value>1000</value>
         <description>ms</description>
     </property>
     <!-- 修改core-site.xml中的ipc参数,防止出现连接journalnode服务ConnectException -->
     <property>
        <name>ipc.client.connect.max.retries</name>
        <value>100</value>
        <description>Indicates the number of retries a client will make to establish a server connection.</description>
     </property>
     <property>
        <name>ipc.client.connect.retry.interval</name>
        <value>10000</value>
        <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
     </property>
     <property>
        <name>topology.script.file.name</name>
        <value>10000</value>
        <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
     </property>
     </configuration>

修改配置文件hdfs-site.xml

vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml

内容如下

xml version="1.0" encoding="UTF-8"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
     <!-- 指定副本数 -->
     <property>
         <name>dfs.replication</name>
         <value>3</value>
     </property>
     <!-- 配置namenode和datanode的工作目录-数据存储目录 -->
     <property>
         <name>dfs.namenode.name.dir</name>
         <value>/home/hadoop/data/dfs/name</value>
     </property>
     <property>
         <name>dfs.datanode.data.dir</name>
         <value>/home/hadoop/data/dfs/data</value>
     </property>
     <!-- 启用webhdfs -->
     <property>
         <name>dfs.webhdfs.enabled</name>
         <value>true</value>
     </property>
     <!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致 
                  dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。 
         配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。 
         例如,如果使用"myha01"作为nameservice ID,并且使用"nn1""nn2"作为NameNodes标示符 
     -->
     <property>
         <name>dfs.nameservices</name>
         <value>myha01</value>
     </property>
     <!-- myha01下面有两个NameNode,分别是nn1,nn2 -->
     <property>
         <name>dfs.ha.namenodes.myha01</name>
         <value>nn1,nn2</value>
     </property>
     <!-- nn1的RPC通信地址 -->
     <property>
         <name>dfs.namenode.rpc-address.myha01.nn1</name>
         <value>hadoop221:9000</value>
     </property>
     <!-- nn1的http通信地址 -->
     <property>
         <name>dfs.namenode.http-address.myha01.nn1</name>
         <value>hadoop221:50070</value>
     </property>
     <!-- nn2的RPC通信地址 -->
     <property>
         <name>dfs.namenode.rpc-address.myha01.nn2</name>
         <value>hadoop222:9000</value>
     </property>
     <!-- nn2的http通信地址 -->
     <property>
         <name>dfs.namenode.http-address.myha01.nn2</name>
         <value>hadoop222:50070</value>
     </property>
     <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表 
                  该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId 
         journalId推荐使用nameservice,默认端口号是:8485 -->
     <property>
         <name>dfs.namenode.shared.edits.dir</name>
         <value>qjournal://hadoop223:8485;hadoop224:8485;hadoop225:8485/myha01
     </property>
     <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
     <property>
         <name>dfs.journalnode.edits.dir</name>
         <value>/home/hadoop/data/journaldata</value>
     </property>
     <!-- 开启NameNode失败自动切换 -->
     <property>
         <name>dfs.ha.automatic-failover.enabled</name>
         <value>true</value>
     </property>
     <!-- 配置失败自动切换实现方式 -->
     <property>
         <name>dfs.client.failover.proxy.provider.myha01</name>
         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
     </property>
     <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
     <property>
         <name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)</value>
     </property>
     <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
     <property>
         <name>dfs.ha.fencing.ssh.private-key-files</name>
         <value>/home/hadoop/.ssh/id_rsa</value>
     </property>
     <!-- 配置sshfence隔离机制超时时间 -->
     <property>
         <name>dfs.ha.fencing.ssh.connect-timeout</name>
         <value>30000</value>
     </property>
     <property>
         <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
         <value>60000</value>
     </property>
 </configuration>

修改配置文件mapred-site.xml

vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml

全部内容如下:

xml version="1.0"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
     <!-- 指定mr框架为yarn方式 -->
     <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
     
     <!-- 指定mapreduce jobhistory地址 -->
     <property>
         <name>mapreduce.jobhistory.address</name>
         <value>hadoop222:10020</value>
     </property>
     
     <!-- 任务历史服务器的web地址 -->
     <property>
         <name>mapreduce.jobhistory.webapp.address</name>
         <value>hadoop222:19888</value>
     </property>
     <property>
         <name>mapreduce.application.classpath</name>
         <value>/home/hadoop/hadoop/etc/hadoop:/home/hadoop/hadoop/share/hadoop/common/lib/*:/home/hadoop/hadoop/share/hadoop/common/*:/home/hadoop/hadoop/share/hadoop/hdfs:/home/hadoop/hadoop/share/hadoop/hdfs/lib/*:/home/hadoop/hadoop/share/hadoop/hdfs/*:/home/hadoop/hadoop/share/hadoop/mapreduce/lib/*:/home/hadoop/hadoop/share/hadoop/mapreduce/*:/home/hadoop/hadoop/share/hadoop/yarn:/home/hadoop/hadoop/share/hadoop/yarn/lib/*:/home/hadoop/hadoop/share/hadoop/yarn/*</value>
     </property>
 </configuration>

修改配置文件yarn-site.xml

vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml

内容如下

xml version="1.0"?>
<configuration>
     <!-- 开启RM高可用 -->
     <property>
         <name>yarn.resourcemanager.ha.enabled</name>
         <value>true</value>
     </property>
 
     <!-- 指定RM的cluster id -->
     <property>
         <name>yarn.resourcemanager.cluster-id</name>
         <value>yrc</value>
     </property>
 
     <!-- 指定RM的名字 -->
     <property>
         <name>yarn.resourcemanager.ha.rm-ids</name>
         <value>rm1,rm2</value>
     </property>
 
     <!-- 分别指定RM的地址 -->
     <property>
         <name>yarn.resourcemanager.hostname.rm1</name>
         <value>hadoop226</value>
     </property>
 
     <property>
         <name>yarn.resourcemanager.hostname.rm2</name>
         <value>hadoop227</value>
     </property>
 
     <!-- 指定zk集群地址 -->
     <property>
         <name>yarn.resourcemanager.zk-address</name>
         <value>hadoop226:2181,hadoop227:2181,hadoop228:2181</value>
     </property>
 
     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
 
     <property>
         <name>yarn.log-aggregation-enable</name>
         <value>true</value>
     </property>
 
     <property>
         <name>yarn.log-aggregation.retain-seconds</name>
         <value>86400</value>
     </property>
 
     <!-- 启用自动恢复 -->
     <property>
         <name>yarn.resourcemanager.recovery.enabled</name>
         <value>true</value>
     </property>
 
     <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
     <property>
         <name>yarn.resourcemanager.store.class</name>
         <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
     </property>
    <property>
        <name>yarn.application.classpath</name>
        <value> /home/hadoop/hadoop/etc/hadoop:/home/hadoop/hadoop/share/hadoop/common/lib/*:/home/hadoop/hadoop/share/hadoop/common/*:/home/hadoop/hadoop/share/hadoop/hdfs:/home/hadoop/hadoop/share/hadoop/hdfs/lib/*:/home/hadoop/hadoop/share/hadoop/hdfs/*:/home/hadoop/hadoop/share/hadoop/mapreduce/lib/*:/home/hadoop/hadoop/share/hadoop/mapreduce/*:/home/hadoop/hadoop/share/hadoop/yarn:/home/hadoop/hadoop/share/hadoop/yarn/lib/*:/home/hadoop/hadoop/share/hadoop/yarn/*</value>
    </property>
    <property>
        <!-- 客户端通过该地址向RM提交对应用程序操作 -->
        <name>yarn.resourcemanager.address.rm1</name>
        <value>hadoop226:8032</value>
    </property>
    <property>
        <!--ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 -->
        <name>yarn.resourcemanager.scheduler.address.rm1</name>  
        <value>hadoop226:8030</value>
    </property>
    <property>
        <!-- RM HTTP访问地址,查看集群信息-->
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop226:8088</value>
    </property>
    <property>
        <!-- NodeManager通过该地址交换信息 -->
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>hadoop226:8031</value>
    </property>
    <property>
        <!--管理员通过该地址向RM发送管理命令 -->
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>hadoop226:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm1</name>
        <value>hadoop226:23142</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>hadoop227:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>hadoop227:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop227:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>hadoop227:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>hadoop227:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm2</name>
        <value>hadoop227:23142</value>
    </property>
</configuration>

修改配置文件workers

vi /home/hadoop/hadoop/etc/hadoop/workers

这个文件里面填写的是存储/计算节点(HDFS和YARN)的主机名称,内容如下:

hadoop223
hadoop224
hadoop225
hadoop226
hadoop227
hadoop228

安装HBase

Hbase的安装单独谢了一篇文章,可以参考一下。
参考文章:怎么安装HBase?如何在CentOS Linux 8 下安装配置Hbase?

配置以后的操作

注意:以下内容需要一步一步的来操作,如果你还不熟悉,一定不要跳过任何一步。

将配置好的虚拟机复制出来7份,并分别都启动,接着进行如下操作:

修改网卡IP

先用root权限操作:
先用root权限操作:
先用root权限操作:
用root用户执行下述命令:
在222-228服务器上运行以下指令,修改成对应的IP

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

IP配置完毕以后,输入一下指令,重启网卡:
先载入新的网卡配置文件:

nmcli c reload

执行网卡重启(下面的三条命令都可以):

nmcli c up ens160
nmcli d reapply ens160
nmcli d connect ens160

总结:重启CentOS Linux 8的网卡,先载入新的配置文件,然后再执行重启网卡命令即可。

参考资料:CentOS Linux 8怎么配置IP?怎么重启网卡?

修改各自的hostname

先用root权限操作:
先用root权限操作:
先用root权限操作:
用root用户执行下述命令:
在222-228服务器上运行以下指令,修改成对应的hostname

hostnamectl set-hostname hadoop222
hostnamectl set-hostname hadoop223
hostnamectl set-hostname hadoop224
hostnamectl set-hostname hadoop225
hostnamectl set-hostname hadoop226
hostnamectl set-hostname hadoop227
hostnamectl set-hostname hadoop228

配置免密码登录

生成各种密码文件(如果是虚拟机,可在安装全部的软件后再操作)
下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作

1、 在所有的服务器上执行以下命令(包括主服务器)

cd         #进入hadoop的主目录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa         #生成验证密钥
cat ~/.ssh/id_rsa.pub|ssh hadoop@hadoop221 "cat - >> ~/.ssh/authorized_keys" #发送给主服务器

2、如果需要互相免密码登录,则主服务器执行下面命令,把密钥分发给从服务器

scp ~/.ssh/authorized_keys hadoop@hadoop222:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop223:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop224:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop225:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop226:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop227:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@hadoop228:~/.ssh/authorized_keys

在所有的服务器上执行以下命令(包括主服务器)

chmod 0600 ~/.ssh/authorized_keys

退出hadoop用户,再重新 su hadoop进入一次即可免密登录了

修改Zookeeper的myid

下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作
用hadoop用户执行下述命令,在226-228上分别执行下列命令:

echo 226 > /home/hadoop/data/zkdata/myid      #hadoop226上执行这个命令
echo 227 > /home/hadoop/data/zkdata/myid      #hadoop227上执行这个命令
echo 228 > /home/hadoop/data/zkdata/myid      #hadoop228上执行这个命令

将hadoop安装包分发到其他集群节点

重点强调: 每台服务器中的hadoop安装包的目录必须一致, 安装包的配置信息还必须保持一致
重点强调: 每台服务器中的hadoop安装包的目录必须一致, 安装包的配置信息还必须保持一致
重点强调: 每台服务器中的hadoop安装包的目录必须一致, 安装包的配置信息还必须保持一致
下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作
如果是在真实的服务器上操作,则需要将Hadoop安装包分发到其他集群节点,命令如下:

scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop222:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop223:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop224:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop225:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop226:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop227:$PWD
scp -r /home/hadoop/server/hadoop-3.2.1/ hadoop228:$PWD

第一次启动Hadoop服务

重点强调:一定要按照以下步骤逐步进行操作
重点强调:一定要按照以下步骤逐步进行操作
重点强调:一定要按照以下步骤逐步进行操作
下面以hadoop用户操作
下面以hadoop用户操作
下面以hadoop用户操作

1、启动Zookeeper

启动3台服务器上的zookeeper服务,一台一台启动(226-228)

 zkServer.sh start

显示内容如下:

ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看是否启动成功:

 jps

显示内容类似如下:

2674 Jps
2647 QuorumPeerMain

查看各台服务器的状态:

zkServer.sh status

显示内容类似如下:

ZooKeeper JMX enabled by default
Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower      (或者显示leader)

三台机器,一台一台启动并显示集群成功以后,继续执行以下内容。

2、启动journalnode

按照之前的规划,我的是在hadoop223、hadoop224、hadoop225上进行启动,启动命令如下:

hdfs --daemon start journalnode
jps

显示内容如下:

2578 JournalNode
2627 Jps

3、格式化namenode

格式化namenode,在hadoop221上执行,只在第一次安装的时候运行此命令,会清空数据

hdfs namenode -format

显示内容部分如下:

/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop1/192.168.1.221
************************************************************/

4、复制namenode数据给hadoop222

要把在hadoop221节点上生成的元数据 给复制到 另一个namenode(hadoop222)节点上,只在第一次安装的时候运行此命令

cd /home/hadoop/data
ls

显示内容如下:

dfs  journaldata  zkdata

复制namenode数据给hadoop222

scp -r dfs/ hadoop222:$PWD

显示内容如下:

The authenticity of host 'hadoop2 (192.168.1.222)' can't be established.
ECDSA key fingerprint is SHA256:QMy************************.
ECDSA key fingerprint is MD5:86:**: **:**:**:**:**:**:**:43:15:72:ea.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop2,192.168.1.222' (ECDSA) to the list of known hosts.
VERSION                                100%  218    96.2KB/s   00:00    
seen_txid                                 100%    2     1.0KB/s   00:00    
fsimage_0000000000000000000.md5          100%   62    28.1KB/s   00:00    
fsimage_0000000000000000000              100%  401   163.3KB/s   00:00    

5、格式化zkfc

重点强调:只能在nameonde节点进行(hadoop221/ hadoop222)
重点强调:只能在nameonde节点进行(hadoop221/ hadoop222)
重点强调:只能在nameonde节点进行(hadoop221/ hadoop222)

hdfs zkfc -formatZK

显示内容如下:
##############################
2019-11-25 11:09:43,778 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/myha01 in ZK.
2019-11-25 11:09:43,783 INFO zookeeper.ZooKeeper: Session: 0x10000bc570d0000 closed
2019-11-25 11:09:43,785 INFO zookeeper.ClientCnxn: EventThread shut down for session: 0x10000bc570d0000
2019-11-25 11:09:43,786 INFO tools.DFSZKFailoverController: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DFSZKFailoverController at hadoop221/192.168.1.221
************************************************************/
##############################
只在第一次安装的时候运行此命令,结束!!!!
只在第一次安装的时候运行此命令,结束!!!!
只在第一次安装的时候运行此命令,结束!!!!

日常启动hadoop

Hadoop启动顺序:Zookeeper->Hadoop->Hbase>Hive…

0、停止所有服务

stop-hbase.sh                          #停止Hbase,最好在hadoop221(HMaster)上执行
stop-all.sh                            #最好在hadoop221(NameNode)上执行
mapred --daemon stop historyserver 	   #hadoop222上执行
zkServer.sh stop                       #hadoop226、hadoop227、hadoop228上操作

1、启动ZooKeeper

在hadoop226、hadoop227、hadoop228上分别执行以下命令:

zkServer.sh stop
zkServer.sh start
jps

显示如下内容,则启动成功

2674 Jps
2647 QuorumPeerMain

2、启动HDFS

其中一台机器执行就OK了,比如:hadoop221

stop-dfs.sh    #先停掉服务
start-dfs.sh   #如果出现错误,则在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME

显示内容如下:

Starting namenodes on [hadoop221 hadoop222]
Starting datanodes
Starting journal nodes [hadoop223 hadoop224 hadoop225]
Starting ZK Failover Controllers on NN hosts [hadoop221 hadoop222]

执行命令查看:

jps

hadoop221、hadoop222上显示如下:

2611 DFSZKFailoverController
2201 NameNode
2732 Jps

hadoop223、224、225 …显示如下:

1828 JournalNode
2055 DataNode
2188 Jps

3、启动YARN

在主备 resourcemanager(hadoop226、hadoop227) 中随便选择一台进行启动:

stop-yarn.sh
start-yarn.sh

显示内容如下:

Starting resourcemanagers on [ hadoop226 hadoop227]
Starting nodemanagers

执行命令查看:

jps

hadoop226、hadoop227 显示如下:

1890 QuorumPeerMain
2071 DataNode
2791 Jps
2650 NodeManager
2509 ResourceManager

若备用节点的 resourcemanager 没有启动起来,则手动启动起来,在hadoop227上进行手动启动

yarn-daemon.sh start resourcemanager

4、启动 mapreduce 任务历史服务器

在hadoop222上执行如下命令:

mapred --daemon stop historyserver
mapred --daemon start historyserver

5、启动HBase

hadoop221上执行

stop-hbase.sh
start-hbase.sh

6、查看各主节点的状态

HDFS
[hadoop@hadoop221 ~] $ hdfs haadmin -getServiceState nn1
active
[hadoop@hadoop221 ~] $ hdfs haadmin -getServiceState nn2
standby

如果两个NameNode都是“standby”则执行:“hdfs --daemon start zkfc”,激活选举制度

YARN
[hadoop@hadoop226 ~]$ yarn rmadmin -getServiceState rm1
active
[hadoop@hadoop226 ~]$ yarn rmadmin -getServiceState rm2
standby

7、WEB界面进行查看

HDFS
hadoop221: http://hadoop221:50070/dfshealth.html#tab-overview
hadoop222: http://hadoop222:50070/dfshealth.html#tab-overview
YARN
standby节点会自动跳到avtive节点:http://hadoop226:8088/cluster
MapReduce历史服务器web界面:http://hadoop222:19888/jobhistory
HBase
HMaster数据查看:http://hadoop221:16010/
RegionServer数据查看:http://hadoop228:16030/

你可能感兴趣的:(CentOS,Hadoop,Java)