hive的框架及配置(参数传递、优化)

hive的框架及配置(参数传递、优化)

hive的框架

hive框架
如图,hive的框架分为三部分:

用户接口层

包含CLI、thrift(用以连接JDBC)以及该图未显示的不常用接口web ui
CLI可以直接通过命令行的行式对hive进行操作以及数据的DDL、DML操作

thrift则可以通过JDBC驱动连接hive的hiveserver2端口来对hive进行操作。值得注意的是,JDBC驱动不仅限于JDBC本身,各类编程语言也可以通过该驱动连接hiveserver2并对hive进行操作。常见于python与Java分别使用pyhive和hive-jdbc库来进行连接及操作

web ui通过配置hive-site.xml(其本质也是将thrift端口暴漏给web 管理器来进行控制),可以使用hue等大数据web管理器来进行web操作

元数据Metastore

Metastore是hive数据库及表的元数据信息,其默认存储在自带的derby数据库中,但因derby只支持单线程的读写,且扩展性较差,一般会将其存储地点改为其它常见关系型数据库(如mysql)
需修改hive-site.xml中的

javax.jdo.option.ConnectionURL	//数据库连接地址
javax.jdo.option.ConnectionDriverName	//数据库驱动
javax.jdo.option.ConnectionUserName	//数据库用户名
javax.jdo.option.ConnectionPassword	//数据库密码

driver(hive核心驱动层)

因hive的功能是将hql语句解析转化成mapreduce语句,并将其输出给yarn来运行,故其核心模块即是hql语句的解析(SQL Parser)、优化(Query Optimizer)、执行(Physical plan-> SerDes,UDFs->Execution)。若按时间顺序进行分层,则可分为四部分:解析器编译器优化器执行器

解析器:
负责将hql语句进行词法、语法解析成AST(抽象语法树)

编译器:
进一步将AST编译为逻辑执行计划

优化器:
对逻辑执行计划进行sql运行优化,其核心为Volcano Optimizer

执行器:
优化后的计划转化为物理执行计划并输出给mapreduce

hive的RABC

hive本身并没有角色的定义,其角色属性来自unix,只可以对unix的角色进行粗粒度的权限控制:
首先需要打开hive-site.xml中的权限认证

hive.security.authorization.enabled  //默认为false

并分别在
hive.security.authorization.createtable.owner.grants
hive.security.authorization.createtable.user.grants
hive.security.authorization.createtable.group.grants
hive.security.authorization.createtable.role.grants
中进行权限的限制

或使用命令行的方式直接对某一用户赋权/去权

GRATN ALL TO USER username	//给username赋权
REVOKE ALL TO USER username	//给username去权

hive的利用sentry进行权限管理

Apache sentry能够提供细粒度级、基于角色的授权以及多租户的管理模式,官方也推荐使用sentry来进行权限管理
Architecture diagram of Sentry-Hive binding with V2
通过该框架可发现sentry通过对不同hive部件(访问、操作和对metastore的操作)的绑定实现了分别控制,只需要安装hive与sentry并通过hive-site.xml配置修改即可适配sentry。配置参数如下:

配置参数
hive.security.authenticator.managerorg.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
hive.security.authorization.enabledtrue
hive.security.authorization.managerhive.security.authorization.task.factory
hive.security.authorization.task.factoryorg.apache.sentry.binding.hive.v2.SentryHiveAuthorizationTaskFactoryImplV2
hive.server2.enable.doAsfalse
hive.server2.session.hookorg.apache.sentry.binding.hive.v2.HiveAuthzBindingSessionHookV2

hive的参数传递

配置参数传递

配置参数的传递有三种方法,依照覆盖级别由高到低分别为:
参数声明 > 命令行参数 > 配置文件参数
参数声明
为连接hiveserver2后进行的各类set操作,可以包含在脚本、py文件中
命令行参数
启动hive客户端的时候可以设置参数
配置文件参数
写在hive-site.xml的默认参数

变量参数传递

hivevar与define
用hivevar与define可以在命令行中为hql语句的变量进行传参,或可直接在脚本中使用hivevar与define,达到变量的多级传递

hive的优化配置

输出数据的压缩
可以将输出结果进行压缩,hive支持gzip(org.apache.hadoop.io.compress.GzipCodec)、bzip2(org.apache.hadoop.io.compress.BZip2Codec)、lzo(com.hadoop.compress.lzo.LzopCodec)、snappy(org.apache.hadoop.io.compress.SnappyCodec)的压缩格式,其中bzip2支持分割,即允许单一压缩后的文件能够被yarn的mapper并行处理;而lzo的压缩/解压速度最快,bzip2的压缩比最高。
依据自身业务进行压缩格式的选择,并修改

set hive.exec.compress.output=true;  
set mapred.output.compress=true;  
set mapred.output.compression.codec=压缩格式;

Map输出阶段压缩
开启map输出阶段压缩(默认关闭)可以减少job中map和Reduce task间数据传输量(一个hql计划可能会被分为多个job在mr中运行,开启后可减少mr传输中的存储消耗),依据业务选择是否开启

set hive.exec.compress.intermediate=true;
set mapreduce.map.output.compress=true;
set mapreduce.map.output.compress.codec=压缩格式;	

hive中间数据压缩
中间计算数据也可压缩

set hive.exec.compress.intermediate=true;
set mapred.map.output.compression.codec=压缩格式;

修改fetch抓取
fetch抓取指某些简单操作(fetch默认minimal状态只有select操作且无条件时)无需调用mapreduce操作直接执行,可将其改为none(全部操作都会进行mapreduce,适合单点压力小,集群压力大),也可改为more(全局查找、字段查找、limit查找等都会直接运行,适合单点压力大,集群压力小)。修改

set hive.fetch.task.conversion=none或more;

开启单点模式
对于小job,开启单点模式后不会上传集群只会本地mapreduce计算,减少集群io,修改

set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=大小(单位byte);	//默认为134217728,即当输入数据小于等于128M时会采用单点模式
set hive.exec.mode.local.auto.input.files.max=个数;	//默认4,输入文件个数小于等于4会采用单点模式

开启并行执行
把一个hql语句中没有相互依赖的阶段并行去运行,提高运行效率,修改

set hive.exec.parallel=true;	//默认关闭
set hive.exec.parallel.thread.number=个数;	//默认8,即最大并行度为8

修改jvm重用
对于一个job相同task调用可以重复调用一个jvm,而不是每执行一个task开启运行关闭一个jvm(启停一个jvm约需1s耗时),能够显著提高相似小文件处理速度,但也会导致没使用的task槽开启的jvm始终处于等待下一个task重用jvm的状态直到整个job完成,对于大文件处理往往会有负面效果。修改

set mapred.job.reuse.jvm.num.tasks=个数;	//默认1,可调大

推测执行的开启
开启推测执行能够让系统认为会耗时远大于其它task的task额外运行一个备份,其中一个完成销毁另一个,可以大幅度避免因负载、资源分布不均导致的单个task运行时间过长;但同样也可能会导致不能提速的同时消耗额外资源。修改

set hive.mapred.reduce.tasks.speculative.execution=true //开启

依据每种输入情况给mapreduce输出的参数调优
若数据较易处理,可调小map数;若数据较难处理,可调大map数;若数据较分散,可调大reduce数;若数据较集中可调小reduce数

set mapreduce.job.maps=个数;
set mapreduce.job.reduces=个数;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值