前言 此文档为hadoop对应服务部署组件说明,已经部署操作步骤 服务器对应部署服务说明
ip
主机部署服务
服务端口
ip1
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
NodeManager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
ip2
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
nodemanager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
ip3
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
nodemanager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
ip4
DFSZKFailover
8019:用于Zookeeper Failover Controller,它帮助管理NameNode之间的故障转移。
JournalNode
8480:JournalNode的Web UI端口。 8485:JournalNode的RPC服务端口,用于处理来自客户端的请求和数据传输。
NameNode
9870:HDFS NameNode的Web UI端口,查看和管理HDFS NameNode的状态和相关信息。 8020:NameNode的RPC端口,客户端通过这个端口与NameNode通信
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
NodeManager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
ResourceManager
8088:ResourceManager的Web UI端口。 8030、8031、8032、8033 :ResourceManager的各种内部通信和服务
ip5
DFSZKFailover
8019:用于Zookeeper Failover Controller,它帮助管理NameNode之间的故障转移。
JournalNode
8480:JournalNode的Web UI端口。 8485:JournalNode的RPC服务端口,用于处理来自客户端的请求和数据传输。
NameNode
9870:HDFS NameNode的Web UI端口,查看和管理HDFS NameNode的状态和相关信息。 8020:NameNode的RPC端口,客户端通过这个端口与NameNode通信
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
NodeManager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
ResourceManager
8088、8030、8031、8032、8033
ip6
DFSZKFailover
8019:用于Zookeeper Failover Controller,它帮助管理NameNode之间的故障转移。
JournalNode
8480:JournalNode的Web UI端口。 8485:JournalNode的RPC服务端口,用于处理来自客户端的请求和数据传输。
NameNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
DataNode
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
NodeManager
8019:用于Zookeeper Failover Controller,它帮助管理NameNode之间的故障转移。
ResourceManager
8088:ResourceManager的Web UI端口。 8030、8031、8032、8033 :ResourceManager的各种内部通信和服务
ip7
DataNode
9864:DataNode的Web UI端口,用于查看DataNode的状态和统计信息。 9866:DataNode的HTTP/HTTPS端口,用于提供DataNode的REST API服务。 9867:DataNode IPC服务,集群组件间通信
nodemanager
8040:用于Hadoop的ResourceManager通信。 8042:NodeManager的Web UI端口,用于查看NodeManager的状态和统计信息。
创建用户(如果已创建则跳过该步骤)【所有机器均要执行】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 添加用户及用户组 adduser app # 设置密码 passwd app # 添加用户至用户组 usermod -aG app app # 设置目录权限 chown -R app:app /data # 切换用户 su app
配置hosts(每台服务器配置)【所有机器均要执行】
1 2 3 4 5 6 7 8 9 10 # 编辑hosts vim /etc/hosts ip1 computeServer1 ip2 computeServer2 ip3 computeServer3 ip4 storageServer1 ip5 storageServer2 ip6 storageServer3 ip7 storageServer4
配置jdk【所有机器均要执行】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 编辑环境变量 vim /etc/profile # 设置java环境变量 export JAVA_HOME=/data/jdk1.8.0_231 export JRE_HOME=/data/jdk1.8.0_231/jre export CLASS_PATH=.:$JAVA_HOME/lib:$JRE_HOME/lib # 这里写错了,应该 PATH= $JAVA_HOME /bin:$JRE_HOME /bin:$PATH 把PATH放后面不然从头读取还是读到之前的变量 export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin # 生效环境变量 source /etc/profile
安装依赖 程序依赖库安装
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake
配置服务器之间免密登录
#生成ssh-key【所有机器均要执行】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 生成密钥,需要免密登录的机器都需要执行! ssh-keygen -t rsa -b 4096 cat /home/app/.ssh/id_rsa.pub # 创建authorized keys 第一台机器执行 vim /home/app/.ssh/authorized_keys # 将其他服务器的id_rsa.pub写入authorized_keys vim /home/app/.ssh/authorized_keys # 分发到其他服务器上 scp /home/app/.ssh/authorized_keys app@IP:/home/app/.ssh/authorized_keys # 所有需要免密登录的机器进行权限赋权 chmod 700 /home/app chmod 700 /home/app/.ssh/ chmod 644 /home/app/.ssh/authorized_keys chmod 600 /home/app/.ssh/id_rsa /home/app/.ssh/id_rsa.pub # 用ssh测试服务器之间连通性 ssh app@{目标IP}
安装步骤 上传安装包并分发到各服务器
scp /data/upload_dir/hadoop-3.3.0.tar.gz app@server004:/data/upload_dir/
安装****Hadoop【storageServer1 主机执行】
tar -zxvf hadoop-3.3.0.tar.gz -C /data
1 2 3 4 5 6 vim /etc/profile export HADOOP_HOME=/data/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile
参考
https://blog.csdn.net/tang5615/article/details/120382513
系统设置【storageServer1 主机执行】 说明程序(节点、集群)配置项内容,若配置与集群规模、硬件相关需说明(例如:64C设备下配置PoolSize大小为40)
修改配置文件
Hadoop-env.sh
1 2 3 4 export JAVA_HOME=/data/jdk1.8.0_231 export HADOOP_HOME=/data/hadoop-3.3.0 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_LOG_DIR=$HADOOP_HOME/logs
修改yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 <?xml version="1.0" ?> <configuration > <property > <description > Amount of physical memory, in MB, that can be allocated for containers.In other cases, the default is 8192MB. </description > <name > yarn.nodemanager.resource.memory-mb</name > <value > 57344</value > </property > <property > <name > yarn.scheduler.maximum-allocation-mb</name > <value > 57344</value > </property > <property > <description > Number of vcores that can be allocated for containers.</description > <name > yarn.nodemanager.resource.cpu-vcores</name > <value > 24</value > </property > <property > <name > yarn.scheduler.maximum-allocation-vcores</name > <value > 24</value > </property > <property > <name > yarn.resourcemanager.ha.enabled</name > <value > true</value > </property > <property > <name > yarn.resourcemanager.cluster-id</name > <value > cluster1</value > </property > <property > <name > yarn.resourcemanager.ha.rm-ids</name > <value > rm1,rm2,rm3</value > </property > <property > <name > yarn.resourcemanager.recovery.enabled</name > <value > true</value > </property > <property > <name > yarn.resourcemanager.store.class</name > <value > org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value > </property > <property > <name > yarn.resourcemanager.hostname.rm1</name > <value > storageServer1</value > </property > <property > <name > yarn.resourcemanager.webapp.address.rm1</name > <value > storageServer1:8088</value > </property > <property > <name > yarn.resourcemanager.hostname.rm2</name > <value > storageServer2</value > </property > <property > <name > yarn.resourcemanager.webapp.address.rm2</name > <value > storageServer2:8088</value > </property > <property > <name > yarn.resourcemanager.hostname.rm3</name > <value > storageServer3</value > </property > <property > <name > yarn.resourcemanager.webapp.address.rm3</name > <value > storageServer3:8088</value > </property > <property > <name > yarn.resourcemanager.zk-address</name > <value > queryServer1:2181,queryServer2:2181,queryServer3:2181</value > </property > <property > <name > yarn.resourcemanager.recovery.enabled</name > <value > true</value > </property > <property > <name > yarn.client.failover-proxy-provider</name > <value > org.apache.hadoop.yarn.client.RequestHedgingRMFailoverProxyProvider</value > </property > <property > <name > yarn.nodemanager.aux-services.mapreduce.shuffle.class</name > <value > org.apache.hadoop.mapred.ShuffleHandler</value > </property > <property > <name > yarn.nodemanager.aux-services</name > <value > spark_shuffle,mapreduce_shuffle</value > </property > <property > <name > yarn.nodemanager.aux-services.spark_shuffle.class</name > <value > org.apache.spark.network.yarn.YarnShuffleService</value > </property > <property > <name > yarn.log-aggregation-enable</name > <value > true</value > </property > <property > <name > yarn.log-aggregation.retain-seconds</name > <value > 604800</value > </property > <property > <name > yarn.log.server.url</name > <value > http://storageServer1:19888/jobhistory/logs</value > </property > <property > <name > mapreduce.jobhistroy.address</name > <value > storageServer1:10020</value > </property > <property > <name > mapreduce.jobhistroy.webapp.address</name > <value > storageServer1:19888</value > </property > <property > <name > yarn.application.classpath</name > <value > /data/hadoop-3.3.0/etc/hadoop:/data/hadoop-3.3.0/share/hadoop/common/lib/*:/data/hadoop-3.3.0/share/hadoop/common/*:/data/hadoop-3.3.0/share/hadoop/hdfs:/data/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/data/hadoop-3.3.0/share/hadoop/hdfs/*:/data/hadoop-3.3.0/share/hadoop/mapreduce/*:/data/hadoop-3.3.0/share/hadoop/yarn:/data/hadoop-3.3.0/share/hadoop/yarn/lib/*:/data/hadoop-3.3.0/share/hadoop/yarn/* </value > </property > <property > <name > yarn.nodemanager.pmem-check-enabled</name > <value > false</value > </property > <property > <name > yarn.nodemanager.vmem-check-enabled</name > <value > false</value > </property > </configuration >
修改core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="configuration.xsl" ?> <configuration > <property > <name > fs.defaultFS</name > <value > hdfs://mycluster</value > </property > <property > <name > hadoop.tmp.dir</name > <value > /data/hadoop-3.3.0/temp</value > </property > <property > <name > ha.zookeeper.quorum</name > <value > queryServer1:2181,queryServer2:2181,queryServer3:2181</value > </property > <property > <name > hadoop.http.staticuser.user</name > <value > app</value > </property > <property > <name > hadoop.proxyuser.app.hosts</name > <value > *</value > </property > <property > <name > hadoop.proxyuser.app.groups</name > <value > *</value > </property > </configuration >
hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="configuration.xsl" ?> <configuration > <property > <name > dfs.namenode.name.dir</name > <value > file:///data/hadoop-3.3.0/dfs/name</value > </property > <property > <name > dfs.datanode.data.dir</name > <value > file:///data/hadoop-3.3.0/dfs/data</value > </property > <property > <name > dfs.namenode.edits.dir</name > <value > /data/hadoop-3.3.0/dfs/edits</value > </property > <property > <name > dfs.journalnode.edits.dir</name > <value > /data/hadoop-3.3.0/dfs/journalnode_data</value > </property > <property > <name > dfs.replication</name > <value > 3</value > </property > <property > <name > dfs.nameservices</name > <value > mycluster</value > </property > <property > <name > dfs.ha.namenodes.mycluster</name > <value > nn1,nn2,nn3</value > </property > <property > <name > dfs.namenode.rpc-address.mycluster.nn1</name > <value > storageServer1:8020</value > </property > <property > <name > dfs.namenode.rpc-address.mycluster.nn2</name > <value > storageServer2:8020</value > </property > <property > <name > dfs.namenode.rpc-address.mycluster.nn3</name > <value > storageServer3:8020</value > </property > <property > <name > dfs.namenode.http-address.mycluster.nn1</name > <value > storageServer1:9870</value > </property > <property > <name > dfs.namenode.http-address.mycluster.nn2</name > <value > storageServer2:9870</value > </property > <property > <name > dfs.namenode.http-address.mycluster.nn3</name > <value > storageServer3:9870</value > </property > <property > <name > dfs.namenode.shared.edits.dir</name > <value > qjournal://storageServer1:8485;storageServer2:8485;storageServer3:8485/mycluster</value > </property > <property > <name > dfs.ha.automatic-failover.enabled</name > <value > true</value > </property > <property > <name > dfs.client.failover.proxy.provider.mycluster</name > <value > org.apache.hadoop.hdfs.server.namenode.ha.RequestHedgingProxyProvider</value > </property > <property > <name > dfs.blocksize</name > <value > 134217728</value > </property > <property > <name > dfs.ha.fencing.methods</name > <value > sshfence</value > </property > <property > <name > dfs.ha.fencing.ssh.private-key-files</name > <value > /home/app/.ssh/id_rsa</value > </property > <property > <name > dfs.ha.fencing.ssh.connect-timeout</name > <value > 30000</value > </property > </configuration >
mapred-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="configuration.xsl" ?> <configuration > <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property > <property > <name > mapreduce.jobhistory.address</name > <value > storageServer1:10020</value > </property > <property > <name > mapreduce.jobhistory.webapp.address</name > <value > storageServer1:19888</value > </property > <property > <name > mapreduce.job.tracker</name > <value > storageServer1:54311</value > </property > <property > <name > yarn.app.mapreduce.am.env</name > <value > HADOOP_MAPRED_HOME=${HADOOP_HOME}</value > </property > <property > <name > mapreduce.map.env</name > <value > HADOOP_MAPRED_HOME=${HADOOP_HOME}</value > </property > <property > <name > mapreduce.reduce.env</name > <value > HADOOP_MAPRED_HOME=${HADOOP_HOME}</value > </property > <property > <name > mapreduce.application.classpath</name > <value > /data/hadoop-3.3.0/etc/hadoop:/data/hadoop-3.3.0/share/hadoop/common/lib/*:/data/hadoop-3.3.0/share/hadoop/common/*:/data/hadoop-3.3.0/share/hadoop/hdfs:/data/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/data/hadoop-3.3.0/share/hadoop/hdfs/*:/data/hadoop-3.3.0/share/hadoop/mapreduce/*:/data/hadoop-3.3.0/share/hadoop/yarn:/data/hadoop-3.3.0/share/hadoop/yarn/lib/*:/data/hadoop-3.3.0/share/hadoop/yarn/* </value > </property > </configuration >
编辑workers
1 2 3 4 5 6 7 computeServer1 computeServer2 computeServer3 storageServer1 storageServer2 storageServer3 storageServer4
打包hadoop文件夹并分发到各个服务器
tar -zcvf hadoop.tar.gz hadoop scp -r hadoop.tar.gz {用户名}@{目标IP}:`pwd`/
在其他服务器解压hadoop压缩包
tar -zxvf hadoop.tar.gz -C /data
格式化namenode:nd01,nd02,nd03
hadoop namenode -format
系统自启配置
hadoop未配置自启动
状态查询请使用 hdfs dfsadmin -report
hadoop一键启停(可直接使用该方案启停全部节点)【storageServer1 主机执行】 1 2 3 4 # 启动 /data/hadoop-3.3.0/sbin/start-all.sh # 停止 /data/hadoop-3.3.0/sbin/stop-all.sh
异常场景处理方案 1、报错Class org.apache.spark.network.yarn.YarnShuffleService not found【所有主机执行】
此处为hadoop启动时未找到该className方法,需要手动将spark jar包放入lib文件内
1 2 3 4 5 # 进入share lib cd /data/hadoop-3.3.0/share/hadoop/yarn/lib # 上传jar包 spark-3.3.1-yarn-shuffle.jar
请至钉钉文档查看附件《spark-3.3.1-yarn-shuffle.jar》
2、Hadoop在启动过程中如果遇到需要重新分配data数据,进行初始化情况:【所有主机均可执行】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 1、删除/data/hadoop-3.3.0/dfs 路径下的data 、journalnode_data、edits/*、name/*下所有文件 rm -rf /data/hadoop-3.3.0/dfs/data rm -rf /data/hadoop-3.3.0/dfs/journalnode_data rm -rf /data/hadoop-3.3.0/dfs/name/* rm -rf /data/hadoop-3.3.0/dfs/edits/* # 2、执行namenode重置操作(主机器执行) hdfs namenode -format # 3、执行zkfc重置操作(主机器执行) hdfs zkfc -formatZK # 4、备namenode机器执行同步配置文件操作 hdfs namenode -bootstrapStandby # 5、启停 /data/hadoop-3.3.0/sbin/stop-all.sh /data/hadoop-3.3.0/sbin/start-all.sh
3、将HA节点某个节点提升为ACTIVE【所有主机均可执行】
1 2 3 4 5 6 # 查看状态 hdfs haadmin -getServiceState nn1 # ACTIVE hdfs haadmin -transitionToActive --forcemanual nn1 hdfs haadmin -transitionToActive nn1
http://ip4:8088/cluster
说明安装、 运行期间异常场景及处理方案,最好附截图(例如redis集群失效处理、zookeeper集群失效处理、dolphins schedule集群失效处理)