閱讀929 返回首頁    go 阿裏雲 go 技術社區[雲棲]


HIVE 牛刀小試 (偽分布式版本)

最近一直用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環境

首先需要在本地搭建好hadoop運行環境,這裏我用的是偽分布式版,具體可以參照我這篇文章:https://blog.csdn.net/jiacai2050/article/details/7872708

第二步:下載hive

在apache的官網,我下載的是這麼一個文件hive-0.11.0.tar.gz

第三步:配置hive

由於hive需要存放metastore,這裏我們使用JDBC compliant(即JDBC兼容)數據庫,hive自帶了一個Derby,我們用自帶的即可,這裏無需做任何操作

第四步:配置環境變量

把hive/bin加到path中,編輯.profile文件,可以輸入以下命令:

vim ~/.profile
我機器的配置這麼樣的:

export HADOOP_HOME="/home/liujiacai/hadoop"
export HIVE_HOME="/home/liujiacai/hive"
export PATH=$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH 
這麼配置好,以後在執行hadoop相關命令時有可能會出現個warning,提示$HADOOP_HOME is deprecated,在hadoop/conf/hadoop-env.sh文件中添加這麼一行就行了:

export HADOOP_HOME_WARN_SUPPRESS="TRUE"


然後再執行以下命令:

$ $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數據的存放路徑,並讓用戶所屬組有寫 

到現在hive就應該能正常運行了。

-----------------------------------------------------------------------------HIVE常用操作---------------------------------------------------------------------------------------------------------------------------------

1.創建表的完整語句

create [external] table active(ukey string, docic int)
comment "this is for analysing user's reading history"
partitioned by (month int, day int)
clustered by (ukey) into 32 buckets
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as sequencefile/textfile

[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

我們首先創建這麼一個表

create external table log(ukey string, docic int) 
partitioned by (month int, day int)
row format delimited
fields terminated by '\t';

然後在用這條語句進行log表的修改

alter table log add partition(month=10,day=10) location '/data/log/2013/10/10'

這樣就把10月10號這天的日誌包含進log表了

3.表的連接join

一個模板:

insert overwrite table query_result
select pv.* u.gender, u.age
from page_view pv JOIN user u ON (pv.userid = u.id);
現在hive中的join隻支持“相等”連接。

最後更新:2017-04-03 15:21:44

  上一篇:go android按兩次退出
  下一篇:go 數據結構學習筆記--隊列