Hive运行上下文环境设置

2009-12-02 @ taobao

上下文环境

hive语句执行中, 也可像oracle一样设置一些环境参数的.

环境变量设置:

设置mapreduce的reduce任务数.

set mapred.reduce.tasks=300;

设置输出是否压缩

set hive.exec.compress.output='false';

配置Streaming执行文件

add file /home/jushi/public/properties.py;

自定义函数声明

CREATE TEMPORARY FUNCTION date_format AS 'com.taobao.hive.udf.UDFDateFormat';

Hive shell中应用

进入Hive shell后, 直接键入设置语句即可, 如:

hive> set mapred.reduce.tasks=300;

注意
上下文环境一旦设置, 有效范围仅限于当前shell内之后执行的sql语句, 在退出shell后一切环境恢复初始状态.

开发Hivelet中应用

Hivelet运行内幕
hivelet文件(.sql文件)在生产环境中, 会由hqlexec-1.0.jar(以下简称hqlexec)读取并逐行执行. 
hqlexec读取文件后的过程是:
  1. 删除注释
  2. 解析velocity变量和宏
  3. 按分号对语句进行切分
  4. 识别环境设置语句和数据处理语句
  5. 按读取先后顺序,将数据处理语句与其之前所有声明的环境设置语句合并为一个字符串str
  6. 运行子进程:

    hive -S -e "str"

由于HiveQL语句是通过hive -e "$HiveQL" 执行的, 所以Hivelet的编写中, 环境设置的语句应该置于应用环境设置的数据处理语句(如Insert)之前. 如:

set mapred.reduce.tasks=300;
set hive.exec.compress.output='false';
INSERT OVERWRITE TABLE r__properties PARTITION (pt='$env.lastPartition')
 ...;
环境设置有效范围的陷阱
环境设置一旦声明, 将会后续的所有数据处理语句都有效. 如:
set hive.exec.compress.output='false';
insert overwrite table t_user select id from users;

insert overwrite table t_auction select id from auctions;

在insert表t_user和t_auction时, 输出压缩的配置将都生效, 即写入时都不压缩.
若希望写t_auction时时压缩的, 则需要将代码改为:

set hive.exec.compress.output='false';
insert overwrite table t_user select id from users;

set hive.exec.compress.output='true';
insert overwrite table t_auction select id from auctions;

转载于:https://my.oschina.net/zhongl/blog/32498

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值