当前位置: 首页 > news >正文

Hive的配置详解和日常维护

Hive的配置详解和日常维护

 

 

 

一.Hive的参数配置详解

1>.mapred.reduce.tasks 

  默认为-1。指定Hive作业的reduce task个数,如果保留默认值,则Hive 自己决定应该使用多少个task。

2>.hive.mapred.mode 

  2.x下的默认值为strict,1.x以及之前的版本默认值为nonstrict。如果 设为strict,Hive将禁止一些危险的查询:分区表未用分区字段筛选; order by语句后未跟limit子句;join后没有on语句从而形成笛卡尔积。 

3>.hive.merge.mapfiles 

  默认为true。如果设置为true,Hive在只有map(没有reduce)的作业结束时合并小文件,否则不会进行合并。 

4>.hive.merge.mapredfiles

  默认为false。如果设置为true,Hive在map/reduce作业结束时合并小文 件,否则不会进行合并。注意和上一个参数区别。 

5>.hive.exec.parallel 

  默认为false。是否启用作业并发执行,如果启用,一些不冲突的task可 以同时执行,例如在join语句中访问不同表获取数据的task

6>.hive.exec.reducers.bytes.per.reducer

  该参数在0.14.0之前默认为1,000,000,000(约1GB),在0.14.0及以后默 认为256,000,000(约256MB)。该参数控制每个reducer平均处理的字节 数,默认值不一定适合所有的情况,应该根据企业内Hive作业通常处理的 数据量、集群节点数等参数来酌情配置。 

7>.hive.exec.dynamic.partition 

  该参数在0.9.0前默认为false,在0.9.0及以后默认为true。Hive课中介 绍过此参数,用于控制是否启用动态分区特性,如果启用,往分区表中插 入数据而指定的分区又不存在时,可以自动创建分区。 

8>.hive.exec.dynamic.partition.mode 

  默认为strict。如果设为该值,则在使用动态分区时用户需要指定至少一 个静态分区列,如果设为nonstrict则无此要求。 

9>.hive.exec.mode.local.auto 

  默认为false。控制Hive是否在输入文件较小时启用本地运行特性,默认 不开启,一般不建议开启。还有两个参数 hive.exec.mode.local.auto.inputbytes.max和 hive.exec.mode.local.auto.input.files.max两个参数可以控制总输入 字节数和总输入文件个数的门限。 

10>.hive.auto.convert.join 

  该参数在0.11.0之前默认为false,在0.11.0及以后默认为true。控制 Hive是否根据输入表的大小将普通join(reduce端)自动转化为map join, 较高版本默认都是开启的,不建议关闭。 

11>.hive.exec.scratchdir 

  用于储存map/reduce阶段的查询计划和中间输出数据的HDFS路径,默认值 被调整过多次,在0.14.0后是/tmp/hive。还有一个参数 hive.scratch.dir.permission用于创建该目录时的权限,默认为700。这 个路径通常不会调整,但需要心里有数,很多时候hive sql异常终止时, 会在该路径下遗留大量中间数据,时间长了浪费HDFS空间,建议定期清理。 

12>.hive.map.aggr 

  默认为true。在带GROUP BY的查询中是否启用map端聚合。不需要调整。 

13>.hive.metastore.warehouse.dir 

  默认为/user/hive/warehouse,用于配置Hive默认的数据文件存储路径, 这是一个HDFS路径。可按需调整。 

14>.hive.default.fileformat 

  默认为TextFile。在CREATE TABLE语句中使用的默认文件存储格式,可选 值有TextFile,SequenceFile,RCfile,ORC,Parquet。一般来说,为了 调试方便(可以直接将文件下到本地并用文本编辑器打开),在测试时不 会改动该参数,在上线后可酌情修改,即使不修改,也可以使用CREATE TABLE ... STORED AS TEXTFILE|SEQUENCEFILE|RCFILE|ORC|... 这样的 语法对每个表单独设置文件格式。 

15>.hive.exec.compress.output 

  默认为false。控制hive sql的输出是否要压缩。一般不修改该值,而是 需要压缩时对某条sql单独指定。 

16>.hive.exec.compress.intermediate 

  默认为false。控制非最终结果的中间stage的输出是否要压缩。一般不修 改该值,而是需要压缩时对某条sql单独指定。 

17>.hive.execution.engine 

  默认为mr,但是在2.0.0后被标记为deprecated。决定Hive的执行引擎, 可选值有mr,tez,spark。在2.0.0后标记过期的原因是新版本的Hive已 经将Spark作为默认的执行引擎,只有在找不到Spark时才会回到用 MapReduce执行。 

18>.hive.exec.reducers.max

    要使用的 reducer 的最大数量。如果配置参数 Hive Reduce Tasks 为负,则 Hive 会将 reducer 数量限制为此参数的值。我集群的默认值是:1099,修改后的值为250。

19>.hive.map.aggr.hash.percentmemory

  map端聚合时hash表所占用的内存比例,默认0.5,这个在map端聚合开启后使用,我们可以设置为0.6

20>.hive.cli.print.header

    查询输出时是否打印名字和列,默认是false.

21>.hive.cli.print.current.db

    hive的提示里是否包含当前的db,默认是false.

22>.其他参数

  详情请参考:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

23>.以下几个参数是我生产环境线上的hive调优策略,仅供参考

复制代码
<property>
  <name>hive.cli.print.current.db</name>
   <value>true</value>
   <description>Whether to include the current database in the Hive prompt.</description>
</property>

<property>
  <name>hive.exec.reducers.max</name>
  <value>250</value>
</property>

<property>
  <name>hive.exec.parallel</name>
  <value>true</value>
</property>

<property>
  <name>hive.auto.convert.join</name>
  <value>false</value>
</property>

<property>
  <name>hive.exec.parallel.thread.number</name>
  <value>3</value>
</property>

<property>
  <name>hive.mapjoin.maxsize</name>
  <value>10000000</value>
</property>

<property>
  <name>hive.mapjoin.followby.gby.localtask.max.memory.usage</name>
  <value>0.60</value>
</property>

<property>
  <name>hive.map.aggr.hash.percentmemory</name>
  <value>0.60</value>
</property>
复制代码

 

二.Hive的日常运维

1>.SQL问题

复制代码
根据Hive的执行机制,如果遇到SQL出现问题的情况,我们首先需要查看日志,然后根据错误出现的层面不同进行处理: 
  (1)如果是执行引擎层面的错误,会抛出相应的MapReduce或Spark异常。 
  (2)如果并非第1点的问题,基本都是SQL层面的错误。此类问题也分为多种:如HiveSQLException: Error while compiling statement: No privilege ...是在校验权限时出现权限不足的问题;FAILED: SemanticException [Error xxxx] 是出现Hive SQL书写语法上的问题; 等等。解决此类问题,还是需要有一些Hive SQL使用的基础知识,区分第1类问题还是第2类问题非常简单,看抛出异常的时间即可,如SQL开始执行的一两秒内即抛出异常,基本都是SQL层面问题, 比较长时间才抛出来的基本都是执行引擎层面的问题。
  (3)慢SQL问题。严格来说这部分问题不应由运维处理(然而大数据领域并不像关系型数据库一样有专门的DBA方向)。作为技能上的备份和补充, 运维方向同学可补充一些Hive特有的机制,如map端连接、分区、分桶、 map端聚合等等,以及explain等语句的用法,在别人搞不定时可有效介入。  
复制代码

2>.元数据管理

复制代码
Hive运维的另一项重要工作是元数据管理。虽然Hive元数据出现问题的概 率较低,但出问题的后果比较严重,因此我们进行一下深入学习。 
 
与Hive元数据相关的主要服务有两个,每个又有两种模式: 
  元数据数据库(用于储存元数据),分为本地/内置的元数据库(Derby) 和远程元数据库(利用其他支持的关系型数据库)。
  数据服务器(用于提供元数据查询服务,响应修改请求),分为本地 /内置的元数据服务器和远程元数据服务器。 

核心配置有以下几个:
    javax.jdo.option.ConnectionURL 
      元数据库的JDBC连接串。 

    javax.jdo.option.ConnectionDriverName 
    元数据库的JDBC驱动类名。 hive.metastore.uris
    元数据服务器的URI,以thrift开头,如果启动了多个元数据服务器(通 常因为HA考虑),则可用逗号分隔填写多个URI。 hive.metastore.warehouse.dir
    默认为/user/hive/warehouse,用于配置Hive默认的数据文件存储路径, 这是一个HDFS路径。可按需调整。

元数据库的可用性:
  使用Mysql的主从或主主复制可以实时同步数据,实在没有这样的条件,至少需要定期备份。 
复制代码

3>. 想使用远程的Mysql数据库作为元数据库,并使用远程元数据服务器需要经历以下步骤

复制代码
1>.安装Mysql,略 

2>.在希望启动远程元数据服务器的主机上,修改hive配置文件的以下项: javax.jdo.option.ConnectionURL 设为jdbc:mysql://<host name>/ <database name>?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName 设为com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName 设为<user name> javax.jdo.option.ConnectionPassword 设为<password> 

3>.在该机器上,执行hive --service metastore 启动元数据服务器(如 果想使用非默认的端口,还可以加-p参数) 

4>.在客户端主机上,修改hive配置文件中的以下项: hive.metastore.uris 设为thrift://<host_name>:<port> ,其中 hist_name和port为元数据服务器的参数 hive.metastore.warehouse.dir 设为一个HDFS路径,可以不修改 

5>.尝试连接hive 
复制代码

4>.元数据库的升级

复制代码
  不同大版本的Hive间元数据库的schema是不一致的,因此升级Hive时很重要的一步是升级元数据库。Hive自带一个schematool工具,可以执行元数据库相关的各种运维操作,如对derby的元数据库,从 0.10.0升级到用户的版本(假设为0.13.0),可用如下命令: 
    $ schematool -dbType derby -upgradeSchemaFrom 0.10.0
    Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User: APP
    Starting upgrade metastore schema from version 0.10.0 to 0.13.0
    Upgrade script upgrade-0.10.0-to-0.11.0.derby.sql
    Completed upgrade-0.10.0-to-0.11.0.derby.sql Upgrade script
    upgrade-0.11.0-to-0.12.0.derby.sql
    Completed upgrade-0.11.0-to-0.12.0.derby.sql
    Upgrade script upgrade-0.12.0-to-0.13.0.derby.sql
    Completed upgrade-0.12.0-to-0.13.0.derby.sql
    schemaTool completed
复制代码

 

三.扩展

  参数的详细解释和未提及的参数可参考官方文档: https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

  阅读元数据运维的官方文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration。

 

转载于:https://www.cnblogs.com/gaoyuechen/p/11143602.html

相关文章:

  • AspNet分页控件AjaxPager的使用
  • Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置
  • HBase Shell输入命令无法删除问题解决技巧
  • java 表格项的删除、编辑、增加 修改版
  • 《敏捷个人》周刊 第5期 (可下载)
  • 暂时性死区
  • nginx实现最简单的直播
  • java项目代码上线
  • MySQL引擎之innodb介绍及特点
  • mybatis一级缓存二级缓存
  • 高德,百度,84经纬度坐标系的相互转换
  • 解决 Elasticsearch 超过 10000 条无法查询的问题
  • 链表插入排序、链表归并排序
  • 检测ip代理有效性
  • Java开发笔记(一百二十一)AWT输入框
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Angular2开发踩坑系列-生产环境编译
  • E-HPC支持多队列管理和自动伸缩
  • Elasticsearch 参考指南(升级前重新索引)
  • Java程序员幽默爆笑锦集
  • Java的Interrupt与线程中断
  • laravel5.5 视图共享数据
  • Node 版本管理
  • php的插入排序,通过双层for循环
  • python_bomb----数据类型总结
  • Python语法速览与机器学习开发环境搭建
  • React Native移动开发实战-3-实现页面间的数据传递
  • react 代码优化(一) ——事件处理
  • ucore操作系统实验笔记 - 重新理解中断
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • WebSocket使用
  • windows下使用nginx调试简介
  • 给Prometheus造假数据的方法
  • 前嗅ForeSpider中数据浏览界面介绍
  • 推荐一个React的管理后台框架
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 主流的CSS水平和垂直居中技术大全
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)模仿学习-Action数据的模仿
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (新)网络工程师考点串讲与真题详解
  • ***利用Ms05002溢出找“肉鸡
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core与存储过程(一)
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net Signalr 使用笔记
  • .NET程序员迈向卓越的必由之路