溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hdfs--hadoop--雙namenode三datanode

發(fā)布時間:2020-07-07 12:40:14 來源:網(wǎng)絡(luò) 閱讀:5562 作者:yr_linux運(yùn)維 欄目:大數(shù)據(jù)

前提:搭建zookeeper集群、java環(huán)境、無秘互通
注意:文中加粗部分表示需要按實(shí)際情況修改的部分

zookeeper可以參考:zookeeper傳送門

下載安裝包

https://mirrors.tuna.tsinghua.edu.cn/apache/ 是官網(wǎng)提供的安裝包下載網(wǎng)站之一。

結(jié)構(gòu)

主機(jī)名 study centos156 client
IP 192.168.233.155 192.168.233.156 192.168.233.158
服務(wù)1 zookeeper 1 zookeeper 2 zookeeper 3
服務(wù)2 namenode namenode
服務(wù)3 datanode datanode datanode
服務(wù)4 journalnode journalnode
服務(wù)5 nodemanager nodemanager nodemanager
服務(wù)6 zkfc zkfc
服務(wù)7 ResourceManager

服務(wù)簡介:
zookeeper:分布式應(yīng)用程序協(xié)調(diào)服務(wù)。
namenode:管理服務(wù)。管理元數(shù)據(jù),維護(hù)目錄樹,響應(yīng)請求。
datanode:hadoop中存儲數(shù)據(jù)。
journalnode:實(shí)現(xiàn)namenode數(shù)據(jù)共享,保持?jǐn)?shù)據(jù)的一致性。
ResourceManager:yarn集群中資源的統(tǒng)一管理和分配
nodemanager:ResourceManager在每臺機(jī)器上的代理
參考文檔:hadoop介紹
注:zookeeper和hadoop可以不裝在一個臺機(jī)器上,只需配置文件指定即可

開始安裝

主節(jié)點(diǎn)1-study

檢查java環(huán)境
java -version
如果能夠顯示版本說明jdk安裝ok

#下載文件(可能因?yàn)榘姹靖律В?br/>cd /tmp
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz
#解壓文件
tar axf hadoop-2.7.5/hadoop-2.7.5.tar.gz -C /usr/local
#重命名,方便管理配置
cd /usr/local
rename hadoop-2.7.5 hadoop hadoop-2.7.5
#修改環(huán)境變量
vim /etc/profile
在文件最后添加如下內(nèi)容

export HADOOP_HOME=/usr/local/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}
export HADOOP_MAPARED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LD_LIBRARY_PATH=${HADOOP_HOME}/lib/native/:${LD_LIBRARY_PATH}
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"

#使其生效
source /etc/profile
#創(chuàng)建文件存放目錄
mkdir -p /usr/local/hadoop/{name,data,tmp,journal}
#修改配置文件
cd $HADOOP_HOME/etc/hadoop
#修改slaves文件,指定slave服務(wù)器
vim slaves

study
centos156
client

#修改core-site.xml,指定hdfs集群,臨時文件目錄,zookeeper等
vim core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop</value>
<description>HDFS的邏輯服務(wù)名,hadoop位置可以寫成任何東西</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>hadoop臨時文件存放目錄,也可寫作file:/usr/local/hadoop/tmp</description>
</property>

<property>
<name>io.file.buffer.size</name>
<value>4096</value>
<description>指定執(zhí)行文件IO緩存區(qū)大小,機(jī)器好可以設(shè)置大些</description>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>study:2181,centos156:2181,client:2181</value>
<description>指定zookeeper地址</description>
</property>
</configuration>

參考文檔

vim hdfs-site.xml

<configuration>
<property>
<name>dfs.nameservices</name>
<value>hadoop</value>
<description>HDFS NN的邏輯名稱,需要與core-site.xml中的HDFS的邏輯服務(wù)名一致,這里使用上面的hadoop</description>
</property>
<property>
<name>dfs.ha.namenodes.hadoop</name>
<value>study,centos156</value>
<description>hadoop邏輯名namenode節(jié)點(diǎn)列表,hadoop對應(yīng)邏輯名</description>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop.study</name>
<value>study:9000</value>
<description>hadoop中study的rpc通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.hadoop.study</name>
<value>study:50070</value>
<description>hadoop中study的http通信地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop.centos156</name>
<value>centos156:9000</value>
<description>hadoop中centos156的rpc通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.hadoop.centos156</name>
<value>centos156:50070</value>
<description>hadoop中centos156的http通信地址</description>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://study:8485;centos156:8485;client:8485/hadoop</value>
<description> journalNode 的 URI 地址,活動的namenode會將edit log寫入journalNode</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journal</value>
<description>用于存放 editlog 和其他狀態(tài)信息的目錄</description>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description>啟動自動failover,詳情請看參考文檔</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoop</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>實(shí)現(xiàn)客戶端與 active NameNode 進(jìn)行交互的 Java類</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>解決HA集群腦裂問題,只允許一個nn寫數(shù)據(jù)</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
<description>the location stored ssh key,指定用戶密匙,建議不要用root,用于故障轉(zhuǎn)移,可以不設(shè)置</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>5000</value>
<description>ssh連接超時時間,上面秘鑰沒設(shè)置這個也可以不設(shè)置</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/name</value>
<description>namenode數(shù)據(jù)存放目錄</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data</value>
<description>datanode數(shù)據(jù)存放目錄</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>client參數(shù),node level參數(shù),指定一個文件在hdfs中有幾個副本,設(shè)置2或3即可,不能錯過datanode節(jié)點(diǎn)數(shù)</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<description>允許webhdfs,用于數(shù)據(jù)讀取</description>
</property>
</configuration>

webhdfs詳解

vim mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>mapreduce框架,一般用yarn</description>
</property>
</configuration>
MapReduce詳解

vim yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>nodemanager啟動時加載services的方式為mapreduce分配</description>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
<description>實(shí)現(xiàn)mapreduce_shuffle的java類</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>study</value>
<description>resourcemanager節(jié)點(diǎn)列表,一個namenode上有即可</description>
</property>
</configuration>

修改腳本文件中的JAVA_HOME
vim hadoop-env.sh

export JAVA_HOME=/usr/local/jdk

注意 export HADOOP_SSH_OPTS是自動hadoop服務(wù)ssh使用端口,如果你沒有使用默認(rèn)的22號端口,請修改該選項(xiàng),否則HA無法實(shí)現(xiàn)

vim yarn-env.sh

JAVA_HOME=/usr/local/jdk

主節(jié)點(diǎn)二-centos156

#將study節(jié)點(diǎn)上的hadoop文件拷貝到centos156的/usr/local目錄下
scp -r study:/usr/local/hadoop /usr/local
#修改環(huán)境變量
scp -r study:/etc/profile /etc/
source /etc/profile
#如果你使用的是其他的用戶執(zhí)行hadoop,就需要修改hadoop文件的屬主等信息

從節(jié)點(diǎn)-client

#與 主節(jié)點(diǎn)二-centos156操作一樣
scp -r study:/usr/local/hadoop /usr/local
scp -r study:/etc/profile /etc/
source /etc/profile

啟動hadoop集群

第一次運(yùn)行hadoop是需要格式化數(shù)據(jù),啟動會比較麻煩,之后的啟動只需要start-all.sh停止stop-all.sh

前提:zookeeper狀態(tài)正常,jdk狀態(tài)正常,環(huán)境變量設(shè)置正常

主節(jié)點(diǎn)1-study

#創(chuàng)建命名空間
hdfs zkfc -formatZK
#啟動journalnode
hadoop-daemon.sh start journalnode(最好三個節(jié)點(diǎn)一起啟動)
#格式化namenode
hdfs namenode -format hadoop
#啟動namenode
hadoop-daemon.sh start namenode
#啟動zfkc
hadoop-daemon.sh start zkfc

主節(jié)點(diǎn)二-centos156

#啟動journalnode
hadoop-daemon.sh start journalnode
#從hdfs namenode -bootstrapStandby獲取格式化后的元數(shù)據(jù)
hdfs namenode -bootstrapStandby
#啟動namenode
hadoop-daemon.sh start namenode
#啟動zfkc
hadoop-daemon.sh start zkfc

從節(jié)點(diǎn)-client

#啟動journalnode
hadoop-daemon.sh start journalnode

上面三個節(jié)點(diǎn)命令運(yùn)行完成后重啟hadoop集群
關(guān)閉集群

stop-all.sh

啟動集群

start-all.sh

訪問狀態(tài)頁面
http://192.168.233.155:50070/dfshealth.html#tab-overview
hdfs--hadoop--雙namenode三datanode
hdfs--hadoop--雙namenode三datanode
hdfs--hadoop--雙namenode三datanode

http://192.168.233.156:50070/dfshealth.html#tab-overview
hdfs--hadoop--雙namenode三datanode

頁面上的datanodes可以看到datanode的狀態(tài),utilities可以查看文件和日志

hadoop常用命令
關(guān)閉集群 stop-all.sh
啟動集群 start-all.sh
單獨(dú)啟動namenode hadoop-daemon.sh start namenode
單獨(dú)啟動datanode hadoop-daemon.sh start datanode
單獨(dú)啟動journalnode hadoop-daemon.sh start journalnode
單獨(dú)啟動zkfc hadoop-daemon.sh start zkfc
手動轉(zhuǎn)移活動namenode hdfs haadmin -transitionToActive --forcemanual study

查看/下面的文件 hadoop fs -ls /
上傳文件到hadoop hadoop fs -put <原文件> <存放路徑>
i.e. hadoop fs -put /etc/passwd /
hadoop中創(chuàng)建命令 hadoop fs –mkdir <絕對路徑>
i.e. hadoop fs -mkdir /tmp
創(chuàng)建空文件 hadoop fs -touchz <文件絕對路徑>
i.e. hadoop fs -touchz /tmp/hello
查看文件 hadoop fs -cat <文件絕對路徑>
i.e. hadoop fs -cat /passwd
移動或重命名 hadoop fs -mv <文件絕對路徑> <新文件絕對路徑\名稱>
下載hadoop中的文件或目錄到本地
hadoop fs -get <文件絕對路徑> <本地路徑>
i.e. hadoop fs -get /passwd /tmp
修改文件權(quán)限 hadoop fs -chmod [-R] <文件絕對路徑>
i.e. hadoop fs -chmod 777 /passwd
刪除文件 hadoop fs -rm <文件絕對路徑>
刪除目錄 hadoop fs -rm -r <目錄絕對路徑>

hadoop數(shù)據(jù)遷移

數(shù)據(jù)備份

mkdir /tmp/hadoop
chmod 777 /tmp/hadoop
hadoop fs -copyToLocal hdfs://study:9000/ /tmp/hadoop

數(shù)據(jù)恢復(fù)
先用u盤或者其他的任何方式將文件傳輸?shù)侥繕?biāo)機(jī)器

hadoop fs -copyFromLocal /tmp/hadoop hdfs://study:9000/
hadoop fs -ls /

報(bào)錯處理

hdfs--hadoop--雙namenode三datanode
master: Host key verification failed.
請檢查authorized_keys 和known_hosts文件是是否有該主機(jī)的信息,ssh 主機(jī)名能不能連上

hadoop集群一個主節(jié)點(diǎn)namenode掛掉之后啟動異常
2018-01-17 08:53:24,751 FATAL [hadoop1:16000.activeMasterManager] master.HMaster: Failed to become active master
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby
at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:87)
at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:1774)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1313)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3850)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1011)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:843)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)

處理過程:
查看狀態(tài)(看web頁面)發(fā)現(xiàn)study的狀態(tài)為standby,centos156狀態(tài)為active
如果有一個active這集群狀態(tài)依然是正常的,如果兩個都是standby則為異常。

狀態(tài)不正??赡苁菙?shù)據(jù)異常造成的,namenode掛的時間長了數(shù)據(jù)不同步,處理方法一、從centos 156節(jié)點(diǎn)將數(shù)據(jù)同步過來,方法二、刪除所有節(jié)點(diǎn)上所有hadoop的數(shù)據(jù),刪除zk中hadoop-ha目錄
本次使用的是方法二
所有節(jié)點(diǎn)刪除${HADOOP_HOME}下name、data、logs、tmp目錄下的所有文件
刪除zk中的數(shù)據(jù)
zkCli.sh
ls /
rmr /hadoop-ha
quit
hdfs--hadoop--雙namenode三datanode

重新生成數(shù)據(jù)
主節(jié)點(diǎn)1-study
#創(chuàng)建命名空間
hdfs zkfc -formatZK
#啟動journalnode
hadoop-daemon.sh start journalnode(最好三個節(jié)點(diǎn)一起啟動)
#格式化namenode
hdfs namenode -format hadoop
#啟動namenode
hadoop-daemon.sh start namenode
#啟動zfkc
hadoop-daemon.sh start zkfc
主節(jié)點(diǎn)二-centos156
#啟動journalnode
hadoop-daemon.sh start journalnode
#從hdfs namenode -bootstrapStandby獲取格式化后的元數(shù)據(jù)
hdfs namenode -bootstrapStandby
#啟動namenode
hadoop-daemon.sh start namenode
#啟動zfkc
hadoop-daemon.sh start zkfc

從節(jié)點(diǎn)-client
#啟動journalnode
hadoop-daemon.sh start journalnode

查看狀態(tài)肯定是active,都是新的了

?。。?!注意?。?! 重新構(gòu)建hadoop數(shù)據(jù)會導(dǎo)致hbase無法獲取zookeeper中的數(shù)據(jù),暫時不知道如何恢復(fù),只能刪除zookeeper中的/hbase/table表

參考

hadoop介紹
配置文件參考文檔
webhdfs詳解
hadoop HDFS常用文件操作命令
hadoop fs管理文件權(quán)限:https://www.cnblogs.com/linn/p/5526071.html

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI