最近一直用hadoop處理資料,處理完以後要對資料進行分析,由于我們的資料不是很大,每次我都是把要分析的檔案從hdfs下載下傳到本地,然後再用python、shell腳本進行分析與統計,那hadoop生态系統中都有什麼資料分析工具呢,目前據我所知,有兩個:pig和hive。因為pig我以前看過,需要用pig lation(pig自己的腳本語言),為了省事,我這次直接看基于sql語句的hive。pig與hive的差別《hadoop in action》書中是這麼定義的:
pig----a high-level data flow language
hive------a sql-like data warehouse infrastructure
廢話不多說,直接實戰:
第一步:配置hadoop環境
第二步:下載下傳hive
在apache的官網,我下載下傳的是這麼一個檔案hive-0.11.0.tar.gz
第三步:配置hive
由于hive需要存放metastore,這裡我們使用jdbc compliant(即jdbc相容)資料庫,hive自帶了一個derby,我們用自帶的即可,這裡無需做任何操作。
第四步:配置環境變量
把hive/bin加到path中,編輯.profile檔案,可以輸入以下指令:
我機器的配置這麼樣的:
這麼配置好,以後在執行hadoop相關指令時有可能會出現個warning,提示$hadoop_home is deprecated,在hadoop/conf/hadoop-env.sh檔案中添加這麼一行就行了:
然後再執行以下指令:
這些指令主要是建立hive資料的存放路徑,并讓使用者所屬組有寫
到現在hive就應該能正常運作了。
-----------------------------------------------------------------------------hive常用操作---------------------------------------------------------------------------------------------------------------------------------
1.建立表的完整語句
[external]表示可選項,表示建立表的資料來源于已有的hdfs檔案
partitioned by語句主要是為了處理子檔案夾的情況
clustered by語句主要是控制生成的part-0000*的檔案個數
stored as語句說明表檔案存放的格式,現在隻有兩種。
2.partitioned by語句用法
我的情況,日志檔案按日存放,每一天一個檔案夾,像
/data/log/2013/10/10
/data/log/2013/10/11
/data/log/2013/10/12
..................
/data/log/2013/11/10
/data/log/2013/11/11
....................
這樣的形式,為了把這些檔案中的資料存放到hive的表中,我們需要用partitioned
我們首先建立這麼一個表
然後在用這條語句進行log表的修改
這樣就把10月10号這天的日志包含進log表了
3.表的連接配接join
一個模闆:
現在hive中的join隻支援“相等”連接配接。