[hive] hive: command not found錯誤解決

**背景:**在shell腳本中簡單定義hive的命令,並且通過crontab定時任務機制去調度,實現定時動態添加hive表分區。
**環境:**hadoop2.5.2+hive0.14(0.13)+zk3.3
問題描述:
shell腳本如下:

target_date=`date '+%Y-%m-%d' -d "+2 days"`
inc_mon=`date '+%Y%m' -d "0 days $target_date"`
inc_day=`date '+%d' -d "0 days $target_date"`

hive -e "use ODS_XXXXX;ALTER TABLE XXXXXXX ADD IF NOT EXISTS PARTITION (inc_mon='${inc_mon}',inc_day='${inc_day}') LOCATION '/db/ODS_XXXXXX/XXXXXX/${inc_mon}/${inc_day}'"

手動執行腳本測試是沒有問題的,但是crontab定時執行則會出現“hive: command not found”錯誤。
原因及解決方案:
即便hive的環境變量已經設置成功,但是crontab中執行代碼時,並不會解析到環境變量,需要在hive的安裝目錄下執行腳本,或者在shell腳本代碼中配置定向到hive的安裝路徑下執行,在上邊代碼前面加上“source /etc/profile”和“locate /bin/hive”,如下:

source /etc/profile
locate /bin/hive

target_date=`date '+%Y-%m-%d' -d "+2 days"`
inc_mon=`date '+%Y%m' -d "0 days $target_date"`
inc_day=`date '+%d' -d "0 days $target_date"`

hive -e "use ODS_XXXXX;ALTER TABLE XXXXXXX ADD IF NOT EXISTS PARTITION (inc_mon='${inc_mon}',inc_day='${inc_day}') LOCATION '/db/ODS_XXXXXX/XXXXXX/${inc_mon}/${inc_day}'"

這樣每次如果需要在shell腳本中寫“hive -e”等hive命令,需要在前面加上“locate /bin/hive”,這樣代碼執行成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章