2021-07-12

HADOOP+SPARK-HA 安装

[一、版本 2](#_Toc72997488)

[二、系统架构 2](#_Toc72997489)

[2.1  服务器架构 2](#_Toc72997490)

[2.2相关的缩写描述: 3](#_Toc72997491)

[2.3 架构说明 3](#_Toc72997492)

[2.4 NN active 3](#_Toc72997493)

[2.5 NN standby 3](#_Toc72997494)

[2.6 JN 3](#_Toc72997495)

[2.7 zk/zkfs 3](#_Toc72997496)

[三、基础环境 4](#_Toc72997497)

[3.1、安装 java 和  psmic 4](#_Toc72997498)

[3.2、服务器分配 4](#_Toc72997499)

[3.3、增加hadoop用户和免密登陆 4](#_Toc72997500)

[3.4、 上传安装包和环境变量 4](#_Toc72997501)

[四、ZOOKEEPER安装配置 5](#_Toc72997502)

[4.1、 配置conf/zoo.conf文件 5](#_Toc72997503)

[4.2、myid配置 5](#_Toc72997504)

[4.3、配置zookeeper 启动/查看/停止脚本 6](#_Toc72997505)

[4.4、zookeeper启动和状态验证 6](#_Toc72997506)

[五、HADOOP 安装配置 6](#_Toc72997507)

[5.1示例配置如下: 6](#_Toc72997508)

[5.2  HADOOP  初始化、启动 8](#_Toc72997509)

[六、HADOOP 主备切换测试 9](#_Toc72997510)

[6.1主备状态查看 9](#_Toc72997511)

[6.2主备状态切换测试 9](#_Toc72997512)

[七、SPARK 安装配置 11](#_Toc72997513)

[7.1、spark-env.sh 11](#_Toc72997514)

[7.2、workers 文件 11](#_Toc72997515)

[7.3、log4j.properties 11](#_Toc72997516)

[7.4、启动spark 11](#_Toc72997517)

[八、SPARK 主备测试 12](#_Toc72997518)

[8.1、spark 主备状态查看 12](#_Toc72997519)

[8.2、spark 主备切换测试 12](#_Toc72997520)

[九、相关启动停止测试 13](#_Toc72997521)

[9.1 相关手工启动 13](#_Toc72997522)

[9.2部分hdfs命令 13](#_Toc72997523)

[9.3部分性能测试命令 14](#_Toc72997524)

##### 一、版本

操作系统--CENTOS 8

hadoop-3.2.2

https://downloads.apache.org/hadoop/core/

spark3.1.1

https://downloads.apache.org/spark/

zookeeper-3.6.3

https://downloads.apache.org/zookeeper/

java-1.8.0-openjdk

##### 二、系统架构

###### 2.1 系统服务架构

![在这里插入图片描述](media/110e0125

806d6b8222edc55ce2d20bfa.png)

###### 2.2相关的缩写描述:

HA: High Availabilty 高可用的意思

zk: ZooKeeper 分布式应用程序服务的组件

NN: NameNode 管理文件系统的元数据信息

DN: DataNode 存储数据的

JN: JournalNode 主要用于NN的数据共享

zkfc: ZooKeeperFailoverControl 监控和管理NN的状态

###### 2.3 架构说明

HA使用active NN和standby NN两个节点解决单点问题,

两个NN节点通过JN集群共享状态,通过ZKFC选举active,

监控NN的状态,实现自动备源,DN会同时向两个NN节点发送心跳

###### 2.4 NN active

1.接受Client的rpc请求并处理,自己写一份editlog,同时向JN集群发送一份editlog

2.同时接受DN的块报告block report, 块位置更新block location

updates和心跳heartbeat

###### 2.5 NN standby

NN standby是NN active的一个热备,一旦切换active状态,可以及时对外提供服务

1.同样的会接受JN上面的editlog,并执行更新,与NN active的元数据保持同样的状态

2.同时接受DN的块报告block report, 块位置更新block location

updates和心跳heartbeat

###### 2.6 JN

用于同步active nn和standby

nn之间的数据,本身由一组jn节点组成的集群,一般是奇数,保证高可用,必须有半数以上存活。也就是说如果有3个journalnode,则可以请允许1个down掉,如果有5个的话,可以允许2个down掉。

###### 2.7 zk/zkfs

zk集群一般是奇数,必须有半数以上存活。也就是说如果有3个zk,则可以请允许1个down掉,如果有5个的话,可以允许2个down掉。

zkfc主要用来监控nn节点的健康状态

zkfc会向zk集群发送心跳,让自己被选举,如果自己被选举主时,会通过rpc调用nn,让nn变成active状态

##### 三、基础环境

###### 3.1、安装 java 和 psmic

yum install java-1.8.0-openjdk-devel.x86\_64 psmisc -y

说明:Psmisc软件包包含 fuser, namenode failover 用到

###### 3.2、服务器分配

5台服务器举例

| IP            | HOSNAME  | 节点用途      |          |          |            |

|---------------|----------|----------------|----------|----------|-------------|

| 192.168.2.185 |  master1 | zookeeper/zkfs | namenode |          |            |

| 192.168.2.183 |  master2 | zookeeper/zkfs | namenode |          |            |

| 192.168.2.186 | slave1  | zookeeper      |          | datanode | JournalNode |

| 192.168.2.187 | slave2  |                |          | datanode | JournalNode |

| 192.168.2.184 | slave3  |                |          | datanode | JournalNode |

每台/etc/hosts 添加如下

192.168.2.185 master1

192.168.2.183 master2

192.168.2.186 slave1

192.168.2.187 slave2

192.168.2.184 slave3

###### 3.3、增加hadoop用户和免密登陆

3.3.1、**每台**都需要添加hadoop 用户useradd -m hadoop -s /bin/bash

echo 'greatbit@2021' \| passwd hadoop --stdin

usermod -G wheel hadoop

sed -i 's/\#auth\\s\*required\\s\*pam_wheel.so use_uid/auth required

pam_wheel.so group=wheel/'

/etc/pam.d/su

3.3.2、每台设置免密登陆

su hadoop 用户后

\#ssh-keygen -t rsa ssh 版本不同可能导致默认算法无法failover 切换,建议用PEM

\#“RFC4716” (RFC 4716/SSH2 public or private key)

\#“PKCS8” (PEM PKCS8 public key)

ssh-keygen -t rsa -m PEM

ssh-copy-id 本机和其它4台 都要

###### 3.4、 上传安装包和环境变量

3.4.1、安装包

mkdir –p /phd/bin 目录

上传安装包到master1上,解压到/phd/bin下,重命名为:Hadoop , spark ,zookeeper

chown –R hadoop: hadoop /phd 改变文件属主

3.4.2、环境变量

vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java

export SPARK_HOME=/phd/bin/spark

export HADOOP_HOME=/phd/bin/hadoop

export

PATH=\$PATH:\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin:\$SCALA_HOME/bin

执行:source /etc/profile

##### 四、ZOOKEEPER安装配置

Hdaoop 用户下:

###### 4.1、 配置conf/zoo.conf文件

tickTime=2000

dataDir=/phd/tmp/zookeeper

dataLogDir=/phd/bin/zookeeper/logs

clientPort=2181

initLimit=10

syncLimit=5

server.1=master1:2888:3888

server.2=master2:2888:3888

server.3=slave1:2888:3888

说明:server.id=host:port1:port2

其中id为一个数字,表示zk进程的id,这个**id也是dataDir目录下myid文件的内容**。

host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。

###### **4.2、myid配置**

myid文件里面就有一个数据就是 id 的值, Zookeeper

启动时会读取这个文件,拿到里面的数据与 zoo.cfg

里面的配置信息比较从而判断到底是那个 server。

在每台的/phd/tmp/zookeeper 下分别修改如下:

master1:myid 为 1

master2:myid 为 2

slave1 : myid 为 3

###### 4.3、配置zookeeper 启动/查看/停止脚本

/phd/bin 下新建 zkServer.sh 755权限

\#!/bin/bash

for host in master1 master2 slave1

do

echo "\$host zkServer.sh \$1"

ssh \$host "source /etc/profile;/phd/bin/zookeeper/bin/zkServer.sh \$1"

done

启动/查看/停止 脚本

./zkServer.sh start\|status\|stop

###### 4.4、zookeeper启动和状态验证

4.4.1、zookeeper.sh start启动后

使用zookeeper.sh status查询三台如下,一个leader ,两个follower

Mode: follower

Mode: leader

Mode: follower

4.4.2、启动后使用jps命令查看3台zookeeper 状态

如看到QuorumPeerMain表明zookeeper正在运行。

##### 五、HADOOP 安装配置

Hdaoop 用户下:

在master1 上修改/phd/bin/hadoop/etc/hadoop 下配置文件

###### **5.1**示例配置如下:

1.  yarn-env.sh

1.  hadoop-env.sh

2.  core-site.xml

3.  mapred-site.xml

4.  yarn-site.xml

5.  hdfs-site.xml

其中workers中服务器上 的 datanode 存储位置每台根据硬盘多少可以不同

>  \<!-- dataode存储位置 --\>

>  \<property\>

>  \<name\>dfs.datanode.data.dir\</name\>

>  \<value\>/phd/sdb,/phd/sdc,phd/sdd,/phd/sde\</value\>

>  \</property\>

其中master 服务器上的 namenode存储根据硬盘多少可以添加多个

\<!-- namenode存储位置 --\>

\<property\>

\<name\>dfs.namenode.name.dir\</name\>

\<value\>/phd/sdb,/phd/sdc\</value\>

\</property\>

1.  workers

\#master1

>  \#master2

>  slave1

>  slave2

>  slave3

在服务器较少时,master 也可以作为workers 存储配置datanode存储空间

注意和 namenode 区分存储目录或空间

1.  log4j.properties

    日志配置中,统一把级别设置为**ERROR**

1.  复制/phd/bin/hadoop 到其它服务器

    按需修改 hdfs-site.xml 里datanode 空间

###### 5.2 HADOOP 初始化、启动

1、在所有JN服务器上启动journalnode,执行如下命令:

Hdfs --daemon start journalnode

2、创建主备切换命名空间, 格式化zkfc

在master1上执行如下命令:

Hdfs zkfc –formatZK

3、格式化namenode

在master1上执行以下命令:

hdfs namenode –format

4、master1 启动**主用** namenode

Hdfs --daemon start namenode

5、把NameNode的数据同步到master2 上

Master2 上执行

hdfs namenode –bootstrapStandby

6、启动 所有

6.1、 确保三台zk 已启动

6.2、 cd /phd/bin/hadoop/sbin ; ./start-all.sh

显示如下:

Starting namenodes on [master1 master2]

Starting datanodes

Starting journal nodes [slave3 slave2 slave1]

Starting ZK Failover Controllers on NN hosts [master1 master2]

Starting resourcemanagers on [ master1 master2]

Starting nodemanagers

6.3 、jps查看启动进程

Master:

NameNode

ResourceManager

QuorumPeerMain

DFSZKFailoverController

Slave :

JournalNode

NodeManager

DataNode

则安装成功

##### 六、HADOOP 主备切换测试

###### 6.1主备状态查看

启动后查看hadoop主备状态如下:

Master1: **active**

http://192.168.2.185:9870/dfshealth.html\#tab-overview

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\Catch(05-26-15-05-38).jpg](media/dc0ac0776e85544ee760d0628bbde11e.jpeg)

master2:**standby**

http://192.168.2.183:9870/dfshealth.html\#tab-overview

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\Catch1AC0(05-26-15-05-38).jpg](media/f68b2e038c086c6a4b2b37a9d3014715.jpeg)

###### 6.2主备状态切换测试

Hdaoop 用户下:

6.2.1、master1 上停止namenode,模拟进程kill

hdfs --daemon stop namenode

观察 master2 自动切换为 active

6.2.2、 master1 上再启动 namenode

hdfs --daemon start namenode

观察 master1 状态为standby

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\Catch7A12(05-26-15-05-38).jpg](media/27a38565886dd78c8f3624565a669f21.jpeg)

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\CatchB801(05-26-15-05-38).jpg](media/a8e363f2772a8f45f45898811b1dc38f.jpeg)

5.2.3、重启 master2 服务器,模拟DOWN机

观察 master1 自动切换为 active

5.2.4、 master2 重启动后,手工启动 namenode

hdfs --daemon start namenode

观察 master2 状态为standby

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\Catch39EC(05-26-15-05-38).jpg](media/2f5968a9b39a9da648e49aca9623d913.jpeg)

![C:\\Users\\Administrator\\AppData\\Roaming\\Foxmail7\\Temp-3240-20210526082243\\Attach\\Catch8FF4(05-26-15-05-38).jpg](media/4983462ccb94b0aa70f756c4abfdd3ed.jpeg)

##### 七、SPARK 安装配置

Hadoop 用户下,MASTER1上

###### 7.1、spark-env.sh

修改/phd/bin/spark/conf/spark-env.sh

export SPARK_HOME=\$SPARK_HOME

export JAVA_HOME=/usr/lib/jvm/java

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER

\-Dspark.deploy.zookeeper.url=master1:2181,master2:2181 -D

spark.deploy.zookeeper.dir=/spark"

SPARK_LOCAL_DIRS=/phd/tmp/spark

SPARK_PID_DIR=/phd/tmp/spark

SPARK_DRIVER_MEMORY=1G

export SPARK_LIBARY_PATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib

###### 7.2、workers 文件

master1,master2参与计算如下,不参与注释掉

master1

master2

slave1

slave2

slave3

###### 7.3、log4j.properties

日志文件类型修改为ERROR

###### 7.4、启动spark

复制/phd/bin/spark/ 到其余服务器

主master1 上启动spark

cd /phd/bin/spark/sbin ;./start-all.sh

在master2机器上单独启动spark master

cd /phd/bin/spark/sbin ; start-master.sh

master 上jps 查看

Master

Worker

slave 上jps 查看

Worker

##### 八、SPARK 主备测试

###### 8.1、spark 主备状态查看

Master1

<http://192.168.2.185:8080/>

![](media/3d4fb71fe262798d4eb46473eb7946de.png)

Master2

http://192.168.2.183:8080/

![](media/061d3d95d3b1b8915146f3d253f099c7.png)

###### 8.2、spark 主备切换测试

7.1.1、停止master1上进程 ,模拟进程kill 测试

Hadoop 用户下:

master1 上停止Master

/phd/bin/spark/sbin/stop-master.sh

master2 自动切换为 alvie

master1 上再启动Master

/phd/bin/spark/sbin./start-master.sh

master1 变为standby

##### 九、相关启动停止测试

###### 9.1 相关手工启动

部分节点down机恢复后,手工加入集群所需启动的服务如下,注意节点用途不同启动服务不同

hadoop

hdfs --daemon start namenode

hdfs --daemon start zkfc

hdfs --daemon start datanode

hdfs --daemon start journalnode

yarn --daemon start resourcemanager

yarn --daemon start nodemanager

spark

start-master.sh / stop-master.sh

start-worker.sh / stop-worker.sh

###### 9.2部分hdfs命令

HDFS命令

创建一个文件夹 hdfs dfs -mkdir /myTask

创建多个文件夹 hdfs dfs -mkdir -p /myTask1/input1

上传文件 hdfs dfs -put /opt/wordcount.txt /myTask/input

查看总目录下的文件和文件夹 hdfs dfs -ls /

查看myTask下的文件和文件夹 hdfs dfs -ls /myTask

查看myTask下的wordcount.txt的内容 hdfs dfs -cat /myTask/wordcount.txt

删除总目录下的myTask2文件夹以及里面的文件和文件夹 hdfs dfs -rmr /myTask2

删除myTask下的wordcount.txt hdfs dfs -rm -r /myTask/wordcount.txt

下载hdfs中myTask/input/wordcount.txt到本地opt文件夹中 hdfs dfs -get

/myTask/input/wordcount.txt /opt

hdfs haadmin –getAllServiceState

master1:8020 standby

master2:8020 active

hadoop getconf

[-namenodes] gets list of namenodes in the cluster.

[-journalNodes] gets list of journal nodes in the cluster.

###### 9.3部分性能测试命令

\#SPARK 测试(带主备)

/phd/bin/spark/bin/spark-submit --master spark://master1:7077,master2:7077

/phd/bin/spark/examples/src/main/python/pi.py 200

TestDFSIO用于测试HDFS的IO性能

cd /phd/bin/hadoop

\#测试写性能 往HDFS中写入10个100MB的文件

bin/hadoop jar

share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.2-tests.jar

TestDFSIO -write -nrFiles 10 -size 100MB -resFile /tmp/TestDFSIOresults.log

\#测试读性能 HDFS中读取10个100MB的文件

bin/hadoop jar

share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.2-tests.jar

TestDFSIO -read -nrFiles 10 -size 100MB -resFile /tmp/TestDFSIOresults.log

\#删除测试数据

bin/hadoop jar

share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.2-tests.jar

TestDFSIO -clean -resFile /tmp/TestDFSIOresults.log

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容