Hive基本介紹及配置

1. 什么是Hive

Hive:由Facebook開源用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計。
Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表肢预,并提供類SQL查詢功能。
本質(zhì)是:將HQL轉(zhuǎn)化成MapReduce程序


image.png

1)Hive處理的數(shù)據(jù)存儲在HDFS
2)Hive分析數(shù)據(jù)底層的實現(xiàn)是MapReduce
3)執(zhí)行程序運行在Yarn上


2. Hive的優(yōu)缺點

  • 1 優(yōu)點
    • 1)操作接口采用類SQL語法,提供快速開發(fā)的能力(簡單牧嫉、容易上手)。
    • 2)避免了去寫MapReduce减途,減少開發(fā)人員的學習成本酣藻。
    • 3)Hive的執(zhí)行延遲比較高,因此Hive常用于數(shù)據(jù)分析鳍置,對實時性要求不高的場合辽剧。
    • 4)Hive優(yōu)勢在于處理大數(shù)據(jù),對于處理小數(shù)據(jù)沒有優(yōu)勢税产,因為Hive的執(zhí)行延遲比較高怕轿。
    • 5)Hive支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求來實現(xiàn)自己的函數(shù)砖第。
  • 2 缺點
    • 1.Hive的HQL表達能力有限
      (1)迭代式算法無法表達
      (2)數(shù)據(jù)挖掘方面不擅長撤卢,由于MapReduce數(shù)據(jù)處理流程的限制,效率更高的算法卻無法實現(xiàn)梧兼。
    • 2.Hive的效率比較低
      (1)Hive自動生成的MapReduce作業(yè)放吩,通常情況下不夠智能化
      (2)Hive調(diào)優(yōu)比較困難,粒度較粗

3 .Hive架構(gòu)原理

image.png

1.用戶接口:Client
CLI(command-line interface)羽杰、JDBC/ODBC(jdbc訪問hive)渡紫、WEBUI(瀏覽器訪問hive)
2.元數(shù)據(jù):Metastore
元數(shù)據(jù)包括:表名到推、表所屬的數(shù)據(jù)庫(默認是default)、表的擁有者惕澎、列/分區(qū)字段莉测、表的類型(是否是外部表)、表的數(shù)據(jù)所在目錄等唧喉;
默認存儲在自帶的derby數(shù)據(jù)庫中捣卤,推薦使用MySQL存儲Metastore
3.Hadoop
使用HDFS進行存儲,使用MapReduce進行計算八孝。
4.驅(qū)動器:Driver
(1)解析器(SQL Parser):將SQL字符串轉(zhuǎn)換成抽象語法樹AST董朝,這一步一般都用第三方工具庫完成,比如antlr干跛;對AST進行語法分析子姜,比如表是否存在、字段是否存在楼入、SQL語義是否有誤哥捕。
(2)編譯器(Physical Plan):將AST編譯生成邏輯執(zhí)行計劃。
(3)優(yōu)化器(Query Optimizer):對邏輯執(zhí)行計劃進行優(yōu)化嘉熊。
(4)執(zhí)行器(Execution):把邏輯執(zhí)行計劃轉(zhuǎn)換成可以運行的物理計劃遥赚。對于Hive來說,就是MR/Spark记舆。


Hive安裝部署
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/目錄下面

[atguigu@hadoop102 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/

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

[atguigu@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive

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

[atguigu@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh

(5)配置hive-env.sh文件
(a)配置HADOOP_HOME路徑

export HADOOP_HOME=/opt/module/hadoop-2.7.2

(b)配置HIVE_CONF_DIR路徑

export HIVE_CONF_DIR=/opt/module/hive/conf

2.Hadoop集群配置
(1)必須啟動hdfs和yarn

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

(2)在HDFS上創(chuàng)建/tmp和/user/hive/warehouse兩個目錄并修改他們的同組權(quán)限可寫

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir /tmp
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir -p /user/hive/warehouse
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /tmp
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /user/hive/warehouse

本地數(shù)據(jù)導入hive
(1)刪除已創(chuàng)建的表

hive> drop table xx;

(2)創(chuàng)建xx表, 并聲明文件分隔符’\t’

hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED
BY '\t';

(3)加載/opt/module/datas/student.txt 文件到student數(shù)據(jù)庫表中鸽捻。

hive> load data local inpath '/opt/module/datas/student.txt' into table student;


Hive元數(shù)據(jù)配置到MySql

一.驅(qū)動拷貝

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

[root@hadoop102 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/

[root@hadoop102 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目錄下創(chuàng)建一個hive-site.xml

[atguigu@hadoop102 conf]$ touch hive-site.xml

[atguigu@hadoop102 conf]$ vi hive-site.xml

2.根據(jù)官方文檔配置參數(shù),拷貝數(shù)據(jù)到hive-site.xml文件中

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

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

 <name>javax.jdo.option.ConnectionURL</name>

 <value>jdbc:mysql://hadoop102: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>

<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>000000</value>

 <description>password to use against metastore database</description>

</property>

</configuration>

3.配置完畢后泽腮,如果啟動hive異常御蒲,可以重新啟動虛擬機。(重啟后诊赊,別忘了啟動hadoop集群)


HiveJDBC訪問

1 啟動hiveserver2服務(wù)

[atguigu@hadoop102 hive]$ bin/hiveserver2
  1. 啟動beeline
[atguigu@hadoop102 hive]$ bin/beeline

Beeline version 1.2.1 by Apache Hive
beeline>

  1. 連接hiveserver2
beeline> !connect jdbc:hive2://hadoop102:10000(回車)
Connecting to jdbc:hive2://hadoop102:10000
Enter username for jdbc:hive2://hadoop102:10000: atguigu(回車)
Enter password for jdbc:hive2://hadoop102:10000: (直接回車)
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop102:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| hive_db2       |
+----------------+--+
  1. Hive常用交互命令
[atguigu@hadoop102 hive]$ bin/hive -help
usage: hive
-d,--define <key=value>          Variable subsitution to apply to hive
                                 commands. e.g. -d A=B or --define A=B
   --database <databasename>     Specify the database to use
-e <quoted-query-string>         SQL from command line
-f <filename>                    SQL from files
-H,--help                        Print help information
   --hiveconf <property=value>   Use value for given property
   --hivevar <key=value>         Variable subsitution to apply to hive
                                 commands. e.g. --hivevar A=B
-i <filename>                    Initialization SQL file
-S,--silent                      Silent mode in interactive shell
-v,--verbose                     Verbose mode (echo executed SQL to the console)

1).“-e”不進入hive的交互窗口執(zhí)行sql語句

[atguigu@hadoop102 hive]$ bin/hive -e "select id from student;"

2).“-f”執(zhí)行腳本中sql語句
(1)在/opt/module/datas目錄下創(chuàng)建hivef.sql文件
[atguigu@hadoop102 datas]$ touch hivef.sql
文件中寫入正確的sql語句
select *from student;
(2)執(zhí)行文件中的sql語句

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql

(3)執(zhí)行文件中的sql語句并將結(jié)果寫入文件中

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql  > /opt/module/datas/hive_result.txt
  1. Hive其他命令操作
    1.退出hive窗口:
hive(default)>exit;
hive(default)>quit;

在新版的hive中沒區(qū)別了厚满,在以前的版本是有的:
exit:先隱性提交數(shù)據(jù),再退出碧磅;
quit:不提交數(shù)據(jù)碘箍,退出;
2.在hive cli命令窗口中如何查看hdfs文件系統(tǒng)

hive(default)>dfs -ls /;

3.在hive cli命令窗口中如何查看本地文件系統(tǒng)

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

4.查看在hive中輸入的所有歷史命令
(1)進入到當前用戶的根目錄/root或/home/atguigu
(2)查看. hivehistory文件

[atguigu@hadoop102 ~]$ cat .hivehistory

Hive常見屬性配置

一.Hive數(shù)據(jù)倉庫位置配置

1)Default數(shù)據(jù)倉庫的最原始位置是在hdfs上的:/user/hive/warehouse路徑下鲸郊。

2)在倉庫目錄下丰榴,沒有對默認的數(shù)據(jù)庫default創(chuàng)建文件夾。如果某張表屬于default數(shù)據(jù)庫秆撮,直接在數(shù)據(jù)倉庫目錄下創(chuàng)建一個文件夾四濒。

3)修改default數(shù)據(jù)倉庫原始位置(將hive-default.xml.template如下配置信息拷貝到hive-site.xml文件中)。

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/hive/warehouse</value>

<description>location of default database for the warehouse</description>

</property>

配置同組用戶有執(zhí)行權(quán)限

bin/hdfs dfs -chmod g+w /user/hive/warehouse

二. 查詢后信息顯示配置

1)在hive-site.xml文件中添加如下配置信息,就可以實現(xiàn)顯示當前數(shù)據(jù)庫盗蟆,以及查詢表的頭信息配置戈二。

<property>

<name>hive.cli.print.header</name>

<value>true</value>

</property>

<property>

<name>hive.cli.print.current.db</name>

<value>true</value>

</property>

2)重新啟動hive,對比配置前后差異喳资。

image.png

三. Hive運行日志信息配置

1.Hive的log默認存放在/tmp/atguigu/hive.log目錄下(當前用戶名下)

2.修改hive的log存放日志到/opt/module/hive/logs

(1)修改/opt/module/hive/conf/hive-log4j.properties.template文件名稱為

hive-log4j.properties

[atguigu@hadoop102 conf]$ pwd

/opt/module/hive/conf

[atguigu@hadoop102 conf]$ mv hive-log4j.properties.template hive-log4j.properties

(2)在hive-log4j.properties文件中修改log存放位置

hive.log.dir=/opt/module/hive/logs

四. 參數(shù)配置方式

1.查看當前所有的配置信息

hive>set;

2.參數(shù)的配置三種方式

(1)配置文件方式

默認配置文件:hive-default.xml
用戶自定義配置文件:hive-site.xml
注意:用戶自定義配置會覆蓋默認配置觉吭。另外,Hive也會讀入Hadoop的配置仆邓,因為Hive是作為Hadoop的客戶端啟動的鲜滩,Hive的配置會覆蓋Hadoop的配置。配置文件的設(shè)定對本機啟動的所有Hive進程都有效宏赘。

(2)命令行參數(shù)方式

啟動Hive時绒北,可以在命令行添加-hiveconf param=value來設(shè)定參數(shù)黎侈。
例如:

[atguigu@hadoop103 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注意:僅對本次hive啟動有效
查看參數(shù)設(shè)置:

hive (default)> set mapred.reduce.tasks;

(3)參數(shù)聲明方式

可以在HQL中使用SET關(guān)鍵字設(shè)定參數(shù)
例如:

hive (default)> set mapred.reduce.tasks=100;

注意:僅對本次hive啟動有效察署。
查看參數(shù)設(shè)置

hive (default)> set mapred.reduce.tasks;

上述三種設(shè)定方式的優(yōu)先級依次遞增。即配置文件<命令行參數(shù)<參數(shù)聲明峻汉。注意某些系統(tǒng)級的參數(shù)贴汪,例如log4j相關(guān)的設(shè)定,必須用前兩種方式設(shè)定休吠,因為那些參數(shù)的讀取在會話建立以前已經(jīng)完成了扳埂。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘤礁,隨后出現(xiàn)的幾起案子阳懂,更是在濱河造成了極大的恐慌,老刑警劉巖柜思,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩调,死亡現(xiàn)場離奇詭異,居然都是意外死亡赡盘,警方通過查閱死者的電腦和手機号枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陨享,“玉大人葱淳,你說我怎么就攤上這事∨坠茫” “怎么了赞厕?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長定硝。 經(jīng)常有香客問我皿桑,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任唁毒,我火速辦了婚禮蒜茴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浆西。我一直安慰自己粉私,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布近零。 她就那樣靜靜地躺著诺核,像睡著了一般。 火紅的嫁衣襯著肌膚如雪久信。 梳的紋絲不亂的頭發(fā)上窖杀,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音裙士,去河邊找鬼入客。 笑死,一個胖子當著我的面吹牛腿椎,可吹牛的內(nèi)容都是我干的桌硫。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼啃炸,長吁一口氣:“原來是場噩夢啊……” “哼铆隘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起南用,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤膀钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裹虫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肿嘲,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年恒界,在試婚紗的時候發(fā)現(xiàn)自己被綠了睦刃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡十酣,死狀恐怖涩拙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耸采,我是刑警寧澤兴泥,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站虾宇,受9級特大地震影響搓彻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一旭贬、第九天 我趴在偏房一處隱蔽的房頂上張望怔接。 院中可真熱鬧,春花似錦稀轨、人聲如沸扼脐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓦侮。三九已至,卻和暖如春佣谐,著一層夾襖步出監(jiān)牢的瞬間肚吏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工狭魂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罚攀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓趁蕊,卻偏偏與公主長得像坞生,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掷伙,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容