本文共 3142 字,大约阅读时间需要 10 分钟。
一篇Google的学术论文让Map/Reduce这个概念风靡全球,Hadoop是Apache对Map/Reduce这种分布式计算框架的开源实现,通过Hive我们能想执行SQL那样执行我们的HadoopJob。
如何安装Hive网上有N多的文档,一般来说你准备搭建Hadoop平台的你就绝对不会吝啬这么点的时间去搭建个Hive平台,具体就参考官方去吧。
在Hive里面创建一张表的基本语法同SQL类似,下面就是一个简单的表创建语法:
CREATE TABLE tmp_table #表名(title string, # 字段名称 字段类型minimum_bid double,quantity bigint,have_invoice bigint)COMMENT '注释:XXX' #表注释 PARTITIONED BY(pt STRING) #分区表字段(如果你文件非常之大的话,采用分区表可以快过滤出按分区字段划分的数据) ROW FORMAT DELIMITED FIELDS TERMINATED BY '/001' # 字段是用什么分割开的STORED AS SEQUENCEFILE; #用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式
其中PARTITIONED 在数据量比较大的时候非常有用,比如你想在Hadoop上存放每天镜像商品的时候,通过PARTITIONED 分区可以快速筛选某一天的数据。访问时候通过“ SELECT * FROM TMP_TABLE WHERE PT='XXX‘ ”的方式通过分区来访问数据。分区表是通过子文件夹的方式来存放数据的,所以速度提高是光速级的。其它的几个表相关有有那个的命令:
SHOW TABLES; # 查看所有的表SHOW TABLES '*TMP*'; #支持模糊查询SHOW PARTITIONS TABLE; #查看表有哪些分区DESCRIBE TABLE; #查看表结构
Hive可以将本地的和Hadoop中的文件加载到表中,但是文件的分割方式必须同创建表的约定的格式一致:
#创建表的时候直接指定路径CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User', country STRING COMMENT 'country of origination') COMMENT 'This is the staging page view table' ROW FORMAT DELIMITED FIELDS TERMINATED BY '44' LINES TERMINATED BY '12' STORED AS TEXTFILE LOCATION '/user/data/staging/page_view'; #创建表之后也可以导入数据到表中#本机路径(跳板机)LOAD DATA LOCAL INPATH `/tmp/date.txt` OVERWRITE INTO TABLE page_view PARTITION(pt='2008-06-08')#Hadoop路径LOAD DATA INPATH `/tmp/date.txt` OVERWRITE INTO TABLE page_view PARTITION(pt='2008-06-08')#上面OVERWRITE关键会全表覆盖,如果只是想附加数据,将OVERWRITE去掉即可。 #添加一个分区到表ALTER TABLE tmp_xx ADD PARTITION (pt='100610') location '/group/mywork/hive/xx/pt=100610' ;#当然你可以直接从从其它的表拖数据过来 INSERT OVERWRITE TABLE TMP_T1 SELECT * FROM TMP_T2;
Hive支持目前常用的SQL语法,支持COUNT,SUM,AVG,GROUP等常用的SQL函数还支持hive一些自定义的函数方便数据分析用,当然你可以自定义函数,理论上讲在java中能实现的功能,它都能胜任,详情参见: ,先来几个常用的示例吧。
#统计数量SELECT COUNT(1) FROM T1;#汇总数量SELECT SUM(A) FROM T1;#求平均值SELECT AVG(A) FROM T1;#GROUPSELECT A,COUNT(1) FROM T1 GROUP A;
这样执行之后数据最后会在屏幕上打印出来的,显然这不是我们想要,只适合开发的时候测试数据用,为了不让数据打满跳板机最好加下“LIMIT 10”参数限制下总数,省得把跳板机压垮。通过以下方式可以提取查询的结果
INSERT OVERWRITE TABLE T1 SELECT * FROM T2;#然后通过 hadoop fs -getmerge dir ldir 命令直接从hdfs系统中提取数据#当然你也可以直接放到本地目录INSERT OVERWRITE LOCAL DIRECTORY '/tmp/T1' SELECT * FROM T2;#Hive也支持JOININSERT OVERWRITE TABLE T3 SELECT T1.*,T2.* FROM T1 T1 join T2 T2 on (T1.A = T2.A) ;
看着这么上面强大的功能,那Hive到底是什么呢?其实HIVE就是一个SQL解析引擎,它将SQL语句转译成M/R JOB然后在Hadoop执行,来达到快速开发的目的。拨开HIVE的神秘面纱之后来看它的表其实就是一个Hadoop的目录/文件(HIVE默认表存放路径一般都是在你工作目录的hive目录里面),按表名做文件夹分开,如果你有分区表的话,分区值是子文件夹,可以直接在其它的M/R job里直接应用这部分数据。
转自:
转载地址:http://hwtxi.baihongyu.com/