zoukankan      html  css  js  c++  java
  • Hive参数配置方法

    一、Hive参数配置方式

    Hive中提供三种改变环境变量的方法,分别是:(1)修改 ${HIVE_HOME}/conf/hive-site.xml 配置文件;(2)命令行参数;(3)进入Hive客户端后手动设置。下面以修改‘hive.exec.scratchdir’参数为例具体介绍这三种方式。

    假设Hive提交任务时需要修改map/reduce任务中间数据输出的HDFS路径(默认中间数据存储目录为 /tmp/hive/${user.name}/,假设我们修改目录为 /hive_tmp_1/${user.name} ),可以在两个位置修改 ‘hive.exec.scratchdir’ 参数来实现,在Cloudera Manager管理的Hadoop集群中,可以通过三种方式修改该配置:

    1.1 Hive配置文件

    在Hive中,所有的默认配置都在${HIVE_HOME}/conf/hive-site.xml文件中,如果需要对默认的配置进行修改,修改hive-site.xml文件即可,通过该配置可以对一些配置进行个性化设定。hive-site.xml文件的格式如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <property>
        <name>hive.map.aggr</name>
        <value>true</value>
      </property>
      <property>
        <name>hive.execution.engine</name>
        <value>mr</value>
      </property>
      <property>
        <name>hive.exec.scratchdir</name>
        <value>/hive_tmp_1/</value>
      </property>
    </configuration>

    如果Hadoop集群是用Cloudera Manager管理平台管理,则直接在页面修改对应配置即可。操作如下:进入Hive配置页面,修改Hive客户端配置,下发客户端配置即可生效。(使用CDH主要是要区别服务端配置和客户端配置的区别)

     1.2 Hive命令行参数

     通过Hive命令行修改参数,也有两种方式,一种是修改Hive客户端启动命令,另一种是启动Hive客户端时指定参数

    (1)修改Hive客户端启动命令

    这种修改方法针对所有会话和所有用户生效。通过 which hive查看hive命令启动目录,然后在Hive启动参数中添加 --hiveconf 参数配置 hive.exec.scratchdir 参数,这种修改方式修改后会立即生效。

    具体配置如下:

    # cat /usr/bin/hive
    #!/bin/bash
      # Reference: http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
      SOURCE="${BASH_SOURCE[0]}"
      BIN_DIR="$( dirname "$SOURCE" )"
      while [ -h "$SOURCE" ]
      do
        SOURCE="$(readlink "$SOURCE")"
        [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
        BIN_DIR="$( cd -P "$( dirname "$SOURCE"  )" && pwd )"
      done
      BIN_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
      LIB_DIR=$BIN_DIR/../lib
    
    # Autodetect JAVA_HOME if not defined
    . $LIB_DIR/bigtop-utils/bigtop-detect-javahome
    
    BIGTOP_DEFAULTS_DIR=${BIGTOP_DEFAULTS_DIR-$BIN_DIR/../etc/default}
    [ -n "${BIGTOP_DEFAULTS_DIR}" -a -r ${BIGTOP_DEFAULTS_DIR}/hbase ] && . ${BIGTOP_DEFAULTS_DIR}/hbase
    
    export HIVE_HOME=$LIB_DIR/hive
    exec $LIB_DIR/hive/bin/hive --hiveconf hive.exec.scratchdir=/hive_tmp_1 "$@"   # 指定Hive启动参数

    这种方式针对当前会话和当前用户生效。在启动Hive客户端时通过 --hiveconfig 指定参数。

    (2)启动Hive客户端时指定参数

    hive --hiveconf hive.exec.scratchdir=/hive_tmp_1

    1.3 进入Hive客户端手动设置 

    这种方法和方法二的第(2)种方法类似,也是只对本次Hive客户端启动生效,下次启动时需重新配置。

    hive> set hive.exec.scratchdir;
    hive.exec.scratchdir=/tmp/hive     # 默认目录
    hive> set hive.exec.scratchdir=/hive_tmp_1;  # 指定目录

    遗憾的是,在实际操作中进入Hive客户端是手动设置 ‘set hive.exec.scratchdir’ 这个参数并不会生效,中间数据依然写到 /tmp/hive/kwang/ 目录下。说明这个参数在进入Hive后手动set,这一点和Hive的参数类型有关系,有些系统参数在启动Hive客户端后是不能手动设置的,只能通过前面两种方式来实现。(官方文档说是可行的,但实际操作却没生效,这一点后续还要再看看这个参数。官方文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration )

     二、实际场景操作

    操作场景下账号是 kwang。

    1、未修改中间数据存储目录时

    在kwang账号下执行 hive -e "select count(1)" 命令,在HDFS目录下可以看到如下目录

    # hadoop fs -ls /tmp/hive/kwang/
    Found 1 items
    drwx------   - kwang supergroup          0 2020-02-24 16:29 /tmp/hive/kwang/bdda0673-214d-4838-b403-29656c139671

    可以看到在HDFS目录上会创建我们配置的hive.exec.scratchdir目录,并且Hive任务的中间数据都会存储在新目录,如下:2、修改中间数据存储目录后

    $ hadoop fs -ls /hive_tmp_1/kwang/
    Found 1 items
    drwx------   - kwang supergroup          0 2020-02-24 16:35 /hive_tmp_1/kwang/976bafb8-cb49-40cb-910d-3dbacd41a328

    注意:如果HDFS有启用ACL管控时,需要手动创建 /hive_tmp_1/目录,并通过hadoop fs -chmod 777 /hive_tmp_1 命令修改目录权限,允许任务用户提交任务时都能在该目录下创建对应目录。

    【参考资料】

  • 相关阅读:
    memcached简单介绍及在django中的使用
    【Python】解决使用pyinstaller打包Tkinker程序报错问题
    【python】获取列表中最长连续数字
    【zabbix】zabbix忘记密码,重置密码
    【jenkins】jenkins实时显示python脚本输出
    【AWS】AWS云计算赋能数字化转型专题研讨会圆满落幕
    【深度学习】使用opencv在视频上添加文字和标记框
    【AWS】AWS云计算赋能数字化转型专题研讨会
    【AWS】订阅AWS论坛的RSS消息获取最新公告
    【saltstack】saltstack执行结果和事件存储到mysql
  • 原文地址:https://www.cnblogs.com/lemonu/p/12368401.html
Copyright © 2011-2022 走看看