亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Hive官方手冊翻譯(Getting Started) - 實踐檢驗

系統 4025 0

Hive官方手冊翻譯(Getting Started) - 實踐檢驗真理 - 51CTO技術博客

Hive官方手冊翻譯(Getting Started)

2012-07-23 16:18:12

版權聲明:原創作品,如需轉載,請與作者聯系。否則將追究法律責任。

翻譯Hive官方文檔系列,文中括號中包含 注: 字樣的,為我自行標注的,水平有限,翻譯不是完美無缺的。如有疑問,請參照Hive官方文檔對照查看。

內容列表
Cloudera制作的Hive介紹視頻
安裝與配置
系統需求
安裝Hive發行版
從Hive源碼編譯
運行Hive
配置管理概覽
運行時配置
Hive, Map-Reduce 與本地模式
錯誤日志
DDL 操作
元數據存儲
DML 操作
SQL 操作
查詢示例
SELECTS 和 FILTERS
GROUP BY
JOIN
MULTITABLE INSERT
STREAMING
Simple Example Use Cases
MovieLens User Ratings
Apache Weblog Data
免責聲明: Hive目前僅在Unix(linux)和Mac系統下使用Java 1.6測試運行,可以在這些或類似的平臺上正常運行。并不支持在Cygwin上工作(注:windows還是別想了)。
絕大部分的測試工作是基于Hadoop 0.20完成的 - 所以,我們建議不要使用其他版本,以避免編譯或運行的異常。

Cloudera制作的Hive介紹視頻
安裝與配置
系統需求
Java 1.6
Hadoop 0.20.x.(注:目前0.9.0支持hadoop 1.0.x)
用發行版安裝Hive
使用下載工具從Apache下載鏡像下載最近的Hive發行包(查看 Hive發行包)
下一步你需要解壓縮Tar包,這將會創建一個名為hive-x.y.z的子目錄:
$ tar -xzvf hive-x.y.z.tar.gz

?

設置HIVE_HOME環境變量指向到Hive的安裝目錄:
$ cd hive-x.y.z
$ export HIVE_HOME={{pwd}}

?

最后, 將$HIVE_HOME/bin添加到你的PATH環境變量中:
$ export PATH=$HIVE_HOME/bin:$PATH

?

使用源碼創建Hive
Hive SVN 源: http://svn.apache.org/repos/asf/hive/trunk
$ svn co http://svn.apache.org/repos/asf/hive/trunk hive
$ cd hive
$ ant clean package
$ cd build/dist
$ ls
README.txt
bin/ (所有shell腳本)
lib/ (所需的jar文件)
conf/ (配置文件)
examples/ (示例輸入與查詢文件)

?

在接下來, 我們會交替的使用build/dist和<install-dir>.
運行Hive
Hive 使用Hadoop,這意味著:
你必須在PATH里面設置了hadoop路徑 (注:原文是 you must have hadoop in your path,我認為這個path應該是大寫的) ?或者
export HADOOP_HOME=<hadoop-install-dir>
作為附加的, 你必須在創建Hive庫表前,在HDFS上創建/tmp和/user/hive/warehouse,并且將它們的權限設置為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

?

我同樣發現設置 HIVE_HOME 是很重要的,但并非必須
$ export HIVE_HOME=<hive-install-dir>

?

在Shell中使用Hive命令行(cli)模式:
$ $HIVE_HOME/bin/hive

?

配置文件管理概述
Hive 默認的配置文件保存在 <install-dir>/conf/hive-default.xml
你可以修改其中的配置,并重命名這個文件為 <install-dir>/conf/hive-site.xml(注:我建議你還是保留原始配置文件)
Hive配置文件的位置可以通過設置HIVE_CONF_DIR環境變量來改變.
Log4j的配置保存在 <install-dir>/conf/hive-log4j.properties
Hive的配置存在于Hadoop之上,這意味著Hadoop的配置默認會被繼承到Hive中.
Hive 配置可以被如下方式控制:
編輯 hive-site.xml 并定義任何需要的變量 (包括hadoop的變量)
從 cli 模式使用使用set命令 (看下面)
使用如下方式:
$ bin/hive -hiveconf x1=y1 -hiveconf x2=y2
這個例子分別設置了變量x1為y1,x2為y2
設置使用 HIVE_OPTS 環境變量 "-hiveconf x1=y1 -hiveconf x2=y2" 與上面的功能相同
運行時配置
Hive 查詢是執行map-reduce查詢,并且,這些查詢是可以被hadoop的配置所控制的.
命令行命令 'SET' 可以被用來設置任何hadoop(或者hive)的配置變量,例如:
????hive> SET mapred.job.tracker=myhost.mycompany.com:50030;
????hive> SET -v;

?

后者(注 SET -v)用來查看當前全部的設置. 而不使用 -v 選項,則是用來查看當前與Hadoop不同的配置.
Hive, Map-Reduce 與本地模式
Hive編譯器會為絕大多數查詢生成map-reduce的jobs。這些Jobs使用下面這個變量來表明被提交到Map-Reduce集群中:
????mapred.job.tracker

?

由于這通常是在一個多節點的map-reduce集群中被指出,Hadoop同樣有個就近的方式來在用戶的工作機上運行map-reduce jobs。這就在小數據集的查詢上顯得非常有用 - 在這種情況下,本地模式運行通常會比將任務提交到整個大集群中查詢更快。數據從HDFS上獲取是透明的。同樣的,由于本地模式僅運行一個reducer,這樣,在大數據查詢上是非常慢的。
從 0.7 版本開始, Hive全面支持本地運行模式,要使用這個模式,請按照下列進行設置:
????hive> SET mapred.job.tracker=local;

?

作為附加的,mapred.local.dir應該指定一個合法的本機路徑(注:安裝hive的那臺服務器) (例如: /tmp/<username>/mapred/local). (否則,用戶將獲取一個定位本地空間的異常拋出).
從0.7版本開始, Hive同樣支持自動/非自動地使用本地模式來完成map-reduce jobs,相關的選項是:
????hive> SET hive.exec.mode.local.auto=false;

?

請注意這個功能默認是關閉的,如果打開 - Hive將分析每一個查詢的map-reduce job ,并且如果以下閥值被確認為OK,就嘗試運行在本地:
全部job的輸入大小低于: hive.exec.mode.local.auto.inputbytes.max (128MB 默認)
全部的map任務數低于: hive.exec.mode.local.auto.tasks.max (4 個默認)
全部reduce任務數等于 1 或者 0.
對于查詢大于小數據集,或者需要查詢在多個map-reduce jobs中完成,但是子查詢很小的(注:小于上述條件),jobs仍可能使用本地模式來運行。
注意,可能不同的hadoop服務器節點和hive客戶端的運行時環境(由于不同的jvm版本或者不同的軟件庫)。運行本地模式可能會導致一個不可被捕獲的錯誤。同樣需要注意的是,本地運行模式是在一個獨立的子jvm(hive 客戶端的子進程)中完成的。 如果用戶希望,子jvm所能使用的最大內存數,可以通過訪問hive.mapred.local.mem來進行控制。默認設置是0,所以Hive允許Hadoop來決定子jvm的默認內存限制
錯誤日志
Hive 使用 log4j 來記錄日志. 默認來說,日志不會被返回到CLI模式的控制臺上(注:也就是CRT中)。默認的日志記錄等級是WARN,并被保存到以下文件夾中:
/tmp/<user.name>/hive.log
如果用戶愿意 - 日志可以通過修改下面的參數來返回到控制臺上:
bin/hive -hiveconf hive.root.logger=INFO,console
另外,用戶可以改變記錄等級:
bin/hive -hiveconf hive.root.logger=INFO,DRFA
注意,配置項 hive.root.logger 在hive初始化以后,即不能通過使用'set'命令來改變了
Hive同樣會為每個hive會話保存查詢日志,在/tmp/<user.name>/ (注:本機路徑下),但是可以通過修改 hive-site.xml 中的 hive.querylog.location屬性來變更。
Hive在一個hadoop集群上運行過程中的日志是由Hadoop的配置所決定的。通常Hadoop會為每個map和reduce任務創建日志文件,并保存在運行任務的集群服務器上。日志文件可以通過Hadoop Jobtracker提供的Web UI上的Task Detail頁面來跟蹤觀察。
運行本地模式時(mapred.job.tracker=local),Hadoop/Hive 將會將執行日志放在本機上,從0.6版本開始 - Hive使用hive-exec-log4j.properties (如果不存在,則是使用hive-log4j.properties文件)來決定默認的日志的保存方式。默認的配置文件將為每個查詢執行在本地模式下的日志放到/tmp/<user.name>。這樣做的目的是為了將配置單獨管理,并可以將日志集中存放到一個用戶需要的位置(例如一個NFS文件服務器)上。執行日志對于運行時錯誤的debug并無幫助。
錯誤日志對于定位問題非常有用,請將存在的任何bug發送到hive-dev@hadoop.apache.org

DDL 操作
創建Hive表和查看使用
hive> CREATE TABLE pokes (foo INT , bar STRING);


創建一個包含兩個字段,名稱為pokes的表,第一個字段是int(注:整型),第二個字段是string(注:字符串)
hive> CREATE TABLE invites (foo INT , bar STRING) PARTITIONED BY (ds STRING);


創建一個名為invites的表,其中包含兩個字段和一個叫做ds的分區(partition)字段. 分區字段是一個虛擬的字段,本身并不包含在數據中,但是是從加載進來的數據中特別衍生出來的數據集.
默認情況下,表被假定是純文本的格式,并且使用^A(ctrl-a)來作為數據分割的。
hive> SHOW TABLES;


列出所有的表
hive> SHOW TABLES '.*s' ;

?

列出所有結尾包含 's' 的表名。匹配方式使用Java正則表達式,查看下列連接獲取關于Java正則的信息 ?http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html
hive> DESCRIBE invites;


查看invites表的全部字段
可以修改表名,增加刪除新的字段等:
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT );
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment' );
hive> ALTER TABLE events RENAME TO 3koobecaf;


刪除表:
hive> DROP TABLE pokes;

?

元數據存儲
元數據默認使用Derby數據庫保存在本地文件系統中,并保存在./metastore_db下。通過修改conf/hive-default.xml中的javax.jdo.option.ConnectionURL變量修改。
當前,在默認配置下,元數據每次只能同時被一個用戶所使用。
元數據可以存儲在任何一個使用JPOX支持的數據庫中,這些關系型數據庫的連接和類型可以通過兩個變量進行控制。javax.jdo.option.ConnectionURL 和 javax.jdo.option.ConnectionDriverName。
你需要查看數據庫的JDO(或JPOX)手冊來獲取更多信息。
數據庫的Schema定義在JDO元數據注釋文件package.jdo中,位置在src/contrib/hive/metastore/src/model。
計劃在未來,元數據存儲引擎可以成為一個獨立的服務。
如果你想將元數據作為一個網絡的服務來在多個節點中訪問,請嘗試HiveDerbyServerMode.

DML 操作
將文件中的數據加載到Hive中:
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;


加載到pokes表的文件包含兩個用ctrl-a符號分割的數據列,'LOCAL' 意味著文件是從本地文件系統加載,如果沒有 'LOCAL' 則意味著從HDFS中加載。
關鍵詞 'OVERWRITE' 意味著當前表中已經存在的數據將會被刪除掉。
如果沒有給出 'OVERWRITE',則意味著數據文件將追加到當前的數據集中。
注意:
通過load命令加載的數據不會被校驗正確性。
如果文件在HDFS上,他將會被移動到hive所管理的文件系統的命名空間中
Hive目錄的根路徑是在hive-default.xml文件中的變量
hive.metastore.warehouse.dir
決定的。
我們建議用戶在使用Hive建表之前就創建好這個變量指定的目錄。
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' );


上面這兩個 LOAD 語句,將加載不同的數據到invites表的分區(partition)中。invites表必須事先使用 ds 創建好partition。
hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds= '2008-08-15' );


上述命令是將HDFS上的文件加載到表中。
注意從HDFS中加載數據,將會把數據移動到目錄下。這幾乎是瞬間完成的。(注:因為只是在HDFS元數據中修改了文件路徑的指向。)

SQL 查詢
查詢示例
下面會演示一些查詢范例,在build/dist/examples/queries中可以找到。
更多的,可以在hive源碼中的 ql/src/test/queries/positive中可以找到。

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


從invite表的字段 'foo' 中選擇所有分區ds=2008-08-15的結果。這些結果并不存儲在任何地方,只在控制臺中顯示。
注意:下面的示例中,INSERT (到hive表,本地目錄或者HDFS目錄) 是可選命令。
????hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds= '2008-08-15' ;


從invites表中選擇分區 ds=2008-08-15 的所有行,并放入HDFS目錄中。結果數據在在/tmp/hdfs_out目錄中的文件(多個文件,文件數量取決于mapper的數量)。

存在分區的表在使用 WHERE 條件過濾的時候必須至少指定一個分區來查詢。
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;


字段計算和,最大值,最小值同樣可以使用,注意不包含在 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;


注意不包含在 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';

?

在map中使用腳本/bin/cat對數據的流式訪問(就像使用hadoop的streaming)
同樣的 - 流式訪問也可以使用在reduce階段。(請查看 Hive Tutorial 范例)

簡單的使用范例
用戶對電影的投票統計
首先,創建一個使用tab分割的文本文件的表
CREATE TABLE u_data (
????????userid INT ,
????????movieid INT ,
????????rating INT ,
????????unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;


然后,下載這個數據文件
wget http://www.grouplens.org/system/files/ml-data.tar+0.gz
tar xvzf ml-data.tar+0.gz
將這個文件加載到剛剛創建的表中:
LOAD DATA LOCAL INPATH 'ml-data/u.data'? OVERWRITE INTO TABLE u_data;


計算表 u_data 中的總行數:
SELECT COUNT (*) FROM u_data;


注意不包含在 HIVE-287 中的Hive版本,你需要使用COUNT(1) 來代替 COUNT(*)
現在,我們可以在表 u_data 中做一些復雜的數據分析
創建 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)])

?

使用mapper腳本:
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;

?

注意 0.5.0 及更早的的Hive版本,你需要使用COUNT(1) 來代替 COUNT(*)
Apache Web日志數據
Apache日志格式是可以自定義的,作為大多數網管來說都是使用默認設置。
我們可以給默認的Apache日志創建一個如下的表
更多的關于正則序列化/反序列化(注: 原文!RegexSerDe) 可以在這里看到。
http://issues.apache.org/jira/browse/HIVE-662
add jar ../build/contrib/hive_contrib.jar;
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.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
????????"input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?",
????????"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;

?

Hive官方手冊翻譯(Getting Started) - 實踐檢驗真理 - 51CTO技術博客


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美精品一中文字幕 | 国产精品久久二区三区色裕 | 日韩欧美亚洲国产高清在线 | 自拍偷拍一区 | 国产成人精品久久免费动漫 | 精品无码久久久久国产 | 中文字幕精品在线 | 99国产超薄丝袜足j在线播放 | 亚洲高清成人欧美动作片 | 久色视频在线 | 亚洲国产人成在线观看69网站 | 日日干夜夜欢 | 国产亚洲综合一区二区在线 | 亚洲片在线 | 国产在线视频不卡 | 日本一级特黄毛片免费视频9 | 伊人久久中文字幕久久cm | 国内精品一区二区三区最新 | 亚洲国产精品欧美综合 | 午夜福利毛片 | 免费一级黄色录像 | 精品免费国产一区二区三区 | 亚洲免费高清视频 | 奇米免费视频 | 亚洲日日夜夜 | 青青操夜夜操 | 久久久网 | 久久aa毛片免费播放嗯啊 | 狠狠躁天天躁夜夜躁婷婷 | 波多野野结衣1区二区 | 久久99精品久久久久久青青日本 | 97免费| 久久免费高清视频 | 国产精品久久久一区二区三区 | 在线成人免费视频 | 午夜噜噜噜私人影院在线播放 | 中文字幕精品一区二区日本大胸 | 亚洲日韩欧美综合 | 中文字幕在线看视频一区二区三区 | 国产亚洲欧美在在线人成 | 亚洲精品mm1313久久 |