Hive的配置详解和日常维护

 

一.Hive的参数配置详解

1>.mapred.reduce.tasks 

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

2>.hive.mapred.mode 

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

3>.hive.merge.mapfiles 

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

4>.hive.merge.mapredfiles

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

5>.hive.exec.parallel 

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

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

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

7>.hive.exec.dynamic.partition 

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

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

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

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

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

10>.hive.auto.convert.join 

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

11>.hive.exec.scratchdir 

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

12>.hive.map.aggr 

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

13>.hive.metastore.warehouse.dir 

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

14>.hive.default.fileformat 

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

15>.hive.exec.compress.output 

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

16>.hive.exec.compress.intermediate 

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

17>.hive.execution.engine 

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

18>.hive.exec.reducers.max

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

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

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

20>.hive.cli.print.header

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

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

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

22>.其他参数

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

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

  1. <property>
  2. <name>hive.cli.print.current.db</name>
  3. <value>true</value>
  4. <description>Whether to include the current database in the Hive prompt.</description>
  5. </property>
  6.  
  7. <property>
  8. <name>hive.exec.reducers.max</name>
  9. <value>250</value>
  10. </property>
  11.  
  12. <property>
  13. <name>hive.exec.parallel</name>
  14. <value>true</value>
  15. </property>
  16.  
  17. <property>
  18. <name>hive.auto.convert.join</name>
  19. <value>false</value>
  20. </property>
  21.  
  22. <property>
  23. <name>hive.exec.parallel.thread.number</name>
  24. <value>3</value>
  25. </property>
  26.  
  27. <property>
  28. <name>hive.mapjoin.maxsize</name>
  29. <value>10000000</value>
  30. </property>
  31.  
  32. <property>
  33. <name>hive.mapjoin.followby.gby.localtask.max.memory.usage</name>
  34. <value>0.60</value>
  35. </property>
  36.  
  37. <property>
  38. <name>hive.map.aggr.hash.percentmemory</name>
  39. <value>0.60</value>
  40. </property>

二.Hive的日常运维

1>.SQL问题

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

2>.元数据管理

  1. Hive运维的另一项重要工作是元数据管理。虽然Hive元数据出现问题的概 率较低,但出问题的后果比较严重,因此我们进行一下深入学习。
  2.  
  3. Hive元数据相关的主要服务有两个,每个又有两种模式:
  4.   元数据数据库(用于储存元数据),分为本地/内置的元数据库(Derby 和远程元数据库(利用其他支持的关系型数据库)。
  5.   数据服务器(用于提供元数据查询服务,响应修改请求),分为本地 /内置的元数据服务器和远程元数据服务器。
  6.  
  7. 核心配置有以下几个:
  8. javax.jdo.option.ConnectionURL
  9.   元数据库的JDBC连接串。
  10.  
  11. javax.jdo.option.ConnectionDriverName
        元数据库的JDBC驱动类名。
  12.  
  13. hive.metastore.uris
        元数据服务器的URI,以thrift开头,如果启动了多个元数据服务器(通 常因为HA考虑),则可用逗号分隔填写多个URI
  14.  
  15. hive.metastore.warehouse.dir
        默认为/user/hive/warehouse,用于配置Hive默认的数据文件存储路径, 这是一个HDFS路径。可按需调整。
  16.  
  17. 元数据库的可用性:
      使用Mysql的主从或主主复制可以实时同步数据,实在没有这样的条件,至少需要定期备份。 

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

  1. 1>.安装Mysql,略
  2.  
  3. 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>
  4.  
  5. 3>.在该机器上,执行hive --service metastore 启动元数据服务器(如 果想使用非默认的端口,还可以加-p参数)
  6.  
  7. 4>.在客户端主机上,修改hive配置文件中的以下项: hive.metastore.uris 设为thrift://<host_name>:<port> ,其中 hist_name和port为元数据服务器的参数 hive.metastore.warehouse.dir 设为一个HDFS路径,可以不修改
  8.  
  9. 5>.尝试连接hive

4>.元数据库的升级

  1.   不同大版本的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

三.扩展

  1.   参数的详细解释和未提及的参数可参考官方文档: https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
  2.  
  3.   阅读元数据运维的官方文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration。

Hive的配置详解和日常维护的更多相关文章

  1. MapReduce On Yarn的配置详解和日常维护

    MapReduce On Yarn的配置详解和日常维护 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce运维概述 MapReduce on YARN的运维主要是 ...

  2. Hive安装配置详解步骤以及hive使用mysql配置

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...

  3. maven常用插件配置详解

    常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...

  4. 图解大数据 | 海量数据库查询-Hive与HBase详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  5. JSHint配置详解

    Also available on Github JSHint配置详解 增强参数(Enforcing Options) 本类参数设为true,JSHint会产生更多告警. bitwise 禁用位运算符 ...

  6. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  7. springboot配置详解

    springboot配置详解 Author:SimpleWu properteis文件属性参考大全 springboot默认加载配置 SpringBoot使用两种全局的配置文件,全局配置文件可以对一些 ...

  8. 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  9. Tomcat记录-tomcat常用配置详解和优化方法(转载)

    常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是serv ...

随机推荐

  1. UIP和lwip的区别 转载

    uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈.完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行.uIP中还包括一个HT ...

  2. node绑定域名 nginx篇

    创建nodejs文件,并测试执行有没有问题. var express = require('express'); var app = express(); app.get('/', function ...

  3. CF553E Kyoya and Train

    Kyoya and Train 一个有\(n\)个节点\(m\)条边的有向图,每条边连接了\(a_i\)和\(b_i\),花费为\(c_i\). 每次经过某一条边就要花费该边的\(c_i\). 第\( ...

  4. 常用的HTTP状态码,网站开发请求状态必备

    成功的状态码: 200 – 服务器成功返回网页 304 – 未修改 失败的状态码: 404 – 请求的网页不存在 503 – 服务器暂时不可用 500 – 服务器内部错误 下面的不是很常用,记住上面那 ...

  5. java设计模式解析(11) Chain责任链模式

    设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析(4) ...

  6. Faster-RCNN用于场景文字检测训练测试过程记录(转)

    [训练测试过程记录]Faster-RCNN用于场景文字检测 原创 2017年11月06日 20:09:00 标签: 609 编辑 删除 写在前面:github上面的Text-Detection-wit ...

  7. CF1106F Lunar New Year and a Recursive Sequence——矩阵快速幂&&bsgs

    题意 设 $$f_i = \left\{\begin{matrix}1 , \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  i < k\\ ...

  8. SPOJ - BALNUM - Balanced Numbers(数位DP)

    链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...

  9. ps -ef、ps aux(查看进程占用内存大小)

    Linux下ps -ef和ps aux的区别及格式详解 Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Uni ...

  10. bilibili 高并发实时弹幕系统的实现

    高并发实时弹幕是一种互动的体验.对于互动来说,考虑最多的地方就是:高稳定性.高可用性以及低延迟这三个方面. 高稳定性,为了保证互动的实时性,所以要求连接状态稳定: 高可用性,相当于提供一种备用方案,比 ...