天天看点

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环境

第二步:下载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只支持“相等”连接。