hadoop的分布集群和高可用

什么是hadoop?

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问

Hadoop部署

主机 ip
server1 172.25.26.11
server2 172.25.26.12
server3 172.25.26.13

1.创建hadoop

[root@server1 ~]# useradd -u 800 hadoop
[root@server1 ~]# passwd hadoop

2.切换到hadoop用户,安装jdk

[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk-8u181-linux-x64.tar.gz  zookeeper-3.4.9.tar.gz
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz 
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz  zookeeper-3.4.9.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181 java
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk1.8.0_181                zookeeper-3.4.9.tar.gz
java                 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ cd java
[hadoop@server1 java]$ ls
bin             jre      README.html                         THIRDPARTYLICENSEREADME.txt
COPYRIGHT       lib      release
include         LICENSE  src.zip
javafx-src.zip  man      THIRDPARTYLICENSEREADME-JAVAFX.txt

解压jdk,做软连接。

[hadoop@server1 ~]$ vim .bash_profile
10 PATH=$PATH:$HOME/bin:/home/hadoop/java/bin
[hadoop@server1 ~]$ jps 
1054 Jps

修改环境变量。
3.安装配置hadoop

[hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz 
[hadoop@server1 ~]$ cd hadoop-3.0.3/etc/hadoop/
[hadoop@server1 hadoop]$ vim hadoop-env.sh 
 54 export JAVA_HOME=/home/hadoop/java

在这里插入图片描述

[hadoop@server1 ~]$ cd hadoop-3.0.3
[hadoop@server1 hadoop-3.0.3]$ mkdir input
[hadoop@server1 hadoop-3.0.3]$ cp etc/hadoop/*.xml input/
[hadoop@server1 hadoop-3.0.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce \
 -examples-3.0.3.jar grep input output 'dfs[a-z.]+'

在这里插入图片描述

[hadoop@server1 hadoop-3.0.3]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS
[hadoop@server1 output]$ cat *
1	dfsadmin

搭建伪分布集群

1.修改配置,配置Hadoop的核心属性

[hadoop@server1 hadoop-3.0.3]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml 
 19 <configuration>
 20         <property>
 21                 <name>fs.defaultFS</name>
 22                 <value>hdfs://172.25.26.11:9000</value>
 23         </property>
 24 </configuration>

在这里插入图片描述

[hadoop@server1 hadoop]$ vim hdfs-site.xml
 19 <configuration>
 20         <property>
 21                 <name>dfs.replication</name>
 22                 <value>1</value>
 23         </property>
 24 </configuration>

在这里插入图片描述
2.设置免密登陆

[hadoop@server1 hadoop]$ ssh-keygen

在这里插入图片描述

[hadoop@server1 hadoop]$ ssh-copy-id 172.25.26.11

在这里插入图片描述
发送密钥。
4.启动hdf,格式化名称节点

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop-3.0.3/etc/hadoop
[hadoop@server1 hadoop]$ vim slaves

在这里插入图片描述

[hadoop@server1 hadoop-3.0.3]$ pwd
/home/hadoop/hadoop-3.0.3
[hadoop@server1 hadoop-3.0.3]$  bin/hdfs namenode -format

在这里插入图片描述

[hadoop@server1 hadoop-3.0.3]$ sbin/start-dfs.sh 
[hadoop@server1 hadoop-3.0.3]$ jps

在这里插入图片描述
在浏览器查看:
在这里插入图片描述

[hadoop@server1 hadoop-3.0.3]$  bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -ls /user
[hadoop@server1 hadoop-3.0.3]$  bin/hdfs dfs -put input/

创建目录,将input目录内容上传。
在这里插入图片描述
点击utilities,在点击browse file system,查看内容。

[hadoop@server1 hadoop-3.0.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce- \
examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop-3.0.3]$  bin/hdfs dfs -ls
[hadoop@server1 hadoop-3.0.3]$  bin/hdfs dfs -cat output/*
[hadoop@server1 hadoop-3.0.3]$  bin/hdfs dfs -get output

hadoop完全分布式集群部署

server1关闭服务,切换到超级用户
在这里插入图片描述

在server1,server2和servre3端安装nfs-utils:

[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# vim /etc/exports 
  1 /home/hadoop *(rw,anonuid=800,anongid=800)

在这里插入图片描述

[root@server1 ~]# /etc/init.d/rpcbind start
[root@server1 ~]# /etc/init.d/nfs start

在这里插入图片描述
启动服务。

[root@server1 ~]# showmount -e 172.25.26.11

在这里插入图片描述
刷新挂载。
在server2和server3:

[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# /etc/init.d/rpcbind start                                      
[root@server2 ~]# /etc/init.d/nfs start
[root@server2 ~]# useradd -u 800 hadoop
[root@server2 ~]# mount 172.25.26.11:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df
[root@server2 ~]# su - hadoop
[hadoop@server2 ~]$ ls

安装nfs,启动服务,建立hadoop用户,挂载之后发现,server1hadoop用户家目录文件已经同步过来了。

在这里插入图片描述
测试:

[hadoop@server1 ~]$ ssh 172.25.26.12

在这里插入图片描述
在server1使用hadoop用户进行连接不需要密码。

[hadoop@server1 ~]$ ln -s hadoop-3.03 hadoop

做软链接。

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim hdfs-site.xml 

在这里插入图片描述

[hadoop@server1 hadoop]$ vim slaves

在这里插入图片描述
设定从设备。

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ sbin/start-dfs.sh

初始化,并开启服务。

添加节点

在server4:

[root@server4 ~]# yum install nfs-utils -y

在这里插入图片描述

    [hadoop@server4 ~]$ cd hadoop/etc/hadoop/
    [hadoop@server4 hadoop]$ vim slaves 

在这里插入图片描述

    [hadoop@server4 ~]$ cd hadoop
    [hadoop@server4 hadoop]$ sbin/hadoop-daemon.sh start datanode

开启数据节点

[hadoop@server4 hadoop]$ bin/hdfs dfsadmin -report

在这里插入图片描述
查看添加的节点server4.
在这里插入图片描述
用同样的方法,将server2和server3加入节点。

hadoop+zookeeper高可用集群

hdfs实现高可用:

主机 ip
server1 172.25.26.11
server2 172.25.26.12
server3 172.25.26.13
server4 172.25.26.14
server5 172.25.26.15

需要用到5个虚拟机。

[root@server5 ~]# yum install nfs-utils -y
[root@server5 ~]# /etc/init.d/rpcbind start 
[root@server5 ~]# /etc/init.d/nfs start
[root@server5 ~]# useradd -u 800 hadoop
[hadoop@server5 ~]$ mount 172.25.26.11:/home/hadoop/ /home/hadoop/

添加用户,开启服务。
在这里插入图片描述
和前面一样配置server5,可以正常连接server1的家目录。
在server1进行配置:

[root@server1 ~]# su - hadoop 
[hadoop@server1 ~]$ tar zxf zookeeper-3.4.9.tar.gz 
[hadoop@server1 ~]$ cd zookeeper-3.4.9/conf
[hadoop@server1 conf]$ cp zoo_sample.cfg zoo.cfg
  1 tickTime=2000
  2 initLimit=10
  3 syncLimit=5
  4 dataDir=/tmp/zookeeper
  5 clientPort=2181
  6 server.2=172.25.26.12:2888:3888
  7 server.3=172.25.26.13:2888:3888
  8 server.4=172.25.26.14:2888:3888

修改配置文件,将server2,server3,server4写入集群。因为5台主机都使用nfs文件系统,所以几台主机的配置是一样的。在这里插入图片描述
删除server2上tmp目录的文件,建立zookeeper目录,并创建myid文件,写入一个数字,范围0~255。同样的在server3和server4也进行一样的操作。
在server2,server3,server4节点启动服务

[hadoop@server4 ~]$ cd zookeeper-3.4.9
[hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh start

在这里插入图片描述在3台主机进行一样的操作,其中会有两台主机的Mode是follower,一台是Leader。

在server1端进行配置:

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
19 <configuration>
20         <property>
21                 <name>fs.defaultFS</name>
22                 <value>hdfs://masters</value>
23         </property>
24         <property>
25                 <name>ha.zookeeper.quorum</name>
26                 <value>172.25.26.12:2181,172.25.26.13:2181,172.25.26.14:2181</value>
27         </property>
28 </configuration>
[hadoop@server1 hadoop]$ vim hdfs-site.xml
 19 <configuration>
 20         <property>
 21                 <name>dfs.replication</name>
 22                 <value>3</value>
 23         </property>
 <!-- 指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一致 -->
 24         <property>
 25                 <name>dfs.nameservices</name>
 26                 <value>masters</value>
 27         </property>
 <!-- masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)-->
 28         <property>
 29                 <name>dfs.ha.namenodes.masters</name>
 30                 <value>h1,h2</value>
 31         </property>
 <!-- 指定 h1 节点的 rpc 通信地址 -->
 32         <property>
 33                 <name>dfs.namenode.rpc-address.masters.h1</name>
 34                 <value>172.25.26.11:9000</value>
 35         </property>
 <!-- 指定 h1 节点的 http 通信地址 ,注意版本不同端口也会不同-->
 36         <property>
 37                 <name>dfs.namenode.http-address.masters.h1</name>
 38                 <value>172.25.26.11:9870</value>
 39         </property>
 <!-- 指定 h2 节点的 rpc 通信地址 -->
 40         <property>
 41                 <name>dfs.namenode.rpc-address.masters.h2</name>
 42                 <value>172.25.26.15:9000</value>
 43         </property>
 <!-- 指定 h2 节点的 http 通信地址 -->
 44         <property>
 45                 <name>dfs.namenode.http-address.masters.h2</name>
 46                 <value>172.25.26.15:9870</value>
 47         </property>
 <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
 48         <property>
 49                 <name>dfs.namenode.shared.edits.dir</name>
 50                 <value>qjournal://172.25.26.12:8485;172.25.26.13:8485;172.25.26.14:8485/masters</value>
 51         </property>
 <!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
 52         <property>
 53                 <name>dfs.journalnode.edits.dir</name>
 54                 <value>/tmp/journaldata</value>
 			  </property>
 <!-- 开启 NameNode 失败自动切换 -->
 55         <property>
 56                 <name>dfs.ha.automatic-failover.enabled</name>
 57                 <value>true</value>
 58         </property>
 <!-- 配置失败自动切换实现方式 -->
 59         <property>
 60                 <name>dfs.client.failover.proxy.provider.masters</name>
 61                 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 62         </property>
 <!-- 配置隔离机制方法,每个机制占用一行-->
 63         <property>
 64                 <name>dfs.ha.fencing.methods</name>
 65                 <value>
 66                 sshfence
 67                 shell(/bin/true)
 68                 </value>
 69         </property>
 <!-- 使用 sshfence 隔离机制时需要 ssh 免密码 -->
 70         <property>
 71                 <name>dfs.ha.fencing.ssh.private-key-files</name>
 72                 <value>/home/hadoop/.ssh/id_rsa</value>
 73         </property>
 <!-- 配置 sshfence 隔离机制超时时间 -->
 74         <property>
 75                 <name>dfs.ha.fencing.ssh.connect-timeout</name>
 76                 <value>30000</value>
 77         </property>
 78 </configuration>
[hadoop@server1 hadoop]$ vim slaves

在这里插入图片描述
启动hdfs集群:
在三个 DN 上依次启动 zookeeper 集群(即server2,3,4)

[hadoop@server2 zookeeper-3.4.9]$ bin/zkServer.sh start

在三个 DN 上依次启动 journalnode(第一次启动 hdfs 必须先启动 journalnode)

[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode
[hadoop@server2 hadoop]$ jps

在这里插入图片描述
在server格式话hdfs集群

[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop 172.25.26.15:/tmp

将文件复制到server5的tmp目录。

格式化 zookeeper (只需在 h1 上执行即可)

[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK
[hadoop@server1 hadoop]$ sbin/start-dfs.sh 

格式化后启动服务。
查看各个节点状态:

server1:
[hadoop@server1 hadoop]$ jps
12372 Jps
7050 DFSZKFailoverController
12332 NameNode
server2:
[hadoop@server2 hadoop]$ jps
1664 JournalNode
2325 Jps
1535 QuorumPeerMain
2212 DataNode
server3:
[hadoop@server3 hadoop]$ jps
1918 Jps
1651 JournalNode
1755 DataNode
1543 QuorumPeerMain
server4:
[hadoop@server4 hadoop]$ jps
2050 DataNode
1475 QuorumPeerMain
1600 JournalNode
2152 Jps
server5:
[hadoop@server5 dfs]$ jps
1306 DFSZKFailoverController
1511 Jps
1376 NameNode

测试:
在这里插入图片描述

在这里插入图片描述
server1为作为h1,server5为h2,此时server1为active,server5为stabdby,server5做为备用节点。

猜你喜欢

转载自blog.csdn.net/qq_41961805/article/details/90448553