天天看點

HIVE學習整理(1)——基礎篇一、Hive概述二、Hive安裝及部署三、常用操作指令

一、Hive概述

1.1 hive概念

Hive是基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張表,并

提供類SQL查詢功能。

本質是:将HQL轉化成MapReduce程式

1)Hive處理的資料存儲在HDFS;

2)Hive分析資料底層的實作是MapReduce;

3)執行程式運作在Yarn上。

1.2 hive優缺點分析

優點:

1)操作接口采用類SQL文法,提供快速開發的能力(簡單、容易上手)

2)避免了去寫MapReduce,減少開發人員的學習成本。

3)Hive的執行延遲比較高,是以Hive常用于資料分析,對實時性要求不高的場合;

4)Hive優勢在于處理大資料,對于處理小資料沒有優勢,因為Hive的執行延遲比較高。

5)Hive支援使用者自定義函數,使用者可以根據自己的需求來實作自己的函數。

缺點:

1)Hive的HQL表達能力有限

(1)疊代式算法無法表達

(2)資料挖掘方面不擅長

2)Hive的效率比較低

(1)Hive自動生成的MapReduce作業,

  • List item

通常情況下不夠智能

(2)Hive調優比較困難,粒度較粗

1.3 hive架構原理

HIVE學習整理(1)——基礎篇一、Hive概述二、Hive安裝及部署三、常用操作指令

如圖中所示,Hive通過給使用者提供的一系列互動接口,接收到使用者的指令(SQL),使用自己的Driver,結合中繼資料(MetaStore),将這些指令翻譯成MapReduce,送出到Hadoop中執行,最後,将執行傳回的結果輸出到使用者互動接口。

1)使用者接口:Client

CLI(hive shell)、JDBC/ODBC(java通路hive)、WEBUI(浏覽器通路hive)

2)中繼資料:Metastore

中繼資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分區字段、表的類型(是否是外部表)、表的資料所在目錄等;

預設存儲在自帶的derby資料庫中,由于存在derby資料庫中無法實作hive的多開,是以推薦使用MySQL存儲Metastore

3)Hadoop

使用HDFS進行存儲,使用MapReduce進行計算。

4)驅動器:Driver

(1)解析器(SQL Parser):将SQL字元串轉換成抽象文法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行文法分析,比如表是否存在、字段是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):将AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成可以運作的實體計劃。對于Hive來

說,就是MR/Spark。

1.4 hive與資料庫的差別

Hive采用了類似SQL的查詢語言HQL(Hive Query Language),但從結構上來看,Hive和資料庫除了擁有類似的查詢語言,再無類似之處。資料庫可以用在Online的應用中,但是Hive是為資料倉庫而設計的。

類别 差別
查詢語言

SQL被廣泛的應用在資料倉庫中;

針對Hive的特性設計了類SQL的

資料存儲位置

Hive資料存儲在HDFS中;

資料庫則将資料儲存在塊裝置或者本地檔案系統中。

資料更新

Hive是針對資料倉庫應用設計的,是讀多寫少的;是以,Hive中所有的資料都是在加載的時候确定好的。

而資料庫中可以使用INSERTINTO…VALUES添加資料,使用UPDATE…SET修改資料。

索引 Hive在加載資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,是以也沒有對資料中的某些Key建立索引;
執行

Hive中大多數查詢的執行是通過Hadoop提供的MR來實作的;

而資料庫通常有自己的執行引擎。

執行延遲 Hive由于利用MR架構且沒有索引,查詢時需要掃描整個表,是以延遲較高;
可擴充性

Hive的可擴充性是和Hadoop的可擴充性是一緻的;

資料庫由于ACID語義的嚴格限制,擴充行非常有限。

資料規模

Hive建立在叢集上并可以利用MapReduce進行并行計算,可以支援很大規模的資料;

資料庫可以支援的資料規模較小。

二、Hive安裝及部署

2.1 下載下傳位址

Hive官網位址:

http://hive.apache.org/

文檔檢視位址:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

下載下傳位址:

http://archive.apache.org/dist/hive/

github位址:

https://github.com/apache/hive

2.2 安裝部署

2.2.1 hive 安裝

(1)把apache-hive-1.2.1-bin.tar.gz上傳到linux的/opt/software目錄下

(2)解壓apache-hive-1.2.1-bin.tar.gz到/opt/module/目錄下面

[[email protected] software]# tar-zxvf apache-hive-1.2.1-bin.tar.gz-C /opt/module/

(3)修改apache-hive-1.2.1-bin.tar.gz的名稱為hive

[[email protected] module]# mv apache-hive-1.2.1-bin/ hive

(4)修改/opt/module/hive/conf目錄下的hive-env.sh.template名稱為hive-env.sh

[[email protected] conf]# mvhive-env.sh.template hive-env.sh

(5)配置hive-env.sh檔案

(a)配置HADOOP_HOME路徑

(b)配置HIVE_CONF_DIR路徑

HIVE學習整理(1)——基礎篇一、Hive概述二、Hive安裝及部署三、常用操作指令

2.2.2 hadoop配置

第一步:啟動hdfs、yarn;

第二步:建立相應檔案夾

/tmp 用于 存儲

/user/hive/warehouse 存儲資料倉庫檔案

2.2.3 Hive中繼資料配置到Mysql

驅動拷貝

1)在/opt/software/mysql-libs目錄下解壓mysql-connector-java-5.1.27.tar.gz驅動包

[[email protected] mysql-libs]# tar-zxvf mysql-connector-java-5.1.27.tar.gz
           

2)拷貝/opt/software/mysql-libs/mysql-connector-java-5.1.27目錄下的

mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/

[[email protected] mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar
/opt/module/hive/lib/
           

配置Metastore到MySql

1)在/opt/module/hive/conf目錄下建立一個hive-site.xml

[[email protected] conf]# touch hive-site.xml
[[email protected] conf]# vi hive-site.xml
           

2)根據官方文檔配置參數,拷貝資料到hive-site.xml檔案中。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow" ?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>

<!--指定HDFS中虛拟機的位址-->
<value>jdbc:mysql://hadoop2:3306/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>
<!--指定Mysql登陸使用者名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--指定Mysql登陸密碼-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
<description>password to use against metastore database</description>
</property>
<!--指定HIVE中是否顯示表的名稱-->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</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>

</configuration>
           

三、常用操作指令

3.1 互動指令

HIVE學習整理(1)——基礎篇一、Hive概述二、Hive安裝及部署三、常用操作指令

1)“-e”不進入hive的互動視窗執行sql語句

[[email protected] hive]# bin/hive-e "select id from student;"
           

2)“-f”執行腳本中sql語句

(1)在/opt/module/datas目錄下建立hivef.sql檔案

[[email protected] datas]# touch hivef.sql
           

檔案中寫入正确的sql語句

(2)執行檔案中的sql語句

[[email protected] hive]# bin/hive -f /opt/module/datas/hivef.sql
           

(3)執行檔案中的sql語句并将結果寫入檔案中

[[email protected] hive]# bin/hive-f /opt/module/datas/hivef.sql  >/opt/module/datas/hive_result.txt
           

3.2 其他指令

1)退出hive視窗:

hive(default)>exit;

hive(default)>quit;

在新版的oracle中沒差別了,在以前的版本是有的:

exit:先隐性送出資料,再退出;

quit:不送出資料,退出;

2)在hive cli指令視窗中如何檢視hdfs檔案系統

hive(default)>dfs-ls /;

3)在hive cli指令視窗中如何檢視hdfs本地系統

hive(default)>!ls /opt/module/datas;

4)檢視在hive中輸入的所有曆史指令

(1)進入到目前使用者的根目錄/root或/home/atguigu

(2)檢視. hivehistory檔案

cat .hivehistory

繼續閱讀