目錄
一、Hadoop部署的三種方式
1、Standalone mode(獨(dú)立模式)
2、Pseudo-Distributed mode(偽分布式模式)
3、Cluster mode(集群模式)
二、準(zhǔn)備工作
1、先完成zk高可用搭建
2、/etc/hosts增加內(nèi)容
3、各臺服務(wù)器分別創(chuàng)建目錄
4、關(guān)閉防火墻和禁用swap交換分區(qū)
5、三臺機(jī)器間免密
6、安裝jdk
7、下載好hadoop安裝包
三、高可用配置
1、配置core-site.xml
2、配置hdfs-site.xml
3、配置yarn-site.xml文件
4、配置mapred-site.xml
5、配置workers
6、修改配置hadoop-env.sh
四、分發(fā)文件
五、啟動服務(wù)
六、查看服務(wù)
七、常見問題解決
1、高可用下提示Operation category READ is not supported in state standby
一、Hadoop部署的三種方式
1、Standalone mode(獨(dú)立模式)
獨(dú)立模式又稱為單機(jī)模式,僅1個(gè)機(jī)器運(yùn)行1個(gè)java進(jìn)程,主要用于調(diào)試。
2、Pseudo-Distributed mode(偽分布式模式)
偽分布模式也是在1個(gè)機(jī)器上運(yùn)行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分別啟動單獨(dú)的java進(jìn)程,主要用于調(diào)試。
3、Cluster mode(集群模式)
單Namenode節(jié)點(diǎn)模式-高可用HA模式
集群模式主要用于生產(chǎn)環(huán)境部署。會使用N臺主機(jī)組成一個(gè)Hadoop集群。這種部署模式下,主節(jié)點(diǎn)和從節(jié)點(diǎn)會分開部署在不同的機(jī)器上。
本教程主要安裝 多Namenode 節(jié)點(diǎn) 高可用集群模式
二、準(zhǔn)備工作
1、先完成zk高可用搭建
【大數(shù)據(jù)入門核心技術(shù)-Zookeeper】(五)ZooKeeper集群搭建
2、/etc/hosts增加內(nèi)容
172.30.1.56 hadoop001
172.30.1.57?hadoop001
172.30.1.58?hadoop001
3、各臺服務(wù)器分別創(chuàng)建目錄
mkdir -p /data/bigdata/hadoop/tmp
mkdir -p /data/bigdata/hadoop/var
mkdir -p /data/bigdata/hadoop/dfs/name
mkdir -p /data/bigdata/hadoop/dfs/data
mkdir -p /data/bigdata/hadoop/jn
4、關(guān)閉防火墻和禁用swap交換分區(qū)
1)關(guān)閉防火墻和SeLinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
2)禁用swap交換分區(qū)
swapoff -a && sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
5、三臺機(jī)器間免密
生成密鑰
ssh-keygen -t rsa
將密鑰復(fù)制到其他機(jī)器
ssh-copy-id slave1
ssh-copy-id slave2
6、安裝jdk
將jdk目錄復(fù)制到/usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
查看結(jié)果
?java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
7、下載好hadoop安裝包
下載地址
Apache Hadoop
本次以hadoop3.2.1下載為例
解壓
tar zxvf hadoop-3.2.1.tar.gz -C /usr/localvim /etc/profile
export HADOOP_HOME=/usr/local/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/binsource /etc/profile
三、高可用配置
1、配置core-site.xml
<configuration>
<!-- 把多個(gè) NameNode 的地址組裝成一個(gè)集群 mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 指定 hadoop 運(yùn)行時(shí)產(chǎn)生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/bigdata/hadoop/tmp</value>
</property>
<!-- 指定 zkfc 要連接的 zkServer 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>
<!-- NN 連接 JN 重試次數(shù),默認(rèn)是 10 次 -->
<property>
<name>ipc.client.connect.max.retries</name>
<value>20</value>
</property>
<!-- 重試時(shí)間間隔,默認(rèn) 1s -->
<property>
<name>ipc.client.connect.retry.interval</name>
<value>5000</value>
</property>
</configuration>
2、配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/bigdata/hadoop/dfs/name</value>
<description>datanode 上存儲 hdfs 名字空間元數(shù)據(jù)</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/bigdata/hadoop/dfs/data</value>
<description>datanode 上數(shù)據(jù)塊的物理存儲位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本個(gè)數(shù),默認(rèn)配置是 3,應(yīng)小于 datanode 機(jī)器數(shù)量</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- JournalNode 數(shù)據(jù)存儲目錄 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/bigdata/hadoop/jn</value>
</property>
<!-- 完全分布式集群名稱 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中 NameNode 節(jié)點(diǎn)都有哪些 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<!-- NameNode 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop101:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop102:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop103:8020</value>
</property>
<!-- NameNode 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop101:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop102:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop103:9870</value>
</property>
<!-- 指定 NameNode 元數(shù)據(jù)在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster</value>
</property>
<!-- 訪問代理類:client 用于確定哪個(gè) NameNode 為 Active -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機(jī)制,即同一時(shí)刻只能有一臺服務(wù)器對外響應(yīng) -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔離機(jī)制時(shí)需要 ssh 秘鑰登錄-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 啟用 nn 故障自動轉(zhuǎn)移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
3、配置yarn-site.xml文件
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 啟用 resourcemanager ha -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 聲明兩臺 resourcemanager 的地址 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<!--指定 resourcemanager 的邏輯列表-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>
<!-- ========== rm1 的配置 ========== -->
<!-- 指定 rm1 的主機(jī)名 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop101</value>
</property>
<!-- 指定 rm1 的 web 端地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop101:8088</value>
</property>
<!-- 指定 rm1 的內(nèi)部通信地址 -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop101:8032</value>
</property>
<!-- 指定 AM 向 rm1 申請資源的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop101:8030</value>
</property>
<!-- 指定供 NM 連接的地址 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop101:8031</value>
</property>
<!-- ========== rm2 的配置 ========== -->
<!-- 指定 rm2 的主機(jī)名 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop102</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop102:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop102:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop102:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop102:8031</value>
</property>
<!-- ========== rm3 的配置 ========== -->
<!-- 指定 rm3 的主機(jī)名 -->
<property>
<name>yarn.resourcemanager.hostname.rm3</name>
<value>hadoop103</value>
</property>
<!-- 指定 rm3 的 web 端地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm3</name>
<value>hadoop103:8088</value>
</property>
<!-- 指定 rm3 的內(nèi)部通信地址 -->
<property>
<name>yarn.resourcemanager.address.rm3</name>
<value>hadoop103:8032</value>
</property>
<!-- 指定 AM 向 rm3 申請資源的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm3</name>
<value>hadoop103:8030</value>
</property>
<!-- 指定供 NM 連接的地址 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm3</name>
<value>hadoop103:8031</value>
</property>
<!-- 指定 zookeeper 集群的地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>
<!-- 啟用自動恢復(fù) -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 指定 resourcemanager 的狀態(tài)信息存儲在 zookeeper 集群 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateSt ore</value>
</property>
<!-- 環(huán)境變量的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS
SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- ZK中ZNode節(jié)點(diǎn)能存儲的最大數(shù)據(jù)量,以字節(jié)為單位,默認(rèn)是 1048576 字節(jié),也就是1MB,現(xiàn)在擴(kuò)大100倍 -->
<property>
<name>yarn.resourcemanager.zk-max-znode-size.bytes</name>
<value>104857600</value>
</property>
<!--用于狀態(tài)存儲的類,可以設(shè)置為-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
4、配置mapred-site.xml
<configuration>
<!-- 指定 MapReduce 程序運(yùn)行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 歷史服務(wù)器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 歷史服務(wù)器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
</configuration>
5、配置workers
hadoop101
hadoop102
hadoop103
6、修改配置hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_HOME=/usr/local/hadoop-2.3.1
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
四、分發(fā)文件
scp -r /usr/local/hadoop-3.2.1 hadoop102:/usr/local
scp -r /usr/local/hadoop-3.2.1 hadoop103:/usr/local
五、啟動服務(wù)
在各個(gè)?JournalNode?節(jié)點(diǎn)上(每臺虛擬機(jī)),輸入以下命令啟動?journalnode?服務(wù)
hdfs --daemon start journalnode
node1上格式化namenode
hdfs namenode -format
node1上啟動namenode
hdfs --daemon start namenode
在 [nn2,nn3] 上,同步 nn1 的元數(shù)據(jù)信息
hdfs namenode -bootstrapStandby
在node1節(jié)點(diǎn)上格式化ZKFC
hdfs zkfc -formatZK
node1節(jié)點(diǎn)上啟動HDFS和Yarn
start-dfs.sh
start-yarn.sh
到此hadoop高可用集群搭建就完成了。
六、查看服務(wù)
jps
查看yarn服務(wù)狀態(tài)
yarn rmadmin??-getAllServiceState
yarn rmadmin -getServiceState rm1
zkCli.sh 客戶端查看 ResourceManager 選舉鎖節(jié)點(diǎn)內(nèi)容:
get -s /yarn-leader-election/cluster-yarn1/ActiveStandbyElectorLock
七、常見問題解決
1、高可用下提示Operation category READ is not supported in state standby
hadoop fs -ls /?
總提示
hadoop fs -ls /
2022-12-06 02:02:22,062 INFO retry.RetryInvocationHandler: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
????????at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:98)
????????at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:2021)
????????at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1449)
????????at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3183)
????????at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1173)
解決辦法:文章來源:http://www.zghlxwxcb.cn/news/detail-418941.html
手動將活躍的namenode切換到第一臺文章來源地址http://www.zghlxwxcb.cn/news/detail-418941.html
hdfs haadmin -failover nn3 nn1
到了這里,關(guān)于【大數(shù)據(jù)入門核心技術(shù)-Hadoop】(六)Hadoop3.2.1高可用集群搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!