hive 学习笔记(三)-----优化策略,函数定义,web接口
来源:互联网 发布:歌帝梵巧克力 知乎 编辑:程序博客网 时间:2024/06/05 16:17
(一)优化策略
根据实际使用情况,hive有很多优化策略,如:
1,列裁剪 :无需显示的列裁剪掉。实现列裁剪需设置:hive.option.cp=true.
2,分区裁剪: 通过加入where partition条件来进行分区裁剪,实现分区裁剪需设置hive.optimize.pruner=true.
3.jion in:尽量将jion表中列较少的表放在jion前面。因为join操作reduce阶段,位于join操作符左边的表内容会加载到内存。将列少表放在前面有助于防止OOM(out of mermery)的出现。
4.map join: hive.join.emit.interval=1000,hive.mapjoin.cache.numrows=25000,hive.mapjoin.size.key=10000.其中,hive.join.emit.interval=1000定义了输出join结果前
判断右侧进行join的操作数最多可以加载多少行到内存缓存中。
5,group by: map端的部分聚会实现需要设置:hive.map.aggr=true;map.groupby.mapaggr.checkinterval=100000;有数据倾斜时,进行负载均衡。需设置:hive.groupby.skewindata=true;
6.合并小文件:hive.merge.mapfiles=true;设置是否合并map输出文件;hive.merge.mapredfiles=false,设置是否合并reduce输出文件;hive.merge.size.per.task=256*1000*1000,设置每个task合并文件的大小;
(二)hive UDF+UDAF+UDTF
HIVE 用户定义函数:
在cli,使用如下命令能够显示最新的函数记录(参考信息)。命令如下:
SHOW FUNCTIONS;
DESCRIBE FUNCTION <function_name>;
DESCRIBE FUNCTION EXTENDED <function_name>;
一.hive 创建UDF函数:
1.编写udf函数,该函数继承org.apache.hadoop.hive.ql.exec.UDF类,在该函数中写一个或多个evaluate()方法。
2.将编写的udf 函数java类编译成jar包,假设存放位置为/home/GuoYunling-Andy,jar名为udftest.jar。
3.通过cli进入hive,将jar添加到hive classpath ,命令如下:add jar /home/GuoYunling-Andy/udftest.jar.
4.可通过list jar命令查看是否添加到hive classpath。为添加的udf创建临时的函数名即注册函数,假设临时函数名为udftest命令如下: create temporary function udftest as ’$packageName+$classname‘;
5.使用udf函数。select udftest(col ...) from tablename;
二. hive 内置操作 ---详见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
a.hive内置操作有:关系操作,运算操作,逻辑操作,复杂类型构造,复杂类型操作。
b.hive的内置函数有:运算函数,Collection函数,类型转换函数,时间日期函数,条件函数,字符串函数,Misc. Functions,xpath函数,获取json对象等。
c.hive内置聚合函数(UDAF):hive支持的聚会函数有sum,count,min/max,stddev_pop,percentile,等
d.hive内置Table-Generating 函数:目前hive 在hive0.10支持 inline函数。hive table-generating 函数将单行输入转换为多行输出。
e.expode()函数:将数组输入转换为以单行输出,每行输出数组中的一个元素。比如可用于将数据类型为数组的列拆分为一个新列,新列中元素为数组中的各元素。
注:使用语法“SELECT udtf(col) AS colAlias...”有若干限制:
* 在select语句中不允许有其他的表达式:如hive不支持SELECT pageid, explode(adid_list) AS myCol...
* UDTF‘S不支持嵌套。如hive不支持SELECT explode(explode(adid_list)) AS myCol...
* GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY也都不支持。
hive内置table-generating函数还有stack(int n,v_1,v_2,...v_k):即将v_1 到v_k 分成n行,每行有k/n列,n必须为常量。
f. json 数组(json_tuple)
g. parse_url_tuple
h. GROUPing and SORTing on f(column)
i. UDF internals
创建自定义UDFs:
1 .首先需要创建一个新类继承UDF,命名为evaluate的一个或多个方法。
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
(注意那已经是一个built-in 的函数了。上述的仅是一个简单例子)
2 . 编译类成jar包后,将jar包添加到hive classpath中,添加方法如下:
hive> add jar my_jar.jar;
Added my_jar.jar to class path
默认添加到当前路径,也可以自定义一个全路径:
hive> add jar /tmp/my_jar.jar;
Added /tmp/my_jar.jar to class path
完成后,在session 会话初始化jobs时,在classpath中新添加的jar将被用到。查看哪些jars已经添加到classpath下,可以使用一下命令:
hive> list jars;
my_jar.jar
3 .hive使用classpath中的jars(包括添加的jar)创建启动后,最后一步需注册自定义的函数,命令行如下:
create temporary function my_lower as 'com.example.hive.udf.Lower';
4. 开始运行:
hive> select my_lower(title), sum(freq) from titles group by my_lower(title);
...
Ended Job = job_200906231019_0006
OK
cmo 13.0
vp 7.0
5.更多例子,详见:
https://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy
(三)hive web接口----hive web interface
HIVE-WEB-INTERFACE:
1.使用hive web interface(hwi)接口访问操作数据
a 查看hive-default.xml中的hive.hwi.listen.host,hive.hwi.listen.port,hive.hwi.war.file 中设置的属性信息,即hwi接受的访问的主机名,端口等信息。
b 在hive安装目录下 启动bin/hive --service hwi 服务
c 通过浏览器访问 http://masterIP:PORT/hwi (要求机间能ping通,且防火墙对该端口的input已设置)
2.HIVE-WEB-INTERFACE:替代cli实现相关功能。对于刚刚接触者来说非常适用。
3.特征:
a. Schema Browsing
能够替代cli运行“show tables”“show extended tables”生成相应结果。即查询表信息。hive元数据显示体系结构能够在数据库层次上获取相关表信息,如serde,列名,和列数据类型等
b. Detached query execution
当用户需要同时进行多个hive查询时,需要打开多个cli窗口,hive网络接口在web服务器上管理用户会话,允许用户开启多个查询,并返回到网络接口检测查询状态。
c. no local installation
任何用户都可以通过web接口对hive操作。一个用户想与hadoop或hive交互时,要求访问多个端口。此时,远程/vpn用户只需要访问hive 网络接口即可。默认运行在0.0.0.0 tcp/9999.
d. configuration
hwi 在0.2版本已内置,所有无需额外设置。也并不需要在hwi编辑默认的配置。hwi使用配置如下:
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
<description>This is the host address the Hive Web Interface will listen on</description>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
<description>This is the port the Hive Web Interface will listen on</description>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>${HIVE_HOME}/lib/hive_hwi.war</value>
<description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>
如果需多用户访问,需要设置HiveDerbyServerMode。
4.启动
JETTY要求apache 的ant来启动hwi,你应该定义ANT—LIB 作为环境变量并添加hive invocation。
export ANT_LIB=/opt/ant/lib
bin/hive --service hwi
创建封装的脚本文件:
nohup bin/hive --service hwi > /dev/null 2> /dev/null &
帮助详情:
bin/hive --service hwi --help
5.访问hwi
可以通过<Hive Server Address>:9999/hwi 访问hwi
- hive 学习笔记(三)-----优化策略,函数定义,web接口
- Hive 学习笔记(三)
- Hive学习笔记--Hive 优化
- hive笔记-----用户定义函数
- Hive学习之Hive Web接口
- hive优化(三)
- Hadoop学习笔记(三):Hive简介
- web性能优化(三)反爬虫策略
- web性能优化(三)反爬虫策略 [复制链接]
- web性能优化(三)反爬虫策略 [复制链接]
- web性能优化(三)反爬虫策略
- hive入门学习:浅谈hive的常见优化策略
- hive学习笔记-性能优化
- Hive优化策略
- Scala 学习笔记(三)------定义具有可变参数的函数
- hive学习笔记之-数据定义
- hive函数使用学习笔记
- hive学习笔记-函数篇
- 许一力:另类经济学视角下的食品安全问题
- cannot assign a tfont to a tfont
- DoG 、Laplacian、图像金字塔详解
- poj2352 Star
- unity3d中使用贝塞尔曲线
- hive 学习笔记(三)-----优化策略,函数定义,web接口
- PIC 单片机 中的堆栈是硬件实现的,其深度已随芯片而固定,无法实现需要大量堆栈操作的递归算法
- SQLite的使用完成增删改查等
- 能用到辅助驾驶系统的三个代码:特征点匹配,线段、消失点检测
- C# 局域网聊天 发送信息
- JAVA设计模式之装饰模式
- unity3d博客
- Linux下查找设备概要
- iOnRoad: 一个装在手机上的辅助驾驶软件