hive cli启动判断hadoop version的问题
生活随笔
收集整理的這篇文章主要介紹了
hive cli启动判断hadoop version的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
測試環境的hive cli啟動時報錯:
hive是一個shell:
使用sh -x跟蹤運行過程,可以看到其通過hadoop version獲取hdfs的版本
相關的代碼如下:
#?Make?sure?we're?using?a?compatible?version?of?Hadoop if?[?"x$HADOOP_VERSION"?==?"x"?];?thenHADOOP_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?]];?thenhadoop_major_ver=${BASH_REMATCH[1]}hadoop_minor_ver=${BASH_REMATCH[2]}hadoop_patch_ver=${BASH_REMATCH[4]} elseecho?"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"?];?thenecho?"Hive?requires?Hadoop?0.20.x?(x?>=?1)."echo?"'hadoop?version'?returned:"echo?`$HADOOP?version`exit?6 fi先使用
hadoop?version?|?awk?'{if?(NR?==?1)?{print?$2;}}'來獲取version輸出地第一行,然后用到了3.x shell中的正則功能。,最后通過BASH_REMATCH數組來判斷匹配組,hadoop 也是一個shell ,運行hadoop version時其實是調用了org.apache.hadoop.util.VersionInfo類
而這里由于之前debug hadoop的變量問題,更改了hadoop的腳本,導致其第一行并沒有輸出version的信息。
這里其實使用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轉載于:https://blog.51cto.com/caiguangguang/1579829
總結
以上是生活随笔為你收集整理的hive cli启动判断hadoop version的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发过程中版本控制
- 下一篇: 被遮挡的绝对定位 z-index