2015-06-24 26 views
1

我想在Hadoop機器上創建一個別名並從Hive JVM運行它。 當我明確地從Hive運行命令!它的工作前綴,但是當我添加別名,源.bashrc文件並從Hive調用別名,我得到一個錯誤。例如:從Apache Hive運行bash別名

的.bashrc內容:

# Environment variables required by hadoop 
export JAVA_HOME=/usr/lib/jvm/java-7-oracle 
export HADOOP_HOME_WARN_SUPPRESS=true 
export HADOOP_HOME=/home/hadoop 
export PATH=$PATH:/home/hadoop/bin 

alias load-table='java -cp /home/hadoop/userlib/MyJar.jar com.MyClass.TableLoader'; 

呼籲蜂巢:

!load-table; 

輸出:

Exception raised from Shell command Cannot run program "load-table": error=2, No such file or directory 
+0

使用函數而不是aliasess –

+0

可以減少麻煩,您需要在不同文件中添加別名(我認爲它是.bash_aliases)而不是在bashrc中。 –

+0

@AvinashRaj這是不正確的。將它們放在'.bash_aliases'中可能更常見,但是'.bashrc'文件中的任何內容都會被執行,這包括別名 – arco444

回答

1

別名相對於外殼的功能(例如,在默認情況下你有幾個限制不能從非交互式shell中調用別名)。

定義您~/.bashrc

function load-table() { 
    # Make sure the java executable is accessible 
    if which java > /dev/null 2>&1; then 
     java -cp /home/hadoop/userlib/MyJar.jar com.MyClass.TableLoader 
    else 
     echo "java not found! Check your PATH!" 
    fi 
} 
export -f load-table # to export the function (BASH specific) 

來源你.bashrc應用更改。然後,致電load-table