HA機制的大數據集群的搭建過程

文章目錄

  • 集群規劃
  • 1、 準備Linux環境
    • 1.1、修改Linux主機名
    • 1.3、修改主機名和IP的映射關系
    • 1.4、關閉防火墻
    • 1.5、ssh免登陸(主節點和從節點之間)
  • 2、 安裝JDK
    • 2.1、上傳
    • 2.2、解壓jdk
    • 2.3、將java添加到環境變量中
    • 2.4、刷新配置
    • 2.5、驗證
  • 3、安裝zookeeper
    • 3.1、解壓
    • 3.2、修改環境變量
    • 3.3、刷新配置
    • 3.4、修改配置文件
    • 3.5、將配置好的zookeeper拷貝到其他節點
  • 4、安裝配置hadoop集群
    • 4.1、解壓
    • 4.2、修改環境變量
    • 4.3、修改hadoop配置文件
    • 4.4、將配置好的hadoop拷貝到其他節點
    • 4.5、初始化集群的步驟
    • 4.6、驗證集群的配置

集群規劃

在這里插入圖片描述
說明:
1、在hadoop2.0中通常由兩個NameNode組成,一個處于active狀態,另一個處于standby狀態。Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便能夠在它失敗時快速進行切換。主備NameNode之間通過一組JournalNode同步元數據信息,一條數據只要成功寫入多數JournalNode即認為寫入成功。通常配置奇數個JournalNode。這里還配置了一個zookeeper集群,用于ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode為standby狀態。
2、hadoop-2.2.0中依然存在一個問題,就是ResourceManager只有一個,存在單點故障,hadoop-2.6.4解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調。

集群環境:
Hadoop2.6.4+Hive2.1.1+Hbase2.0.0+Zookeeper3.4.5+JDK1.8+Centos6.9+Sqoop1.4.6

這里只說下hadoop的搭建過程,其他組件的安裝過程可參考我的其他文章:
Hive2.1.1:https://blog.csdn.net/qq_16633405/article/details/78278979
Hbase2.0.0:https://blog.csdn.net/qq_16633405/article/details/81908283
Sqoop1.4.6:https://blog.csdn.net/qq_16633405/article/details/82224289

1、 準備Linux環境

所有節點都需配置。

1.1、修改Linux主機名

vi /etc/sysconfig/network
1.	NETWORKING=yes
2.	HOSTNAME=ha1 ###自定義主機名

1.2、修改IP

vim /etc/sysconfig/network-scripts/ifcfg-eth03.	DEVICE=eth0
4.	TYPE=Ethernet
5.	ONBOOT=yes
6.	NM_CONTROLLED=yes
7.	BOOTPROTO=static
8.	IPADDR=192.168.112.200
9.	GATEWAY=192.168.112.2 ###網關地址和子網IP不要重復
10.	NETMASK=255.255.255.0
11.	DNS=192.168.112.2

1.3、修改主機名和IP的映射關系

vim /etc/hosts
1.	192.168.112.21 ha2
2.	192.168.112.22 ha3
3.	192.168.112.20 ha1

1.4、關閉防火墻

#查看防火墻狀態
service iptables status
#關閉防火墻
service iptables stop
#查看防火墻開機啟動狀態
chkconfig iptables --list
#關閉防火墻開機啟動
chkconfig iptables off

1.5、ssh免登陸(主節點和從節點之間)

在ha1上生產一對鑰匙
ssh-keygen -t rsa
#將公鑰拷貝到其他節點,包括自己
ssh-coyp-id ha1
ssh-coyp-id ha2
……
#配置ha2到ha3、ha4、ha5的免密碼登陸
#在ha2上生產一對鑰匙
ssh-keygen -t rsa
#將公鑰拷貝到其他節點
ssh-coyp-id ha2				
ssh-coyp-id ha3
……
#注意:兩個namenode之間要配置ssh免密碼登陸
#在ha2上執行
ssh-coyp-id ha1				驗證:
ssh ha1
exit

2、 安裝JDK

所有節點都需配置

2.1、上傳

2.2、解壓jdk

創建文件夾
mkdir /home/hadoop/app
#解壓
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app

2.3、將java添加到環境變量中

vim /etc/profile#在文件最后添加
4.	export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
5.	export PATH=$PATH:$JAVA_HOME/bin

2.4、刷新配置

source /etc/profile

2.5、驗證

Jsp

3、安裝zookeeper

版本:3.4.5
安裝配置zooekeeper集群(在ha1、ha2、ha3上)

3.1、解壓

tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/app/

3.2、修改環境變量

vi /etc/profile
#添加內容:
6.	export ZOOKEEPER_HOME=/root/hadoop/zookeeper
7.	export PATH=$PATH:$ZOOKEEPER_HOME/bin

3.3、刷新配置

source /etc/profile

3.4、修改配置文件

cd /home/hadoop/app/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/root/apps/zookeeper-3.4.5/tmp
在最后添加:
8.	server.1=ha1:2888:3888
9.	server.2=ha2:2888:3888
10.	server.3=ha3:2888:3888保存退出
然后創建一個tmp文件夾:
mkdir /home/hadoop/app/zookeeper-3.4.5/tmp
echo 1 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid

3.5、將配置好的zookeeper拷貝到其他節點

首先分別在ha2、ha3根目錄下創建一個hadoop目錄:mkdir /Hadoop

scp -r /home/hadoop/app/zookeeper-3.4.5/ ha2:/home/hadoop/app/
scp -r /home/hadoop/app/zookeeper-3.4.5/ ha3:/home/hadoop/app/

注意:修改ha2、ha3對應/hadoop/zookeeper-3.4.5/tmp/myid內容
Ha2:

echo 2 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
ha3:
echo 3 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid

4、安裝配置hadoop集群

版本:2.6.4
在ha1上操作。

4.1、解壓

tar -zxvf hadoop-2.6.4.tar.gz -C /home/hadoop/app/

4.2、修改環境變量

hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目錄下。

#將hadoop添加到環境變量中
vim /etc/profile11.	export HADOOP_HOME=/hadoop/hadoop-2.6.4
12.	export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4.3、修改hadoop配置文件

cd /home/hadoop/app/hadoop-2.6.4/etc/hadoop

4.3.1修改hadoo-env.sh

13.	export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55			

4.3.2修改core-site.xml

14.	<configuration>  
15.	<!-- 指定hdfs的nameservice為ns1 -->  
16.	<property>  
17.	<name>fs.defaultFS</name>  
18.	<value>hdfs://bi/</value>  
19.	</property>  
20.	<!-- 指定hadoop臨時目錄 -->  
21.	<property>  
22.	<name>hadoop.tmp.dir</name>  
23.	<value>/home/hadoop/app/hdpdata/</value>  
24.	</property>  
25.	  
26.	<!-- 指定zookeeper地址 -->  
27.	<property>  
28.	<name>ha.zookeeper.quorum</name>  
29.	<value>mini5:2181,mini6:2181,mini7:2181</value>  
30.	</property>  
31.	</configuration> 

4.3.3修改hdfs-site.xml

32.	<configuration>
33.	<!--指定hdfs的nameservice為bi,需要和core-site.xml中的保持一致 -->
34.	<property>
35.	<name>dfs.nameservices</name>
36.	<value>bi</value>
37.	</property>
38.	<!-- bi下面有兩個NameNode,分別是nn1,nn2 -->
39.	<property>
40.	<name>dfs.ha.namenodes.bi</name>
41.	<value>nn1,nn2</value>
42.	</property>
43.	<!-- nn1的RPC通信地址 -->
44.	<property>
45.	<name>dfs.namenode.rpc-address.bi.nn1</name>
46.	<value>ha1:9000</value>
47.	</property>
48.	<!-- nn1的http通信地址 -->
49.	<property>
50.	<name>dfs.namenode.http-address.bi.nn1</name>
51.	<value>ha1:50070</value>
52.	</property>
53.	<!-- nn2的RPC通信地址 -->
54.	<property>
55.	<name>dfs.namenode.rpc-address.bi.nn2</name>
56.	<value>ha2:9000</value>
57.	</property>
58.	<!-- nn2的http通信地址 -->
59.	<property>
60.	<name>dfs.namenode.http-address.bi.nn2</name>
61.	<value>ha2:50070</value>
62.	</property>
63.	<!-- 指定NameNode的edits元數據在JournalNode上的存放位置 -->
64.	<property>
65.	<name>dfs.namenode.shared.edits.dir</name>
66.	<value>qjournal://ha3:8485/bi</value>
67.	</property>
68.	<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
69.	<property>
70.	<name>dfs.journalnode.edits.dir</name>
71.	<value>/home/hadoop/journaldata</value>
72.	</property>
73.	<!-- 開啟NameNode失敗自動切換 -->
74.	<property>
75.	<name>dfs.ha.automatic-failover.enabled</name>
76.	<value>true</value>
77.	</property>
78.	<!-- 配置失敗自動切換實現方式 -->
79.	<property>
80.	<name>dfs.client.failover.proxy.provider.bi</name>
81.	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
82.	</property>
83.	<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
84.	<property>
85.	<name>dfs.ha.fencing.methods</name>
86.	<value>
87.	sshfence
88.	shell(/bin/true)
89.	</value>
90.	</property>
91.	<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
92.	<property>
93.	<name>dfs.ha.fencing.ssh.private-key-files</name>
94.	<value>/root/.ssh/id_rsa</value>
95.	</property>
96.	<!-- 配置sshfence隔離機制超時時間 -->
97.	<property>
98.	<name>dfs.ha.fencing.ssh.connect-timeout</name>
99.	<value>30000</value>
100.	</property>
101.	</configuration>

4.3.4修改mapred-site.xml

102.	<configuration>
103.	<!-- 指定mr框架為yarn方式 -->
104.	<property>
105.	<name>mapreduce.framework.name</name>
106.	<value>yarn</value>
107.	</property>
108.	</configuration>	

4.3.5修改yarn-site.xml

109.	<configuration>
110.	<!-- 開啟RM高可用 -->
111.	<property>
112.	<name>yarn.resourcemanager.ha.enabled</name>
113.	<value>true</value>
114.	</property>
115.	<!-- 指定RM的cluster id -->
116.	<property>
117.	<name>yarn.resourcemanager.cluster-id</name>
118.	<value>yrc</value>
119.	</property>
120.	<!-- 指定RM的名字 -->
121.	<property>
122.	<name>yarn.resourcemanager.ha.rm-ids</name>
123.	<value>rm1,rm2</value>
124.	</property>
125.	<!-- 分別指定RM的地址 -->
126.	<property>
127.	<name>yarn.resourcemanager.hostname.rm1</name>
128.	<value>ha1</value>
129.	</property>
130.	<property>
131.	<name>yarn.resourcemanager.hostname.rm2</name>
132.	<value>ha2</value>
133.	</property>
134.	<!-- 指定zk集群地址,用來存儲RM的狀態,配置三個節點(三份數據)就OK了 -->
135.	<property>
136.	<name>yarn.resourcemanager.zk-address</name>
137.	<value>ha3:2181</value>
138.	</property>
139.	<property>
140.	<name>yarn.nodemanager.aux-services</name>
141.	<value>mapreduce_shuffle</value>
142.	</property>
143.	</configuration>

4.3.6修改slaves
slaves是指定子節點的位置,因為要在ha1上啟動HDFS、yarn,所以ha1上的slaves文件指定的是datanode、nodemanager的位置。添加需要的節點:

144.	ha3

4.4、將配置好的hadoop拷貝到其他節點

scp -r /hadoop/hadoop-2.6.4/ hadoop@ha2:/hadoop/
scp -r /hadoop/hadoop-2.6.4/ hadoop@ha3:/hadoop/

4.5、初始化集群的步驟

注意:嚴格按照下面的步驟!!!
4.5.1啟動zookeeper集群
分別在ha1、ha2、ha3上啟動zk

cd /hadoop/zookeeper-3.4.5/bin/./zkServer.sh start#查看狀態:一個leader,兩個follower./zkServer.sh status

4.5.2啟動journalnode
在ha3上啟動journalnode

cd /hadoop/hadoop-2.6.4sbin/hadoop-daemon.sh start journalnode#運行jps命令檢驗,ha3上多了JournalNode進程

4.5.3格式化HDFS
在ha1上執行命令:

hdfs namenode -format
#格式化后會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這里我配置的是/hadoop/hadoop-2.6.4/tmp,然后將/hadoop/hadoop-2.6.4/tmp拷貝到ha2的/hadoop/hadoop-2.6.4/下。scp -r tmp/ hadoop02:/home/hadoop/app/hadoop-2.6.4/##也可以這樣,建議hdfs namenode -bootstrapStandby

4.5.4格式化ZKFC
在ha1上執行一次即可

hdfs zkfc -formatZK

4.5.5啟動HDFS
在ha1上執行

sbin/start-dfs.sh

4.5.6啟動YARN
分別在ha1、ha2上啟動ResourceManager

sbin/start-yarn.sh

4.6、驗證集群的配置

hadoop-2.6.4配置完畢,驗證集群的配置。
可以統計瀏覽器訪問:
http://ha1:50070
NameNode ‘hadoop01:9000’ (active)
http://ha2:50070
NameNode ‘hadoop02:9000’ (standby)

4.6.1驗證HDFS HA
首先向hdfs上傳一個文件

hadoop fs -put /etc/profile /profile

#查看上傳到hdfs的文件

hadoop fs -ls /

然后再kill掉active的NameNode

kill -9 <pid of NN>

通過瀏覽器訪問:http://ha2:50070
NameNode ‘hadoop02:9000’ (active)
這個時候ha2上的NameNode變成了active
在執行命令:

hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile

剛才上傳的文件依然存在!
手動啟動那個掛掉的NameNode

sbin/hadoop-daemon.sh start namenode

通過瀏覽器訪問:http://ha1:50070
NameNode ‘ha1:9000’ (standby)

4.6.2驗證YARN:
運行一下hadoop提供的demo中的WordCount程序:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
無報錯,OK,大功告成! 

4.6.3測試集群工作狀態的一些指令

bin/hdfs dfsadmin -report	 查看hdfs的各節點狀態信息bin/hdfs haadmin -getServiceState nn1		 獲取一個namenode節點的HA狀態sbin/hadoop-daemon.sh start namenode  單獨啟動一個namenode進程./hadoop-daemon.sh start zkfc   單獨啟動一個zkfc進程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統7個運行級別圖文詳解

Linux系統7個運行級別圖文詳解 當安裝linux操作系統時將選擇下列那一個操作 ______ A&#xff0e;選擇 "圖形登錄方式" 設定系統開始運行級為4 B&#xff0e;選擇 "文本登錄方式" 設定系統開始運行級為3 C&#xff0e;選擇 "文本登錄方式" 設定系…

CRISPR基因編輯

2007年&#xff0c;一家酸奶公司發現一種細菌擁有抵御病毒的特殊防御機制。2012年&#xff0c;細菌的這種機制就被科學家闡述清楚&#xff0c;2013年這一領域快速增長。它被視為分子生物學的一個奇跡&#xff0c;事實上&#xff0c;它并非僅對生物學家產生革命的影響&#xff0…

酒店之王

酒店之王 題目描述 XX酒店的老板想成為酒店之王&#xff0c;本著這種希望&#xff0c;第一步要將酒店變得人性化。由于很多來住店的旅客有自己喜好的房間色調、陽光等&#xff0c;也有自己所愛的菜&#xff0c;但是該酒店只有p間房間&#xff0c;一天只有固定的q道不同的菜。 有…

使用IntelliJ IDEA碰到的問題總結

文章目錄問題一&#xff1a;無法創建Java Class文件問題一&#xff1a;無法創建Java Class文件 今天打開項目時&#xff0c;發現右擊新建不了java.class文件&#xff0c;于是嘗試了以下方法&#xff1a; &#xff08;1&#xff09;選擇 File——>Project Structure——>…

為什么shell腳本第一行要#!/bin/sh

告訴操作系統, 此腳本的解釋器為 /bin/sh 這個可執行文件 類似地, 如果你的腳本用 bash, ksh, 解釋, 第一行就應該是#!/bin/bash #!/bin/ksh 之類的 或者, 你自己定義一種腳本語言, 再自己寫個解釋器去執行它, 比如說叫 xshell, 放在 /usr/local/bin 下, 你的腳本第一行就應該是…

linux文本處理常用指令總結

引子 作為一個偏愛windows的程序員&#xff0c;以前做文本處理的時候總是喜歡在windows下用notepad等圖形化工具處理&#xff0c;比如有時需要把linux服務器上一個文件進行一次全局字符串替換這樣簡單的操作&#xff0c;還得把文件down到本地編輯好再傳回去。這兩天買了本《鳥哥…

CSS——基礎選擇器

CSS的基礎選擇器1 CSS指的是層疊樣式表2 CSS規則由兩個主要的部分構成選擇器&#xff0c;以及一條或多條聲明3 選擇器通常是你需要改變樣式的 HTML 元素如h14 每條聲明由一個屬性和一個值組成&#xff0c;每個屬性有一個值&#xff0c;屬性和值被冒號分開5 屬性大于 …

Linux中chown和chmod的區別和用法

chmod修改第一列內容&#xff0c; chown修改第3、4列內容&#xff1a; chown用法&#xff1a; 用來更改某個目錄或文件的用戶名和用戶組。 chown 用戶名:組名 文件路徑&#xff08;可以是絕對路徑也可以是相對路徑&#xff09; 例1&#xff1a;chown root:root /tmp/tmp1 就…

玩大數據期間碰到的一些問題總結

文章目錄問題一&#xff1a;Zookeeper節點數量為什么建議是奇數個&#xff1f;問題二&#xff1a;HA機制的Hadoop集群中Journal Node 作用問題三&#xff1a;兩個datanode節點互相排斥怎么解決&#xff08;集群無法識別新加入的Datanode&#xff09;&#xff1f;問題四&#xf…

JAVA的SSH框架登錄注冊

Struts 的MVC設計模式可以使我們的邏輯變得很清晰&#xff0c;主要負責表示層的顯示。 Spring 的IOC和AOP可以使我們的項目在最大限度上解藕。 hibernate的就是實體對象的持久化了, 數據庫的封裝。 項目截圖&#xff1a;(代碼是按照項目截圖上傳的&#xff0c;直接對號入座即可…

Visual Studio Code 前端調試不完全指南

本文最初發布于我的個人博客&#xff1a;咀嚼之味Visual Studio Code (以下簡稱 vscode) 如今已經代替 Sublime&#xff0c;成為前端工程師們最喜愛的代碼編輯器。它作為一個大型的開源項目&#xff0c;不斷推陳出新&#xff1b;社區中涌現出大量優質的插件&#xff0c;以支持我…

MySQL中(delete、truncate、drop) 的區別

delete、truncate、drop的用法 MySQL 數據表中delete刪除數據的通用語法&#xff1a; ###刪除 students_tbl 表中 student_id 為3 的記錄&#xff1a; delete from students_tbl where student_id3; MySQL 數據表中truncate刪除數據的通用語法&#xff1a; ###刪除 students_…

機器學習之LDA主題模型算法

文章目錄1、知道LDA的特點和應用方向1.1、特點1.2、應用方向2、知道Beta分布和Dirichlet分布數學含義3、了解共軛先驗分布4、知道先驗概率和后驗概率5、知道參數α值的大小對應的含義6、掌握LDA主題模型的生成過程7、知道超參數α等值的參考值8、LDA總結1、知道LDA的特點和應用…

分別寫出引入CSS的3種方式, 特點, 優先級

第一&#xff1a;css的三種引入方式 1.行內樣式 最直接最簡單的一種&#xff0c;直接對HTML標簽使用style""&#xff0c;例如&#xff1a; <p style"color:#F00; "></p> 缺點&#xff1a;HTML頁面不純凈&#xff0c;文件體積大&#xff0c…

[Go] Template 使用簡介

Golang 提供了兩個標準庫用來處理模板 text/template 和 html/template。我們使用 html/template 格式化 html 字符。 模板引擎 模板引擎很多&#xff0c;Python 的 jinja&#xff0c;nodejs 的 jade 等都很好。所謂模板引擎&#xff0c;則將模板和數據進行渲染的輸出格式化后的…

內存泄露監測

2019獨角獸企業重金招聘Python工程師標準>>> iOS 內存泄露監測 144 作者 謝謝生活 已關注 2017.05.19 17:38* 字數 4235 閱讀 209評論 0喜歡 6 iOS可能存在的內存泄露&#xff1a;block 循環引用。當一個對象有一個block屬性&#xff0c;而block屬性又引用這個對象…

玩Azkaban跳過的坑

文章目錄一號坑&#xff1a;啟動Azkaban報錯&#xff1a;User xml file conf/azkaban-users.xml doesnt exist.二號坑&#xff1a;報錯&#xff1a;failed SslSocketConnector0.0.0.0:8443: java.io.FileNotFoundException: /home/hadoop/app/azkaban/azkaban-web-2.5.0/bin/ke…

兩種解除禁止右鍵、選中、復制的方法

我在網上找的 兩種解除禁止右鍵、選中、復制的方法 1、直接存到書簽點擊即可 javascript:(function(){var docdocument;var bddoc.body;bd.onselectstartbd.oncopybd.onpastebd.onkeydownbd.oncontextmenubd.onmousemovebd.onselectstartbd.ondragstartdoc.onselectstartdoc.o…

刪除節點removeChild()

http://www.imooc.com/code/1700 刪除節點removeChild() removeChild() 方法從子節點列表中刪除某個節點。如刪除成功&#xff0c;此方法可返回被刪除的節點&#xff0c;如失敗&#xff0c;則返回 NULL。 語法: nodeObject.removeChild(node) 參數: node &#xff1a;必需&…

機器學習自主解決安全威脅離我們還有多遠?

曾經聽見不止一次這樣的問題&#xff1a; “機器學習會替代基于人工經驗規則的安全解決方案么&#xff1f;”把這個問題放在去年來看&#xff0c;我們已經得到了非常多的討論甚至是一些已經實際應用的解決方案&#xff0c;對于人工智能在安全以及其它各種對數據進行價值挖掘的場…