Hive 加速M/R的开发
来源:互联网 发布:等位叫号软件 编辑:程序博客网 时间:2024/06/06 01:35
一、Hive的安装
如何安装Hive网上有N多的文档,一般来说你准备搭建Hadoop平台的你就绝对不会吝啬这么点的时间去搭建个Hive平台,具体就参考官方wiki去吧。
二、开启Hadoop之旅
1.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; #查看表结构
2.将数据加载到表中
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;
3.执行Query开始快速M/R之旅
Hive支持目前常用的SQL语法,支持COUNT,SUM,AVG,GROUP等常用的SQL函数还支持hive一些自定义的函数方便数据分析用,当然你可以自定义函数,理论上讲在java中能实现的功能,它都能胜任,详情参见:http://wiki.apache.org/hadoop/Hive/Tutorial ,先来几个常用的示例吧。
#统计数量
SELECT COUNT(1) FROM T1;
#汇总数量
SELECT SUM(A) FROM T1;
#求平均值
SELECT AVG(A) FROM T1;
#GROUP
SELECT 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也支持JOIN
INSERT OVERWRITE TABLE T3 SELECT T1.*,T2.* FROM T1 T1 join T2 T2 on (T1.A = T2.A) ;
4.HIVE到底是什么?
看着这么上面强大的功能,那Hive到底是什么呢?其实HIVE就是一个SQL解析引擎,它将SQL语句转译成M/R JOB然后在Hadoop执行,来达到快速开发的目的。拨开HIVE的神秘面纱之后来看它的表其实就是一个Hadoop的目录/文件(HIVE默认表存放路径一般都是在你工作目录的hive目录里面),按表名做文件夹分开,如果你有分区表的话,分区值是子文件夹,可以直接在其它的M/R job里直接应用这部分数据。
三、FAQ
1.几个常用的参数
set mapred.reduce.tasks=30; 设置Reduce Task个数
set hive.exec.compress.output='false'; 设置数据不作压缩,要是压缩了我们拿出来的文件就只能通过HIVE-JDBC来解析
2.注意事项
做JOIN操作的时候最好将数量少的表放在左边。
Reduce的排序是单机的,如果一定要结果排序,那边你的Reduce Task数量最好设置成一个。
慎用System.xxx.println来输出日志,要是不小心把每行记录都打印出来那边整个Hadoop集群都有崩溃的危险。
如果表建立了PARTITIONS,那么分析需求的时候尽量利用好这批分区表。如果你们的分区表是拿来做每天的镜像数据的(我们公司就是这么来用的),那边你更加要小心处理,不然你的JOB就可能破你们集群的记录。
测试JOB的时候尽量加上LIMIT参数,毕竟Hadoop不是数据库,每个JOB都是需要一定的时间的。
- Hive 加速M/R的开发
- 加速R运算的简易方法-MRO
- ToolRunner与eclipse hadoop 插件的替代品,简化M/R程序的开发
- Hadoop的M-R中间任务分配
- R 镜像加速
- hive的udf开发
- hive udaf的开发
- 加速R运行的简易方法-数据结构和*pply簇
- 用hive分析数据约500M的网页数据
- 目标管理的S.M.A.R.T.理念
- M/R推测性的执行(Speculative execution)
- 关于电容的J K M R C
- Thinkphp的A,R,M,D方法区别
- 固态硬盘的S.M.A.R.T详解
- K&R《C程序设计语言》p17:求m的n次方
- R语言连接HIVE
- Matlab加速通信标准的开发
- 加速你的开发环境[VS2003]
- 维护系统旧代码有感
- 活学活用哈希表HASHTABLE(C#)
- ways to invoke service
- 两个List合并实现
- 关于GDI+中文件保存到原路径的一个解决办法
- Hive 加速M/R的开发
- Eclipse的安装
- PrimeSense发布开源驱动
- MIME协议
- VS2008中关于“加载安装组件时遇到问题。取消安装”的解决
- 介绍一篇关于 .NET C#中使用 Encryption 的文章
- POI类库之工作表中文名乱码问题 【JAVA应用.POI类库操作】
- struts.xml 使用 type="redirect" 和type="redirectaction" 传递参数
- linux用户及用户组