hive說明:
1,Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供類SQL查詢功能
2,hive 的效率取決於 mapreduce或者spark
3,hive將 sql語句翻譯成MapReduce程序,然后YARN->HDFS
4,hive 將表結構存儲於額外的數據庫,例如mysql,也自帶了derty數據庫,啟動hive之前需要格式化derty(新建metastore_db文件)
5,metastore_db里面存儲了derby的元數據(存放着數據文件的位置與數據文文件的列名,每個列(行,復雜數據類型)之間是什么符號進行區分的等等.)
6,2,hive只適合用來做批量數據統計分析
hive命令
#會在當前目錄下簡歷metastore_db的數據庫
#遇到問題,把metastore_db刪掉,重新執行命令
#次執行hive時應該還在同一目錄,默認到當前目錄下尋找metastore,找不到創建!
schematool -initSchema -dbType derby
Hive與Hadoop的關系
1,Hive利用HDFS存儲數據,利用MapReduce查詢數據

Hive數據模型:
1,db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾
2,table:在hdfs中表現所屬db目錄下一個文件夾
3,external table:與table類似,不過其數據存放位置可以在任意指定路徑
4,partition:在hdfs中表現為table目錄下的子目錄,用戶通過指定一個或多個partition key,決定數據存放方式,進而優化數據的查詢
5,bucket:在hdfs中表現為同一個表目錄下根據hash散列之后的多個文件,‘桶’
hive啟動方式:
# 后台啟動,寫入日志與 err信息
nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
hive連接方式:
#使用 beeline客戶端連接
#啟動 beeline時就連接(hive-site.xml 配置了用戶名密碼)
bin/beeline -u jdbc:hive2://mini1:10000
hive語句實例
# 創建表 doc
create table doc(line string);
# 將 hdfs 根目錄下 wcinput 文件關聯到 doc表之中,行對列
load data inpath '/wcinput' overwrite into table doc;
# 表之中的數據按照' '切割
select split(line, ' ') from doc;
#將切割后的數據,一個單詞一行作為列存到另一張表之中
select explode(split(line, ' ')) as world from doc;
create table word_counts as select word, count(1) as count from (select explode(split(line, ' ')) as word from doc) w group by word order by word;
hive運行架構

hive hadoop交互過程

驅動( Driver )
編譯器( hive 的核心)
1,語法解析器( ParseDriver )
將查詢字符串轉換成解析樹表達式
2,語法分析器( SemanticAnalyzer )
將解析樹轉換成基於語句塊的內部查詢表達式。
3,邏輯計划生成器( logical plan generator )
將內部查詢表達式轉換為邏輯計划,這些計划由邏輯操作樹組成。
操作符是 hive 的最小處理單元 , 每個操作符處理代表一道 HDFS 操作或 MR 作業
4,查詢計划生成器( query plan generator )
將邏輯計划轉化成物理計划( MR Task )
優化器
優化器是一個演化組件。當前,它的規則是:列修剪,謂詞下壓。
執行器
編譯器將操作樹切分為一個 Task 鏈( DAG ),執行器會順序執行其中所有 Task ;如
果 Task 鏈( DAG )不存在依賴關系時,可采用並發執行的方式進行 Job 的執行