天天看點

Hive概述、安裝部署、mysql內建與測試

1. Hive概述

1.什麼是hive?

  • 由Facebook開源用于解決海量結構化日志得資料統計;
  • Hive是基于Hadoopde的一個資料倉庫工具,可以将結構化的資料檔案映射成一張表,并用提供類SQL查詢功能;
  • 建構在Hadoop之上的資料倉庫;

    使用HQL作為查詢接口;

    使用HDFS儲存;

    使用MapReduce計算;

  • 本質是:将HQL轉化為Mapreduce程式
  • 靈活性和拓展性比較好:支援UDE,自定義儲存格式等;
  • 适合離線資料處理。

    2)Hive在Hadoop生态系統内中的位置

    Hive概述、安裝部署、mysql內建與測試

2.Hive架構

Hive概述、安裝部署、mysql內建與測試
  • 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/
           
Hive概述、安裝部署、mysql內建與測試

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
           
Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

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目錄

Hive概述、安裝部署、mysql內建與測試

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
           
Hive概述、安裝部署、mysql內建與測試

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>

           
Hive概述、安裝部署、mysql內建與測試

2)設定使用者連接配接

1.進入mysql

mysql -uroot -p123456
           
Hive概述、安裝部署、mysql內建與測試

2.檢視使用者資訊

show databases;
use mysql;
show tables;
select host,user,password from user;

           
Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

3.更新使用者資訊

update user set Host='%' where User = 'root' and Host='localhost';
           
Hive概述、安裝部署、mysql內建與測試

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';
           

結果如圖所示:

Hive概述、安裝部署、mysql內建與測試

5.重新整理資訊

flush privileges;
           
Hive概述、安裝部署、mysql內建與測試

輸入

exit;

退出mysql;

5.根據自己mysql的版本下載下傳對應mysql驅動包到hive的lib目錄下

mysql-connector-java-xxx.jar下載下傳位址

不知道自己mysql版本的可以在mysql啟動的時候看到

Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

(這個5.1.73版本。。官網我實在是沒有找到,最後居然在csdn中找到了,廢了我一個積分)

4. Hive服務啟動與測試

1)啟動zookeeper、HDFS和YARN服務(沒做HA的叢集不用啟動zookeeper,保證namenode是active轉态就行)

Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

2)檢視web界面,确認服務開啟

Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

3)進入到hive安裝目錄,啟動hive

bin/hive
           
Hive概述、安裝部署、mysql內建與測試
Hive概述、安裝部署、mysql內建與測試

4)通過hive服務建立表

CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
show tables;

           
Hive概述、安裝部署、mysql內建與測試

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;
           
Hive概述、安裝部署、mysql內建與測試
select count(1) from stu;
           

sql語句最終轉化為MapReduce程式:

Hive概述、安裝部署、mysql內建與測試

在yarn的web界面可以看到送出的任務

Hive概述、安裝部署、mysql內建與測試

能力是一種态度

Q:1967483667