Hive基礎

Hive是什么

  • 我們知道傳統(tǒng)數(shù)據(jù)存儲都是存儲在關系型數(shù)據(jù)庫中,它們使用一種SQL(結構化查詢語言)方言來查詢數(shù)據(jù)庫中的數(shù)據(jù)腌且。由于大數(shù)據(jù)的爆發(fā),Hadoop的廣泛使用,當這些數(shù)據(jù)遷移到Hadoop之后评腺,用戶或者管理員如何對存儲在Hadoop上的數(shù)據(jù)進行查詢?Hive出現(xiàn)的主要原因就是為了提供一種SQL查詢的方言淑掌,來查詢存儲在Hadoop集群種的數(shù)據(jù)蒿讥,這個被稱為Hive查詢語言(簡稱HiveQL或HQL)。
  • Hive本身并不是一個完整的數(shù)據(jù)庫抛腕,這是由于Hadoop和HDFS本身設計所限制的芋绸,比如Hive不支持行級別的更新、插入担敌、刪除操作摔敛。同時由于Hive會將查詢轉換為MapReduce作業(yè),而MapReduce本身啟動需要消耗較長的時間(Hadoop是一個面向批處理的系統(tǒng))全封,所以Hive查詢延時比較嚴重马昙,并且Hive不支持事務。
  • Hive更適合數(shù)據(jù)倉庫應用程序刹悴,來維護海量數(shù)據(jù)行楞。使用Hive進行靜態(tài)數(shù)據(jù)分析,不需要快速響應結果土匀,并且數(shù)據(jù)本身不會頻繁變化子房,而且可以對數(shù)據(jù)進行挖掘。
  • 由于Hive不支持OLTP(聯(lián)機事務處理)所需的關鍵功能就轧,所以如果想要對大規(guī)模數(shù)據(jù)使用OLTP功能的話证杭,可以使用NoSQL數(shù)據(jù)庫,比如HBase或Cassandra妒御。

注意:Hive和大多數(shù)SQL方言一樣解愤,并不符合ANSI SQL標準,不過HiveQL和Mysql的SQL方言比較接近乎莉。

如何使用Hive

在Hive的發(fā)行版中有多個模塊可供訪問Hive:CLI送讲、HWI(Hive網(wǎng)頁界面)、JDBC梦鉴、ODBC李茫、Thrift Server。

hive結構

所有的命令和查詢都會進入到Driver模塊肥橙,通過該模塊對輸入進行編譯魄宏、對需求計算進行優(yōu)化,然后按照指定步驟執(zhí)行(通常啟動多個MapReduce來執(zhí)行)存筏。
需要注意的是宠互,啟動MR任務的時候味榛,Hive不會生成Java的MapReduce程序,而是通過一個表示“job執(zhí)行計劃”的XML文件驅動執(zhí)行內置的予跌、原生的Mapper和Reducer模塊搏色。

Hive安裝

下載Hive安裝包http://www.apache.org/dyn/closer.cgi/hive/ hive現(xiàn)在有1.x版本和2.x版本,其中1.x可支持Hadoop1和Hadoop2券册,而2.x版本指支持Hadoop2频轿。因為hive基于Hadoop,所以需要確保Hadoop安裝成功烁焙。hive只需要在一個節(jié)點安裝即可航邢。

  1. 解壓包
    tar -zxvf apache-hive-2.1.1-bin.tar.gz

  2. 添加hive安裝路徑
    vim /etc/profile或者~/.bash_profile
    export HIVE_HOME=/opt/hadoop/apache-hive-2.1.1-bin
    export PATH=HIVE_HOME/bin:PATH

  3. 在HDFS創(chuàng)建指定目錄,并給用戶組寫權限
    hadoop fs -mkdir /tmp
    hadoop fs -mkdir /user/hive
    hadoop fs -chmod g+w /tmp
    hadoop fs -chmod g+w /user/hive

  4. mysql創(chuàng)建hive metastore庫
    在上面hive結構中骄蝇,我們有一個MetaStore是用來存儲hive的元數(shù)據(jù)信息膳殷,一般metastore信息存儲到關系型數(shù)據(jù)庫中的。如果不配置九火,hive會默認使用內嵌的Derby數(shù)據(jù)庫赚窃,Derby數(shù)據(jù)庫本身容量小,并且不支持多客戶端使用岔激,所以一般使用mysql來存儲metastore信息勒极。

  5. 文件配置
    配置hive-env.sh:
    添加HADOOP_HOME和HIVE_CONF_DIR配置。
    配置hive-site.xml鹦倚,這個文件如果不存在河质,則自己創(chuàng)建冀惭。
    <pre>
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>

    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://xxx.xxx.xxx.xxx:3306/hive?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>123</value>
    <description>password to use against metastore database</description>
    </property>

    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
    </property>
    </configuration>
    </pre>

  6. 添加mysql連結器mysql-connector-java-5.1.42-bin.jar
    下載:https://dev.mysql.com/downloads/connector/j/
    解壓縮后copy到$HIVE_HOME/lib/里面震叙。

  7. hive信息初始化到mysql 中
    schematool -dbType mysql -initSchema
    <pre>
    which: no hbase in (/opt/hadoop/apache-hive-2.1.1-bin/bin:/opt/hadoop/hadoop-2.7.3/bin:/opt/hadoop/hadoop-2.7.3/sbin:/usr/java/jdk1.8.0_131/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/opt/hadoop/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    Metastore connection URL: jdbc:mysql://10.5.234.238:3306/hive?createDatabaseIfNotExist=true
    Metastore Connection Driver : com.mysql.jdbc.Driver
    Metastore connection User: root
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.mysql.sql
    Initialization script completed
    schemaTool completed
    </pre>
    這時候mysql中會自動創(chuàng)建一個hive庫。

  8. 進入hive
    直接輸入hive命令散休,測試一下
    <pre>
    hive> show tables;
    OK
    Time taken: 1.012 seconds
    </pre>

hive命令行

輸入hive - -help
<pre>
Usage ./hive <parameters> --service serviceName <service parameters>
Service List: beeline cleardanglingscratchdir cli hbaseimport hbaseschematool help hiveburninclient hiveserver2 hplsql hwi jar lineage llapdump llap llapstatus metastore metatool orcfiledump rcfilecat schemaTool version
Parameters parsed:
--auxpath : Auxillary jars
--config : Hive configuration directory
--service : Starts specific service/component. cli is default
Parameters used:
HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory
HIVE_OPT : Hive options
For help on a particular service:
./hive --service serviceName --help
Debug help: ./hive --debug —help
</pre>

通過hive --service serviceName來啟動服務媒楼,Service List包含了所有的服務。
--auxpath:來指定用冒號分隔的jar包戚丸,包含用戶自定義的擴展等划址。
--config:覆蓋$HIVE_HOME/conf目錄下的配置的
--service:啟動指定服務或組件,默認是cli
如果要查看每個服務如何使用限府,可以通過./hive --service serviceName --help來查看夺颤。

CLI命令行界面

hive --service cli --help
<pre>
usage: hive
-d,--define <key=value> Variable subsitution to apply to hive commands. e.g. -d A=B or --define A=B. 用來定義變量比如:hive -d a=12
--database <databasename> Specify the database to use. 指定所使用的數(shù)據(jù)庫,默認是default
-e <quoted-query-string> SQL from command line. 不用進入hive胁勺,直接在命令行中輸入sql世澜,如 :hive -e "show databases"
-f <filename> SQL from files. 指定一個sql文件執(zhí)行,如果在CLI中署穗,通過source然后指定文件路徑寥裂,也可以執(zhí)行指定文件的sql嵌洼。
-H,--help Print help information
--hiveconf <property=value> Use value for given property. 配置hive相關的屬性
--hivevar <key=value> Variable subsitution to apply to hive commands. e.g. --hivevar A=B.用戶定義變量,和-d一樣
-i <filename> Initialization SQL file. 允許用戶指定一個文件封恰,當CLI啟動前會執(zhí)行這個文件麻养。這個文件以hiverc結尾,一般這個文件用來設置每次用戶啟動CLI的一些配置诺舔,比如剛才的:hiveconf hive.cli.print.current.db=true;
-S,--silent Silent mode in interactive shell. 靜默模式鳖昌,不打印”ok”和“Time take”等信息。
-v,--verbose Verbose mode (echo executed SQL to the
console)
</pre>

在CLI中可以使用set命令顯示和修改變量值低飒,在CLI中也可以看到system和env的屬性變量遗遵,但是env的變量是只讀不能更改的。
<pre>
set env:HOME;
env:HOME=/home/hadoop
set;//打印env所有變量
set a;//顯示a的值
set a=13;//修改變量的值
</pre>

在HiveQL中可以直接使用變量逸嘀,比如:
<pre>
hive -d a = age;
hive>create table user(${hivevar:a} int);
</pre>

hivevar:a中hivevar是可以省略的车要,hivevar和define使用是一樣的。
--hiveconf用來定義hive的配置崭倘,比如:
hive --hiveconf hive.cli.print.current.db=true
開啟這個屬性翼岁,在CLI提示符前會打印當前使用的數(shù)據(jù)庫:
hive (default)>

歷史命令

hive會將最近100條執(zhí)行命令放到$HOME/.hivehistory中

在CLI中執(zhí)行shell

在CLI中可以不退出就能執(zhí)行shell命令,只需要在命令前加!司光,并且以分號(;)結尾即可琅坡。比如
hive> ! ls;
在CLI中執(zhí)行shell不支持需要用戶輸入的交互式命令、不支持管道功能残家、不支持文件名自動補齊功能(不支持通配符)榆俺。

在CLI中使用Hadoop的dfs命令

在CLI中可以操作HDFS,只需要直接輸入dfs即可坞淮,比如:
hive>dfs -help;
hive腳本
hive腳本是以.hql結尾的茴晋,在腳本中使用--進行注釋
查詢顯示字段名稱
可以通過設置hive.cli.print.header=true;來打印每次查詢顯示表頭信息。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末回窘,一起剝皮案震驚了整個濱河市诺擅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啡直,老刑警劉巖烁涌,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酒觅,居然都是意外死亡撮执,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門舷丹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抒钱,“玉大人,你說我怎么就攤上這事〖绦В” “怎么了症杏?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑞信。 經(jīng)常有香客問我厉颤,道長,這世上最難降的妖魔是什么凡简? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任逼友,我火速辦了婚禮,結果婚禮上秤涩,老公的妹妹穿的比我還像新娘帜乞。我一直安慰自己,他們只是感情好筐眷,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布黎烈。 她就那樣靜靜地躺著,像睡著了一般匀谣。 火紅的嫁衣襯著肌膚如雪照棋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天武翎,我揣著相機與錄音烈炭,去河邊找鬼。 笑死宝恶,一個胖子當著我的面吹牛符隙,可吹牛的內容都是我干的。 我是一名探鬼主播垫毙,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼霹疫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了露久?” 一聲冷哼從身側響起更米,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤欺栗,失蹤者是張志新(化名)和其女友劉穎毫痕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迟几,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡消请,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了类腮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臊泰。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚜枢,靈堂內的尸體忽然破棺而出缸逃,到底是詐尸還是另有隱情针饥,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布需频,位于F島的核電站丁眼,受9級特大地震影響,放射性物質發(fā)生泄漏昭殉。R本人自食惡果不足惜苞七,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挪丢。 院中可真熱鬧蹂风,春花似錦、人聲如沸乾蓬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽任内。三九已至礁阁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間族奢,已是汗流浹背姥闭。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留越走,地道東北人棚品。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像廊敌,于是被迫代替她去往敵國和親铜跑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容

  • Hive介紹 什么是數(shù)據(jù)倉庫骡澈? 數(shù)據(jù)倉庫之父比爾?恩門(Bill Inmon)在1991年出版的"Building...
    蠟筆小虎_007閱讀 501評論 0 1
  • 1. Hive基本介紹和基礎: Facebook公司最早完成并開源了hive框架锅纺,可以將sql語句直接翻譯成Map...
    奉先閱讀 3,335評論 0 43
  • 一、初識Hive 1肋殴、Hive簡介 ??? (1) 什么是Hive? Hive是基于Hadoop的一個數(shù)據(jù)倉庫可以...
    這個太難了閱讀 2,462評論 0 1
  • 一囤锉、介紹 Hive起源于Facebook,它是基于Hadoop的一個數(shù)據(jù)倉庫工具护锤,可以將結構化的數(shù)據(jù)文件映射為一張...
    任目達閱讀 488評論 0 0
  • 2.hive的基本概念 1.hive的概念 hive:是hadoop的一個數(shù)據(jù)倉庫官地。提供了一個類sql的功能,通過...
    bigdata張凱翔閱讀 1,362評論 0 1