2013年3月21日 星期四

Hadoop教育訓練-課程大綱及教材下載

非常感謝各位同仁參與這次的Hadoop教育訓練,時間於2013/5/4 09:00~17:30,地點文化大學城區部208教室,以下是環境介紹以及課程大綱

操作環境:

於windows 7 64bit底下掛載ubuntu 12.04.2 LTS的映像檔.
hadoop-1.0.4
hbase-0.94.5

當天行程:
8:30~9:00 入場及環境準備
9:00~9:50 開場及hadoop簡介
10:00~10:50 hadoop環境部署
11:00~11:50 hadoop環境部署 & hadoop指令
11:50~12:00 上午Q&A

13:30~14:20 mapreduce client & api
14:30~15:20 hbase簡介
15:30:16:20 hbase client & api
16:30:17:20 hbase api & mapreduce api
17:20~17:30 下午Q&A & go home


課程大綱:
1 簡介處理巨量資料的頭號救星-Hadoop
2 簡介Hadoop安裝環境-host:ubuntu 64bit 12.04.2, guest:Linux Container , network:linux native bridge
3 掛載ubuntu硬碟檔,安裝linux container及相關軟體工具
4 虛擬網路架設與測通(一台namenode,一台secondary namenode,三台datanode)
5 編輯及講解hadoop設定檔
6 啟動hadoop及簡易hadoop指令操作
7 使用eclipse-hadoop-plugin在eclipse上開發mapreduce程式
8 安裝hadoop火藥庫之一-巨量資料的儲藏庫-hbase
9 啟動hbase及簡易hbase指令操作
10 於eclipse上開發hbase mapreduce程式

教材:

硬碟檔載點(檔大請小心服用, 2013/06/30 只留兩個硬碟檔):
  1.Original
  2.before namenode format
PPT載點(解壓縮後有四份ppt):
  1.點我下載ppt

PS:解壓縮密碼另行通知 
      由於網路空間不夠大, 使用mac的同事當天再跟我copy vdi硬碟檔

2012年10月16日 星期二

趁熱記下來之安裝動物管理員



前言

hbase-0.9X之後叢集的hbase安裝已經可以用hbase自帶(內建)的zookeeper,不必用獨立型的,安裝學習也比較簡單一點。
以上感謝對岸阿六弟兄的技術支援,雖然我不知道你們是從哪裡知道這些撇步的,但是我感謝你們。
他媽的獨立安裝版害我浪費了一堆時間,去你的。You're terminated!

環境

我是在win7中使用vmware station中裝ubuntu,硬碟檔在這....連結

實作

[步驟一]

修改$HBASE_HOME/conf/hbase-env.sh,要修改HBASE_MANAGES_ZK這屬性
這屬性設為true時,就是用hbase自帶的zookeeper,不需要另外下載zookeeper的安裝檔。反之設為false時就是用另外下載zookeeper的安裝檔見下圖

hbase-site.xml請見下圖

hbase-site.xml修改完後複製到每個節點的$HBASE_HOME/conf以及$HADOOP_HOME/conf中。


[步驟二]

$HBASE_HOME/conf新增一個zoo.cfg檔案,這檔案原來是在獨立的zookeeper安裝檔中的,hbase中也可以使用,自帶版的zookeeper設定可以都寫在$HBASE_HOME/conf/hbase-site.xml中,也可以使用zoo.cfg來配置,而且zoo.cfg的優先程度比hbase-site.xml高,這篇我採用後者。
zoo.cfg檔案的內容如下:

google上面都可以找的到設定檔中的介紹,這裡不多說明了。
以上編寫完後把zoo.cfg複製一份到每一個節點$HBASE_HOME/conf之下。


[步驟三]


採用自帶版的好處是myid這檔案會自動建立在你在zoo.cfg中所指定的dataDir中,還有啟動hbase時就順道啟動了regionserver,不用在每一台機器中去zkServer.sh start,多方便啊!
以上都完成後就照正常程序先啟動hadoop再啟動hbase,jps你會看到以下的畫面。



[步驟三]

都啟動後可以用這一篇的code來測試看看hbase是否正常。


2012年10月14日 星期日

借花獻佛Hbase&MapReduce

前言

學了一個新技術誰不會手癢想要試試看這技術到底能做成啥東西?有一天拜神時不小心看到新竹某某晶圓大廠的教育訓練課程ppt, 很興奮得跟著內容一路實作下去, 結果發現裡面缺東缺西的, 甚至有些寫法會有問題(在我的環境上面), 所以小弟又冒著爆肝眼瞎掉髮禿肚子還有球賽沒看完的風險, 慢慢的拼湊出這片地圖, 僅分享給看到這篇網誌的人

PS:如果那一間某某晶圓大廠的人看到了, 覺得不爽我把你們的東西寫在blog上面請跟我說一聲, 我馬上拿掉

此時的我是邊看lamigo對統一的GAME2邊寫blog, 如果有點語無倫次請多多見諒........XD

環境

這篇一樣
我的版本搭配是hadoop-1.0.3+hbase-0.94.1

載點

這一個連結裡面有我整理的code以及要用的txt檔(先假裝這是log檔)
code.tar.gz解壓縮後的mystore裡面有三個java檔(CreateTable.java, StoreCount.java, StoreSum.java)
兩個txt檔(info.txt, sales.txt)


解釋一下這三個class是作啥事情,
CreateTable是在Hbase中新增一個store的table,並且讀取本機的檔案(info.txt)把商店名稱寫入Detail:Name,商店的位置寫入Detail:Locate, 賣的產品以及價格寫入Products:P1 Products:P2 Products:P3 Products:P4

StoreCount是把消費紀錄(sales.txt)從HDFS中寫入Turnover中,會對應到商店跟產品代號 

StoreSum是把每一間店的銷售紀錄做加總寫入Sum中

實作

這篇的最終目標是利用hbase java api逐步在Hbase中建立一個商店銷售紀錄的table,以下是最後會產生的圖(hbase shell不是長成這樣的)
table:store
Row\key Detail Products Turnover
Name Locate P1 P2 P3 P4 P1 P2 P3 P4 Sum
T01 GunLong 01 20 30 40 50 1 1 1
90
T02 Esing 02 50


2


100
T03 SunDon 03 40 30

1 1

70
T04 StarBucks 04 50 50 20
2 1 1
170

terminal中是像下圖這樣的

由於我在eclipse中執行起來會有問題, 所以我都是在eclipse中寫完後把code打包成jar檔, 不喜歡這樣做的人請慢走, 不送了
並免篇幅過長我也不把code貼在網誌中了,只用指令執行jar檔以及秀出hbase shell執行後的結果 

[步驟一]

code.tar.gz下載後放在家目錄下面解壓縮, 我習慣先在code資料夾中mkdir src, 我會把compile後的.class都放在src中
(這些都是我自己的習慣, 不是必要的操作, 可以依照個人習慣來執行)


再來把.java檔compile成.class檔在包成一個jar檔, 我是覺得這樣比較方便啦, 因為在用hadoop jar執行時只要改一個帶有main method的class名稱就好了

指令如下:
javac -classpath hadoop-1.0.3/hadoop-core-1.0.3.jar:hadoop-1.0.3/lib/hbase-0.94.1.jar -d code/src code/mystore/CreateTable.java

javac -classpath hadoop-1.0.3/hadoop-core-1.0.3.jar:hadoop-1.0.3/lib/hbase-0.94.1.jar -d code/src code/mystore/StoreCount.java

javac -classpath hadoop-1.0.3/hadoop-core-1.0.3.jar:hadoop-1.0.3/lib/hbase-0.94.1.jar -d code/src code/mystore/StoreSum.java

jar -cvf code/mystore.jar -C code/src .


此時你的code底下就產生了一個mystore.jar


[步驟二]

這一個步驟我要建立一個table名叫"store"並且讀取存放在本機的txt檔(info.txt)寫入hbase
指令請下 hadoop jar code/mystore.jar CreateTable store code/info.txt
執行完後你會看到terminal中跟你說"create table store ok"



這時到hbase中用scan 'store'看看
(實況轉播:幹 高國慶給我在八局下扛出兩分炮, 你娘的哩)

都照著info.txt寫進去了, 此時的table就是像以下這樣
table:store
Row\key Detail Products Turnover
Name Locate P1 P2 P3 P4 P1 P2 P3 P4 Sum
T01 GunLong 01 20 30 40 50




T02 Esing 02 50







T03 SunDon 03 40 30






T04 StarBucks 04 50 50 20








[步驟三]

這一個步驟我要從HDFS中讀取寫進去store
先把sales.txt傳到HDFS中, 以下是我自己定的目錄, 可以放在自己喜歡的地方啦

再來執行以下這個指令
hadoop jar code/mystore.jar StoreCount store /hduser/store/input

跑完之後在用scan 'store'來檢查一下


Turnover這一個family column都按照著sales.txt有了value, 這時的table會像下圖這樣
table:store
Row\key Detail Products Turnover
Name Locate P1 P2 P3 P4 P1 P2 P3 P4 Sum
T01 GunLong 01 20 30 40 50 1 1 1

T02 Esing 02 50


2



T03 SunDon 03 40 30

1 1


T04 StarBucks 04 50 50 20
2 1 1


[步驟三]

這一個步驟我要把Turnover:Sum填入消費紀錄的加總, 指令請下hadoop jar code/mystore.jarStoreSum store

執行完後也用scan 'store'檢查看看

可以看看T1的Sum是20*1+30*1+40*1=90 T2的Sum是50*2=100......
此時的 table就像下圖這樣了, 這就是這篇網誌最後的成果了

table:store
Row\key Detail Products Turnover
Name Locate P1 P2 P3 P4 P1 P2 P3 P4 Sum
T01 GunLong 01 20 30 40 50 1 1 1
90
T02 Esing 02 50


2


100
T03 SunDon 03 40 30

1 1

70
T04 StarBucks 04 50 50 20
2 1 1
170

寫到這裡lamigo 6:4 贏了