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.上下游系统与中间件的可观测性