查询配置
设置任务名称 set mapreduce.job.name=xxx_yourname;
指定任务队列 set mapreduce.job.queuename=offline.data;
任务结果输出header信息 set hive.cli.print.header=true;
设置优先级 set mapreduce.job.priority=HIGH;
优先级说明:
配置mapreduce.job.priority
来调整优先级,支持的值:
值 对应YARN优先级 说明 NORMAL(默认) 1 普通任务 HIGH 2 nearline 任务 VERY_HIGH 3 在线任务 CRITICAL 6 关键任务 VERY_CRITICAL 9 非常关键的任务
reduce阶段内存配置:
|
|
map阶段内存配置:
|
|
map数过多:
|
|
数据查询
使用 Rank() 计算分组 TopN 或 Top Percentile
文档:Rank()
Rank() 可以为原始数据的每一行生成新的一列,值为这一行所在分组的排序 rank; 这样就可以根据 rank 值来保留所需要的 Top N 的行,也可以参考所在分组的总行数,保留 Top n% 的行。
Example:
|
|
使用 NDV() 实现快速计数
文档: NDV()
相比 count distinct 更快、更节省内存,但存在误差 (HyperLogLog). 在查询很大的 count distinct,且对准确性要求量级正确即可时,e.g. 月活跃用户(MAU),可以考虑用 NDV 代替 count distinct.
NDV() 只能对单列做计数,所以如果需要多列组合计数,需要做一个拼接转换。
Example:
|
|
使用lateral view和explode展开array嵌套结构
对字符串split得到array,再把array展开
示例:it是字符串,取值样例’refresh,push’
|
|
使用lateral view和explode展开map嵌套结构
对value值进行过滤,选取符合要求的keys
示例:lt_lk_keyword是Map,取值样例{123: 0.1234, 234: 0.2345}
|
|
使用lateral view 和 json_tuple 处理json
示例:
|
|
数据导出
保存查询结果到hive表
直接以查询结果建表
|
|
数据定义
创建空Parquet分区表
|
|
基于JSON数据创建外部数据表
文档:CreateTable
Example: 创建包含2个字段的临时外部数据表
HDFS数据:xx.json。目录中可包含多个文件。json文件内容:
|
|
基于CSV数据创建外部数据表(数据在本地)
不将数据存储在hdfs,直接从本地load进表
|
|
基于CSV数据创建外部数据表(数据在hdfs)
文档:CreateTable
Example: 创建包含2个字段的临时外部数据表
HDFS数据:/users.csv。目录中可包含多个文件。csv文件内容,以\t分隔:
将数据表从hive同步到impala, 在impala执行: invalidate metadata test.source_list_focus;
|
|
创建包含map和array结构的临时表:
|
|