2014-04-29 51 views
0

我正在運行一些測試,我需要能夠在兩個不同版本的Hadoop之間來回切換 - 2.2.0版本和我自定義的版本。但是,我在〜/ .bashrc中設置變量時遇到了問題 - 如果我同時使用它們,它將會發生衝突。我只能運行2.2.0版本,而不是我的版本。 但是,如果我在〜/ .bashrc中註釋與2.2.0版本相關的變量,它將運行我的版本。 這裏是我的Hadoop相關的變量來自〜/ .bashrc中:如何在Ubuntu上保留兩個Hadoop版本?

#Hadoop variables - my version 
export HADOOPTWO_INSTALL=/home/parallels/Development/Hadoop/hadoop-trunk/trunk2/hadoop-dist/target/hadoop-3.0.0-SNAPSHOT 
export PATH=$PATH:$HADOOPTWO_INSTALL/bin 
export PATH=$PATH:$HADOOPTWO_INSTALL/sbin 
export HADOOP_MAPRED_HOME=$HADOOPTWO_INSTALL 
export HADOOP_COMMON_HOME=$HADOOPTWO_INSTALL 
export HADOOP_HDFS_HOME=$HADOOPTWO_INSTALL 
export YARN_HOME=$HADOOPTWO_INSTALL 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOPTWO_INSTALL/lib/native 
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOPTWO_INSTALL/lib/" 


#Hadoop variables - version 2.2.0 
export HADOOP_INSTALL=/home/parallels/Development/Hadoop/hadoop-2.2.0 
export PATH=$PATH:$HADOOP_INSTALL/bin 
export PATH=$PATH:$HADOOP_INSTALL/sbin 
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_HOME=$HADOOP_INSTALL 
export HADOOP_HDFS_HOME=$HADOOP_INSTALL 
export YARN_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native 
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_INSTALL/lib/" 

如果我運行$HADOOPTWO_INSTALL/bin/hadoop version,這就要求我的版本的Hadoop文件,它將返回:

Hadoop 2.2.0 
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 
Compiled by hortonmu on 2013-10-07T06:28Z 
Compiled with protoc 2.5.0 
From source with checksum 79e53ce7994d1628b240f09af91e1af4 
This command was run using /home/parallels/Development/Hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar 

這顯然是錯誤的,因爲在命令上調用的jar的位置(它仍然從2.2.0版本調用jar,即使我專門調用了我的自定義Hadoop版本)。

我在做什麼錯?任何幫助將深表感謝。

回答

3

我在那裏我有多個類似的情況做了什麼,衝突環境是把它們封裝成函數:

function my-hadoop-env { 
    #Hadoop variables - my version 
    export HADOOPTWO_INSTALL=/home/parallels/Development/Hadoop/hadoop-trunk/trunk2/hadoop-dist/target/hadoop-3.0.0-SNAPSHOT 
    export PATH=$PATH:$HADOOPTWO_INSTALL/bin 
    export PATH=$PATH:$HADOOPTWO_INSTALL/sbin 
    export HADOOP_MAPRED_HOME=$HADOOPTWO_INSTALL 
    export HADOOP_COMMON_HOME=$HADOOPTWO_INSTALL 
    export HADOOP_HDFS_HOME=$HADOOPTWO_INSTALL 
    export YARN_HOME=$HADOOPTWO_INSTALL 
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOPTWO_INSTALL/lib/native 
    export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOPTWO_INSTALL/lib/" 
} 

function hadoop-env { 
    #Hadoop variables - version 2.2.0 
    export HADOOP_INSTALL=/home/parallels/Development/Hadoop/hadoop-2.2.0 
    export PATH=$PATH:$HADOOP_INSTALL/bin 
    export PATH=$PATH:$HADOOP_INSTALL/sbin 
    export HADOOP_MAPRED_HOME=$HADOOP_INSTALL 
    export HADOOP_COMMON_HOME=$HADOOP_INSTALL 
    export HADOOP_HDFS_HOME=$HADOOP_INSTALL 
    export YARN_HOME=$HADOOP_INSTALL 
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native 
    export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_INSTALL/lib/" 
} 

然後打開一個shell時,執行相應的my-hadoop-envhadoop-env功能您在外殼希望環境拉。

如果你感到狡猾的,你甚至可以讓他們修改PS1所以很明顯,其中一個傻冒。

+0

所以當我打開一個shell時,我只需要調用「my-hadoop-env」,對吧?你修改PS1是什麼意思? – yvesbastos

+0

很酷,我想我已經明白了......這正是我所希望的那種類型。謝啦! – yvesbastos

0

我會說你用hadoop 2.2.0路徑覆蓋你的HADOOPTWO路徑變量。只能導出1個PATH變量,如果你的.bashrc的順序執行,你已經張貼以上那麼你的路徑應該是這樣的

/home/parallels/Development/Hadoop/hadoop-2.2.0/bin 
+0

我試着調換順序,但它並沒有改變......甚至當我2.2.0之後的推杆我的版本的變量,它會還叫2.2.0,這是奇怪... – yvesbastos

0

我對我所做的版本之間切換是把不同的Hadoop版本到不同的目錄並創建一個符號鏈接給我想要活躍的人。這樣所有的配置總是指向相同的位置。

ln -s /usr/local/hadoop-versions/hadoop-2.2.0 /usr/local/hadoop 
相關問題