最近一直用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只支持“相等”连接。