hive的使用03
1.hive中的四种排序
1.1 order by :对全局进行排序,只能有一个reduce
select * from hive.employee order by id;
1.2 sort by :对每一个reduce内部数据进行排序,全局结果集没有排序
set mapreduce.job.reduces=3;设置reduce的个数为3
insert overwrite local directory '/opt/data/employee_sort_by'
row format delimited fields terminated by '\t' collection items terminated by '\n'
select * from hive.employee sort by dept_id;
1.3 distribute by :对数据进行分区,结合sort by进行合并使用,类似于mapreduce中的mapreduce中的partition,必须在sort by 之前
insert overwrite local directory '/opt/data/employee_distribute_by'
row format delimited fields terminated by '\t' collection items terminated by '\n'
select * from hive.employee distribute by dept_id sort by id asc;
1.4 cluster by:当distribute by 和 sort by 的字段相同时,可以使用cluster by 代替
2.使用udf自定义函数
2.1 编写udf函数
继承extends UDF
编写evaluate 方法
2.2 导入自定义函数到hive函数库
方法一:
add jar /opt/data/jars/my_lower.jar;
create temporary function my_lower as "com.ibeifeng.hive.udf.LowerUdf";
方法二:
create function self_lower as 'com.ibeifeng.hive.udf.LowerUdf' using jar 'hdfs://life-hadoop.life.com:8020/user/yanglin/data/jars/my_lower.jar';
3.hiveserver2的使用
3.1 启动hiveserver2 bin/hiveserver2
3.2 使用beeline进行连接
!connect jdbc:hive2://life-hadoop.life.com:10000 yanglin life@one
4.数据压缩
4.1 map 输出结果的压缩
set mapreduce.map.output.compress =true
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
4.2 reduce 输出结果的压缩
set mapreduce.output.fileoutputformat.compress=true
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
4.3 map 输入数据的压缩
以压缩格式的文件存储数据(例如:orc,parquet)
create table if not exists hive.employee_orc_snappy (id int,name string,job string,manager_id int,apply_date string,salary double,
reward double,dept_id int)
row format delimited fields terminated by '\t'
stored as orc tblproperties("orc.compress"="SNAPPY");
其中该表的数据存储格式为orc,文件压缩格式为snappy
5.hive调优
5.1 修改 hive.fetch.task.conversion参数,使尽可能少用mapreduce
<!--尽可能的少用mapreduce-->
<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
</property>
5.2 使用大表拆分为小表和子表
5.3 使用外部表分区表
5.4 对表的数据的存储格式使用orc和parquet,并使用snappy压缩
5.5 对sql进行优化
common join / shuffle join / reduce join : 连接发生在reduce task 阶段
使用于大表和大表之间,每个表中的数据都从文件中读取
map join : 连接发生在map task 阶段
使用于小表和大表之间,大表的数据从文件中读取,小表的数据通过distributedCache加载到内存中
注:可以通过设置 hive.auto.convert.join = true 让程序自动识别使用map join还是reduce join。
SMB join :sort-merge-bucket join 是对reduce join 的一种优化
在创建表时声明[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS],且两个表的分区字段要一致。
set hive.auto.convert.sortmerge.join=true;
set hive.optimize.bucketmapjoin = true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
5.6 设置job并行执行
set hive.exec.parallel = true
set hive.exec.parallel.thread.number = 8 建议10~20,一般不用超过20
5.7 设置jvm重用
set mapreduce.job.jvm.numtasks = 1 一般不用超过9
5.8 设置reduce的个数
set mapreduce.job.reduces = 1
5.9 设置推测执行
set hive.mapred.reduce.tasks.speculative.execution = true
set mapreduce.map.speculative = true
set mapreduce.reduce.speculative = true
5.10 设置map的个数
set hive.merge.size.per.task = 256000000
hive的使用03的更多相关文章
- Flume1.9.0的安装、部署、简单应用(含分布式、与Hadoop3.1.2、Hbase1.4.9的案例)
目录 目录 前言 什么是Flume? Flume的特点 Flume的可靠性 Flume的可恢复性 Flume的一些核心概念 Flume的官方网站在哪里? Flume在哪里下载以及如何安装? 设置环境变 ...
- CDH quick start VM 中运行wordcount例子
需要注意的事情: 1. 对于wordcount1.0 ,按照http://www.cloudera.com/content/cloudera/en/documentation/HadoopTutori ...
- Hive 笔记
DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...
- Hive函数大全
一.关系运算: 1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive> select 1 from l ...
- 【转】Hive 基础之:分区、桶、Sort Merge Bucket Join
Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...
- Hive时间操作[转]
时间字段格式化 from_unixtime(unix_timestamp(VisitTime),'yyyy-MM-dd') 日期函数UNIX时间戳转日期函数: from_unixtime语法: f ...
- hive修改 表/分区语句
参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...
- 调用javaAPI访问hive
jdbc远程连接hiveserver2 2016-04-26 15:59 本站整理 浏览(425) 在之前的学习和实践Hive中,使用的都是CLI或者hive –e的方式,该方式仅允许使用Hi ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
随机推荐
- h5的离线缓存机制
什么是Manifest: 其实Manifest是一个简单的 文本文件,它的扩展名是任意的,定义需要缓存的文件.资源,当第一次打开时,浏览器会自动缓存相应的资源. Manifest 的特点: 离线浏览: ...
- jQuery点击收缩展开滑动显示内容竖直手风琴代码
<div class="position"> <div class="positiontop"> <span class=&quo ...
- Python开发【第十章】:I/O多路复用、异步I/O(综合篇)
近期心得:国庆节放假再加上近期工作太忙,已经有半个月没更新博客了,程序更别说了,也没怎么去写,自己给自己着实放了个大假.谈谈感受的话,没有python的日子,每天看书.看电影.各种玩,还有爸妈伺候着, ...
- CXF WebService整合SpringMVC的maven项目
首先推荐博客:http://www.cnblogs.com/xdp-gacl/p/4259481.html http://blog.csdn.net/hu_shengyang/article/de ...
- Windows Server 2008 R2 域控服务器运行nslookup命令默认服务器显示 UnKnown
一.问题: 域控服务器DOS窗口运行nslookup命令提示如下: 二.原因分析: 主要原因在于域控服务器的DNS服务器没有设置反向查找区域,计算机名称是通过IP地址反向查找到域控服务器的计算机名称. ...
- __attribute__
转来的: http://www.cnblogs.com/astwish/p/3460618.html __attribute__ 你知多少? GNU C 的一大特色就是__attribute__ 机制 ...
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
大多数刚使用duilib的朋友时候非常依赖duilib自带的设计器,用他可以拖拉控件,可视化的做出自己想要的界面.可是用一段时间就会发现原带的设计器有很多bug,时不时会崩溃,支持的控件数量有限,属性 ...
- EasyUI的使用
EasyUI包含有很多“UI控件”,实现了网页中常见的(或者是一些模拟桌面的)效果,这样我们就不用“重新造轮子”了,只要掌握了这些控件的用法,就可以容易的在网页上实现这些效果了. 所以,接下来的问题就 ...
- 使用AutoIT对增加和删除文件属性的实现
编写历程: 前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以. 之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小 ...
- Generate Ubuntu Install Media On Mac
Opps, my computer system was broken again... Let's repire it. Introduction The system of my PC is br ...