華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝
使用hadoop使用者,在/opt下面建立module檔案夾,并将權限指派給hadoop使用者
–如果使用root使用者 直接建立即可
sudo chown hadoop:hadoop module/
第一個使用者是屬主資訊,第二個使用者是屬組資訊
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0EDOzMmYzEjYkZ2NwUmM5ATM3QTO0gTYwgTYxYWM3czLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
将jdk,hadoop上傳到雲伺服器後,解壓到指定檔案夾
sudo tar -zxvf /data/jdk-8u212-linux-x64.tar.gz -C /opt/module/
sudo tar -zxvf /data/hadoop-3.1.3.tar.gz -C /opt/module/
配置環境變量,建立環境變量檔案配設定hadoop與jdk目錄,配置後記得source生效,java與hadoop驗證版本
sudo vi /etc/profile.d/my_env.sh 每個節點都配置
source /etc/profile
java -version
hadoop version
另外兩個節點建立/opt/module 目錄
将jdk與hadoop分發到另外兩台節點
安裝hadoop,進入hadoop檔案夾
我配置的是高可用的namenode,節點選擇hadoop01.hadoop02
高可用的resourcemanager,節點選擇hadoop01,hadoop02
yarn曆史伺服器,節點選擇hadoop03
因為配置高可用,是以需要先安裝zookeeper,節點三台全部安裝
先将zookeeper上傳解壓到/opt/module/并重命名
tar -zxvf /data/apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
在zk目錄下建立data檔案夾
mkdir data
進入zk的conf目錄
将zoo_sample.cfg 為 zoo.cfg
修改zoo.cfg配置檔案,将dataDir修改為建立的data檔案夾,增加zk的server資訊
server分别為伺服器編号,伺服器節點,内部與leader通信端口,選舉leader端口,zk對外的連接配接端口為2181
進入zk的data目錄下,建立一個myid檔案,配置與server對應的節點編号對應,如hadoop01,就配置1來對應Server.1
将zk從01分到到02,03節點,過程省略,并且要記得修改另外兩台節點的myid資訊,因為同步的資料myid為1可以使用vi,或者
使用echo 2 > myid ,這裡的 > 表示覆寫寫入的意思,03節點對應echo 3 > myid
配置完畢後,可以啟動三台的zk節點,并檢查,可以将zk環境變量配置到/etc/profile.d/my_env.sh中,,友善使用
可以看到啟動後檢查狀态02是leader,01是follower,沒問題
zk配置完畢後,配置hadoop
首先進入hadoop目錄
增加java環境變量的配置
cd /opt/module/hadoop-3.1.3/etc/hadoop
vi hadoop-env.sh
配置叢集的節點
vi workers
hadoop01
hadoop02
hadoop03
配置檔案資訊
配置core-site.xml檔案
<!-- 指定叢集名稱 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 指定 hadoop 運作時産生檔案的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 指定zk叢集連接配接資訊名稱 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!-- 指定hadoop使用者可以通路hdfs的節點 proxyuser後的hadoop指的是使用者-->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- 指定hadoop使用者可以通路hdfs的節點的所屬組 proxyuser後的hadoop指的是使用者-->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
配置hdfs-site.xml檔案,下面關于yarn部配置設定置不要照搬,已經聲明
<!-- namenode存放資料的位置 hadoop.tmp.dir在core-site.xml中已經配置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/name</value>
</property>
<!-- datanode存放資料的位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/data</value>
</property>
<!-- journalnode存放資料的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.tmp.dir}/jn</value>
</property>
<!-- 完全分布式叢集名稱 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 叢集中 NameNode 節點都有哪些 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信位址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop01:8020</value>
</property>
<!-- nn2 的 RPC 通信位址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop02:8020</value>
</property>
<!-- nn1 的 http 通信位址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop01:9870</value>
</property>
<!-- nn2 的 http 通信位址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop02:9870</value>
</property>
<!-- 指定 NameNode 中繼資料在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster</value>
</property>
<!-- 配置隔離機制,即同一時刻隻能有一台伺服器對外響應 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔離機制時需要 ssh 無秘鑰登入,這裡的hadoop指的是使用者-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 通路代理類:client,mycluster,active 配置失敗自動切換實作方式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
配置yarn-site.xml
<!--shuffle方式-->
<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>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--指定rm1的主機名-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!--指定rm1的web位址-->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop01:8088</value>
</property>
<!--指定rm1的内部通信位址-->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop01:8032</value>
</property>
<!--指定nm向rm1彙報的位址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop01:8031</value>
</property>
<!--指定am向rm1申請資源的位址-->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop01:8030</value>
</property>
<!--指定rm1的主機名-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!--指定rm2的web位址-->
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop02:8088</value>
</property>
<!--指定rm2的内部通信位址-->
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop02:8032</value>
</property>
<!--指定nm向rm2彙報的位址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop02:8031</value>
</property>
<!--指定am向rm2申請資源的位址-->
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop02:8030</value>
</property>
<!--指定 zookeeper 叢集的位址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--啟用自動恢複-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定 resourcemanager 的狀态資訊存儲在 zookeeper 叢集-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</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_MAPRED_HOME</value>
</property>
<!--是否啟動一個線程檢查每個任務正使用的實體記憶體量,如果任務超出配置設定值,則直接将其殺掉,預設是 true ,使用虛拟機推薦關閉-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否啟動一個線程檢查每個任務正使用的虛拟記憶體量,如果任務超出配置設定值,則直接将其殺掉,預設是 true,使用虛拟機推薦關閉 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--下面的配置根據資源不同,不推薦直接照搬,是之前我虛拟機的配置,雲服務的配置還沒修改好-->
<!--設定節點可用的實體記憶體大小 對應真實記憶體*虛拟記憶體比-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>6144</value>
</property>
<!--設定節點可用的core大小 對應真實core*虛拟核比-->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!--設定節點申請資源最小的MB-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<!--設定節點申請資源最小的核數-->
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<!--設定節點申請資源最大的MB-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>5120</value>
</property>
<!--設定節點申請資源最大的核數-->
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!--設定節點的虛拟記憶體比例-->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2</value>
</property>
<!--設定節點的虛拟core比例-->
<!--設定節點的規整化因子-->
<property>
<name>yarn.scheduler.increment-allocation-mb</name>
<value>1024</value>
</property>
配置mapred-site.xml
<!--history 内部通信端口-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop03:10020</value>
</property>
<!--history 外部檢視服務端口-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop03:19888</value>
</property>
重新分發hadoop
檔案配置完畢,需要檢查:
hadoop jdk zk環境變量是否配置,三台都需要配置
一定要檢查是否已經分發了hadoop jdk 看下另外兩台的hdfs-site.xml中是否有内容
zk的myid是否已經修改 hadoop檔案是否已經分發
啟動hadoop叢集
初始化hadoop,先確定三台zk服務都已經啟動,檢查zk狀态
zkServer.sh status
1.啟動三台節點的journalnode----三台需要全部啟動,一定要先啟動journalnode
hdfs --daemon start journalnode
2.在其中一台namenode上執行初始化,我選擇01節點啟動,初始化操作隻需要做一次,如果在01初始化,不要在02重新執行這條指令
hdfs namenode -format
3.在01格式化叢集後,在01節點啟動namenode,啟動是在02同步資料前執行的
hdfs --daemon start namenode
4.在02節點,同步01的叢集資訊,如果設定多個namenode,要多個都同步并啟動
hdfs namenode -bootstrapStandby
5.在02節點同步後,啟動02節點的namenode
hdfs --daemon start namenode
6.在01,02節點都啟動後,初始化zkfc并啟動zkfc,我選擇01初始化zkfc,初始化zkfc指令隻需要執行一次,不要重複執行
hdfs zkfc -formatZK
7.在01,02上啟動zkfc服務
hdfs --daemon start zkfc
8.啟動三台的datanode
hdfs --daemon start datanode
9.在01節點啟動yarn服務
start-yarn.sh
10.如果忘記同步或配置檔案錯誤,可以将hadoop檔案夾下data和logs目錄删除,重新執行,如果有異常可以根據提示處理,如提示/tmp檔案等,可以直接清理掉
11.上面測試完成後,先停止yarn,後停止hdfs,最後停止zk
12.啟動順序相反,先啟動zk,再啟動hdfs,最後啟動yarn和yarn曆史伺服器
一些常用的指令
Hadoop 指令
hadoop fs
指令駝峰命名,首字母小寫
檔案上傳
-copyFromLocal
複制上傳
-moveFromLocal
剪切上傳,本地檔案清除
-put
複制上傳
-put 上傳檔案 路徑或新檔案名稱
-appendToFile
将檔案追加到存在的檔案末尾
檔案下載下傳
-copyToLocal
複制下載下傳 下載下傳檔案/檔案夾 路徑或新檔案/檔案夾名稱,
-moveToLocal
剪切下載下傳
-get
等同copyToLocal
檔案檢視
-cat
檢視檔案内容
-ls
檢視目錄下檔案清單
-tail
檢視檔案末尾1KB資料
-count
統計檔案個數
HDFS内資料移動建立删除
-mv
将資料移動到指定路徑
-cp
将資料複制到指定路徑
-mkdir
建立檔案夾
-rm
-rm -r
删除檔案或檔案夾或遞歸删除
-du
統計檔案夾大小,-s -h
-s表示整個檔案夾,沒有-s表示統計檔案夾下單獨檔案大小
-setrep
設定檔案的副本數
如果設定副本數大于datanode節點數不生效,等到節點數等于副本數才會夠
-chmod
設定權限
-chown
設定使用者組
hdfs haadmin 高可用的一些設定
hdfs haadmin -getServiceState nn1
擷取節點的狀态
–transitionToActive
将節點轉為active狀态
–transitionToStandby
将節點轉為standby狀态
驗證服務程序
将02的namenode停止,看下hadoop01狀态,并啟動02節點的namenode
重新開機02namenode後