1. Hive概述
1.什麼是hive?
- 由Facebook開源用于解決海量結構化日志得資料統計;
- Hive是基于Hadoopde的一個資料倉庫工具,可以将結構化的資料檔案映射成一張表,并用提供類SQL查詢功能;
-
建構在Hadoop之上的資料倉庫;
使用HQL作為查詢接口;
使用HDFS儲存;
使用MapReduce計算;
- 本質是:将HQL轉化為Mapreduce程式
- 靈活性和拓展性比較好:支援UDE,自定義儲存格式等;
-
适合離線資料處理。
2)Hive在Hadoop生态系統内中的位置
2.Hive架構
- HIVE依賴于hadoop的HDFS和Map Reduce,資料儲存在HDFS,通過Map Reduce來計算/處理資料;
-
中繼資料:Meta store
中繼資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分區字段、表的類型(是否是外部表);預設儲存在自帶的derby資料庫中,推薦使用Mysql存Metastore;
-
使用者接口(Client)
Cli(hive shell),JDBC/JDBC(java通路hive),webUI(浏覽器通路hive)
-
驅動器:Driver(包含SQl Parser 、Query Optimizer、 Physical Plan 、Execution)
1)解析器(SQl Parser):将SQL字元串轉化為抽象文法書AST,這一步一般都用第三方工具庫完成,比如antir; 對AST進行文法分析,比如·表是否存在、字段是否存在、SQL語義是否有誤(比如select中被判定為聚合的字段在group by中是否出現);
2)編譯器(Query Optimizer):将AST編譯生成邏輯執行計劃
3)優化器(Physical Plan):對邏輯計劃進行優化
4)執行(Execution):把邏輯執行計劃轉化為可以運作的實體計劃,對于Hive來說,就是MR/TEZ/Spark。
3.Hive的優點及應用場景
- 操作接口采用類SQl文法,提供快速開發的能力(簡單、容易上手);
- 避免了去寫MapReduce,減少開發人員學習成本;
- 統一的中繼資料管理,可與impala/spark等共享中繼資料
- 易拓展(HDFS+Mapreduce:可以拓展叢集規模;支援自定義函數)
- 資料的離線處理,比如:日志分析,海量結構化資料離線分析
- Hive的執行延遲比較高,是以hive常用于資料分析的,對實時性要求不高的場合;
- Hive優勢在于處理大資料,對于處理小資料沒有優勢,因為Hive的執行延遲比較高
2. Hive安裝部署
1)下載下傳安裝Hive
下載下傳位址(選擇自己需要下載下傳的版本,此部落格采用1.3)
Apache版本的Hive。
https://archive.apache.org/dist/hive/
Cloudera版本的Hive。
http://archive-primary.cloudera.com/cdh5/cdh/5/
2)解壓
tar -zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/
3)修改hive-log4j.properties配置檔案
cd /opt/modules/hive-0.13.1-bin/conf
mv hive-log4j.properties.template hive-log4j.properties
vi hive-log4j.properties
hive.log.dir=/opt/modules/hive-0.13.1-bin/logs
#日志目錄需要提前建立(mkdir /opt/modules/hive-0.13.1-bin/logs)
hive.log.dir=/opt/modules/hive-0.13.1-bin/logs
4)修改hive-env.sh配置檔案
mv hive-env.sh.template hive-env.sh
vi hive-env.sh
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-bin/conf
注釋:HADOOP_HOME為hadoop的安裝目錄、HIVE_CONF_DIR為你hive的conf目錄
5)首先啟動HDFS,然後建立Hive的目錄(HDFS的啟動:進入到hadoop的安裝目錄下運作:sbin/start-dfs.sh)
bin/hdfs dfs -mkdir -p /user/hive/warehouse
bin/hdfs dfs -chmod g+w /user/hive/warehouse
6)啟動hive
bin/hive
show databases;
#使用預設資料庫
use default;
#檢視表
show tables;
3. Hive與mysql內建
1)在/opt/modules/hive-0.13.1-bin/conf目錄下建立hive-site.xml檔案,配置mysql中繼資料庫。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bigdata-pro01.kfk.com/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
</configuration>
2)設定使用者連接配接
1.進入mysql
mysql -uroot -p123456
2.檢視使用者資訊
show databases;
use mysql;
show tables;
select host,user,password from user;
3.更新使用者資訊
update user set Host='%' where User = 'root' and Host='localhost';
4.删除除上圖劃紅線使用者其餘所有使用者
delete from user where user='root' and host='127.0.0.1';
delete from user where host='localhost';
delete from user where host='bigdata-pro01.kfk.com';
結果如圖所示:
5.重新整理資訊
flush privileges;
輸入
exit;
退出mysql;
5.根據自己mysql的版本下載下傳對應mysql驅動包到hive的lib目錄下
mysql-connector-java-xxx.jar下載下傳位址
不知道自己mysql版本的可以在mysql啟動的時候看到
(這個5.1.73版本。。官網我實在是沒有找到,最後居然在csdn中找到了,廢了我一個積分)
4. Hive服務啟動與測試
1)啟動zookeeper、HDFS和YARN服務(沒做HA的叢集不用啟動zookeeper,保證namenode是active轉态就行)
2)檢視web界面,确認服務開啟
3)進入到hive安裝目錄,啟動hive
bin/hive
4)通過hive服務建立表
CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
show tables;
5)建立資料檔案
vi /opt/datas/stu.txt
00001 zhangsan
00002 lisi
00003 wangwu
00004 zhaoliu
(注意用制表符隔開)
6.加載資料到hive表中
load data local inpath '/opt/datas/stu.txt' into table stu;
select count(1) from stu;
sql語句最終轉化為MapReduce程式:
在yarn的web界面可以看到送出的任務
能力是一種态度
Q:1967483667