天天看點

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

使用hadoop使用者,在/opt下面建立module檔案夾,并将權限指派給hadoop使用者

–如果使用root使用者 直接建立即可

sudo chown hadoop:hadoop module/

第一個使用者是屬主資訊,第二個使用者是屬組資訊

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

将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/

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

配置環境變量,建立環境變量檔案配設定hadoop與jdk目錄,配置後記得source生效,java與hadoop驗證版本

sudo vi /etc/profile.d/my_env.sh 每個節點都配置

source /etc/profile

java -version

hadoop version

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

另外兩個節點建立/opt/module 目錄

将jdk與hadoop分發到另外兩台節點

華為雲Centos7搭建hadoop叢集三: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

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

進入zk的data目錄下,建立一個myid檔案,配置與server對應的節點編号對應,如hadoop01,就配置1來對應Server.1

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

将zk從01分到到02,03節點,過程省略,并且要記得修改另外兩台節點的myid資訊,因為同步的資料myid為1可以使用vi,或者

使用echo 2 > myid ,這裡的 > 表示覆寫寫入的意思,03節點對應echo 3 > myid

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

配置完畢後,可以啟動三台的zk節點,并檢查,可以将zk環境變量配置到/etc/profile.d/my_env.sh中,,友善使用

可以看到啟動後檢查狀态02是leader,01是follower,沒問題

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

zk配置完畢後,配置hadoop

首先進入hadoop目錄

增加java環境變量的配置

cd /opt/module/hadoop-3.1.3/etc/hadoop

vi hadoop-env.sh

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

配置叢集的節點

vi workers

hadoop01

hadoop02

hadoop03

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

配置檔案資訊

配置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

華為雲Centos7搭建hadoop叢集三:jdk,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狀态

驗證服務程序

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝
華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝
華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

将02的namenode停止,看下hadoop01狀态,并啟動02節點的namenode

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

重新開機02namenode後

華為雲Centos7搭建hadoop叢集三:jdk,hadoop安裝

繼續閱讀