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 命令修改目錄權限,允許任務用戶提交任務時都能在該目錄下創建對應目錄。

 

【參考資料】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM