真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hbase給初學(xué)者的“下馬威”

自從成為架構(gòu)師(Hbase給初學(xué)者的“下馬威”)之后,李大胖的學(xué)習(xí)動(dòng)力似乎少了一些,尤其是今年(當(dāng)然也有一些客觀因素Hbase給初學(xué)者的“下馬威”)。

創(chuàng)新互聯(lián)公司主營(yíng)昌圖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,昌圖h5重慶小程序開(kāi)發(fā)公司搭建,昌圖網(wǎng)站營(yíng)銷(xiāo)推廣歡迎昌圖等地區(qū)企業(yè)咨詢(xún)

臨近歲末,內(nèi)心著實(shí)有些慚愧,決定學(xué)習(xí)一把大數(shù)據(jù)。跟隨一下業(yè)界前沿(其實(shí)已經(jīng)不是前沿了Hbase給初學(xué)者的“下馬威”),夢(mèng)想著有一天能夠擁有擁有夢(mèng)想的權(quán)力。

操練起來(lái)

啟動(dòng)裝有CentOS的虛擬機(jī)(IP是172.18.232.181),按照官方文檔內(nèi)容選擇hadoop-2.8.5和hbase-2.0.2,還有zookeeper-3.4.11進(jìn)行下載、解壓。

以下是官方文檔的步驟,熟悉的同學(xué)可以直接跳到“噩夢(mèng)開(kāi)始”Hbase給初學(xué)者的“下馬威”。


HDFS
進(jìn)入hadoop的解壓目錄,進(jìn)入etc/hadoop/hadoop-env.sh中設(shè)置Java目錄,如圖

Hbase給初學(xué)者的“下馬威”

執(zhí)行./sbin/start-dfs.sh腳本,如圖

Hbase給初學(xué)者的“下馬威”

jps一下,發(fā)現(xiàn)啟動(dòng)好了,如圖

Hbase給初學(xué)者的“下馬威”

執(zhí)行./bin/hdfs dfs -ls /命令,進(jìn)到hdfs里看看,如圖

Hbase給初學(xué)者的“下馬威”

注:初次進(jìn)來(lái)是空的,沒(méi)有這個(gè)hbase目錄的。

Zookeeper
進(jìn)入zookeeper解壓目錄,進(jìn)入conf/zoo.cfg中設(shè)置下數(shù)據(jù)目錄,如圖

Hbase給初學(xué)者的“下馬威”

執(zhí)行./bin/zkServer.sh start命令啟動(dòng),如圖

Hbase給初學(xué)者的“下馬威”

jps一下,發(fā)現(xiàn)啟動(dòng)好了,如圖

Hbase給初學(xué)者的“下馬威”


Hbase
進(jìn)入hbase的解壓目錄,進(jìn)入conf/hbase-env.sh中設(shè)置Java目錄,如圖

Hbase給初學(xué)者的“下馬威”

進(jìn)入conf/hbase-site.xml中修改內(nèi)容,如圖

Hbase給初學(xué)者的“下馬威”

注:指定好hdfs,zookeeper和集群模式。

執(zhí)行./bin/start-hbase.sh腳本啟動(dòng),如圖

Hbase給初學(xué)者的“下馬威”

jps一下,啟動(dòng)好了,如圖

Hbase給初學(xué)者的“下馬威”

執(zhí)行./bin/hbase shell命令,進(jìn)入shell交互,如圖

Hbase給初學(xué)者的“下馬威”

可以進(jìn)行建表,插入數(shù)據(jù),刪除數(shù)據(jù)等(這里不再演示了Hbase給初學(xué)者的“下馬威”)。

最后進(jìn)入hdfs看一下,發(fā)現(xiàn)hbase已經(jīng)在里面存了數(shù)據(jù),如圖

Hbase給初學(xué)者的“下馬威”

李大胖發(fā)現(xiàn)按照官方文檔一路走下來(lái),非常順暢,心里不由得成就感倍增(是不是略有膚淺Hbase給初學(xué)者的“下馬威”)。

噩夢(mèng)開(kāi)始

作為一個(gè)寫(xiě)了近十年Java的老碼農(nóng),不用Java連一下Hbase,那怎么能讓李大胖死心呢Hbase給初學(xué)者的“下馬威”(噩夢(mèng)的種子就在此刻埋進(jìn)了土里)。

開(kāi)始整起來(lái),先弄個(gè)springboot,再引入相關(guān)依賴(lài)、獲取連接等等(具體細(xì)節(jié)等明年會(huì)推文,明年Hbase給初學(xué)者的“下馬威”?沒(méi)毛病?。凑展俜轿臋n方法搞好了。

激動(dòng)的心,顫抖的手,點(diǎn)了運(yùn)行按鈕。咦,竟然沒(méi)報(bào)錯(cuò),正常啟動(dòng)了(Hbase給初學(xué)者的“下馬威”)。

李大胖心想,見(jiàn)證奇跡的時(shí)刻到了。就點(diǎn)了頁(yè)面上的調(diào)用按鈕,仿佛整個(gè)世界都在靜靜的等待看到結(jié)果的喜悅(Hbase給初學(xué)者的“下馬威”)。1秒,2秒,3秒過(guò)去了,沒(méi)反應(yīng),不好,估計(jì)出問(wèn)題了,趕緊看下Eclipse的控制臺(tái),果然報(bào)錯(cuò)了Hbase給初學(xué)者的“下馬威”(噩夢(mèng)的種子已經(jīng)發(fā)芽了)。錯(cuò)誤如下:

Caused by: org.apache.hadoop.hbase.MasterNotRunningException: java.net.ConnectException: Call to localhost/127.0.0.1:16000 failed on connection exception: org.apache.hbase.thirdparty.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:16000

錯(cuò)誤是說(shuō)Master沒(méi)有運(yùn)行,原因是訪問(wèn)localhost/127.0.0.1:16000被拒絕。

得虧學(xué)了一點(diǎn)Hbase,知道16000是master(節(jié)點(diǎn))的默認(rèn)端口(老版本中master的默認(rèn)端口是60000),只是這個(gè)IP為啥是本機(jī)啊,李大胖心中有些疑惑,Hbase明明是在虛擬機(jī)里運(yùn)行的呀。

“狄仁杰”辦案

這就像狄仁杰遇到了大案,而且是離奇的案子。此時(shí)狄閣老總是說(shuō),在大案面前一定要穩(wěn)住,不能自亂方寸。特別是案件前期撲朔迷離,陷入僵局,你甚至都不知道對(duì)手是誰(shuí)的時(shí)候,一定是你在辦案過(guò)程中忽略了某些細(xì)節(jié),此時(shí)你需要從頭仔細(xì)回憶一遍,看能不能想起一些蛛絲馬跡(是不是有點(diǎn)入戲太深了Hbase給初學(xué)者的“下馬威”)。

好吧,那就跟著李大胖復(fù)盤(pán)一下吧(Hbase給初學(xué)者的“下馬威”)。Hbase在啟動(dòng)的時(shí)候會(huì)把一些信息注冊(cè)到zookeeper中,我們?cè)贘ava程序中只配置了zookeeper的地址,所以程序是從zookeeper中讀出了master的地址,然后才去訪問(wèn)的。

既然最后訪問(wèn)的是localhost/127.0.0.1:16000,說(shuō)明master注冊(cè)的就是它。想到Dubbo在往zookeeper里注冊(cè)u(píng)rl時(shí)使用的就是IP,所以李大胖認(rèn)為master往zookeeper里注冊(cè)的也是IP,即127.0.0.1:16000。

為了驗(yàn)證自己的想法,就進(jìn)到zookeeper里去看,發(fā)現(xiàn)有master節(jié)點(diǎn),但是并沒(méi)有它的地址信息。既然驗(yàn)證不了,那就解決問(wèn)題吧,目前看起來(lái)只需要master采用所在機(jī)器的實(shí)際IP注冊(cè)就行了。

于是使用中文關(guān)鍵詞進(jìn)行了搜索,發(fā)現(xiàn)可以在hbase-site.xml配置文件中設(shè)置一個(gè)hbase.master的參數(shù),趕緊加進(jìn)去試試,如圖:

Hbase給初學(xué)者的“下馬威”

重啟Hbase后發(fā)現(xiàn)不行(Hbase給初學(xué)者的“下馬威”)。

“元芳”的猜想

李大胖繼續(xù)想,這是搭建的偽集群,官方文檔明確說(shuō)明,偽集群的意思是雖然有多個(gè)進(jìn)程,但是還都是在一個(gè)機(jī)器上的。會(huì)不會(huì)是Hbase在啟動(dòng)時(shí)檢測(cè)到了自己是偽集群,所以總是用127.0.0.1去注冊(cè)?。ㄕ?qǐng)?jiān)试S李大胖自顧自的胡思亂想Hbase給初學(xué)者的“下馬威”)。

俗話(huà)說(shuō)的好,是騾子是馬拉出來(lái)遛遛(Hbase給初學(xué)者的“下馬威”)。首先把zookeeper移到另一臺(tái)虛擬機(jī)上,重啟Hbase,發(fā)現(xiàn)還不行(Hbase給初學(xué)者的“下馬威”)。莫非還要把HDFS也移到第三臺(tái)虛擬機(jī)上?仔細(xì)想想,不對(duì)吧,Hbase應(yīng)該不會(huì)自己去檢測(cè)安裝方式,單節(jié)點(diǎn)/偽集群/真集群,它不會(huì)這么無(wú)聊的(Hbase給初學(xué)者的“下馬威”)。于是放棄了后續(xù)的驗(yàn)證。

李大胖接著想,既然在Hbase的配置文件中可以指定hbase.master配置項(xiàng),那我直接把這個(gè)配置項(xiàng)放到Java程序里試試(Hbase給初學(xué)者的“下馬威”),興許管用。但前提是在本機(jī)可以訪問(wèn)虛擬機(jī)里的master。

于是進(jìn)入cmd窗口,執(zhí)行telnet 172.18.232.181 16000,我去,竟然不通(Hbase給初學(xué)者的“下馬威”)。趕緊跑到虛擬機(jī)里執(zhí)行telnet 172.18.232.181 16000,我嘞個(gè)去,竟然還不通(Hbase給初學(xué)者的“下馬威”)。既然已經(jīng)在虛擬機(jī)里了,就試試telnet 127.0.0.1 16000,擦,竟然它是通的(Hbase給初學(xué)者的“下馬威”)。于是忽然想起之前看master日志時(shí),總是發(fā)現(xiàn)綁定到127.0.0.1,只不過(guò)當(dāng)時(shí)沒(méi)有引起重視。如圖

Hbase給初學(xué)者的“下馬威”

雪上加霜

得,老的問(wèn)題還沒(méi)解決,新的問(wèn)題又出現(xiàn)了。那就解決新問(wèn)題吧,再次使用中文關(guān)鍵詞一通搜索,沒(méi)有很好的答案。

突然想到,要不使用英文關(guān)鍵詞試試,哈哈,一下子就被我get到了。發(fā)現(xiàn)這是一個(gè)2010年(Hbase給初學(xué)者的“下馬威”)的提問(wèn)。八年后被我趕上了,在此非常感謝這個(gè)問(wèn)題的提出者和回答者(https://grokbase.com/t/hbase/user/103pq6p14k/master-binds-only-to-loopback)。

回答中指出,Hbase master綁定的一般算法是這樣的,分三步(和把大象裝進(jìn)冰箱里一樣Hbase給初學(xué)者的“下馬威”):
1、獲取host name(在posix系統(tǒng)上一般使用hostname命令獲?。?br/>2、在這個(gè)hostname上執(zhí)行DNS查找
3、使用找到的IP作為綁定的IP

忽然想起幾年前看視頻學(xué)習(xí)時(shí),提到過(guò)Java程序部署到Linux后,很多網(wǎng)絡(luò)問(wèn)題有時(shí)都和hostname有關(guān)。

趕緊執(zhí)行hostname命令,發(fā)現(xiàn)結(jié)果是localhost,根據(jù)localhost得到的IP就是127.0.0.1,所以master最后綁定到了127.0.0.1:16000上。

于是修改了hostname為host1,同時(shí)在/etc/hosts文件中將host1映射為本機(jī)實(shí)際IP,如圖:

Hbase給初學(xué)者的“下馬威”


重啟Hbase,看master日志,終于綁定的IP變了,如圖:

Hbase給初學(xué)者的“下馬威”

我開(kāi)心地認(rèn)為是不是所有問(wèn)題都解決了,趕緊使用Java再調(diào)一下,發(fā)現(xiàn)還是一開(kāi)始的錯(cuò)誤。因?yàn)槲颐看沃貑base時(shí)都會(huì)把logs目錄清空,當(dāng)我修改完hostname后重啟時(shí),我發(fā)現(xiàn)zookeeper的日志文件名稱(chēng)發(fā)生了變化,原來(lái)是以localhost結(jié)尾,現(xiàn)在變成以新的hostname結(jié)尾了,如圖:

Hbase給初學(xué)者的“下馬威”

但是發(fā)現(xiàn)master的日志文件還是以localhost結(jié)尾,心想是不是因?yàn)樾薷耐阧ostname沒(méi)有reboot呀(我既在文件中修改了,又用hostname命令修改了,就是懶得重啟了Hbase給初學(xué)者的“下馬威”),算了,還是重啟下吧(Hbase給初學(xué)者的“下馬威”)。重啟完Linux后,再啟動(dòng)Hbase,果然master的日志文件名稱(chēng)變了,也以host1結(jié)尾了,如圖:

Hbase給初學(xué)者的“下馬威”

又興奮起來(lái)了,趕緊再用Java調(diào)一下試試,可惜,還是原來(lái)的配方,原來(lái)的味道(Hbase給初學(xué)者的“下馬威”)。

痛定思痛

再總結(jié)下目前的情況,master在啟動(dòng)時(shí),已經(jīng)綁定到正確的IP和端口,即172.18.232.181:16000。但是Java調(diào)用時(shí)依然是原來(lái)的錯(cuò)誤,即訪問(wèn)127.0.0.10:16000被拒絕。說(shuō)明master雖然啟動(dòng)時(shí)server socket綁定對(duì)了,但是往zookeeper里注冊(cè)時(shí)錯(cuò)了,依然使用的是127.0.0.1:16000(Hbase給初學(xué)者的“下馬威”)。

此時(shí)李大胖更加納悶,既然綁定都對(duì)了,沒(méi)有理由往zookeeper里注冊(cè)時(shí)不對(duì)啊。為什么非要注冊(cè)127.0.0.1,而不是實(shí)際的IP呢。這個(gè)問(wèn)題之前已經(jīng)使用中文關(guān)鍵詞搜索了很多次,沒(méi)有得到解決。

狄公曾經(jīng)說(shuō)過(guò),有些案子,表面上看去是什么樣子,實(shí)際就是什么樣子。有些案子卻恰恰相反,因?yàn)橛腥嗽诠室饷杀文愕碾p眼(也有可能是自我蒙蔽了雙眼Hbase給初學(xué)者的“下馬威”)。

那這個(gè)問(wèn)題該如何解決呢?或者更準(zhǔn)確的說(shuō),現(xiàn)在的問(wèn)題根本還沒(méi)有被定位出來(lái),我們看到的錯(cuò)誤只是一個(gè)結(jié)果(或者說(shuō)現(xiàn)象)。

愛(ài)因斯坦

愛(ài)因斯坦曾經(jīng)說(shuō)過(guò),“提出一個(gè)問(wèn)題比解決一個(gè)問(wèn)題更重要”。他還說(shuō)過(guò),“想象力比知識(shí)更重要”。(他的名言翻譯成中國(guó)話(huà),怎么感覺(jué)像“沒(méi)有做不到的,只有想不到的”。Hbase給初學(xué)者的“下馬威”

正在李大胖一籌莫展時(shí),一道靈光乍現(xiàn)(Hbase給初學(xué)者的“下馬威”)。等等,既然server socket綁定時(shí)是根據(jù)hostname找到IP的,而且修改了hostname后連日志文件名的后面部分都變了,說(shuō)明和hostname有莫大的關(guān)系,且又回憶起master日志文件中在master注冊(cè)時(shí)打印的日志,忽然就想明白了,先看下日志吧,如圖:

Hbase給初學(xué)者的“下馬威”

可以看到首先注冊(cè)一個(gè)備份master,然后刪除了這個(gè)備份master,因?yàn)榘阉?cè)為一個(gè)活動(dòng)的master了。而且注冊(cè)時(shí)使用的是localhost而不是IP。我們的Java程序拿到的是localhost而不是一開(kāi)始想到的127.0.0.1。


那為什么最后又變成了127.0.0.1了呢,因?yàn)閃indows系統(tǒng)的hosts文件同樣把localhost映射為127.0.0.1,這就造成了最后向127.0.0.1:16000發(fā)起連接請(qǐng)求而被拒絕,也就是一開(kāi)始看到的錯(cuò)誤現(xiàn)象。到此真相已大白(Hbase給初學(xué)者的“下馬威”)。

之所以一直認(rèn)為master向zookeeper注冊(cè)時(shí)使用的是IP,就是受到Dubbo的影響了(當(dāng)然這里不能怪Dubbo,只能怪自己Hbase給初學(xué)者的“下馬威”)。

柳暗花明

問(wèn)題已經(jīng)找到,這次直接使用英文關(guān)鍵詞搜索,又是一下子就get到答案了。解決方案很簡(jiǎn)單,就是往hbase-site.xml中加一個(gè)hbase.master.hostname的配置項(xiàng)(https://stackoverflow.com/questions/9615707/hbase-how-to-specify-hostname-for-hbase-master),如圖:

Hbase給初學(xué)者的“下馬威”

老外給的答案一般還是值得相信的。重啟Hbase。

按照李大胖的推斷,此時(shí)使用Java調(diào)用時(shí),應(yīng)該報(bào)的錯(cuò)是host1無(wú)法被解析,因?yàn)閃indows并不知道host1是什么鬼。那就調(diào)一下試試吧,哈哈,果然是這樣的,如圖:

Hbase給初學(xué)者的“下馬威”


那么就修改下Windows的hosts文件,把host1加進(jìn)去,映射為虛擬機(jī)的IP即可,如圖:

Hbase給初學(xué)者的“下馬威”

再調(diào)一次,已經(jīng)調(diào)通了。

最后再看一眼maser的日志文件,驗(yàn)證下master往zookeeper注冊(cè)時(shí)的內(nèi)容,如圖:

Hbase給初學(xué)者的“下馬威”

可以看到已經(jīng)變?yōu)閔ost1了。至此,所有問(wèn)題都已解決。

PS:雖然說(shuō)理論+實(shí)踐才能出效果,但是千萬(wàn)別還沒(méi)看幾眼就著急實(shí)踐,這樣會(huì)被一些弱智的問(wèn)題絆倒。事后發(fā)現(xiàn)明明很容易,自己卻在此耗費(fèi)好多時(shí)間。而且也容易使自己的自信心受到嚴(yán)重打擊,甚至懷疑人生(Hbase給初學(xué)者的“下馬威”)。



相關(guān)文章

五分鐘輕松了解Hbase列式存儲(chǔ)

(完)

編程新說(shuō)


用獨(dú)特的視角說(shuō)技術(shù)

Hbase給初學(xué)者的“下馬威”

 


網(wǎng)頁(yè)名稱(chēng):Hbase給初學(xué)者的“下馬威”
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/pshioi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部