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

Posted yang_z_11

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
  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.conn

以上是关于CentOS-7 Linux 上部署hadoop集群(3台)的主要内容,如果未能解决你的问题,请参考以下文章

hadoop 部署在centos 7 上

大数据01_centos7部署hadoop-3-1-2本地模式与伪分布模式

Centos 7部署NFS网络文件系统

Hadoop及Zookeeper+HBase完全分布式集群部署

如何在CentOS 7上部署Google BBR

Centos-7安装hadoop