Hive是Hadoop項目中的一個子項目,由FaceBook向Apache基金會貢獻。Hive被視爲一個倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並可以將sql語句轉換爲 MapReduce 任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
Hive主要分爲以下幾個部分:
1.用戶接口
用戶接口主要有三個:命令行(CLI),客戶端(Client) 和 Web界面(WUI)。
最常用的是 CLI,啓動的時候,會同時啓動一個 Hive 服務。
Client 是 Hive 的客戶端,用戶連接至 Hive Server。在啓動 Client 模式的時候,需要指出 Hive Server 所在節點,並且在該節點啓動 Hive Server。
WUI 是通過瀏覽器訪問 Hive的Web工具
2.元數據存儲
Hive 將元數據存儲在數據庫中,如 MySQL或者Derby嵌入式數據庫。
3. 執行 解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後有 MapReduce 調用執行。
4. HDFS存儲
Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from tbl 不會生成 MapRedcue 任務)。
安裝與配置
下載到hive到/usr/local/src
tar zxvf hive-0.12.0.tar.gz
mv hive-0.12.0 /usr/local/hive
加入以下環境變量到/etc/profile
export PATH="$PATH:/usr/local/mysql/bin"
export HADOOP_HOME=/usr/local/hadoop-2.2.0
export HIVE_HOME=/usr/local/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HIVE_LIB=$HIVE_HOME/lib
export CLASSPATH=$CLASSPATH:$HIVE_LIB
export PATH=$HIVE_HOME/bin/:$PATH
source /etc/profile
修改配置文件
cd /usr/local/hive/conf
複製4個配置模板文件
cp hive-default.xml.template
……
新建配置文件 hive-site.xml 需提前裝好mysql,並設置指定賬號,給予權限
提前下載好java連接mysql工具包mysql-connector-java-5.1.22-bin.jar,放入HIVE_LIB中
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
</configuration>
以hadoop身份執行hive
cd /usr/local
chown -R hadoop:hadoop hive
su hadoop
執行:hive
hive> CREATE TABLE pokes (foo INT, bar STRING);
hive> show tables;
OK
pokes
Time taken: 2.855 seconds, Fetched: 1 row(s)
hive>
hdfs dfs -ls /user/hive #查看hdfs中有關hive的文件
導入測試數據
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' overwrite into table pokes;
hive> select * from pokes;
執行一個計算任務
hive> select max(foo) as m from pokes;
ps: 1 結合http://cswei.blog.51cto.com/3443978/1417503 Hadoopj集羣搭建手冊
2 https://cwiki.apache.org/confluence/display/Hive/GettingStarted hive官方指導
3 http://blog.fens.me/hadoop-hive-roadmap/ Hive學習路線圖