22-hadoop-hive搭建
1, hive簡介
hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。是為了非java人員對hdfs進行mapreduce操作的
數據倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。數據倉庫,是為企業所有級別的決策制定過程,提供所有類型數據支持的戰略集合。它是單個數據存儲,出於分析性報告和決策支持目的而創建。 為需要業務智能的企業,提供指導業務流程改進、監視時間、成本、質量以及控制,簡而言之,數據倉庫是用來做查詢分析的數據庫,基本不用來做插入,修改,刪除
hive的本質為: 線下數據挖掘和分析使用的工具
解釋器: 解釋sql語句
編譯器: (將sql編譯為maperduce),
優化器: 對編譯過程優化
2, hive結構
(1)用戶接口主要有三個:CLI,Client 和WUI。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動Client模式的時候,需要指出Hive Server所在節點,並且在該節點啟動Hive Server。WUI是通過瀏覽器訪問Hive。
(2)Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
(3)解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,並在隨後有MapReduce調用執行。
(4)Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含*的查詢,比如select * from tbl不會生成MapRedcue任務)。
執行:
?編譯器將一個Hive QL轉換操作符
?操作符是Hive的最小的處理單元
?每個操作符代表HDFS的一個操作或者一道MapReduce作業
3, 實現原理
Operator都是hive定義的一個處理過程 ?Operator都定義有: ?protected List <Operator<? extends Serializable >> childOperators; ?protected List <Operator<? extends Serializable >> parentOperators; ?protected boolean done; // 初始化值為false ?所有的操作構成了 Operator圖,hive正是基於這些圖關系來處理諸如limit, group by, join等操作
使用Antlr解析hql語句的
4, 執行流程
hive通過 ExecMapper 和 ExecReduce 執行mapreduce任務
TableScanOperator 掃描hive表數據 ReduceSinkOperator 創建將發送到Reducer端的<Key,Value>對 JoinOperator Join兩份數據 SelectOperator 選擇輸出列 FileSinkOperator 建立結果數據,輸出至文件 FilterOperator 過濾輸入數據 GroupByOperator GroupBy語句 MapJoinOperator /*+mapjoin(t) */ LimitOperator Limit語句 UnionOperator Union語句
5, 三種模式
Derby: 單用戶, 內置數據庫
Mysql: 單用戶, 使用mysql
meta: 多用戶, 區分客戶端和服務端
需要Mysql, ( http://www.cnblogs.com/wenbronk/p/6840484.html )
1) derby模式的搭建:
1, 上傳解壓
2, 修改配置文件
cp hive-default.xml.template hive-site.xml
將hive-site.xml中的所有信息刪除, 更換為一下配置文件
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> </configuration>
3, 更改hadoop的jline.jar
因為hadoop安裝的為2.5.1, hive的版本是1,2,1 , 所以更換hadoop的hive鏈接包, jline
將 HADOOP_HOME//share/hadoop/yarn/lib 下的jline 更換為 jline.2.12.jar
4, 添加環境變量(可選)
將 HIVE_HOME 添加到環境變量中
export HIVE_HOME=/opt/apache-hive-1.2.1-bin export PATH=$PATH:$HIVE_HOME/bin
5, 啟動
hive
2) mysql模式安裝
1, 需要mysql的環境
此處mysql和hive為同一臺機器
/* 創建hive的專用數據庫(需要創建, 不然報錯) */
create database hive;
2, 將 mysql的鏈接jar放進jdbc中
3, 更改配置文件
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.208.109:3306/hive_remote?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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123</value> </property> </configuration>
4, 啟動
./hive
3), metastore 模式
配置文件不同:
service端
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.208.109: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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123</value> </property> </configuration>
client端:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://192.168.208.109:9083</value> </property> </configuration>
2, 啟動hive服務端程序
hive --service metastore
3, 客戶端直接使用hive命令即可
[email protected]:~$ hive
Hive history file=/tmp/root/hive_job_log_root_201301301416_955801255.txt
hive> show tables;
OK
test_hive
Time taken: 0.736 seconds
4, 驗證是否成功
進入hive後, 創建一個表, 看表信息是否存儲在mysql中了( 此處使用的第二種模式)
CREATE TABLE xp(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;
然後進入mysql下, 在hive或 hive_remote 數據庫下, 有hive自己創建的表信息
系列來自尚學堂視頻
22-hadoop-hive搭建