hive cli啓動判斷hadoop version的問題

測試環境的hive cli啓動時報錯:
git

Unable to determine Hadoop version information.

hive是一個shell:
shell

使用sh -x跟蹤運行過程,能夠看到其經過hadoop version獲取hdfs的版本apache

相關的代碼以下:數組

# Make sure we're using a compatible version of Hadoop
if [ "x$HADOOP_VERSION" == "x" ]; then
    HADOOP_VERSION=$($HADOOP version | awk '{if (NR == 1) {print $2;}}');
fi
echo "hadoop_version is $HADOOP_VERSION"
# Save the regex to a var to workaround quoting incompatabilities
# between Bash 3.1 and 3.2
hadoop_version_re="^([[:digit:]]+)\.([[:digit:]]+)(\.([[:digit:]]+))?.*$"
if [[ "$HADOOP_VERSION" =~ $hadoop_version_re ]]; then
    hadoop_major_ver=${BASH_REMATCH[1]}
    hadoop_minor_ver=${BASH_REMATCH[2]}
    hadoop_patch_ver=${BASH_REMATCH[4]}
else
    echo "Unable to determine Hadoop version information."
    echo "'hadoop version' returned:"
    echo `$HADOOP version`
    exit 5
fi
if [ "$hadoop_major_ver" -lt "1" -a  "$hadoop_minor_ver$hadoop_patch_ver" -lt "201" ]; then
    echo "Hive requires Hadoop 0.20.x (x >= 1)."
    echo "'hadoop version' returned:"
    echo `$HADOOP version`
    exit 6
fi

先使用bash

hadoop version | awk '{if (NR == 1) {print $2;}}'

來獲取version輸出地第一行,而後用到了3.x shell中的正則功能。,最後經過BASH_REMATCH數組來判斷匹配組,hadoop 也是一個shell ,運行hadoop version時其實是調用了org.apache.hadoop.util.VersionInfo類ide

而這裏因爲以前debug hadoop的變量問題,更改了hadoop的腳本,致使其第一行並無輸出version的信息。oop

這裏其實使用hadoop version的第一行輸出嚴格來講不太好,最好使用正則來處理,更改以下:測試

if [ "x$HADOOP_VERSION" == "x" ]; then
    #HADOOP_VERSION=$($HADOOP version | awk '{if (NR == 1) {print $2;}}');
    HADOOP_VERSION=$($HADOOP version | awk '{if($0 ~ /[[:alpha:]]+ ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)?.*$/){print  $2};}');
fi
相關文章
相關標籤/搜索