hadoop-3:原生方式在aws搭建生产级hadoop-flink集群

2021-10-28 11:31:31 浏览数 (1)

n先部署一台机器,制作镜像,然后通过这个镜像去创建其他的EC2实例,最后完成配置与启动。

目录

(1).为什么不使用CDH/ambari/云服务

(2).重点概述

1.版本选择

2.组件拓扑

3.节点配置

(3).制作aws模版机与镜像

1.制作模版机

1.1.开EC2

1.2.挂载应用/数据盘

1.3.安装必要软件

1.4.建立基本目录

1.5下载hadoop组件安装包

1.6.hadoop目录/配置文件准备

1.6.1.hadoop目录准备

1.6.2.hadoop配置文件准备

1.6.2.1.log路径修改

1.6.2.2.配置env

1.6.2.3.配置etc/hadoop/core-site.xml

1.6.2.4.配置etc/hadoop/hdfs-site.xml

1.6.2.5.配置etc/hadoop/yarn-site.xml

1.6.2.6.修改etc/hadoop/workers配置

1.7.zookeeper目录/配置文件准备

1.8.flink目录/配置文件准备

2.生成ssh-key

3.制作模版机的镜像

(4).通过镜像购买管理/资源节点

1.通过镜像购买管理节点

2.通过镜像购买资源节点

(5).配置管理/资源节点

1.管理/资源节点挂应用盘

2.依次配置管理节点

3.依次配置资源节点

4.所有节点配置/etc/hosts

(6).启动hadoop集群

1.启动zookeeper集群

2.启动管理节点

3.启动资源节点

4.check激活节点

(7).开放hadoop-flink集群的后台给办公网络/openvpn

(8).问题汇总

(9).可观测性设施

1.机器节点可观测性

2.flink的job/task可观测性

3.上下游系统与中间件的可观测性

(1).为什么不使用CDH/ambari/云服务

ambari已经被CDH所在公司收购,两者现在都已经闭源,生产使用需要付费,费用极其昂贵。

至于为什么不使用云服务,也是费用问题,因为是hadoop-flink集群用于实时计算,云服务的实时计算资源是非常昂贵的。

(2).重点概述

1.版本选择

hadoop3.3.1,flink-1.13.1,zookeeper-3.6.3

JDK使用1.8,官方有文档明确说明hadoop3.3.1最好运行在jdk1.8,后续会支持jdk11(目前在11上有问题),所以生产选择jdk1.8。

2.组件拓扑

每个节点都有node-exporter用于prometheus收集机器监控指标/报警。

管理节点hostname:hadoop-flink-manager-n

上边部署5个管理进程:

zookeeper、namenode、journalnode、resourcemanager、zk-failover-controller。

资源节点hostname:hadoop-flink-resource-m

部署两个进程:

nodemanager、datanode

都使用hadoop用户进行启动、管理、维护。

3.节点配置

3台manager节点,6台resource节点。

manager节点配置:c5.xlarge(4c8g);两个挂载点都是ssd(gp2),/是20G,/app是100G。

resource节点配置:c5a.4xlarge(16c32g);两个挂载点都是ssd(gp2),/是20G,/app是100G。

ssd-gp2比ssd-gp3要好,因为是实时计算集群,选择好点的ssd-gp2。

(3).制作aws模版机与镜像

1.制作模版机

1.1.开EC2

选择c5.4xlarge。

上图:

子网选择私有子网;禁用自动分配ip/使用弹性ip。

安全组内网全开。

存储盘:

系统盘"/"挂载点:40G

应用盘"/app"挂载点:100G

1.2.挂载应用/数据盘

挂载磁盘:

查看磁盘:lsblk

可以看到:nvme1n1是我们要挂载的新磁盘。

红色框是已有磁盘,查看一下两个磁盘:

file -s /dev/nvme0n1

file -s /dev/nvme1n1

使用 lsblk -f 命令获取有关连接到实例的所有设备的信息。

file -s /dev/nvme1n1

格式化新磁盘的文件系统:

mkfs -t xfs /dev/nvme1n1

再次:lsblk -f

可以看到新磁盘就绪。

建立挂载点目录:

mkdir /app

创建的目录挂载卷。

mount /dev/nvme1n1 /app

加到/etc/fstab中:(磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载)。

/dev/nvme1n1 /app xfs defaults 1 1

1.3.安装必要软件

sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum update -y

安装机器监控:node-exporter

yum install -y docker

systemctl start docker

一定要修改docker的默认存储目录!否则系统盘有现在风险。 /etc/docker/daemon.json

代码语言:javascript复制
{
"data-root": "/app/docker"
}

docker pull prom/node-exporter:v1.2.2

docker run -d --restart=always -p 9100:9100 quay.io/prometheus/node-exporter:v1.2.2

--restart=always保证重启后会自动拉起容器。

yum install -y java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64 java-1.8.0-openjdk-devel-1.8.0.302.b08-0.amzn2.0.1.x86_64

/etc/profile增加环境变量:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64

source /etc/profile使其生效。

1.4.建立基本目录

代码语言:javascript复制
useradd hadoop
chown -R hadoop:hadoop /app
chmod -R 777 /app
su hadoop
hadoop所有组件都运行在hadoop用户下。


mkdir -p /app/3rd
mkdir -p /app/logs
mkdir -p /app/data
mkdir -p /app/download

1.5下载hadoop组件安装包

hadoop3.3.1:

https://hadoop.apache.org/releases.html

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

代码语言:javascript复制
wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

flink1.13.1:

https://archive.apache.org/dist/flink/flink-1.13.1/

代码语言:javascript复制
wget https://archive.apache.org/dist/flink/flink-1.13.1/flink-1.13.1-bin-scala_2.12.tgz

zookeeper3.6.3:

https://zookeeper.apache.org/releases.html

https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

代码语言:javascript复制
wget https://mirrors.gigenet.com/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
代码语言:javascript复制
mv apache-zookeeper-3.6.3-bin apache-zookeeper-3.6.3
mv apache-zookeeper-3.6.3 /app/3rd/
mv flink-1.13.1 /app/3rd/
mv hadoop-3.3.1 /app/3rd/

1.6.hadoop目录/配置文件准备

1.6.1.hadoop目录准备

代码语言:javascript复制
mkdir -p /app/data/hadoop-3.3.1/namenode/name.dir
>/app/data/hadoop-3.3.1/namenode/datanode-allow-list
>/app/data/hadoop-3.3.1/namenode/datanode-deny-list
mkdir -p /app/data/hadoop-3.3.1/datanode/data
mkdir -p /app/data/hadoop-3.3.1/yarn/resourcemanager
>/app/data/hadoop-3.3.1/yarn/resourcemanager/node-allow-list
>/app/data/hadoop-3.3.1/yarn/resourcemanager/node-deny-list
mkdir -p /app/data/hadoop-3.3.1/yarn/nodemanager/nm-local-dir
mkdir -p /app/data/hadoop-3.3.1/yarn/nodemanager/log-dirs-0
mkdir -p /app/data/hadoop-3.3.1/namenode/ha/ha-name-dir-shared
mkdir -p /app/data/hadoop-3.3.1/journalnode/local/data
mkdir -p /app/logs/hadoop-3.3.1/logs
mkdir -p /app/data/hadoop-3.3.1/journalnode/local/data/hadoop-flink-cluster
mkdir -p /app/data/hadoop-3.3.1/tmp

1.6.2.hadoop配置文件准备

1.6.2.1.log路径修改

修改/app/3rd/hadoop-3.3.1/etc/hadoop/log4j.properties:

hadoop.log.dir=/app/logs/hadoop-3.3.1/logs

1.6.2.2.配置env

修改/etc/profile:

设置hadoop程序目录:

代码语言:javascript复制
export HADOOP_HOME=/app/3rd/hadoop-3.3.1
export HADOOP_LOG_DIR=/app/logs/hadoop-3.3.1/logs
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64
HDFS_DATANODE_USER=hadoop
HADOOP_SECURE_DN_USER=hadoop
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop
HDFS_ZKFC_USER=hadoop
HDFS_JOURNALNODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hadoop
HADOOP_SHELL_EXECNAME=hadoop


export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改etc/hadoop/hadoop-env.sh:

代码语言:javascript复制
export HADOOP_HOME=/app/3rd/hadoop-3.3.1
export HADOOP_LOG_DIR=/app/logs/hadoop-3.3.1/logs
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64
HDFS_DATANODE_USER=hadoop
HADOOP_SECURE_DN_USER=hadoop
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop
HDFS_ZKFC_USER=hadoop
HDFS_JOURNALNODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hadoop
HADOOP_SHELL_EXECNAME=hadoop

修改etc/hadoop/yarn-env.sh:

代码语言:javascript复制
YARN_RESOURCEMANAGER_USER=hadoop
YARN_NODEMANAGER_USER=hadoop

1.6.2.3.配置etc/hadoop/core-site.xml

代码语言:javascript复制
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-flink-cluster</value>
</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/app/data/hadoop-3.3.1/tmp</value>
</property>

1.6.2.4.配置etc/hadoop/hdfs-site.xml

代码语言:javascript复制
<property>
<name>dfs.namenode.name.dir</name>
<value>/app/data/hadoop-3.3.1/namenode/name.dir</value>
</property>

<property>
<name>dfs.hosts</name>
<value>/app/data/hadoop-3.3.1/namenode/datanode-allow-list</value>
</property>

<property>
<name>dfs.hosts.exclude</name>
<value>/app/data/hadoop-3.3.1/namenode/datanode-deny-list</value>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>/app/data/hadoop-3.3.1/datanode/data</value>
</property>

<property>
<name>dfs.nameservices</name>
<value>hadoop-flink-cluster</value>
</property>

<property>
<name>dfs.ha.namenodes.hadoop-flink-cluster</name>
<value>namenode-1,namenode-2,namenode-3</value>
</property>

<property>
<name>dfs.namenode.rpc-address.hadoop-flink-cluster.namenode-1</name> . 
<value>namenode-1:8020</value>
</property>

<property>
<name>dfs.namenode.rpc-address.hadoop-flink-cluster.namenode-2</name> 
<value>namenode-2:8020</value>
</property>

<property>
<name>dfs.namenode.rpc-address.hadoop-flink-cluster.namenode-3</name> 
<value>namenode-3:8020</value>
</property>

<property>
<name>dfs.namenode.http-address.hadoop-flink-cluster.namenode-1</name> 
<value>namenode-1:9870</value>
</property>

<property>
<name>dfs.namenode.http-address.hadoop-flink-cluster.namenode-2</name> 
<value>namenode-2:9870</value>
</property>

<property>
<name>dfs.namenode.http-address.hadoop-flink-cluster.namenode-3</name> 
<value>namenode-3:9870</value>
</property>

<!-- 指定NameNode的元数据在JournalNode(至少要有3个节点)上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name> 
<value>qjournal://journalnode-1:8485;journalnode-2:8485;journalnode-3:8485/hadoop-flink-cluster</value>
</property>

<property>
<name>dfs.client.failover.proxy.provider.hadoop-flink-cluster</name> 
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name> 
<value>/root/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/app/data/hadoop-3.3.1/journalnode/local/data</value>
</property>

<property>
<name>dfs.ha.nn.not-become-active-in-safemode</name>
<value>true</value>
</property>

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> 
</property>

<property> 
<name>ha.zookeeper.quorum</name>
<value>zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181</value>
</property>

1.6.2.5.配置etc/hadoop/yarn-site.xml

代码语言:javascript复制
<!--开启HA-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!---yarn集群的名称-->
<property> 
<name>yarn.resourcemanager.cluster-id</name>
<value>hadoop-flink-yarn-cluster</value>
</property>

<!--设置resourcemanager的ID,中间用逗号隔开-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>resourcemanager-1,resourcemanager-2,resourcemanager-3</value>
</property>

<!--设置resourcemanager节点位置 rm1由上面定义--> 
<property> 
<name>yarn.resourcemanager.hostname.resourcemanager-1</name>
<value>resourcemanager-1</value>
</property>

<!--设置resourcemanager节点位置 rm2由上面定义--> 
<property>
<name>yarn.resourcemanager.hostname.resourcemanager-2</name>
<value>resourcemanager-2</value>
</property>

<!--设置resourcemanager节点位置 rm3由上面定义--> 
<property>
<name>yarn.resourcemanager.hostname.resourcemanager-3</name>
<value>resourcemanager-3</value>
</property>

<!--设置zookeeper集群信息--> 
<property> 
<name>yarn.resourcemanager.zk-address</name> 
<value>zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181</value>
</property>

<property>
<name>yarn.resourcemanager.nodes.include-path</name>
<value>/app/data/hadoop-3.3.1/yarn/resourcemanager/node-allow-list</value>
</property>

<property>
<name>yarn.resourcemanager.nodes.exclude-path</name>
<value>/app/data/hadoop-3.3.1/yarn/resourcemanager/node-deny-list</value>
</property>

<!-- 宿主机32G物理内存 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>30000</value>
</property>

<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/app/data/hadoop-3.3.1/yarn/nodemanager/nm-local-dir</value>
</property>

<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/app/data/hadoop-3.3.1/yarn/nodemanager/log-dirs-0</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>

1.6.2.6.修改etc/hadoop/workers配置

这里配置资源节点:会在这几台启动datanode和nodemanager。

hadoop-resource-1

hadoop-resource-2

hadoop-resource-3

hadoop-resource-4

hadoop-resource-5

hadoop-resource-6

1.7.zookeeper目录/配置文件准备

mkdir -p /app/data/zookeeper-3.6.3/data

mkdir -p /app/logs/zookeeper-3.6.3/logs

mv apache-zookeeper-3.6.3-bin apache-zookeeper-3.6.3

配置修改:/app/3rd/apache-zookeeper-3.6.3/conf

cp zoo_sample.cfg zoo.cfg

dataDir=/app/data/zookeeper-3.6.3/data

开启metrics:

metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvidermetricsProvider.httpPort=7000

metricsProvider.exportJvmInfo=true

开启4字命令mntr:

4lw.commands.whitelist=mntr

增加节点:

server.1=zookeeper-1:2888:3888

server.2=zookeeper-2:2888:3888

server.3=zookeeper-3:2888:3888

log路径修改:

log4j.properties:

zookeeper.log.dir=/app/logs/zookeeper-3.6.3/logs

zkEnv.sh:

if [ "x${ZOO_LOG_DIR}" = "x" ]then

#ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"

ZOO_LOG_DIR="/app/logs/zookeeper-3.6.3/logs"

fi

1.8.flink目录/配置文件准备

cd /app/3rd/flink-1.13.1

开启prometheus metric度量:

cp plugins/metrics-prometheus/flink-metrics-prometheus-1.13.1.jar lib/

vim conf/flink-conf.yaml

代码语言:javascript复制
metrics.reporters: prom
metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter
metrics.reporter.prom.port: 9250-9350


export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.amzn2.0.1.x86_64
export HADOOP_HOME=/app/3rd/hadoop-3.3.1
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport
YARN_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HADOOP_CLASSPATH=$HADOOP_COMMON_HOME/lib:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/tools/*:$HADOOP_HOME/share/hadoop/httpfs/*:$HADOOP_HOME/share/hadoop/kms/*:$HADOOP_HOME/share/hadoop/common/lib/*

除此之外,还需要往服务器上的 flink 中的lib目录里添加2个jar包,否则会报一些类not found:

flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar

commons-cli-1.4.jar

前者从这里下载:

https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber/3.1.1.7.2.1.0-327-9.0

后者从这里下载:

https://mvnrepository.com/artifact/commons-cli/commons-cli/1.4

注意flink开放的prometheus端口是一个范围,job和task会从起始端口开始逐次使用。所以需要自己写脚本同步到prometheus的配置中。

metrics.reporter.prom.port: 9250-9350

2.生成ssh-key

这样所有机器默认可以使用ssh进行配置文件同步。这样当我们将模版机制作成镜像后,从镜像打出的hadoop-flink节点自动免密。

ssh-keygen

一路默认回车。

cd ~/.ssh

>authorized_keys

chmod 600 authorized_keys

cat id_rsa.pub > authorized_keys

3.制作模版机的镜像

模版与镜像的区别:

模版就是服务器模版 没有里面内容;镜像是包含系统盘和数据盘等数据;模板是包含VPC、子网这些设定。

下图有1处错误:

错误1:“无重启”不能“启用”。

“无重启”不能“启用”的原因:

一般来说机器在关闭状态下打出来的镜像是最好的(很好理解);AMI制作的时候会自动关机打好,再开起来的。

可以看到制作完成的镜像:

(4).通过镜像购买管理/资源节点

1.通过镜像购买管理节点

管理节点是3台,上边部署5个管理进程:

zookeeper、namenode、journalnode、resourcemanager、zk-failover-controller。

统一选择机型:c5.xlarge

管理节点4c8g足够了,集群也很小。

禁用ip自动分配(内网机器不设置公网IP);放在私有子网(nat网关);实例个数选3个(管理节点个数):

自动出现两个挂载点,内容从aim镜像中取对应的盘快照:

标签暂时不加。

选择安全组:

启动说需要我提高资源上限:常事。

https://console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase&limitType=service-code-ec2-instances&serviceLimitIncreaseType=ec2-instances&type=service_limit_increase

2.通过镜像购买资源节点

同样方式购买6台16c32g,作为资源节点。

机型选择:c5a.4xlarge。

其余配置都一致。

(5).配置管理/资源节点

1.管理/资源节点挂应用盘

所有9台机器都需要挂应用盘。

如果前边没有将新挂载卷写入文件/etc/fstab,那就需要手动创建目录挂载卷。

sudo mount /dev/nvme1n1 /app

2.依次配置管理节点

永久修改hostname:

sudo hostnamectl set-hostname --static hadoop-flink-manager-1

sudo hostnamectl set-hostname --static hadoop-flink-manager-2

sudo hostnamectl set-hostname --static hadoop-flink-manager-3

在/app/data/zookeeper-3.6.3/data下新建文件myid:

echo 1 > /app/data/zookeeper-3.6.3/data/myid

echo 2 > /app/data/zookeeper-3.6.3/data/myid

echo 3 > /app/data/zookeeper-3.6.3/data/myid

3个zk节点的值分别是1到3。

3.依次配置资源节点

sudo hostnamectl set-hostname --static hadoop-flink-resource-1

sudo hostnamectl set-hostname --static hadoop-flink-resource-2

sudo hostnamectl set-hostname --static hadoop-flink-resource-3

sudo hostnamectl set-hostname --static hadoop-flink-resource-4

sudo hostnamectl set-hostname --static hadoop-flink-resource-5

sudo hostnamectl set-hostname --static hadoop-flink-resource-6

4.所有节点配置/etc/hosts

3台管理节点和6台数据节点的/etc/hosts都要加:

管理节点hosts/资源节点hosts:

10.0.46.252 zookeeper-1 namenode-1 journalnode-1 resourcemanager-1

10.0.36.169 zookeeper-2 namenode-2 journalnode-2 resourcemanager-2

10.0.41.11 zookeeper-3 namenode-3 journalnode-3 resourcemanager-3

10.0.34.238 hadoop-resource-1

10.0.43.239 hadoop-resource-2

10.0.32.98 hadoop-resource-3

10.0.34.83 hadoop-resource-4

10.0.43.107 hadoop-resource-5

10.0.40.237 hadoop-resource-6

这里要把这些内网IP换成你自己的。

(6).启动hadoop集群

1.启动zookeeper集群

先启动zookeeper,每个节点依次执行:

cd /app/3rd/apache-zookeeper-3.6.3/bin/

zkServer.sh start

2.启动管理节点

需要先启动所有的journalnode节点,因为namenode依赖journalnode1。

在每个journalnode节点(就是每个manager管理节点)依次执行:

bin/hdfs --daemon start journalnode

启动多节点namenode

hadoop-flink-manager-1上执行namenode的格式化操作:

bin/hdfs namenode -format

然后在hadoop-flink-manager-1上启动namenode:

bin/hdfs --daemon start namenode

hadoop-flink-manager-(2到3)上同步hadoop01的namenode元数据:

bin/hdfs namenode -bootstrapStandby

然后在hadoop-flink-manager-(2到3)上启动namenode:

bin/hdfs --daemon start namenode

激活namenode

bin/hdfs haadmin -getAllServiceState

可以看到都是standby。

bin/hdfs haadmin -transitionToActive namenode-1

激活命令,但是可以看到,不允许,需要加一个强制参数。

强制切换namenode的active节点:

bin/hdfs haadmin -transitionToActive --forcemanual namenode-1

验证:

bin/hdfs haadmin -getAllServiceState

可以看到namenode-1成为了active。

3.启动资源节点

启动datanode

每个节点依次执行:

bin/hdfs --daemon start datanode

也可以执行sbin/start-dfs.sh

启动yarn

启动命令:

sbin/start-yarn.sh

然后在每台节点都会有一个nodemanager和resourcemanager。

还有一些可能用到的命令:

sbin/start-all.sh:启动集群所有节点的所有组件

sbin/stop-all.sh:杀掉集群所有节点的所有组件

4.check激活节点

bin/hdfs haadmin -getAllServiceState

bin/yarn rmadmin -getAllServiceState

(7).开放hadoop-flink集群的后台给办公网络/openvpn

方式:

在公有子网(互联网网关)开一台绑定EIP(公网IP)的ec2,上边部署一个nginx,让它反向代理hadoop-flink的后台web。

然后将这个ec2的安全组对办公网和openvpn的ip开放。

反向代理:

namenode, datanode, yarnmanager。

代码语言:javascript复制
upstream namenode.hadoop-flink-cluster.pro.xxx.net{
  #ip_hash;
  server 10.0.46.252:9870;
  server 10.0.36.169:9870;
  server 10.0.41.11:9870;
}


server {
    listen       80;
    server_name  namenode.hadoop-flink-cluster.pro.xxx.net;


    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;


    location / {
        proxy_pass http://namenode.hadoop-flink-cluster.pro.xxx.net;
    }
}


upstream datanode.hadoop-flink-cluster.pro.xxx.net{
  #ip_hash;
  server 10.0.34.238:9864;
  server 10.0.43.239:9864;
  server 10.0.32.98:9864;
  server 10.0.34.83:9864;
  server 10.0.43.107:9864;
  server 10.0.40.237:9864;
}


server {
    listen       80;
    server_name  datanode.hadoop-flink-cluster.pro.xxx.net;


    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;


    location / {
        proxy_pass http://datanode.hadoop-flink-cluster.pro.xxx.net;
    }
}


upstream yarnmanager.hadoop-flink-cluster.pro.xxx.net{
  #ip_hash;
  #server 10.0.46.252:8088;
  server 10.0.36.169:8088;
  #server 10.0.41.11:8088;
}


server {
    listen       80;
    server_name  yarnmanager.hadoop-flink-cluster.pro.xxx.net;


    #charset koi8-r;
    access_log  /app/logs/nginx/log/yarnmanager.access.log  main;


    location / {
        proxy_pass http://yarnmanager.hadoop-flink-cluster.pro.xxx.net;
    }
}

(8).问题汇总

zkfc启动失败报错:

hadoop HA异常:Unable to start failover controller. Parent znode does not exist.

初始化:

bin/hdfs zkfc -formatZK

hdfs zkfc -formatZK,没有格式化整个Zookeeper,只是在Zookeeper中创建了路径/hadoop-ha/hacluster,并在这个节点下创建集群名称的节点,统一存储hadoop集群的元数据。

(9).可观测性设施

主要是prometheus配合grafana的可观测性:

1.机器节点可观测性

2.flink的job/task可观测性

3.上下游系统与中间件的可观测性

0 人点赞