總網頁瀏覽量

2013年7月12日 星期五

使用Google Proto buffer做簡單高效的資料傳輸

Proto buffer是google原先為了方便RPC資料傳輸而發展出來的專案

一個簡單的理解是Protobuf與XML的定位相似

都是用來做資料傳輸的

只是Protobuf會以Binary的方式傳輸

相對XML一堆(噁爛)tag要來得高效

其使用方式也非常簡單

只要定義好你的.proto檔


protobuffer compiler可以幫你建出特定語言的資料存取程式

例如: protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

會依據你定義的addressbook.proto建出相對應的java code放到$SRC_DIR下

至於怎麼拿這些java code來存取protobuf資料

詳見tutorial
https://developers.google.com/protocol-buffers/docs/javatutorial?hl=zh-TW



下面先帶個起手式 - 安裝protoc

小弟我是在centos6環境上安裝的。

在安裝protobuf前需要齊備的環境有:

yum install gcc gcc-c++

接著選擇你鍾愛的protobuf版本

https://code.google.com/p/protobuf/downloads/list

我選擇的是2.4.1版
https://code.google.com/p/protobuf/downloads/detail?name=protobuf-2.4.1.tar.gz&can=2&q=

下載下來後解壓縮
tar zxvf protobuf-2.4.1.tar.gz

進入到資料夾內可以找到README.txt

前幾行就告訴你如何安裝了

./configure
make
make check
make install

基本上./configure沒有出現error的話後續安裝也就不會有問題了

安裝完輸入protoc --version

libprotoc 2.4.1

表示成功裝完,後面要繼續玩

就把上面的tutorial詳看吧,我覺得寫得很不錯唷

2013年5月25日 星期六

fair scheduler設定經驗分享

上禮拜應主管要求,想在fair scheduler加上global的mapper/reducer數量限制
查閱官方文件
http://hadoop.apache.org/docs/stable/fair_scheduler.html

不見global linitation設定蹤跡
後來請示了神人同事確定無此設定
那怎辦呢

其實還是有workaround(不過也有副作用)
那就是把scheduler吃的pool name改成MR的queue name
要enable此功能需要再mapred-site.xml設置:

<property>
<name>mapred.fairscheduler.poolnameproperty</name>
<value>mapred.job.queue.name</value>
</property>

接著只要在fair-scheduler.xml中設置pool的limitation即可
例如:

<pool name="default">
<minmaps>14</minMaps>
<minreduces>8</minReduces>
<maxmaps>25</maxMaps>
<maxreduces>12</maxReduces>
</pool>

即所有人最少有14mapper/8reducer, 最多25/12
如此一來所有沒有設定queue name的MR job(使用default queue)都會apply到
但是!!!
因為scheduler是吃queue name來做控管
在此設定下要區分priority的話
就必須設定另一組queue
mapred-site.xml:

<property>
<name>mapred.queue.names</name>
<value>default,production</value>
</property>

現在有兩組queue, default和production
要讓production有更高優先權的話需要在fair-scheduler.xml中設置:

<pool name="production">
<minmaps>100</minMaps>
<minreduces>50</minReduces>
</pool>

即最少保證mapper的fair share有100, reducer有50,沒有天花板限制(有多少拿多少)
要讓MR job submit到production queue中
需要設定queue name:

-D mapred.job.queue.name=hdfs (generic option)
setQueueName(String) (API)

但是但是!!!
還有一件事要做
每個MR job都可以設queue name為production呀
因此沒設定ACL的話也只是做一半四不像而已

在mapred-site.xml下設定ACL

<property>
<name>mapred.acls.enabled</name>
<value>true</value>
</property>
<property>

意思是讓group1和group2兩個群組的user可以submit job到production queue
這裡的group就是hadoop hdfs的group無誤
走到這一步
基本算是大功告成

如果你的hadoop cluster是用simple authentication的話...
我只能說你是白做了XDDD

2013年5月6日 星期一

screen網路斷線後再連入會hang住

這個問題困擾我好久
經請教強著同事 Jeff Hung
原因如下
因我每次連入都是用scree -rd
會把上一次連線踢掉再連進去
不過由於是網路斷線
上一個session還傻傻在等待回應
導致沒辦法detach

[RESOLVE]
使用screen -xRR
連入時不踢掉session而是同步使用

2013.5.11
改用xRR發現因為是連上共用session,所以resolution以原session為主
這就造成我這端畫面很醜的問題
再次請教J神,ctrl+F即可resize

2013年5月2日 星期四

Ganglia start failed on ambari after OS reboot

Restarted VMs and all ambari server/agent are started,

only ganglia service can not been bright up.

I think it may due to that I just power off the VM instead of stop services first.

[RESOLVE]
http://hortonworks.com/community/forums/topic/ganglia-not-working-on-hdp-1-2/

Kill the process {gmond,gmetad} and start it on web UI again.

The root cause of this issue is that ambari has its own wrapped gmond and gmetad.

The origin one will fight with ambari one.

2013年4月22日 星期一

ambari安裝經驗分享

隨著hadoop core發展日趨成熟,

各家distribution也開始走向精緻化路線,

hortonworks出品的ambari即是一例。

ambari提供親切web ui安裝方式,讓windows user也能快速上手(誤)。

除此之外,也打包了一些常用的hadoop ecosystem project

如hbase, hive, oozie, sqoop以及monitorm用的nagios及ganglia。



基本上ambari相對之下算是好裝了。

順著Hortonworks的guide走下去沒什麼問題

(不要懷疑,趕快打開guide吧)

記得每一頁都要看,偷懶沒做的下場就是裝不起來,然後也不知道為什麼裝不起來,只好回頭一頁一頁找0rz

因為Guide都寫得很清楚,

以下就記錄一下我漏掉的部分,算是過來人經驗。

1. 安裝pdsh
2.4. Software Requirements
基本上yum, rpm, scp等等Linux Distribution都自帶了,唯獨pdsh要注意一下得自己裝
此物在後續安裝時指定一大串machine時會派上用場

2. 安裝java
雖然裝ambari-server時會幫你搞一個在/usr/jdk64,不過每台hadoop client還是都得裝java,不如自己先準備好,記得java路徑要設相同

3. ambari-server start fail??
開起來都沒錯誤訊息,不過仔細一看跑起來沒多久就死了,這也是因為沒裝java導致,由於沒error message可看,要自己注意唷。
起成功後可以在http://yourhost:8080找到webpage,帳密不是之前設的,是admin/admin(也不換個字形顏色標清楚!)

4. provide ssh private keys
在install option這頁中間的box是要輸入private keys,別像我我傻傻地貼上public...

5. 再給puppet一次機會
進展到最後一關實際安裝時,有可能會puppet裝一裝會timeout,看一下puppet的log不是其它問題的話,多按幾次retry吧。



裝完就能看到精美的dashboard



補充: machine reboot後如何把HDP起回來?
啟動ambari-sever以及每一台machine上的ambari-agent即可連到web ui,再去一步一步開service吧(zookeeper記得開在hbase前)

2013年3月25日 星期一

Distributed command line - pdsh & ssssh 簡單教學

今天要重灌hadoop碰到舊資料沒刪乾淨導致裝不起來的問題

寫了一個for i in {1..4}; do ssh "root@host-0$i" ...來刪東西

被ricky哥發現我的蠢樣後建議我用pdsh

經高人指點迅速裝完

1. download
http://sourceforge.net/projects/pdsh/

2.tar jxvf pdsh.xxx.tar.bz2

[under pdsh folder]

3. ./configure --with-ssh (我跟default的rsh不認識XD)

4. make

5. make install

done

測試一下

pdsh -R ssh -w host-[01-04] hostname

不錯

再試

pdsh -R ssh -w host-[01-04] ls -al /usr/lib | grep hadoop

咦?馬上吃屎...沒有pipe還叫做shell script嗎!?

馬上谷歌結果發現另一套

ssssh,擺明就是要解決pipe問題XD

https://code.google.com/p/ssssh/wiki/Details

這套安裝更簡單了

make install大功告成

ssssh -N -w host-01,host-02,host-03,host-04 ls -al /usr/lib |grep hadoop

帥啊老皮

不過這套似乎不支援串hostname號碼

只好動點髒手腳
alias dsh="ssssh -N -w host-01,host-02,host-03,host-04"

這樣的好處是可以搭配-x(exclude) and -w(include)使用

dsh -x host-01 hostname



[2013-03-26 updated]

pdsh用"把command刮起來就行了,但總覺得多一動就是麻煩XD

2013年3月21日 星期四

最近試玩了國產雲端硬碟

https://www.syndriver.com/

試用了幾下並上傳幾個檔案

分享一下心得

第一

也是最重要的一點

那S級的防機器人碼!

還是趕快換掉吧

第二

批次下載的UI設計得很玄

點完之後還要在右邊點一次下載

除此之外

上傳下載速度還不錯

不過就是不太想下載他的app來用耶