HADOOP集群搭建實(shí)戰(zhàn)(HA高可靠性模式)

一、環(huán)境安裝

3臺服務(wù)器的搭建瞬逊,為了好描述我把服務(wù)器的地址分成hadoop1显歧、hadoop2、hadoop3,
實(shí)際生產(chǎn)環(huán)境可以用域名來代替确镊。
注意:配置里面盡量用域名士骤,不要用IP,因?yàn)槲以?jīng)用IP配置出現(xiàn)了主機(jī)服務(wù)器聯(lián)系不上從者服務(wù)器
集群規(guī)劃:

主機(jī)名 hdfs主服務(wù)器蕾域,即namenode hdfs備用主服務(wù)器拷肌,也是namenode hdfs從服務(wù)器,即datanode zookeeper服務(wù)器 yarn主服務(wù)器,即resourcemanager yarn備用主服務(wù)器巨缘,resourcemanager yarn從服務(wù)器厢绝,即nodemanager hbase主服務(wù)器,即hmaster hbase備用服務(wù)器带猴,也是hmaster hbase從服務(wù)器昔汉,即hslave
hadoop1
hadoop2
hadoop3

1、前提工作

1.1準(zhǔn)備好服務(wù)器

如果是線上也就是有萬網(wǎng)DNS域名解析的服務(wù)器的話忽略以下操作拴清。
本地的話靶病,自己修改本機(jī)的DNS域名解析文件,在各個(gè)linux服務(wù)器下的/etc/host文件中

vim /etc/host

追加
IP+域名
例如圖1.1(a)


圖1.1(a)

1.2相關(guān)安裝包下載

jdk1.7
linux 準(zhǔn)備3臺服務(wù)器hadoop1口予、hadoop2娄周、hadoop3
hadoop-2.7.3(http://apache.fayea.com/hadoop/common/)
zookeeper-3.4.5(http://apache.fayea.com/zookeeper/)
hbase-1.2.6(http://apache.fayea.com/hbase/)

1.3SSH免密碼登錄

由于hadoop各組件分布式集群,需要主機(jī)通過SSH協(xié)議啟動從者服務(wù)器沪停,設(shè)置免密碼登錄煤辨,減少工作量

1.3.1配置hadoop1到hadoop1、hadoop2木张、hadoop3的免密碼登陸

#在hadoop1上生產(chǎn)一對鑰匙

ssh-keygen -t rsa

輸入上面的指令众辨,然后一直按enter就行了
#將公鑰拷貝到其他節(jié)點(diǎn),包括自己

ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3

1.3.2配置hadoop2到hadoop1舷礼、hadoop2鹃彻、hadoop3的免密碼登陸

#在hadoop2上生產(chǎn)一對鑰匙

ssh-keygen -t rsa

#將公鑰拷貝到其他節(jié)點(diǎn)

ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3

2.安裝配置zookeeper集群(在hadoop1服務(wù)器上)

2.1解壓zookeeper安裝包

假設(shè)在linux的/root下,那么zookeeper根目錄是/root/zookeeper-3.4.5

2.2修改配置

2.2.1修改zoo.cfg配置文件

cd /root/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

修改:

dataDir=/root/zookeeper-3.4.5/tmp

添加:

dataLogDir=/root/zookeeper-3.4.5/log
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888

2888是zookeeper相互通信的端口妻献,3888是zookeeper與其他應(yīng)用通信的端口,
2181是zookeeper客戶端通信的端口
保存退出

2.2.2為該服務(wù)器上的zookeeper指定id

在zookeeper根目錄創(chuàng)建一個(gè)tmp文件夾

mkdir /root/zookeeper-3.4.5/tmp

再創(chuàng)建一個(gè)空文件

touch /root/zookeeper-3.4.5/tmp/myid

最后向該文件寫入ID

echo 1 > /root/zookeeper-3.4.5/tmp/myid

也就是為該服務(wù)器的zookeeper指定了id是1(其他服務(wù)器的id不能一樣)

2.2.3將配置好的zookeeper拷貝到其他節(jié)點(diǎn)

scp -r /root/zookeeper-3.4.5/ hadoop2:/root/
scp -r /root/zookeeper-3.4.5/ hadoop3:/root/

注意:修改hadoop2蛛株、hadoop3對應(yīng)/root/zookeeper-3.4.5/tmp/myid內(nèi)容

hadoop2:

echo 2 > /root/zookeeper-3.4.5/tmp/myid

hadoop3:

echo 3 > /root/zookeeper-3.4.5/tmp/myid

啟動zookeeper,看看部署成功沒育拨。
分別啟動hadoop1谨履、hadoop2、hadoop3服務(wù)器的zookeeper

/root/zookeeper-3.4.5/bin/zkServer.sh start

使用jps指令可以看到圖2.2.3(a)

圖2.2.3(a)

啟動完畢熬丧,等待片刻笋粟,分別在hadoop1、hadoop2锹引、hadoop3服務(wù)器執(zhí)行命令

/root/zookeeper-3.4.5/bin/zkServer.sh status

查看zookeeper狀態(tài)圖2.2.3(b)與圖2.2.3(c)

圖2.2.3(b)
圖2.2.3(c)

會出現(xiàn)其中一臺是leader矗钟,也就是zookeeper的主服務(wù)器,而其他服務(wù)器都是follower則是從服務(wù)
器嫌变,就說明zookeeper分布式協(xié)調(diào)服務(wù)器啟動成功了,就可以進(jìn)行下一步躬它,部署hadoop集群了腾啥。

3.安裝Hadoop集群

我這里是用root權(quán)限,hadoop的目錄路徑為:
/root/hadoop

3.1配置HDFS

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

3.1.1將hadoop添加到環(huán)境變量中

vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_55 #這是我的java路徑,修改成你的java根目錄路徑就行了
export HADOOP_HOME=/root/hadoop      #同樣改成自己的hadoop根目錄路徑
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
#hadoop2.x的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /root/hadoop/etc/hadoop

3.1.2修改hadoop-env.sh

vim hadoop-env.sh

找到:

export JAVA_HOME=XXX

改為:

export JAVA_HOME=/usr/java/jdk1.7.0_55

3.1.3修改core-site.xml

<configuration>
    <!-- 指定hdfs的nameservice為ns1 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
    <!-- 指定hadoop臨時(shí)目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hadoop/tmp</value>
    </property>
                    
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
</configuration>

3.1.4修改hdfs-site.xml

3.1.4修改hdfs-site.xml
<configuration>
  <!--指定hdfs的nameservice為ns1倘待,需要和core-site.xml中的保持一致 -->
  <property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
  </property>
  <!-- ns1下面有兩個(gè)NameNode疮跑,分別是nn1,nn2 -->
  <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
  </property>
  <!-- nn1的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>hadoop1:9000</value>
  </property>
  <!-- nn1的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>hadoop1:50070</value>
  </property>
  <!-- nn2的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>hadoop2:9000</value>
  </property>
  <!-- nn2的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>hadoop2:50070</value>
  </property>
  <!-- 指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns1</value>
  </property>
  <!-- 指定JournalNode在本地磁盤存放數(shù)據(jù)的位置 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/root/hadoop/journaldata</value>
  </property>
  <!-- 開啟NameNode失敗自動切換 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <!-- 配置失敗自動切換實(shí)現(xiàn)方式 -->
  <property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <!-- 配置隔離機(jī)制方法凸舵,多個(gè)機(jī)制用換行分割祖娘,即每個(gè)機(jī)制暫用一行-->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
        sshfence
        shell(/bin/true)
    </value>
  </property>
  <!-- 使用sshfence隔離機(jī)制時(shí)需要ssh免登陸 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/hadoop/.ssh/id_rsa</value>
  </property>
  <!-- 配置sshfence隔離機(jī)制超時(shí)時(shí)間 -->
  <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
  </property>
</configuration>

3.1.5修改mapred-site.xml

<configuration>
    <!-- 指定mr框架為yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>    

3.1.6修改yarn-site.xml

<configuration>
    <!-- 開啟RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分別指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop3</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

3.1.6修改slaves

(slaves是指定子節(jié)點(diǎn)的位置,因?yàn)橐趆adoop1上啟動HDFS啊奄、在hadoop2啟動yarn,所以hadoop1上的slaves文件指定的是datanode的位置,hadoop2上的slaves文件指定的是nodemanager的位置)

vim slaves

在文件中追加以下內(nèi)容

hadoop1
hadoop2
hadoop3

3.1.7拷貝配置好的hadoop到其他服務(wù)器

scp -r /root/hadoop/ hadoop2:/root/
scp -r /root/hadoop/ hadoop3:/root/

3.2啟動hadoop集群

3.2.1啟動journalnode

/root/hadoop/sbin/hadoop-daemon.sh start journalnode

#運(yùn)行jps命令檢驗(yàn)浪汪,hadoop1判没、hadoop2、hadoop3上多了JournalNode進(jìn)程
這一步是為了可以格式化namenode

3.2.2格式化hdfs

#在hadoop1上執(zhí)行命令:

hdfs namenode -format

#格式化后會在根據(jù)core-site.xml中的hadoop.tmp.dir配置生成個(gè)文件庄新,這里我配置的是/root/hadoop/tmp鞠眉,然后將/root/hadoop/tmp拷貝到hadoop2的/root/hadoop/下。

scp -r /root/hadoop/tmp/ hadoop2:/root/hadoop/

#也可以這樣择诈,建議hdfs namenode -bootstrapStandby

3.2.3格式化ZKFC(在hadoop1上執(zhí)行即可)

hdfs zkfc -formatZK

3.2.4啟動HDFS(在hadoop1上執(zhí)行)

/root/hadoop/sbin/start-dfs.sh

3.2.5啟動YARN

(#####注意#####:是在hadoop2上執(zhí)行start-yarn.sh械蹋,如何可以的話把namenode和resourcemanager分開,不要放同一個(gè)服務(wù)器中羞芍,因?yàn)樗麄兌家加么罅抠Y源朝蜘,他們分開了就要分別在不同的機(jī)器上啟動)
在hadoop2上執(zhí)行

/root/hadoop/sbin/start-yarn.sh

然后在hadoop3上執(zhí)行

/root/hadoop/sbin/yarn-daemon.sh start resourcemanager

3.2.6查看是否成功

使用jps查看相關(guān)進(jìn)程(圖3.2.6(a,b,c))
hadoop1:


圖3.2.6(a)

hadoop2:

圖3.2.6(b)

hadoop3:

圖3.2.6(c)

訪問http://hadoop1:50070
看到active,說明這是活躍的namenode主服務(wù)器

圖3.2.6(d)

訪問http://hadoop2:50070
看到這個(gè)是standby涩金,說明它是備胎谱醇,hadoop1的namenode掛掉,hadoop2就會頂上

圖3.2.6(e)

如果看到圖3.2.6(f)

圖3.2.6(f)

說明hdfs集群成功

4.HBASE集群步做,集成到HADOOP中

這一步在hadoop1上執(zhí)行

4.1修改HBASE配置

配置hbase集群副渴,要修改3個(gè)文件(首先zk集群已經(jīng)安裝好了)

4.1.1把hadoop配置文件復(fù)制過來

我的hbase路徑是/root/hbase/
注意:要把hadoop的hdfs-site.xml和core-site.xml 拷貝到/root/hbase/conf下

4.1.2修改hbase-env.sh

找到

export JAVA_HOME=/usr/java/jdk1.7.0_55 #改成你的jdk根目錄
export HBASE_CLASSPATH=/root/hadoop/etc/hadoop #改成你的hadoop目錄下的etc/hadoop目錄
export HBASE_LOG_DIR=/root/hbase/logs #設(shè)置hbase的日志所在目錄
export HBASE_MANAGES_ZK=false #因?yàn)槟J(rèn)會使用hbase自帶的zookeeper,需要告訴hbase使用外部的zookeeper全度,也就是第一步配置好的zookeeper

4.1.3修改hbase-site.xml

該配置文件是hbase核心配置文件

vim hbase-site.xml
<configuration>
        <!-- 指定hbase在HDFS上存儲的路徑 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://ns1/hbase</value>
        </property>
        <!-- 指定hbase是分布式的 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
    <!-- 指定zk的地址煮剧,多個(gè)用“,”分割 -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
        </property>
</configuration>

4.1.3修改regionservers

該文件決定了hbase的從節(jié)點(diǎn)

vim regionservers

追加以下內(nèi)容

hadoop1
hadoop2
hadoop3

4.1.4拷貝hbase到其他節(jié)點(diǎn)

scp -r /root/hbase/ hadoop2:/root/
scp -r /root/hbase/ hadoop3:/root/

將配置好的HBase拷貝到每一個(gè)節(jié)點(diǎn)并同步時(shí)間(hbase每個(gè)節(jié)點(diǎn)的時(shí)間不要大于30秒)。

4.2啟動hbase

注意zookeeper和hadoop必須啟動著将鸵,因?yàn)閔base依賴zookeeper進(jìn)行集群勉盅,而我們的配置文件是使用外部的zookeeper,另外hbase是以hdfs作為分布式文件系統(tǒng)
啟動hbase顶掉,在主節(jié)點(diǎn)上運(yùn)行:

/root/hbase/bin/start-hbase.sh

4.2.1為保證集群的可靠性草娜,要啟動多個(gè)HMaster(在hadoop2上執(zhí)行)

/root/hbase/bin/hbase-daemon.sh start master

4.2.1通過瀏覽器訪問hbase管理頁面

hadoop1:16010

圖4.2.1

說明hbase啟動成功,就可以使用hbase shell來當(dāng)成數(shù)據(jù)庫使用

注意:

搭建hadoop相關(guān)集群痒筒,需要把防火墻給關(guān)閉了宰闰。因?yàn)橛写罅客ㄓ嵍丝诓绻螅蚼apreduce會產(chǎn)生一些隨機(jī)端口,所以hadoop的搭建需要關(guān)閉防火墻移袍,關(guān)閉防火墻就出現(xiàn)安全性問題解藻,所以hadoop適合在內(nèi)網(wǎng)中使用!
非要啟動防火墻的話葡盗,需要開放其中大量的端口防火墻白名單

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末螟左,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子觅够,更是在濱河造成了極大的恐慌胶背,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔚约,死亡現(xiàn)場離奇詭異奄妨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苹祟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門砸抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人树枫,你說我怎么就攤上這事直焙。” “怎么了砂轻?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵奔誓,是天一觀的道長。 經(jīng)常有香客問我搔涝,道長厨喂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任庄呈,我火速辦了婚禮蜕煌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诬留。我一直安慰自己斜纪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布文兑。 她就那樣靜靜地躺著盒刚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绿贞。 梳的紋絲不亂的頭發(fā)上因块,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音樟蠕,去河邊找鬼贮聂。 笑死靠柑,一個(gè)胖子當(dāng)著我的面吹牛寨辩,可吹牛的內(nèi)容都是我干的吓懈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼靡狞,長吁一口氣:“原來是場噩夢啊……” “哼耻警!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甸怕,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤甘穿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梢杭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體温兼,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年武契,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了募判。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咒唆,死狀恐怖届垫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情全释,我是刑警寧澤装处,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站浸船,受9級特大地震影響妄迁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜李命,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一登淘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧项戴,春花似錦形帮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仿耽,卻和暖如春合冀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背项贺。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工君躺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峭判,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓棕叫,卻偏偏與公主長得像林螃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子俺泣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容