天天看點

附錄C 編譯安裝Hive

如果需要直接安裝Hive,可以跳過編譯步驟,從Hive的官網下載下傳編譯好的安裝包,下載下傳位址為http://hive.apache.org/downloads.html 。

在Hive的官網下載下傳頁面上下載下傳,為加快下載下傳速度選擇中國境内的鏡像,并下載下傳apache-hive-1.2.1-src.tar.gz源代碼包。下載下傳後把安裝包方放在目錄/home/spark/work目錄下,用如下指令解壓縮hive安裝檔案:

$cd /home/spark/work/

$tar -zxf apache-hive-1.2.1-src.tar.gz

改名并移動到/app/compile目錄下:

$mv apache-hive-1.2.1-src /app/compile/hive-1.2.1-src

$ll /app/compile/

編譯Hive源代碼的時候,需要從網上下載下傳依賴包,是以整個編譯過程機器必須保證在聯網狀态。編譯執行如下腳本:

$cd /app/compile/hive-1.2.1-src

$export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

$mvn -Phadoop-2 -Pdist -DskipTests -Dmaven.javadoc.skip=true clean package

在編譯過程中可能出現速度慢或者中斷,可以再次啟動編譯,編譯程式會在上次的編譯中斷處繼續進行編譯,整個編譯過程耗時與網速緊密相關,網速較快的情況需要1個小時左右(下圖的時間是重複多次下載下傳依賴包,然後編譯成功的界面),最終編譯打包的檔案為$HIVE_HOME/packaging /target/apache-hive-1.2.1-bin.tar.gz。

附錄C 編譯安裝Hive

圖 附錄C‑1 編譯Hive成功界面

通過如下指令檢視最終編譯完成整個目錄大小,可以看到大小為350M左右:

$du -s /app/compile/hive-1.2.1-src

附錄C 編譯安裝Hive

使用上一步驟編譯好的Hive編譯包移動到安裝目錄上,用如下指令解壓縮hive安裝檔案:

$cd /app/compile/hive-1.2.1-src/packaging/target/

$mv apache-hive-1.2.1-bin.tar.gz /home/spark/work/

$tar -zxf hive-1.2.1-bin.tar.gz

改名并遷移到/app/soft目錄下:

$cd /app/spark

$mv apache-hive-1.2.1-bin /app/spark/hive-1.2.1

$ll /app/soft

附錄C 編譯安裝Hive

圖 附錄C‑2 Hive移動到/app/soft目錄下

到mysql官網進入下載下傳頁面http://dev.mysql.com/downloads/connector/j/,預設情況下是Windows安裝包,這裡需要選擇Platform Independent版本下載下傳zip格式的檔案

附錄C 編譯安裝Hive

圖 附錄C‑3 MySql驅動下載下傳界面

把下載下傳的hive安裝包和mysql驅動包,使用如下指令放到Hive的lib目錄下:

$cd /home/spark/work

$mv mysql-connector-java-5.1.34-bin.jar /app/soft/hive-1.2.1/lib

使用如下指令打開/etc/profile檔案,設定如下參數:

export HIVE_HOME=/app/soft/hive-1.2.1

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin

配置完畢後,需要編譯該配置檔案或重新登入以生效該配置:

$source /etc/profile

進入hive-1.2.1/conf目錄,複制hive-env.sh.templaete為hive-env.sh并進行配置:

$cd /app/soft/hive-1.2.1/conf

$cp hive-env.sh.template hive-env.sh

$sudo vi hive-env.sh

分别設定HADOOP_HOME和HIVE_CONF_DIR兩個值:

# Set HADOOP_HOME to point to a specific hadoop install directory

export HADOOP_HOME=/app/spark/hadoop-2.7.2

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/app/soft/hive-1.2.1/conf

建立hive-site.xml配置檔案,在該配置檔案中加入配置内容

$touch hive-site.xml

$sudo vi hive-site.xml

hive預設為derby資料庫,derby資料隻運作單個使用者進行連接配接,這裡需要調整為mysql資料庫,以下為修改配置内容:

<?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://master:3306/hive?createDatabaseIfNotExsit=true; characterEncoding=UTF-8</value>

    </property>

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

        <value>com.mysql.jdbc.Driver</value>

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

        <value>hive</value>

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

        <name>datanucleus.readOnlyDatastore</name>

        <value>false</value>

        <name>datanucleus.fixedDatastore</name>

        <name>datanucleus.autoCreateSchema</name>

        <value>true</value>

        <name>datanucleus.autoCreateTables</name>

        <name>datanucleus.autoCreateColumns</name>

</configuration>

實際使用時,一般通過背景啟動metastore和hiveserver實作服務,指令如下:

$hive --service metastore &

$hive --service hiveserver2 &

附錄C 編譯安裝Hive

圖 附錄C‑4 Hive啟動背景服務

啟動用通過jps指令可以看到兩個進行運作在背景

登入hive,在hive建立表并檢視該表,指令如下:

$hive

hive> create table test(a string, b int);

hive> show tables;

hive> desc test;

附錄C 編譯安裝Hive

圖 附錄C‑5 Hive中建立測試表

登入mysql,在TBLS表中檢視新增test表:

$mysql -uhive -phive

mysql> use hive;

mysql> select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

附錄C 編譯安裝Hive

圖 附錄C‑6 在Hive中繼資料表查詢到建立表

交易資料存放在該系列配套資源的/saledata目錄下,把這些資料檔案上傳到master節點的/home/spark/word目錄下。

第二步   啟動Hive并胡藏劍資料庫

啟動HDFS、YARN和Hive,啟動完畢後建立Hive資料庫

hive> create database hive;

hive> show databases;

hive> use hive;

啟動Hadoop叢集,進入Hive指令行操作界面,使用如下指令建立三張資料表:

l  tbDate定義了日期的分類,将每天分别賦予所屬的月份、星期、季度等屬性,字段分别為日期、年月、年、月、日、周幾、第幾周、季度、旬、半月;

l  tbStock定義了訂單表頭,字段分别為訂單号、交易位置、交易日期;

l  tbStockDetail檔案定義了訂單明細,該表和tbStock以交易号進行關聯,字段分别為訂單号、行号、貨品、數量、金額:

hive> CREATE TABLE tbDate(dateID string,theyearmonth string,theyear string,themonth string,thedate string,theweek string,theweeks string,thequot string,thetenday string,thehalfmonth string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

Time taken: 1.121 seconds

hive> CREATE TABLE tbStock(ordernumber STRING,locationid string,dateID string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

Time taken: 0.166 seconds

hive> CREATE TABLE tbStockDetail(ordernumber STRING,rownum int,itemid string,qty int,price int ,amount int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

Time taken: 0.267 seconds

OK

tbdate

tbstock

tbstockdetail

Time taken: 0.089 seconds, Fetched: 3 row(s)

從本地作業系統分别加載日期、交易資訊和交易詳細資訊表資料

hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbDate.txt' INTO TABLE tbDate;

Loading data to table hive.tbdate

Time taken: 2.784 seconds

hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbStock.txt' INTO TABLE tbStock;

Loading data to table hive.tbstock

Time taken: 0.648 seconds

hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbStockDetail.txt' INTO TABLE tbStockDetail;

Loading data to table hive.tbstockdetail

Time taken: 1.44 seconds

檢視HDFS中相關SALEDATA資料庫中增加了三個檔案夾,分别對應三個表:

[spark@master ~]$ hadoop fs -ls /user/hive/warehouse/hive.db

Found 3 items

drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbdate

drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbstock

drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbstockdetail

要計算所有訂單每年的總金額,首先需要擷取所有訂單的訂單号、訂單日期和訂單金資訊,然後把這些資訊和日期表進行關聯,擷取年份資訊,最後根據這四個列按年份歸組統計擷取所有訂單每年的總金額。

hive> select c.theyear, sum(b.amount) from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear order by c.theyear;

運作過程中建立兩個Job,分别為application_1460617800545_0001和application_1460617800545_000,在YARN的資料總管界面中(預設http://master:8088/),可以看到如下界面:

附錄C 編譯安裝Hive

圖 附錄C‑7 在YARN監控界面作業運作狀态

整個計算過程使用了175.25秒,結果如下:

附錄C 編譯安裝Hive

圖 附錄C‑8 計算所有訂單每年的總金額結果

該算法分為兩步:

1.     按照日期和訂單号進行歸組計算,擷取所有訂單每天的銷售資料;

2.      把第一步擷取的資料和日期表進行關聯擷取的年份資訊,然後按照年份進行歸組,使用Max函數,擷取所有訂單每年最大金額訂單的銷售額。

//第一步:按照日期和訂單号進行歸組計算,擷取所有訂單每天的銷售資料

hive> select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber;

//第二步: 按照年份進行歸組,使用Max函數,擷取所有訂單每年最大金額訂單的銷售額

hive> select c.theyear,max(d.sumofamount) from tbDate c,(select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber) d  where c.dateid=d.dateid group by c.theyear sort by c.theyear;

運作過程中建立兩個Job,分别為job_1437659442092_0004和job_1437659442092_0005,在YARN的監控界面中可以看到如下界面:

附錄C 編譯安裝Hive

圖 附錄C‑9在YARN監控界面作業運作狀态

整個計算過程使用了171.41秒,結果如下:

附錄C 編譯安裝Hive

圖 附錄C‑10 檢視所有訂單每年最大金額訂單的銷售額結果

//所有訂單中季度銷售額前10位

hive> select c.theyear,c.thequot,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,c.thequot order by sumofamount desc limit 10;

2008      1     5252819

2007      4     4613093

2007      1     4446088

2006      1     3916638

2008      2     3886470

2007      3     3870558

2007      2     3782235

2006      4     3691314

2005      1     3592007

2005      3     3304243

附錄C 編譯安裝Hive

圖 附錄C‑11所有訂單中季度銷售額前10位結果

//列出銷售金額在100000以上的單據

hive> select a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.ordernumber having sumofamount>100000;

HMJSL00009024   119058

HMJSL00009958   159126

附錄C 編譯安裝Hive

圖 附錄C‑12 列出銷售金額在100000以上的單據

本文轉自shishanyuan部落格園部落格,原文連結: http://www.cnblogs.com/shishanyuan/p/6195863.html   ,如需轉載請自行聯系原作者

繼續閱讀