標籤:hadoop hive
1,關於hive
Hive是一個基於Hadoop的資料倉儲平台。通過hive,我們可以方便地進行ETL的工作。hive定義了一個類似於SQL的查詢語言:HQL,能 夠將使用者編寫的QL轉化為相應的Mapreduce程式基於Hadoop執行。
Hive是Facebook 2008年8月剛開源的一個資料倉儲架構,其系統目標與 Pig 有相似之處,但它有一些Pig目前還不支援的機制,比如:更豐富的類型系統、更類似SQL的查詢語言、Table/Partition中繼資料的持久化等。
本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/47617975 未經博主允許不得轉載。
網站首頁:
http://hive.apache.org/
2,安裝
首先要安裝hadoop
https://hadoop.apache.org/
直接下載tar.gz解壓縮。最新版本2.7.1。
tar -zxvf hadoop-2.7.1.tar.gzmv hadoop-2.7.1 hadoop
:
http://hive.apache.org/downloads.html
直接解壓縮就可以。最新版本 1.2.1。
tar -zxvf apache-hive-1.2.1-bin.tar.gz mv apache-hive-1.2.1 apache-hive
設定環境變數:
export JAVA_HOME=/usr/java/defaultexport CLASS_PATH=$JAVA_HOME/libexport PATH=$JAVA_HOME/bin:$PATHexport HADOOP_HOME=/data/hadoopexport PATH=$HADOOP_HOME/bin:$PATHexport HIVE_HOME=/data/apache-hiveexport PATH=$HIVE_HOME/bin:$PATH
3,啟動hive,建立表
hive 官網:https://cwiki.apache.org/confluence/display/Hive/Home
配置環境變數就可以啟動hive了,這個hive是一個本機環境,只依賴hadoop,只有有hadoop環境變數就行。
建立資料表,和mysql非常類似
參考:http://www.uml.org.cn/yunjisuan/201409235.asp
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
# hiveLogging initialized using configuration in jar:file:/data/apache-hive/lib/hive-common-1.2.1.jar!/hive-log4j.propertieshive> show databases;OKdefaultTime taken: 1.284 seconds, Fetched: 1 row(s)hive> use default;OKTime taken: 0.064 secondshive> show tables;OKTime taken: 0.051 secondshive> CREATE TABLE user_info(uid INT,name STRING) > PARTITIONED BY (create_date STRING) > ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ > STORED AS TEXTFILE;OKTime taken: 0.09 seconds
使用apache hive 建立資料庫表的時候有可能會遇到問題:
FAILED: ParseException line 5:2 Failed to recognize predicate ‘date‘. Failed rule: ‘identifier‘ in column specification
說明關鍵字衝突了。不能使用date,user等關鍵字。
指定儲存格式為 Sequencefile 時,把txt格式的資料匯入表中,hive 會報檔案格式錯
Failed with exception Wrong file format. Please check the file‘s format.FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
4,匯入資料
hive不支援用insert語句一條一條的進行插入操作,也不支援update操作。資料是以load的方式載入到建立好的表中。
資料一旦匯入就不可以修改。因為hadoop是這個特性。
建立兩個資料檔案:
/data/user_info_data1.txt
121,zhangsan1
122,zhangsan2
123,zhangsan3
/data/user_info_data2.txt
124,zhangsan4
125,zhangsan5
126,zhangsan6
資料匯入:分別將資料匯入到兩個分區中。
hive> LOAD DATA LOCAL INPATH ‘/data/user_info_data1.txt‘ OVERWRITE INTO TABLE user_info PARTITION (create_date=‘20150801‘);Loading data to table default.user_info partition (create_date=20150801)Partition default.user_info{create_date=20150801} stats: [numFiles=1, numRows=0, totalSize=42, rawDataSize=0]OKTime taken: 0.762 secondshive> LOAD DATA LOCAL INPATH ‘/data/user_info_data2.txt‘ OVERWRITE INTO TABLE user_info PARTITION (create_date=‘20150802‘);Loading data to table default.user_info partition (create_date=20150802)Partition default.user_info{create_date=20150802} stats: [numFiles=1, numRows=0, totalSize=42, rawDataSize=0]OKTime taken: 0.403 seconds
5,查詢
直接查詢即可。
hive> select * from user_info where create_date = 20150801;OK121 zhangsan1 20150801122 zhangsan2 20150801123 zhangsan3 20150801Time taken: 0.099 seconds, Fetched: 3 row(s)
更多查詢函數參考:
hive 函數大全和使用者自訂函數
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
6,總結
本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/47617975 未經博主允許不得轉載。
hive可以非常方便的進行離線資料統計,因為資料一旦錄入是不能進行修改的。
hive的文法和mysql非常相似,可以充分利用hadoop進行資料統計,可以進行多次join而不用擔心效率問題。
目前,有一個小問題沒有解決,是資料匯入必須使用textfile,不是壓縮檔類型。
這個問題的具體描述參考:
http://blog.163.com/[email protected]/blog/static/6797953420128118227663/
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
hadoop(1):centos 安裝 hadoop & hive