使用MapReduce之替代方案Hive
若要操作Hadoop就必須要會MapReduce,很好!!在Hadoop很夯之前相信很多人都對MapReduce非常陌生,沒錯!!那真的是有點困難,但是呢,若我講SQL語言,相信你一定信心十足吧!!
因此囉,Facebook當初也了這個問題傷透了腦筋,因為要找一個熟悉MapReduce的工程師比找一個會SQL語法的工程師還困難的情況底下,他們想出了應變之道,那就是用極接近SQL語言的方式去操作MapReduce,因為找到會SQL語言的人較容易。
所以Hive就是為此誕生的,這是Facebook一個部門的研發成果,後來為了讓更多人可以應用,他們將其釋出提供給Apache當作開源項目,讓Hive開始發揚光大,更多的介紹官網都有唷。
若你看不順眼Hive,你也可以選擇其他的諸如PIG(我不是在罵人...真的叫PIG),或是你真的想挑戰MapReduce當然也可以,任君挑選。因為我喜歡Hive的Logo所以囉,我就選他了。
建立Hive
從官網下載或是
$ cd /opt
$ wget 'http://ftp.stut.edu.tw/var/ftp/pub/OpenSource/apache//hive/hive-0.7.1/hive-0.7.1.tar.gz'
$ mv hive-0.7.1 /opt/hive安裝ivy
$ cd /tmp
$ wget 'http://www.apache.org/dist/ant/ivy/2.3.0/apache-ivy-2.3.0-bin-with-deps.tar.gz'
$ tar zxvf apache-ivy-2.3.0-bin-with-deps.tar.gz
$ mv apache-ivy-2.3.0 /usr/local
$ ln -s apache-ivy-2.3.0 ivy配置環境
$ vim ~/.bashrc
export HIVE_HOME=/opt/hive
export IVY_HOME=/usr/local/ivy
export PATH=$HIVE_HOME/bin
export HIVE_HOME修改hive-default.xml
多個Hive節點的數據内容保存在HDFS上,通過配置文件,指向NameNode節點即可,例如:
使用Hive的三種Metastore儲存方式
使用Derby資料庫儲存數據
使用本機的MySQL
使用遠端的MySQL
我自己熟悉的是MySQL當然就選他囉!!
有一個需要注意的地方是,需要把一個jar包mysql-connector-java-5.1.15-bin.jar複製到hive的lib目錄下才行,否則執行語句的時候會出錯,範例如下:
我當時安装MYSQL的时候是使用RPM来安装的,没找到mysql-connector-java-5.1.15-bin.jar。
在MySQL建立Hive資料庫並且設定語系
讓Thrift使用Hive
修改/opt/hive/src/metastore/if/hive_metastore.thrift第6行,依實際路徑修改
開始產生Thrift使用的Hive程式碼
Generate code並將目錄搬至packages
修改/opt/hive/src/metastore/if/hive_metastore.thrift第27行,依實際路徑修改
新增hive-thrift執行檔
更改權限檔案
Hive的三種執行模式
Hive CLI
Hive CLI(Hive Command Line)Client可以以直接在命令行模式下進行操作。
HWI
hwi(Hive Web Interface,Hive Web接口),Hive提供了更友善的Web介面
在hive-site.xml的添加項目
啟動HWI服務
或是在背景啟動hwi服務
我的Hive部署在192.168.1.28,Hive默認HWI端口為9999。我们在瀏覽器中輸入http://192.168.1.28:9999/hwi/ 就可以瀏覽了
hiveserver
hiveserver,Hive提供了Thrift服務,Thrift Client目前支持C++/Java/PHP/Python/Ruby。
啟動與停止Hive
啟動
停止
Hive執行叢集環境
修改hive-site.xml
在的添加項目
執行所有節點
或是背景執行
將hive-thrift新增至服務中並設開機啟動
檢查是否有執行Hive
如果有出現RunJar則執行成功
發生錯誤
如果資料寫不進去試著把/tmp/root裡面的log刪掉
參考教學:
http://blog.csdn.net/liuzhoulong/article/details/6441914
Jun 23rd, 2013 10:03:00pm
Last updated
Was this helpful?