CentOS-7 Linux 上部署hadoop集群(3台)

🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈

🌈前言

本文记载一次在虚拟机上Linux 上部署hadoop集群(3台)

🌈环境说明:

虚拟机采用: vmware虚拟机软件
centos包CentOS-7-x86_64-Minimal-1804.iso
(也可以是DVD的iso文件安装的系统可以少安装很多包)
jdk版本:1.8.181
hadoop版本:3.2.1
zookeeper版本:3.4.13
需要依赖glibc-2.14以上版本
集群地址分配:
192.168.1.227 master hadoop1
192.168.1.228 slave1 hadoop2
192.168.1.229 slave2 hadoop3

🌈安装部署

🐁1.安装VirtualBox虚拟机软件

下载VirtualBox软件并安装

🐂2.在虚拟机上安装centos-7

🐅3.设置虚拟机

 安装常用命令 yum -y install net-tools vim zip unzip

(1)修改虚拟机名称(如果在安装时,设置了主机名,那么就不用修改)

  [root@master /]# hostnamectl set-hostname hadoop1
    hostname查看一个主机名称

(2)设置虚拟机网络
1.将VirtualBox软件虚拟机网络设置为桥接自动(也可心用其它网络设置),

 2.查询虚拟机使用的网卡信息,并修改网卡
 [root@master /]# ip addr
 我的虚拟机网卡信息如下:
 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.166.188  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::20c:29ff:fe8f:ff32  prefixlen 64  scopeid 0x20<link>
    ether 00:0c:29:8f:ff:32  txqueuelen 1000  (Ethernet)
    RX packets 679298  bytes 160057604 (152.6 MiB)
    RX errors 0  dropped 1138  overruns 0  frame 0
    TX packets 426918  bytes 65730954 (62.6 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 465005  bytes 50278038 (47.9 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 465005  bytes 50278038 (47.9 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

对应的网卡文件为/etc/sysconfig/network-scripts/ifcfg-enp0s3,如果看到的网卡为ecth0,那么对应的网卡文件为/etc/sysconfig/network-scripts/ifcfg-ecth0
3. 修改对应的网卡文件,将ip设置成静态并且随机启动

 [root@master /]#vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
 内容如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#修改IP分配策略
BOOTPROTO=static
DEFROUTE=yes
#IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=80c892ca-6412-4418-9918-e17c3b168fd4
DEVICE=ens33
#修改网卡为开机启动
ONBOOT=yes
#设置静态的ip地址
IPADDR=192.168.1.227
#设置网关
GATEWAY=192.168.1.1
#设置子网掩码
NETMASK=255.255.255.0
#设置DNS地址
DNS1=192.168.1.1
其中大部分配置为原有,#开头的是注释掉原来的配置,修改的配置有BOOTPROTO,ONBOOT
添加的有IPADDR,GATEWAY,NETMASK,DNS1
保存后重启网卡
[root@master /]#service network restart
用ifconfig 或ip addr命令查看网络,检查配置的网卡是否生效,如果没有请重新配置ip
  1. 通过ping命令检查看虚拟机是否可以连网
    ping www.baidu.com
  [root@hrmw-web-api ~]#     ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=54 time=18.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=54 time=16.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=54 time=17.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=54 time=16.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=54 time=16.5 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=6 ttl=54 time=17.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=7 ttl=54 time=18.1 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=8 ttl=54 time=28.5 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=9 ttl=54 time=19.0 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=10 ttl=54 time=16.4 ms
^Z
[1]+  已停止               ping www.baidu.com
如果结果如下:则表示网卡正常
[root@master /]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=14.2 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=14.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=14.8 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=55 time=13.8 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=55 time=15.1 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 13.814/14.551/15.116/0.465 ms
(这时已经可以用xshell等ssh工具连接虚拟机了,不用再在vmwarn中操作(太麻烦))
     3.安装net-tools,方便使用ifconfig查询网络信息,也可以不安装,用ip addr命令查看
   安装net-tools
   yum -y install net-tools
(3)修改虚拟机host文件
    安装vim命令:
    yum -y install vim
[root@master /]#vim /etc/hosts
修改内容:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.227  master hadoop1
192.168.1.228  slave1 hadoop2
192.168.1.229  slave2 hadoop3
其中 master 对应本机ip,  hadoop1为本机hostname
其它两个ip为其它两个slave节点的ip 
让修改生效
[root@master /]#source /etc/hosts
  1. 关闭防火墙
临时关闭
	[root@master /]#systemctl stop firewalld
    禁止开机启动
    [root@master /]# systemctl disable firewalld
这里关闭防火墙并禁止开机启动(也可心将下面安装步骤中所涉及到的端口开放即可,建议先关闭,安装测试完成后再考虑开放端口,开启防火墙)
  1. 安装或升级glibc
    注意:hadoop依赖glibc-2.14以上版本,在格式化之前先安装glibc用下面命令即可
yum -y install glibc

🐇4.下载并安装jdk1.8.181

去oracle官网下载最新的jdk版本,我用的是jdk-8u181-linux-x64.tar.gz
下载完成后,使用xftp或其它ftp工具将文件上传到虚拟机的任意一个目录(我放在的/root目录下)
通过tar命令解压
cd 到jdk-8u181-linux-x64.tar.gz文件所在目录

软件的下载也可以,通过安装wget命令,通过wget下载(这样可以省去ftp上传,但是要在网卡找对下载地址,我用的本地下载ftp上传)
安装wget可以用yum就行:

   yum -y install wget

[root@master /]#cd /root
解压到/usr/local(这个是linux默认安装软件的目录,也可以装到其它地方,只要配置环境变量的时候,设置为对应的目录即可)
[root@master /]#tar -xzvf jdk-8u181-linux-x64.tar.gz -C /usr/local
解压后的jdk目录为/usr/local/jdk1.8.0_181
这里我用mv命令把jdk1.8.0_181改为jdk8,也可以不修改
[root@master /]#mv /usr/local/jdk1.8.0_181 /usr/local/jdk8
设置jdk的环境变量,修改/etc/profile文件(这个是所有用启都可用的配置文件,也可以在用户根目录的.bash_profile中设置,这样的话只对用户本身有效)
[root@master /]#vim /etc/profile
在文件的最后添加如下配置:

export JAVA_HOME=/usr/local/jdk8
   export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
   export PATH=$JAVA_HOME/bin:$PATH

这里要在path中把jdk的配置到最前,因为系统默认是openJdk,如果放后面的话不会生效
修改完后让配置生效,执行:

  [root@master /]#source /etc/profile

检查jdk是否安装正确:

 [root@master /]# java -version
	java version "1.8.0_181"
	Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
	Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

如上所示则jdk安装完成

🐉5. 创建hadoop用户,并设置sudo(以下也可以用root用户,这里我新建了个hadoop用户来安装)

[root@master /]#useradd hadoop
设置hadoop用户密码
[root@master /]#passwd hadoop
设置sudo(让hadoop用户可以用sudo命令来修改一些系统配置,省去了用su来回切换用户的麻烦)
[root@master /]#vim /etc/sudoers
增加一条类似root用户的配置:
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
[root@master /]#source /etc/sudoers
上面这条执行如果有错误,可以不用理会
配置完hadoop用户就可以使用sudo命令了

以下安装基本都用hadoop用户了,安装软件的步骤每个机器上基本相同,所以装好之后克隆虚拟机就可以,然后稍改下配置即可

🐍6.安装zookeeper集群

(1)在网上下载zookeeper,我这里下载了zookeeper-3.4.13.tar.gz其它的版本也可以
将安装包上传到hadoop用户根目录
在hadoop用户根目录下新建app目录(我把软件装在app目录下,也可以是其它目录,其它目录要给zookeepr用户赋权限)
[hadoop@master ~] m k d i r / h o m e / h a d o o p / a p p 解 压 z o o k e e p e r 安 装 包 到 a p p 目 录 下 [ h a d o o p @ m a s t e r   ] mkdir /home/hadoop/app 解压zookeeper安装包到app目录下 [hadoop@master ~] mkdir/home/hadoop/appzookeeperapp[hadoop@master ]tar -xzvf zookeeper-3.4.13.tar.gz -C /home/hadoop/app
解压之后的目录为/home/hadoop/app/zookeeper-3.4.13
这里我改为了/home/hadoop/app/zookeeper
[hadoop@master ~] m v / h o m e / h a d o o p / a p p / z o o k e e p e r − 3.4.13 / h o m e / h a d o o p / a p p / z o o k e e p e r ( 2 ) 配 置 z o o k e e p e r 集 群 进 入 z o o k e e p e r 的 c o n f 目 录 [ h a d o o p @ m a s t e r   ] mv /home/hadoop/app/zookeeper-3.4.13 /home/hadoop/app/zookeeper (2)配置zookeeper集群 进入zookeeper的conf目录 [hadoop@master ~] mv/home/hadoop/app/zookeeper3.4.13/home/hadoop/app/zookeeper(2)zookeeperzookeeperconf[hadoop@master ]cd /home/hadoop/app/zookeeper/conf
将zoo_sample.cfg配置文件拷贝一份改名为zoo.cfg
[hadoop@master ~] c p z o o s a m p l e . c f g z o o . c f g 修 改 z o o . c f g [ h a d o o p @ m a s t e r   ] cp zoo_sample.cfg zoo.cfg 修改zoo.cfg [hadoop@master ~] cpzoosample.cfgzoo.cfgzoo.cfg[hadoop@master ]vim zoo.cfg
增加如下配置:
#zookeeper的data文件存放目录
dataDir=/home/hadoop/app/zookeeper/data
#zookeeper的日志文件目录
dataLogDir=/home/hadoop/app/zookeeper/datalog
# the port at which the clients will connect
#zookeeper的端口(我这里用默认)
clientPort=2181
#集群配置
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
注意:dataDir是原有的只要修改下目录即可,这个目录可以随意,没有的话可以mkdir去建,cilentPort也是原有的不用动;
集群配置中的server.1,server.2,server.3这个是集群的id,随后建myid文件用的id;

master,slave1,slave2是在/etc/hosts中配置的安装集群的服务器地址,也可以用IP,后面的端口都是用默认的

(3)创建zookeeper的data和log存放目录
[hadoop@master ~] m k d i r − p / h o m e / h a d o o p / a p p / z o o k e e p e r / d a t a [ h a d o o p @ m a s t e r   ] mkdir -p /home/hadoop/app/zookeeper/data [hadoop@master ~] mkdirp/home/hadoop/app/zookeeper/data[hadoop@master ]mkdir -p /home/hadoop/app/zookeeper/datalog
要和zoo.cfg中配置的一致
(4)创建myid文件
进入上一步建的data目录,并创建myid文件
[hadoop@master ~] c d / h o m e / h a d o o p / a p p / z o o k e e p e r / d a t a [ h a d o o p @ m a s t e r   ] cd /home/hadoop/app/zookeeper/data [hadoop@master ~] cd/home/hadoop/app/zookeeper/data[hadoop@master ]vim myid
myid文件中的内容对应,zoo.cfg中集群配置中的server.后面的数字,例如master机器上配置1,slave1上配置2,slave3上配置3
[hadoop@master data]$ vim myid

	1
	~                                                                                                   
注意:myid文件原来是不存在的,通过vim命令编辑保存后,会新建的
另外的机器安装相同,克隆虚拟机后修改myid文件就好
(5)设置zookeeper的环境变量,方便启动(也可以不设置,每次启动都要到zookeeper安装目录的bin下启动)
 [hadoop@master ~]$sudo vim /etc/profile
 说明:第一次用sudo可能要输入root用户密码
 在/etc/profile后面添加
 export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper

export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin

(6)配置完成后就可以启动zookeeper了
  按照以上配置就没问题,这里就不启动了,还要安装hadoop
  zookeeper的启动命令:
                  zkServer.sh start 启动
                  zkServer.sh stop 关闭
		  zkServer.sh restart 重启

🐎7.安装hadoop3.2.1并配置

(1)hadoop这里用3.2.1的版本

去官网下载hadoop-3.2.1.tar.gz包,通过ftp上传到hadoop根目录
解压到app目录
[hadoop@master ~] t a r − x z v f h a d o o p − 3.2.1. t a r . g z − C a p p / 解 压 后 目 录 / h o m e / h a d o o p / a p p / h a d o o p − 3.2.1 这 里 我 把 目 录 修 改 为 h a d o o p 3 [ h a d o o p @ m a s t e r   ] tar -xzvf hadoop-3.2.1.tar.gz -C app/ 解压后目录/home/hadoop/app/hadoop-3.2.1 这里我把目录修改为hadoop3 [hadoop@master ~] tarxzvfhadoop3.2.1.tar.gzCapp//home/hadoop/app/hadoop3.2.1hadoop3[hadoop@master ] mv /home/hadoop/app/hadoop-3.2.1 /home/hadoop/app/hadoop3
(2)配置环境变量,方便启动,执行hdfs命令
[hadoop@master ~]$ sudo vim /etc/profile
在最后添加:
export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/home/hadoop/app/hadoop3

export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper

export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
这里path中要添加hadoop的bin和sbin两个目录
(3)hadoop配置文件配置(hadoop的配置文件在安装目录下的etc/hadoop下)
   1.修改workers,配置服务器列节点表
   [hadoop@hadoop1 app]$ cd /home/hadoop/app/hadoop3/etc/hadoop/
   [hadoop@master hadoop]$ vim workers
   内容如下:
    master
    slave1
    slave2
	
	注意:这个是在/etc/hosts中配置的三台集群服务器节点

   2.配置hadoop-env.sh
    [hadoop@master hadoop]$ vim hadoop-env.sh
	添加JAVA_HOME和HADOOP_HOME 防止找到不jdk和hadoop
	export JAVA_HOME=/usr/local/jdk8
    export HADOOP_HOME=/home/hadoop/app/hadoop3
   3.配置mapred-env.sh
   [hadoop@master hadoop]$ vim mapred-env.sh
   添加JAVA_HOME和HADOOP_HOME 防止找到不jdk和hadoop
    export JAVA_HOME=/usr/local/jdk8
    export HADOOP_HOME=/home/hadoop/app/hadoop3
   4.配置yarn-env.sh
   [hadoop@master hadoop]$ vim yarn-env.sh
   添加JAVA_HOME和HADOOP_HOME 防止找到不jdk和hadoop
    export JAVA_HOME=/usr/local/jdk8
    export HADOOP_HOME=/home/hadoop/app/hadoop3
	
	
   注意:下面步骤的配置文件如果在home/hadoop/app/hadoop3/etc/hadoop下没有时,将该目录下相应的 ***-**.xml.example文件拷贝一份改名即可
	
   5.配置core-site.xml
   [hadoop@master hadoop]$ vim core-site.xml
   内容如下:
   <configuration>
    <!--默认是namenode,datanode,journalNode等存放数据的公共目录-->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/app/hadoop3/hdfs/tmp</value>
	</property>
	<!--流文件的缓冲区大小128k 默认4096 4k-->
	<property>
		<name>io.file.buffer.size</name>
		<value>131072</value>
	</property>
	<--默认的hdfs路径,当有多个HDFS集群同时工作时,的hdfs集群路径,其中mycluster的值来源于hdfs-size.xml中的配置-->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://mycluster</value>
	</property>
	<!--zookeeper集群的地址和端口,注意数量一定是可数个,最少三个-->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	</configuration>
	[hadoop@master hadoop]$ mkdir -p /home/hadoop/app/hadoop3/hdfs/tmp
	6.配置hdfs-site.xml
	[hadoop@master hadoop]$ vim hdfs-site.xml
	内容如下:
	
	<configuration>
	<!--定义集群名称-->
    <property>
		<name>dfs.nameservices</name>
		<value>mycluster</value>
	</property>
	<!--指定datanode存储数据复制的块数量,这里集群有3台机器,一共3份,两个是备份,默认是3个-->
	<property>
		 <name>dfs.replication</name>
		 <value>3</value>
	</property>
	<!--指定namenode存放数据的目录-->
	<property>
		 <name>dfs.namenode.name.dir</name>
		 <value>/home/hadoop/app/hadoop3/hdfs/name</value>
		 <final>true</final>
	</property>
	<!--指定datanode存放数据的目录-->
	<property>
		 <name>dfs.datanode.data.dir</name>
		 <value>/home/hadoop/app/hadoop3/hdfs/data</value>
		 <final>true</final>
	</property>
    <!--文件操作是否检查权限,一般设置为false,设置为true时,有时候访问会出现权限问题-->
	<property>
		<name>dfs.permissions.enabled</name>
		<value>false</value>
	</property>
	<!--指定mycluster集群的namenode机器有哪些,这里我的3个机器都可以作为namenode,名字随意不重复即可-->
	<property>
		<name>dfs.ha.namenodes.mycluster</name>
		<value>master,slave1,slave2</value>
	</property>
	<!--指定master,namenode的rpc访问地址-->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.master</name>
		<value>master:9820</value>
	</property>
    <!--指定slave1,namenode的rpc访问地址-->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.slave1</name>
		<value>slave1:9820</value>
	</property>
    <!--指定slave2,namenode的rpc访问地址-->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.slave2</name>
		<value>slave2:9820</value>
	</property>
	<!--指定master,namenode的http访问地址-->
	<property>
		<name>dfs.namenode.http-address.mycluster.master</name>
		<value>master:9870</value>
	</property>
	<!--指定slave1,namenode的http访问地址-->
	<property>
		<name>dfs.namenode.http-address.mycluster.slave1</name>
		<value>slave1:9870</value>
	</property>
	<!--指定slave2,namenode的http访问地址-->
	<property>
		<name>dfs.namenode.http-address.mycluster.slave2</name>
		<value>slave2:9870</value>
	</property>
	<!--指定namenode共享edits文件目录时,使用的journalNode集群信息-->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
	</property>
	<!--指定journalNode集群在对namenode的目录共享时,自己存放数据的目录-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/hadoop/app/hadoop3/data/journaldata/jn</value>
	</property>
	<!--指定集群出故障时,哪个实现类执行故障切换-->
	<property>
		<name>dfs.client.failover.proxy.provider.mycluster</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!--一旦需要namenode切换,使用ssh的方式进行操作-->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>
		   sshfence
		   shell(/bin/true)
		</value>
	</property>
	<!--使用ssh切换时,密钥存放地址-->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/hadoop/.ssh/id_rsa</value>
	</property>
	<!--设置ssh连接超时时间-->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>10000</value>
	</property>
	<!--设置ssh重连次数限制-->
	<property>
		<name>dfs.namenode.handler.count</name>
		<value>100</value>
	</property>
	<!--指定是否启动自动故障恢复,即当namenode出故障时,是否自动切换另一个-->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	</configuration>
	注意:为了省事,这里先配置一台的,其中ssh密钥地址,后面两台虚拟机建好时会配置ssh免密登陆,会产生密钥
     [hadoop@master hadoop]$ mkdir -p /home/hadoop/app/hadoop3/hdfs/name
         [hadoop@master hadoop]$ mkdir -p /home/hadoop/app/hadoop3/hdfs/data
         [hadoop@master hadoop]$ mkdir -p /home/hadoop/app/hadoop3/data/journaldata/jn
     [hadoop@master hadoop]$ mkdir -p /home/hadoop/app/hadoop3/logs

    7.配置mapred-site.xml
	[hadoop@master hadoop]$ vim mapred-site.xml
	内容如下:
	<configuration>
	<!--指定资源管理,这里用hadoop的yarn来管理-->
	<property>
		 <name>mapreduce.framework.name</name>
		 <value>yarn</value>
	</property>
	<!--设置mapreduce的环境变量-->
	<property>
	  <name>yarn.app.mapreduce.am.env</name>
	  <value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop3</value>
	</property>
	<property>
	  <name>mapreduce.map.env</name>
	  <value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop3</value>
	</property>
	<property>
	  <name>mapreduce.reduce.env</name>
	  <value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop3</value>
	</property>
	</configuration>
	8.配置yarn-site.xml
	[hadoop@master hadoop]$ vim yarn-site.xml
	内容如下:
	<configuration>
	<!--指定resourcmanager重连间隔时间-->
	<property>
		<name>yarn.resourcemanager.connect.retry-interval.ms</name>
		<value>2000</value>
	</property>
	<!--指定RM HA高可用激活-->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!--故障切换激活;默认的,在HA激活下可用。-->
	<property>
		<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!--当自动故障切换可用时,使用内嵌的选举器来选择活跃RM。默认的,在HA激活下可用。-->
	<property>
		<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
		<value>true</value>
	</property>
	<!--定义集群的ID。被选举器使用确保RM不会在其他集群中接管称为活跃RM-->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yarn-rm-cluster</value>
	</property>
	<!--指定RMs的逻辑ID列表-->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<!--指定rm1的主机地址-->
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>master</value>
	</property>
	<!--指定rm2的主机地址-->
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>slave1</value>
	</property>
	<!--指定是否覆盖-->
	<property>
		<name>yarn.resourcemanager.recovery.enabled</name>
		<value>true</value>
	</property>
	<!---->
	<property>
		<description>The class to use as the persistent store.</description>
		<name>yarn.resourcemanager.store.class</name>
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
	<!--配置zookeeper集群地址,如果是hadoop3.1以上版本,name属性改为hadoop.zk-address-->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	<!--指定rm1的配置地址-->
	<property>
		<name>yarn.resourcemanager.address.rm1</name>
		<value>master:8032</value>
	</property>
	<!--指定rm1的调度地址-->
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm1</name>
		<value>master:8034</value>
	</property>
	<!--指定rm1的web地址-->
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>master:8088</value>
	</property>
	<!--指定rm2的配置地址-->
	<property>
		<name>yarn.resourcemanager.address.rm2</name>
		<value>slave1:8032</value>
	</property>
	<!--指定rm2的调度地址-->
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm2</name>
		<value>slave1:8034</value>
	</property>
	<!--指定rm2的web地址-->
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>slave1:8088</value>
	</property>
	<!--指定nodemanager的服务,用逗号隔开,不能以数字开头 默认mapreduce_shuffle-->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!-- Map reduce 配置 shuffle-->
	<property>
		<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
		<value>org.apache.hadoop.mapred.ShuffleHandler</value>
	</property>
	<!--指定不进行container的大小限制检查-->
	<property>
	  <name>yarn.nodemanager.vmem-check-enabled</name>
	  <value>false</value>
	  <description>Whether virtual memory limits will be enforced for containers.</description>
	</property>
	</configuration>

 以上集群的主节点服务器就已经配置完成

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

🐐8.部署剩余两台从节点虚拟机

最简单的办法:1.以上面安装的虚拟机为基础克隆出两个虚拟机
2.然后修改网卡和主机名称
第2台虚拟机
[root@hadoop2 ~]# hostnamectl set-hostname hadoop2

	 [root@hadoop2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 
	 TYPE=Ethernet
	PROXY_METHOD=none
	BROWSER_ONLY=no
	#BOOTPROTO=dhcp
	BOOTPROTO=static
	DEFROUTE=yes
	IPV4_FAILURE_FATAL=no
	IPV6INIT=yes
	IPV6_AUTOCONF=yes
	IPV6_DEFROUTE=yes
	IPV6_FAILURE_FATAL=no
	IPV6_ADDR_GEN_MODE=stable-privacy
	NAME=enp0s3
	UUID=53334ffe-be25-46ee-b974-b17d3c55c313
	DEVICE=enp0s3
	ONBOOT=yes
	IPADDR=192.168.1.228
	GATEWAY=192.168.1.1
	NETMASK=255.255.255.0
	DNS1=192.168.1.1
	[root@hadoop2 ~]# service network restart
	第3台同上,主机名改为hadoop3
	  ip地址改为192.168.1.229
	 3.修改zookeeper的myid文件改为与ip相对应的即可
	 修改网卡和zookeeper的myid详见上面步骤
	 第2台(hadoop2)
	 [hadoop@hadoop2 ~]# cd /home/hadoop/app/zookeeper/data
	 [hadoop@hadoop2 data]# vim myid
	 2
	 第3台(hadoop3)
	 [hadoop@hadoop3 ~]# cd /home/hadoop/app/zookeeper/data
	 [hadoop@hadoop3 data]# vim myid
	 3

最麻烦的办法:按照以上步骤再装两台虚拟机
🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

🐒9.设置集群的3台虚拟机hadoop用户的ssh免密登陆

  1. 以hadoop的用户登陆虚拟机
    3台机器都要生成
    执行ssh-keygen命令创建ssh密钥
    [hadoop@master ~]$ ssh-keygen -t rsa
    出现输入和选择统一回车,取默认值就可以
    会在hadoop的根目录/home/hadoop/ 下生成一个.ssh的文件夹.ssh文件是隐藏文件可以用ls -a命令来查看
    [hadoop@master ~]$ cd .ssh/
    [hadoop@master .ssh]$ ls
    会看到如下文件:
    id_rsa id_rsa.pub known_hosts
    其中id_rsa是私钥(注意:私钥文件就是在hdfs-site.xml中配置的密钥地址),id_rsa.pub是公钥

  2. 将上一步中的公钥分别放到集群中的三台服务器
    (1)方法1:
    [hadoop@master .ssh] s s h − c o p y − i d − i   / . s s h / i d r s a . p u b h a d o o p @ m a s t e r 其 中   / . s s h / i d r s a . p u b 是 公 钥 文 件 的 路 径 , 也 可 写 绝 对 路 径 h a d o o p @ m a s t e r 中 h a d o o p 是 l i n u x 用 户 名 , m a s t e r 为 服 务 器 地 址 ( 因 为 之 前 在 / e t c / h o s t s 文 件 中 配 置 过 地 址 映 射 , 所 有 写 了 m a s t e r ) 也 可 以 改 为 i p 地 址 执 行 完 上 面 的 命 令 后 会 在 m a s t e r 服 务 器 h a d o o p 用 户 根 目 录 下 的 . s s h 文 件 夹 下 生 成 一 个 a u t h o r i z e d k e y s 文 件 记 录 公 钥 信 息 同 时 执 行 以 下 两 条 命 令 , 将 本 机 公 钥 也 放 到 其 它 两 台 虚 拟 机 上 [ h a d o o p @ m a s t e r . s s h ] ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@master 其中 ~/.ssh/id_rsa.pub是公钥文件的路径, 也可写绝对路径 hadoop@master中hadoop是linux用户名,master为服务器地址(因为之前在/etc/hosts文件中配置过地址映射,所有写了master)也可以改为ip地址 执行完上面的命令后会在master服务器hadoop用户根目录下的.ssh文件夹下生成一个authorized_keys文件记录公钥信息 同时执行以下两条命令,将本机公钥也放到其它两台虚拟机上 [hadoop@master .ssh] sshcopyidi /.ssh/idrsa.pubhadoop@master /.ssh/idrsa.pubhadoop@masterhadooplinuxmaster/etc/hostsmasteripmasterhadoop.sshauthorizedkeys[hadoop@master.ssh]ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave1
    [hadoop@master .ssh]$ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave2
    (2)方法2:
    执行以下命令将公钥放下authorized_keys文件中
    [hadoop@master .ssh]cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    别两个服务器
    可以用scp 将id_rsa.pub文件复制到其它两台服务器上,然后用cat id_rsa.pub >>~/.ssh/authorized_keys 放入文件中

  3. 在其它两台虚拟机上重复1,2步骤
    也可心把三台机器的id_rsa.pub 都放入1台机器的authorized_keys,然后把authorized_keys拷贝到其它两个虚拟机相应目录即可

    完成之后测试下3台机器间ssh免密是否配置成功
    注意:其中第2步用(2)种方法时第一次用ssh会出现确认选择,第(1)种不用

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

🐓10.启动测试

三台虚拟机都安装完成后,分别为hadoop用户连接三台虚拟机
注意:测试前要保证虚拟机的防火墙是关闭状态(或者程序用到的端口是开放状态,建议关闭防火墙)
(1)启动zookeeper集群
分别以hadoop用户在三台服务器上
执行:zkServer.sh start启动zookeeper
也可以编写脚本来同时启动3台linux上的zookeeper
测试zookeeper
分别在3台机器上执行
zkServer.sh status
如果出现两个follower和一个leader,说明zookeeper集群安装正常,否则检查配置,主要是myid文件
(2)分别在3台虚拟机上执行以下命令启动journalnode
hdfs --daemon start journalnode
启动后用jps查看进程
(3)格式化namenode
在master虚拟机上执行以下命令
[hadoop@master ~] h d f s n a m e n o d e − f o r m a t ( 4 ) 格 式 化 高 可 用 [ h a d o o p @ m a s t e r   ] hdfs namenode -format (4)格式化高可用 [hadoop@master ~] hdfsnamenodeformat4[hadoop@master ]hdfs zkfc -formatZK
(5)启动dfs
[hadoop@master ~]$start-dfs.sh
(6)在slave1和slave2上启动namenode的备份
[hadoop@slave1 ~]hdfs namenode -bootstrapStandby
[hadoop@slave2 ~]hdfs namenode -bootstrapStandby
(7)在浏览器中测试namenode(可跳过)
地址:
http://master:9870
http://slave1:9870
http://slave2:9870
其中master,slave1,slave2对应集群三台虚拟机的ip
(8)测试hdfs文件上传
新建一个words.txt文件

[hadoop@master ~]# vim words.txt
	   hadoop 
	   hadoop 
	   hadoop 
	   hello
       java
       hive
       hive
       world
       spark
       hello
       hi
       word
   在hdfs上创建一个test目录
   [hadoop@master ~]#hdfs dfs -mkdir /test
   查看目录是否创建成功
   [hadoop@master ~]#hdfs dfs -ls /
   将words.txt上传到test目录下
   [hadoop@master ~]#hdfs dfs -put words.txt /test
   查看test目录,文件是否上传成功
   [hadoop@master ~]#hdfs dfs -ls /test
   查询hdfs上words.txt的内容
   [hadoop@master ~]#hdfs dfs -cat /test/words.txt
  (9)启动yarn
     在master和slave1上分别启动resourcemanager执行命令如下:
	 yarn --daemon start resourcemanager
	 在3台虚拟机上分别启动nodemanager执行命令如下:
	 yarn --daemon start nodemanager
   
  (10)可以通过web查看yarn(可以省去)
    地址:
	   http://master:8088
	   http://slave1:8088
	其中master、slave1对应master和salve1的ip(只有一个地址是可访问的)
	可以通过命令查看resourcemanager状态
	yarn rmadmin -getServiceState rm1
	yarn rmadmin -getServiceState rm2
 (11)测试运行WordCount
   hadoop jar /home/hadoop/app/hadoop3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount /test/words.txt /test/output
   运行成功后用
   hdfs dfs -ls /test/output
   会看到
   -rw-r--r--   3 hadoop supergroup          0 2018-09-01 06:47 /test/output/_SUCCESS
   -rw-r--r--   3 hadoop supergroup         52 2018-09-01 06:47 /test/output/part-r-00000
   可以查看part-r-00000来查看wordcount的结果
   hdfs dfs -cat /test/output/part-r-00000
   如果执行时出现visual memory的错误,可以看下虚拟机的内存,我设置的是2G的

🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

🐕11.hadoop的启动与停止

启动

 start-all.sh

停止

 stop-all.sh

也可用单独的脚本启动

💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌈后记

如果本文章有何错误,请您评论中指出,或联系我,我会改正,如果您觉得这篇文章有用,请帮忙一键三连,让更多的人看见,谢谢
作者 yang_z_1 csdn博客地址: https://blog.csdn.net/yang_z_1?type=blog

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐