CentOS-7 Linux 上部署hadoop集群(3台)
Posted yang_z_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS-7 Linux 上部署hadoop集群(3台)相关的知识,希望对你有一定的参考价值。
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
- 通过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
- 关闭防火墙
临时关闭
[root@master /]#systemctl stop firewalld
禁止开机启动
[root@master /]# systemctl disable firewalld
这里关闭防火墙并禁止开机启动(也可心将下面安装步骤中所涉及到的端口开放即可,建议先关闭,安装测试完成后再考虑开放端口,开启防火墙)
- 安装或升级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/app解压zookeeper安装包到app目录下[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/zookeeper−3.4.13/home/hadoop/app/zookeeper(2)配置zookeeper集群进入zookeeper的conf目录[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.cfg修改zoo.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 ~]
mkdir−p/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 ~]
tar−xzvfhadoop−3.2.1.tar.gz−Capp/解压后目录/home/hadoop/app/hadoop−3.2.1这里我把目录修改为hadoop3[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.conn以上是关于CentOS-7 Linux 上部署hadoop集群(3台)的主要内容,如果未能解决你的问题,请参考以下文章
大数据01_centos7部署hadoop-3-1-2本地模式与伪分布模式