2014年2月18日 星期二

hadoop1.2 + hive0.11

hive安裝其實算很簡單~
而且只要裝一台(就是只能呼叫那一台啦, 我為了統一管理~ 都是一起在master下)~

其實hive的跟本還是hadoop...
但是提供了幾個方便的前置與控制~
像偶有用到的~ 匯入csv, 用類sql語法操作~ 這些都只要下cmd就可以完成
(不用自己在那邊刻Java, 刻個半死~還有bug...)

聽起來好像很好用!!?不過hive本身也有很多限制!!!!!!
像我發現的有~
hive匯入只能"新增內容"~ 不會依KEY更新, 也不能刪除!!
----> 除非每次都重新匯入資料~ 不然無法保證資料同步的正確性
----> 不適合做資料異動~ 只能做一直新增的(一直新增的還不能跑兩次~會變兩倍量, 當然如果你的系統能做到100%差異~只做一次~而且保證成功那就沒問題~~)
當然也可以說每次都重匯~ 但是重匯的I/O量遠大於差異量...
最近發現~ 其實大檔案運算的瓶頸會卡在I/O...(而不是算太慢(算太慢是看演算法~除非科學影像計算~不然一般商業還是以加減成除+各種情況判斷特例為主~都算很快低))

另外hive的程序有限制(不能多工同時下兩個hive的指令跑)
會發生這事的原因~ 是因為我用java跑hive cmd, 然後又開著hive的console在查資料情況~
接著就發現~ 當你在console時~ java的hive cmd怎麼都不會寫資料進來!!?...console開著閒閒沒做事~ 外面call也裝死~
之後就推論出~hive只能單工執行~ 這和我們常用DB SQL的想法很不一樣~
DB都是大家拼命寫~ 拼命讀也還好(除了某些太頻繁沒搞好整個爛掉之外)~ 只是慢了點~ 還是會動~資料也正確~
所以想把HIVE當DB用的話是非常不合適的~~(聽同事說用HBase比較合適~ 但HBase是走Map的資料結構~而且偶迷有研究XD)

如果要把HIVE做更好的應用~ 聽說要多架ZooKeeper..還是其他動物的~ 總之可能要搞個動物園才會比較能用...單純HIVE的應用~ 我覺得就是定期匯出"完整資料"然後做單純的類DB SQL分析~
當然速度不會快(因為卡在總資料的I/O大小上)~ 也不適合做長期儲存~
優點當然就是支援CSV~TXT~檔案~ 如果是跨系統整合(很多台~很多OS~很多不同的DB)~用CSV做資料交換就挺方便的~


0. 先裝好hadoop, 並將hive解壓縮放好
    cd XXXXX
    tar -zxv -f hive-0.11.0.tar.gz

1. setting
   ##vim bin/hive
   ##add
HIVE_HOME=/XXXXX/hadoop/hive-0.11.0
HADOOP_HOME=/XXXXX/hadoop/hadoop-1.2.1
JAVA_HOME=/usr/java/jdk1.6.0_45

   2. create hdfs
cd /XXXXX/hadoop/hadoop-1.2.1
bin/hadoop fs -mkdir /tmp
bin/hadoop fs -mkdir /user/hive/warehouse
bin/hadoop fs -chmod g+w /tmp
bin/hadoop fs -chmod g+w /user/hive/warehouse
 
   3. use hive cmd(sql)
 

沒有留言: