Hive 安裝及配置

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

安裝和配置

您可以通過(guò)下載tarball來(lái)安裝Hive的穩(wěn)定版本,或者下載源代碼來(lái)構(gòu)建Hive。

運(yùn)行HiveServer2和 Beeline

要求

  • Java 1.7
    注意: Hive版本 1.2 以后需要Java 1.7或更新版本。Hive版本0.14到1.1也適用于Java 1.6。強(qiáng)烈建議用戶開(kāi)始使用Java 1.8(請(qǐng)參閱 HIVE-8607)。
  • Hadoop 2.x(首選),1.x(不支持Hive 2.0.0以上版本)。
    Hive版本0.13也支持Hadoop 0.20.x,0.23.x.
  • Hive常用于生產(chǎn)Linux和Windows環(huán)境。Mac是一個(gè)常用的開(kāi)發(fā)環(huán)境。本文檔中的說(shuō)明適用于Linux和Mac。在Windows上使用它需要稍微不同的步驟。

安裝穩(wěn)定版本

首先從其中一個(gè)Apache下載鏡像下載最新的Hive穩(wěn)定版本(請(qǐng)參閱Hive發(fā)行版)。

接下來(lái),你需要解壓tarball。這會(huì)創(chuàng)建一個(gè)名為hive-x.y.z (其中x.y.z是版本號(hào))的子目錄:

  $ tar -xzvf hive-x.y.z.tar.gz

將環(huán)境變量設(shè)置HIVE_HOME為指向安裝目錄:

  $ cd hive-x.y.z
  $ export HIVE_HOME={{pwd}}

最后,添加$HIVE_HOME/bin到您的PATH

  $ export PATH=$HIVE_HOME/bin:$PATH

從源代碼構(gòu)建Hive

最新Hive代碼的GIT存儲(chǔ)庫(kù)位置:git clone [https://git-wip-us.apache.org/repos/asf/hive.git](https://git-wip-us.apache.org/repos/asf/hive.git)
( 主分支)。

所有發(fā)布版本都位于名為“branch-0.#”或“branch-1.#”或即將推出的“branch-2.#”的分支中,但版本0.8.1在“branch-0.8-r2 ”。任何具有其他名稱的分支都是正在進(jìn)行中的功能分支。有關(guān) 詳細(xì)信息,請(qǐng)參閱 了解Hive分支

從0.13開(kāi)始,Hive使用Apache Maven構(gòu)建。

在master上編譯Hive

要從主分支構(gòu)建當(dāng)前的Hive代碼,請(qǐng)執(zhí)行以下操作:

  $ git clone https://git-wip-us.apache.org/repos/asf/hive.git
  $ cd hive
  $ mvn clean package -Pdist
  $ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
  $ ls
  LICENSE
  NOTICE
  README.txt
  RELEASE_NOTES.txt
  bin/ (all the shell scripts)
  lib/ (required jar files)
  conf/ (configuration files)
  examples/ (sample input and query files)
  hcatalog / (hcatalog installation)
  scripts / (upgrade scripts for hive-metastore)

這里{version} 指的是當(dāng)前的Hive版本。

如果使用Maven(mvn)構(gòu)建Hive源代碼,對(duì)于文中其他部分,我們將"/packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin"目錄作為 <install-dir>。

在分支上編譯Hive

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

運(yùn)行Hive

Hive使用Hadoop,因此:

  • 您必須在您的路徑中安裝Hadoop
  • export HADOOP_HOME=<hadoop-install-dir>

另外, 在Hive中創(chuàng)建表之前,您必須使用以下HDFS命令來(lái)創(chuàng)建/tmp/user/hive/warehousehive.metastore.warehouse.dir設(shè)置)并設(shè)置它們chmod g+w

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

您可能會(huì)發(fā)現(xiàn)它很有用,盡管沒(méi)有必要設(shè)置HIVE_HOME

 $ export HIVE_HOME=<hive-install-dir>

運(yùn)行Hive CLI

要從shell中使用Hive 命令行界面(CLI),請(qǐng)執(zhí)行以下操作

  $ $HIVE_HOME/bin/hive

運(yùn)行HiveServer2和Beeline

從Hive 2.1開(kāi)始,我們需要運(yùn)行下面的schematool命令作為初始化步驟。例如,我們可以使用“derby”作為db類型。

 $ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema

HiveServer2(在Hive 0.11中引入)有自己CLI的稱為Beeline 。由于HiveCLI缺乏HiveServer2的多用戶,安全性和其他功能,現(xiàn)在不推薦使用HiveCLI來(lái)支持Beeline。從shell運(yùn)行HiveServer2和Beeline:

  $ $HIVE_HOME/bin/hiveserver2

  $ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT

Beeline從HiveServer2的JDBC URL啟動(dòng),這取決于HiveServer2啟動(dòng)的地址和端口。默認(rèn)情況下,它將是(localhost:10000),所以地址將看起來(lái)像jdbc:hive2://localhost:10000

或者為了測(cè)試目的在同一進(jìn)程中啟動(dòng)Beeline和HiveServer2,為HiveCLI提供類似的用戶體驗(yàn):

 $ $HIVE_HOME/bin/beeline -u jdbc:hive2://

運(yùn)行HCatalog

要在Hive 0.11.0及更高版本的shell中運(yùn)行HCatalog服務(wù)器,請(qǐng)執(zhí)行以下操作:

$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh

要在Hive發(fā)行版0.11.0和更高版本中使用HCatalog命令行界面(CLI):

  $ $HIVE_HOME/hcatalog/bin/hcat

有關(guān)更多信息,請(qǐng)參閱HCatalog手冊(cè)中的從Tarball 安裝 HCatalog HCatalog CLI

運(yùn)行WebHCat(Templeton)

要從Hive發(fā)行版0.11.0和更高版本中的shell運(yùn)行WebHCat服務(wù)器,請(qǐng)執(zhí)行以下操作:

 $ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

有關(guān)更多信息,請(qǐng)參閱WebHCat手冊(cè)中的WebHCat 安裝

配置管理概述

  • Hive默認(rèn)配置 <install-dir>/conf/hive-default.xml

  • Hive配置目錄的位置可以通過(guò)設(shè)置HIVE_CONF_DIR環(huán)境變量來(lái)更改。

  • 配置變量可以通過(guò)(重新)定義來(lái)改變 <install-dir>/conf/hive-site.xml

  • Log4j配置存儲(chǔ)在 <install-dir>/conf/hive-log4j.properties

  • Hive配置是Hadoop之上的重疊 - 它默認(rèn)繼承Hadoop配置變量。

  • Hive配置可以通過(guò)以下操作來(lái)控制:

    • 編輯hive-site.xml并在其中定義任何需要的變量(包括Hadoop變量)
    • 使用set命令(請(qǐng)參閱下一節(jié))
    • 使用以下語(yǔ)法調(diào)用Hive(不建議使用),Beeline或HiveServer2:
$ bin/hive --hiveconf x1=y1 --hiveconf x2=y2  //this sets the variables x1 and x2 to y1 and y2 respectively
$ bin/hiveserver2 --hiveconf x1=y1 --hiveconf x2=y2  //this sets server-side variables x1 and x2 to y1 and y2 respectively
$ bin/beeline --hiveconf x1=y1 --hiveconf x2=y2  //this sets client-side variables x1 and x2 to y1 and y2 respectively.
*   將`HIVE_OPTS`環(huán)境變量設(shè)置為“ `--hiveconf x1=y1 --hiveconf x2=y2`”,其與上述相同。

運(yùn)行時(shí)配置

  • Hive查詢是使用map-reduce查詢執(zhí)行的,因此查詢的行為可以通過(guò)Hadoop配置變量來(lái)控制。

  • HiveCLI(不建議使用)和Beeline命令'SET'可用于設(shè)置任何Hadoop(或Hive)配置變量。例如:

    beeline> SET mapred.job.tracker=myhost.mycompany.com:50030;
    beeline> SET -v;

后者顯示所有當(dāng)前設(shè)置。沒(méi)有-v選項(xiàng),只顯示與基礎(chǔ)Hadoop配置不同的變量。

Hive,Map-Reduce和Local-Mode

Hive編譯器為大多數(shù)查詢生成map-reduce作業(yè)。這些作業(yè)然后被提交給由變量指示的Map-Reduce集群:

  mapred.job.tracker

雖然這通常指向具有多個(gè)節(jié)點(diǎn)的map-reduce集群,但Hadoop也提供了一個(gè)選項(xiàng),可在用戶的工作站上本地運(yùn)行map-reduce作業(yè)。這對(duì)于在小數(shù)據(jù)集上運(yùn)行查詢可能非常有用 - 在這種情況下,本地模式執(zhí)行通常比將作業(yè)提交到大型集群要快得多。 相反,本地模式只能用一個(gè)reducer運(yùn)行,并且可能會(huì)非常緩慢地處理較大的數(shù)據(jù)集。

從0.7版開(kāi)始,Hive完全支持本地模式執(zhí)行。要啟用此功能,用戶可以啟用以下選項(xiàng):

  hive> SET mapreduce.framework.name=local;

另外,mapred.local.dir應(yīng)該指向在本地機(jī)器上有效的路徑(例如/tmp/<username>/mapred/local)。(否則,用戶將得到分配本地磁盤(pán)空間的例外。)

從0.7版開(kāi)始,Hive還支持一種模式,可以自動(dòng)在本地模式下運(yùn)行map-reduce作業(yè)。相關(guān)的選項(xiàng)有hive.exec.mode.local.autohive.exec.mode.local.auto.inputbytes.maxhive.exec.mode.local.auto.tasks.max

  hive> SET hive.exec.mode.local.auto=false;

請(qǐng)注意,此功能默認(rèn)處于禁用狀態(tài)。如果啟用,Hive會(huì)分析查詢中每個(gè)map-reduce作業(yè)的大小,并且如果滿足以下閾值,則可以在本地運(yùn)行它:

  • 作業(yè)的總輸入大小低于:(hive.exec.mode.local.auto.inputbytes.max默認(rèn)為128MB)
  • map任務(wù)總數(shù)小于:(hive.exec.mode.local.auto.tasks.max默認(rèn)為4)
  • 所需的reduce 任務(wù)總數(shù)為1或0。

因此,對(duì)于小數(shù)據(jù)集的查詢,或者對(duì)于多個(gè)map-reduce作業(yè)的查詢(其中后續(xù)作業(yè)的輸入顯著更小)(因?yàn)橄惹白鳂I(yè)中的reduction/filtering),作業(yè)可以在本地運(yùn)行。

請(qǐng)注意,Hadoop服務(wù)器節(jié)點(diǎn)的運(yùn)行時(shí)環(huán)境和運(yùn)行Hive客戶端的機(jī)器(由于不同的jvm版本或不同的軟件庫(kù))可能存在差異。在本地模式下運(yùn)行時(shí),這可能會(huì)導(dǎo)致意外的行為/錯(cuò)誤。還要注意,本地模式執(zhí)行是在一個(gè)單獨(dú)的,子jvm(Hive客戶端)中完成的。如果用戶愿意,可以通過(guò)該選項(xiàng)來(lái)控制此子jvm的最大內(nèi)存量hive.mapred.local.mem。默認(rèn)情況下,它被設(shè)置為零,在這種情況下,Hive讓Hadoop確定子jvm的默認(rèn)內(nèi)存限制。

配置日志

Hive使用log4j進(jìn)行日志記錄。默認(rèn)情況下,日志不會(huì)通過(guò)CLI發(fā)送到控制臺(tái)。默認(rèn)日志記錄級(jí)別WARN適用于0.13.0之前的Hive發(fā)行版。從Hive 0.13.0開(kāi)始,默認(rèn)日志記錄級(jí)別為INFO

日志存儲(chǔ)在以下目錄中:/tmp/<*user.name*>

  • /tmp/<*user.name*>/hive.log
    注意:在本地模式下,在Hive 0.13.0之前,日志文件名是“ .log”而不是“ hive.log”。該錯(cuò)誤在0.13.0版本中得到修復(fù)(參見(jiàn)HIVE-5528HIVE-5676)。

要配置不同的日志位置,請(qǐng) 在$ HIVE_HOME / conf / hive-log4j.properties中進(jìn)行 hive.log.dir設(shè)置。確保目錄的權(quán)限已設(shè)置為 chmod 1777 <dir>。

  • hive.log.dir=*<other_location>*

如果用戶希望,可以通過(guò)添加下面顯示的參數(shù)將日志發(fā)送到控制臺(tái):

  • bin/hive --hiveconf hive.root.logger=INFO,console //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,console

或者,用戶通過(guò)使用以下命令來(lái)更改日志記錄級(jí)別:

  • bin/hive --hiveconf hive.root.logger=INFO,DRFA //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA

日志的另一種選擇是TimeBasedRollingPolicy(適用于Hive 1.1.0及更高版本,HIVE-9001),方法是提供DAILY選項(xiàng),如下所示:

  • bin/hive --hiveconf hive.root.logger=INFO,DAILY //for HiveCLI (deprecated)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,DAILY

請(qǐng)注意,hive.root.logger通過(guò)'set'命令進(jìn)行設(shè)置不會(huì)更改日志記錄屬性,因?yàn)樗鼈兪窃诔跏蓟瘯r(shí)確定的。

Hive還將查詢?nèi)罩敬鎯?chǔ)在每個(gè)Hive會(huì)話中/tmp/<user.name>/,但可以使用屬性在hive-site.xml配置 hive.querylog.location。從Hive 1.1.0開(kāi)始,查詢的EXPLAIN EXTENDED輸出可以通過(guò)將 hive.log.explain.output 屬性設(shè)置為true 來(lái)記錄在INFO級(jí)別 。

Hadoop集群上,Hive執(zhí)行期間的日志記錄由Hadoop配置控制。通常,Hadoop將為每個(gè)映射生成一個(gè)日志文件,并減少存儲(chǔ)在執(zhí)行任務(wù)的群集機(jī)器上的任務(wù)。日志文件可通過(guò)點(diǎn)擊Hadoop JobTracker Web UI中的“任務(wù)詳細(xì)信息”頁(yè)面獲取。

在使用本地模式(使用mapreduce.framework.name=local)時(shí),Hadoop / Hive執(zhí)行日志將在客戶端計(jì)算機(jī)上生成。從版本0.6開(kāi)始 - Hive使用hive-exec-log4j.propertieshive-log4j.properties僅在缺失時(shí)回退)來(lái)確定默認(rèn)情況下這些日志的傳輸位置。默認(rèn)配置文件為每個(gè)在本地模式下執(zhí)行的查詢生成一個(gè)日志文件并將其存儲(chǔ)在下/tmp/<user.name>。提供單獨(dú)配置文件的目的是為了使管理員能夠根據(jù)需要集中執(zhí)行日志捕獲(例如在NFS文件服務(wù)器上)。執(zhí)行日志對(duì)調(diào)試運(yùn)行時(shí)錯(cuò)誤非常有用。

有關(guān)WebHCat錯(cuò)誤和日志記錄的信息,請(qǐng)參閱WebHCat手冊(cè)中的錯(cuò)誤代碼和響應(yīng)以及日志文件

錯(cuò)誤日志對(duì)調(diào)試問(wèn)題非常有用。請(qǐng)將任何錯(cuò)誤(其中有很多!)發(fā)送給他們hive-dev@hadoop.apache.org

從Hive 2.1.0開(kāi)始( HIVE-13027),Hive默認(rèn)使用Log4j2的異步記錄器。將hive.async.log.enabled設(shè)置為false將禁用異步日志記錄并回退到同步日志記錄。異步日志記錄可以顯著提高性能,因?yàn)槿罩居涗泴⒃谑褂肔MAX干擾程序隊(duì)列緩沖日志消息的單獨(dú)線程中處理。 有關(guān)優(yōu)點(diǎn)和缺點(diǎn),請(qǐng)參閱https://logging.apache.org/log4j/2.x/manual/async.html

HiveServer2日志

HiveServer2操作日志適用于從Hive 0.14開(kāi)始的客戶端。請(qǐng)參閱HiveServer2日志記錄以進(jìn)行配置

審計(jì)日志

對(duì)于每個(gè)Metastore API調(diào)用,都會(huì)從Hive Metastore服務(wù)器記錄審核日志。

審核日志記錄功能和一些相關(guān)功能參數(shù)。它記錄在log4j的INFO級(jí)別,因此您需要確保INFO級(jí)別的日志記錄已啟用(請(qǐng)參閱HIVE-3505 )。日志條目的名稱是“HiveMetaStore.audit”。

在Hive 0.7中為安全客戶端連接(HIVE-1948 )和Hive 0.10為非安全連接(HIVE-3277 ;也參見(jiàn)HIVE-2797 )添加了審計(jì)日志。

Perf Logger

為了通過(guò)PerfLogger獲得性能指標(biāo),您需要為PerfLogger類(HIVE-12675 )設(shè)置DEBUG級(jí)日志記錄。這可以通過(guò)在log4j屬性文件中設(shè)置以下內(nèi)容來(lái)實(shí)現(xiàn)。

log4j.logger.org.apache.hadoop.hive.ql.log.PerfLogger=DEBUG

如果記錄器級(jí)別已通過(guò)hive.root.logger設(shè)置為根目錄下的DEBUG,則上述設(shè)置不需要。

DDL操作

Hive數(shù)據(jù)定義語(yǔ)言 中記錄了 Hive DDL操作。

創(chuàng)建Hive表

  hive> CREATE TABLE pokes (foo INT, bar STRING);

創(chuàng)建一個(gè)名為pokes的表,有兩列,第一個(gè)是整數(shù),另一個(gè)是字符串。

  hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);

創(chuàng)建一個(gè)名為invites的表,其中包含兩列和一個(gè)名為ds的分區(qū)列。分區(qū)列是虛擬列。它不是數(shù)據(jù)本身的一部分,而是從特定數(shù)據(jù)集加載到的分區(qū)派生而來(lái)。

默認(rèn)情況下,表假定為文本輸入格式,分隔符假定為^ A(ctrl-a)。

瀏覽表格

  hive> SHOW TABLES;

列出了所有的表格。

 hive> SHOW TABLES '.*s';

列出以's'結(jié)尾的所有表格。模式匹配遵循Java正則表達(dá)式。查看文檔http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html的鏈接。

hive> DESCRIBE invites;

顯示列的列表。

更改和刪除表格

表名可以更改,列可以添加或替換

  hive> ALTER TABLE events RENAME TO 3koobecaf;
  hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
  hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
  hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');

請(qǐng)注意,REPLACE COLUMNS將替換所有現(xiàn)有的列,并僅更改表的schema,而不是數(shù)據(jù)。該表必須使用本地SerDe。REPLACE COLUMNS也可用于從表格模式中刪除列:

  hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');

Drop tables :

  hive> DROP TABLE pokes;

元數(shù)據(jù)存儲(chǔ)

元數(shù)據(jù)位于嵌入式Derby數(shù)據(jù)庫(kù)中,其磁盤(pán)存儲(chǔ)位置由Hive配置變量javax.jdo.option.ConnectionURL。默認(rèn)情況下這個(gè)位置是./metastore_db(見(jiàn)conf/hive-default.xml)。

目前,在默認(rèn)配置中,此元數(shù)據(jù)一次只能由一個(gè)用戶看到。

Metastore可以存儲(chǔ)在任何由JPOX支持的數(shù)據(jù)庫(kù)中。位置和RDBMS的類型可以通過(guò)兩個(gè)變量來(lái)控制javax.jdo.option.ConnectionURLjavax.jdo.option.ConnectionDriverName。有關(guān)支持的數(shù)據(jù)庫(kù)的更多詳細(xì)信息,請(qǐng)參閱JDO(或JPOX)文檔。數(shù)據(jù)庫(kù)模式在JDO元數(shù)據(jù)注釋文件package.jdo中定義src/contrib/hive/metastore/src/model

在將來(lái),Metastore本身可以是一個(gè)獨(dú)立的服務(wù)器。

如果要將Metastore作為網(wǎng)絡(luò)服務(wù)器運(yùn)行,以便可以從多個(gè)節(jié)點(diǎn)訪問(wèn)它,請(qǐng)參閱Hive在服務(wù)器模式下使用Derby

DML操作

Hive數(shù)據(jù)操作語(yǔ)言中記錄了Hive DML操作。

將文件中的數(shù)據(jù)加載到Hive中:

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

將包含由ctrl-a分隔的兩列的文件加載到pokes表中。'LOCAL'表示輸入文件在本地文件系統(tǒng)上。如果'LOCAL'被省略,那么它會(huì)在HDFS中查找該文件。

關(guān)鍵字'覆蓋'表示表中的現(xiàn)有數(shù)據(jù)被刪除。如果忽略'OVERWRITE'關(guān)鍵字,則將數(shù)據(jù)文件附加到現(xiàn)有數(shù)據(jù)集。

注意:

  • 加載命令不執(zhí)行對(duì)模式的數(shù)據(jù)驗(yàn)證。
  • 如果文件位于hdfs中,則將其移入Hive控制的文件系統(tǒng)名稱空間。
    Hive目錄的根目錄由選項(xiàng)指定hive.metastore.warehouse.dirhive-default.xml。我們建議用戶在嘗試通過(guò)Hive創(chuàng)建表之前創(chuàng)建該目錄。
  hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
  hive> LOAD DATA LOCAL INPATH './examples/files/kv3.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-08');

上面的兩個(gè)LOAD語(yǔ)句將數(shù)據(jù)加載到表invites的兩個(gè)不同分區(qū)中。表必須創(chuàng)建為按鍵ds分區(qū)才能成功。

  hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

上述命令會(huì)將數(shù)據(jù)從HDFS文件/目錄加載到表中。
請(qǐng)注意,從HDFS加載數(shù)據(jù)將導(dǎo)致移動(dòng)文件/目錄。因此,該操作幾乎是即時(shí)的。

SQL操作

選擇中記錄了Hive查詢操作。

示例查詢

下面顯示了一些示例查詢。他們?cè)?code>build/dist/examples/queries目錄下。
更多可在Hive資源中找到ql/src/test/queries/positive

選擇和過(guò)濾器

  hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

ds=2008-08-15invites表的所有分區(qū)行中選擇'foo'列。結(jié)果不存儲(chǔ)在任何地方,但顯示在控制臺(tái)上。

請(qǐng)注意,在隨后的所有示例中INSERT(可以插入Hive表,本地目錄或HDFS目錄)都是可以的。

  hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';

從表的分區(qū)ds=2008-08-15中選擇所有行invites到HDFS目錄中。結(jié)果數(shù)據(jù)在該目錄中的文件中(取決于映射器的數(shù)量)。
注:如果使用*選擇分區(qū)列。它們也可以在投影子句中指定。

分區(qū)表必須始終WHERE在語(yǔ)句的子句中選擇一個(gè)分區(qū)。

  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

從pokes表中選擇所有行到本地目錄。

  hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
  hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;

選擇一列的sum。avg, min, or max 也可以使用。請(qǐng)注意,對(duì)于不包含HIVE-287的Hive版本,您需要使用COUNT(1)代替COUNT(*)

Group By

  hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;
  hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;

請(qǐng)注意,對(duì)于不包含HIVE-287的Hive版本,您需要使用COUNT(1)代替COUNT(*)

join

  hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;

Multitable insert

  FROM src
  INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
  INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
  INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
  INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

STREAMING

  hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';

在映射階段通過(guò)腳本/bin/cat流式傳輸數(shù)據(jù)(如Hadoop流式傳輸)。
同樣,流式傳輸可以用在reduce方面(請(qǐng)參閱Hive教程以獲得示例)。

簡(jiǎn)單的示例用例

MovieLens用戶評(píng)級(jí)

首先,用制表符分隔的文本文件格式創(chuàng)建一個(gè)表格:

CREATE TABLE u_data (
  userid INT,
  movieid INT,
  rating INT,
  unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

然后,從下載數(shù)據(jù)文件MovieLens 100K的上GroupLens數(shù)據(jù)集頁(yè)(其中也有一個(gè)readme.txt文件,并解壓縮文件索引):

wget http://files.grouplens.org/datasets/movielens/ml-100k.zip

要么:

curl --remote-name http://files.grouplens.org/datasets/movielens/ml-100k.zip

注意:如果到GroupLens數(shù)據(jù)集的鏈接 不起作用,請(qǐng)報(bào)告HIVE-5341或發(fā)送郵件到user@hive.apache.org郵件列表

解壓縮數(shù)據(jù)文件:

unzip ml-100k.zip

并加載u.data到剛剛創(chuàng)建的表中:

LOAD DATA LOCAL INPATH '<path>/u.data'
OVERWRITE INTO TABLE u_data;

計(jì)算表u_data中的行數(shù):

SELECT COUNT(*) FROM u_data;

請(qǐng)注意,對(duì)于不包含HIVE-287的舊版Hive ,您需要使用COUNT(1)來(lái)代替COUNT(*)。

現(xiàn)在我們可以在表格上進(jìn)行一些復(fù)雜的數(shù)據(jù)分析u_data

創(chuàng)建weekday_mapper.py

import sys
import datetime

for line in sys.stdin:
  line = line.strip()
  userid, movieid, rating, unixtime = line.split('\t')
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print '\t'.join([userid, movieid, rating, str(weekday)])

使用映射器腳本:

CREATE TABLE u_data_new (
  userid INT,
  movieid INT,
  rating INT,
  weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new
SELECT
  TRANSFORM (userid, movieid, rating, unixtime)
  USING 'python weekday_mapper.py'
  AS (userid, movieid, rating, weekday)
FROM u_data;

SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;

請(qǐng)注意,如果你使用的蜂巢0.5.0或更早的版本,你需要使用COUNT(1)的地方COUNT(*)

Apache Weblog數(shù)據(jù)

Apache weblog的格式是可定制的,而大多數(shù)網(wǎng)站管理員使用默認(rèn)格式。
對(duì)于默認(rèn)的Apache Weblog,我們可以使用以下命令創(chuàng)建一個(gè)表。

有關(guān)RegexSerDe的更多信息,請(qǐng)參閱HIVE-662HIVE-1719


CREATE TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?"
)
STORED AS TEXTFILE;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

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