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运行环境,这里我用的是伪分布式版,具体可以参照我这篇文章:http://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只支持“相等”连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值