安裝hadoop有好幾種方式,以下按照hdfs高可用的方式來安裝。
1、 創建用戶
命令:
1
2
|
useradd -m bigdata passwd bigdata |
2、 安裝jdk
解壓:
1
|
tar -zvf jdk-8u191-linux-x64.tar.gz |
修改環境變量
1
2
3
4
5
|
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64 JRE_HOME=/usr/lib/jvm/java-8-openjdk-arm64/jre CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME PATH CLASSPATH |
3、 修改hosts
修改/etc/hosts
1
2
3
|
10.211.55.12 hadoop01 # NameNode Active 10.211.55.13 hadoop01 # NameNode Standby 10.211.55.14 hadoop01 # DataNode1 |
4、 配置ssh免密登錄
在每一臺需要配置的機器上執行以下命令:
1
|
ssh-keygen –t rsa |
執行完成后默認會在其根目錄下創建一個.ssh目錄,在這個目錄中有id_rsa和id_rsa.pub兩個文件。然后將所有機器的id_rsa.pub文件的內容都合并到一個新的文件中,文件命名為authorized_keys,然后將該文件分發到各臺機器上。
最后,使用ssh登錄其他機器測試是否完成免密。
5、 安裝zookeeper
下載鏈接:https://zookeeper.apache.org/releases.html
解壓:
1
|
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz |
修改配置文件
將zookeeper下conf目錄中的zoo_sample.cfg文件復制一份,新復制的文件重命名為zoo.cfg文件。
修改內容如下:
1
2
3
4
5
6
7
|
#zookeeper的文件路徑 dataDir=/root/zookeeper/data #zookeeper集群節點信息 server.1=hadoop01:2888:3888 server.2=hadoop02:2888:3888 server.3=hadoop03:2888:3888 |
#server.A=B:C:D 其中A是一個數字,代表這是第幾號服務器;B是服務器的IP地址;C表示服務器與群集中的“領導者”交換信息的端口;當領導者失效后,D表示用來執行選舉時服務器相互通信的端口。
然后在上述設置的文件目錄中新建一個文件,文件名為myid,文件內容為一個數字。例如上述配置的hadoop01對應的是server.1,它的myid的文件內容就是1。
配置環境變量
修改/etc/profile文件
1
2
|
export ZOOKEEPER_HOME=/root/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin |
啟動
啟動命令如下
1
2
3
4
|
#啟動 zkServer.sh start #查詢狀態 zkServer.sh status |
6、 安裝hadoop
對于三臺節點的配置安排如下:
hadoo01:journalnode、namenode、datanode、resourcemanager、nodemanager
hadoo02:journalnode、namenode、datanode、resourcemanager、nodemanager
hadoo03:journalnode、datanode、nodemanager
下載鏈接:https://hadoop.apache.org/releases.html
解壓:
1
|
tar -zxvf hadoop-2.7.6.tar.gz |
修改配置文件:
hadoop的配置文件在解壓后文件夾的etc目錄下的hadoop目錄中。
修改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
|
< configuration > <!-- 配置hdfs的名稱,其中value標簽中的nns1為自定義的,與后文hdfs-site.xml中的屬性對應即可--> < property > < name >fs.defaultFS</ name > < value >hdfs://nns1</ value > </ property > < property > < name >io.file.buffer.size</ name > < value >131072</ value > </ property > <!-- 其他臨時文件的存儲的目錄--> < property > < name >hadoop.tmp.dir</ name > < value >/data/HadoopData/HDFSData</ value > </ property > <!-- 下面兩項與權限相關,在配置hiveserver2的時候如果沒配置這兩項會出問題。name標簽中的root需要改為你使用的用戶名--> < property > < name >hadoop.proxyuser.root.hosts</ name > < value >*</ value > </ property > < property > < name >hadoop.proxyuser.root.groups</ name > < value >*</ value > </ property > <!-- --> <!-- 配置zookeeper--> < property > < name >ha.zookeeper.quorum</ name > < value >hadoop01:2181,hadoop02:2181,hadoop03:2181</ 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
|
< configuration > <!-- 配置hdfs服務,需要與上文中的fs.defaultFS對應--> < property > < name >dfs.nameservices</ name > < value >nns1</ value > </ property > <!-- 配置hdfs的namenode,使用“,”分隔,value標簽中的內容需要自定義--> < property > < name >dfs.ha.namenodes.nns1</ name > < value >nn1,nn2</ value > </ property > <!-- 配置兩臺namenode,name標簽最后的內容需要與上文對應--> < property > < name >dfs.namenode.rpc-address.nns1.nn1</ name > < value >hadoop01:9000</ value > </ property > < property > < name >dfs.namenode.rpc-address.nns1.nn2</ name > < value >hadoop02:9000</ value > </ property > < property > < name >dfs.namenode.http-address.nns1.nn1</ name > < value >hadoop01:50070</ value > </ property > < property > < name >dfs.namenode.http-address.nns1.nn2</ name > < value >hadoop02:50070</ value > </ property > <!--配置journalnode,修改value中的ip地址與端口便可,最后的nns1可以改為上述定義的名稱 --> < property > < name >dfs.namenode.shared.edits.dir</ name > < value >qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/nns1</ value > </ property > <!-- 客戶端連接可用狀態的NameNode所用的代理類 --> < property > < name >dfs.client.failover.proxy.provider.nns1</ name > < value >org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</ value > </ property > <!-- 一旦需要NameNode切換,使用ssh方式進行操作,配置了這個需要服務器能使用fuster,有的服務器可能需要安裝 --> < property > < name >dfs.ha.fencing.methods</ name > < value >sshfence</ value > </ property > <!-- 如果使用ssh進行故障切換,使用ssh通信時用的密鑰存儲的位置 --> < property > < name >dfs.ha.fencing.ssh.private-key-files</ name > < value >/root/.ssh/id_rsa</ value > </ property > <!-- 指定journalnode的存儲路徑 --> < property > < name >dfs.journalnode.edits.dir</ name > < value >/data/HadoopData/HDFSData/journal</ value > </ property > <!-- 是否啟動自動故障轉移 --> < property > < name >dfs.ha.automatic-failover.enabled</ name > < value >true</ value > </ property > <!-- 指定namenode數據存儲路徑 --> < property > < name >dfs.namenode.name.dir</ name > < value >/data/HadoopData/HDFSData/name</ value > </ property > <!-- 指定datanode數據存儲路徑 --> < property > < name >dfs.datanode.data.dir</ name > < value >/data/HadoopData/HDFSData/data</ value > </ property > <!-- 設置文件副本數 --> < property > < name >dfs.replication</ name > < value >3</ value > </ property > <!-- 是否啟動hdfs網頁界面 --> < property > < name >dfs.webhdfs.enabled</ name > < value >true</ value > </ property > </ configuration > |
配置mapred-site.xml
1
2
3
4
5
6
7
|
< configuration > <!-- 采用yarn作為mapreduce的資源調度框架 --> < property > < name >mapreduce.framework.name</ name > < value >yarn</ value > </ property > </ configuration > |
配置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
|
< configuration > <!-- 啟用HA高可用性 --> < property > < name >yarn.resourcemanager.ha.enabled</ name > < value >true</ value > </ property > <!-- 使用了2個resourcemanager,分別指定Resourcemanager的地址 --> < property > < name >yarn.resourcemanager.ha.rm-ids</ name > < value >rm1,rm2</ value > </ property > <!-- 配置集群名稱 --> < property > < name >yarn.resourcemanager.cluster-id</ name > < value >cluster1-yarn</ value > </ property > <!--配置RM節點 --> < property > < name >yarn.resourcemanager.hostname.rm1</ name > < value >hadoop01</ value > </ property > < property > < name >yarn.resourcemanager.hostname.rm2</ name > < value >hadoop02</ value > </ property > <!--在hadoop01上配置rm1,在hadoop02上配置rm2,注意:一般都喜歡把配置好的文件遠程復制到其它機器上,但這個在YARN的另一個機器上一定要修改 --> < property > < name >yarn.resourcemanager.ha.id</ name > < value >rm1</ value > </ property > <!--開啟自動恢復功能 --> < property > < name >yarn.resourcemanager.recovery.enabled</ name > < value >true</ value > </ property > <!--配置與zookeeper的連接地址 --> < property > < name >yarn.resourcemanager.zk-address</ name > < value >hadoop01:2181,hadoop02:2181,hadoop03:2181</ value > </ property > <!-- 配置shuffle --> < property > < name >yarn.nodemanager.aux-services</ name > < value >mapreduce_shuffle</ value > </ property > < property > < name >yarn.nodemanager.aux-services.mapreduce.shuffle.class</ name > < value >org.apache.hadoop.mapred.ShuffleHandler</ value > </ property > </ configuration > |
配置slaves
1
2
3
|
hadoop01 hadoop02 hadoop03 |
slaves中配置的服務器ip,沒改hosts文件則直接寫ip地址便可。該文件配置的服務器在啟動的時候會啟動datanode和nodemanager兩個進程。
7、 初始化
在初始化前需要將所有機器都配置好hadoop
(一般直接復制上述配置好的文件,注意yarn-site.xml中的id,還有保證配置中的路徑在每臺機器上都存在)。
(1) 啟動zookeeper
初始化之前需要保證zookeeper能正常提供服務,啟動命令之前有提到
(2) 啟動journalnode
初始化前需要保證journalnode已經啟動。啟動腳本在hadoop的sbin目錄下,名字為hadoop-daemon.sh。
啟動命令如下:
1
|
./hadoop-daemon.sh start journalnode |
(3) 格式化zk
命令如下
1
|
hdfs zkfc -formatZK |
(4) 格式化hdfs
命令如下
1
|
hadoop namenode -format |
這一步會在上述hdfs-site.xml,配置的dfs.namenode.name.dir路徑下創建一系列文件。
(5) 同步元數據
在另一臺配置了namenode的服務器上執行以下命令:
1
|
hdfs namenode -bootstrapStanby |
上述命令如果執行失敗,還有一個簡單的方法可以同步元數據。可以直接將步驟4中在第一臺生成的文件復制到第二臺服務器。
(6) 啟動hadoop
同樣在sbin目錄下,使用start-all.sh可以啟動所有服務,使用start-dfs.sh和start-yarn.sh可以分別啟動hdfs和yarn。
使用hadoop-deamon.sh和yarn-deamon.sh分別別啟動hdfs和yarn的單個進程。
(7) 安裝fuster
安裝命令如下:
1
|
yum install psmisc |
(8) 網頁訪問
hdfs網頁訪問50070端口,yarn網頁訪問8088。這兩個端口可以在配置文件中修改。
正常啟動則可以訪問到以下頁面。
以上就是Hadoop源碼分析二安裝配置過程的詳細內容,本系列下一篇文章傳送門Hadoop源碼分析三啟動及腳本剖析更多Hadoop源碼分析的資料請持續關注服務器之家!
原文鏈接:https://blog.csdn.net/qq_39210987/article/details/113921917