天天看點

hadoop: hive 1.2.0 在mac機上的安裝與配置

環境:mac OS X Yosemite + hadoop 2.6.0 + hive 1.2.0 + jdk 1.7.0_79

前提:hadoop必須先安裝,且處于運作狀态(僞分式模式或全分布模式均可)

建議:經個人實踐,在mac OS X Yosemite 環境下,如果使用apache下載下傳的原始hadoop 2.6.0,不管jdk安裝成什麼版本(1.6\1.7\1.8都試過),hive 1.2.0啟動時,始終報jdk版本不比對,後來在mac上将hadoop 2.6.0源編譯成mac原生版本後,就正常了。

一、環境變量

三、修改hive中的xml配置

cp hive-default.xml.template hive-default.xml

cp hive-default.xml.template hive-site.xml

cp hive-exec-log4j.properties.template hive-exec-log4j.properties

cp hive-log4j.properties.template hive-log4j.properties

cp beeline-log4j.properties.template beeline-log4j.properties

即:把幾個帶.template字尾的模闆檔案,複制一份變成不帶.template的配置檔案,注意hive-default.xml.template這個要複制二份,一個是hive-default.xml,另一個是hive-site.xml,其中hive-site.xml為使用者自定義配置,hive-default.xml為全局配置,hive啟動時,-site.xml自定義配置會覆寫-default.xml全局配置的相同配置項。

注:hive中有一個中繼資料的概念,中繼資料記錄了目前有哪些表,哪些字段,字段資料類型等,由于hdfs是沒有這些額外資訊的,是以hive需要借助傳統資料庫來記錄這些中繼資料資訊,預設情況下,采用内置資料庫derby來記錄,也可以通過配置将這些中繼資料記錄到mssql\mysql\oracle\postgreSQL等大型RDMBS中,上面的配置中,示範了MYSQL、PostgreSQL二種配置,如果把23-41注釋掉,就變成derby獨立模式。

另:上面的配置檔案中,有一些關于目錄的參數,先提前把目錄建好,

hive.exec.local.scratchdir

hive.downloaded.resources.dir

這二項對應的目錄,是指本地目錄(必須先手動建好),其它目錄為hdfs中的目錄(hive啟動時,先自動建好,如果自動建立失敗,也可以手動通過shell在hdfs中建立)

四、替換hadoop 2.6.0中的jline jar包

由于hive 1.2.0自帶的jline包跟hadoop 2.6.0自帶的版本不一緻,是以需要将$HIVE_HOME/lib/jline-2.12.jar 這個檔案替換掉$HADOOP_HOME/share/hadoop/yarn/lib 下原來的版本 (即:将舊版本删除,複制新版本到此目錄),否則hive啟動将失敗

五、測試及驗證

$HIVE_HOME/bin/hive

如果能正常進入 hive> 即表示正常

a) 建立表測試

hive>create table test(id int);

b) 将hdfs中的檔案内容加載到表中

hive> load data inpath '/input/duplicate.txt' into table test;

c) 測試求平均值

hive> select avg(id) from test;

Query ID = jimmy_20150607191924_ccfb231f-6c92-47ac-88f1-eb32882a0010

Total jobs = 1

Launching Job 1 out of 1

Number of reduce tasks determined at compile time: 1

In order to change the average load for a reducer (in bytes):

  set hive.exec.reducers.bytes.per.reducer=<number>

In order to limit the maximum number of reducers:

  set hive.exec.reducers.max=<number>

In order to set a constant number of reducers:

  set mapreduce.job.reduces=<number>

Job running in-process (local Hadoop)

2015-06-07 19:19:27,980 Stage-1 map = 100%,  reduce = 100%

Ended Job = job_local1537497991_0001

MapReduce Jobs Launched: 

Stage-Stage-1:  HDFS Read: 190 HDFS Write: 0 SUCCESS

Total MapReduce CPU Time Spent: 0 msec

OK

3.909090909090909

Time taken: 3.322 seconds, Fetched: 1 row(s)