前言
學了一個新技術誰不會手癢想要試試看這技術到底能做成啥東西?有一天拜神時不小心看到新竹某某晶圓大廠的教育訓練課程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"
執行完後你會看到terminal中跟你說"create table store ok"
都照著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 贏了
作者已經移除這則留言。
回覆刪除