我正在运行一些测试,我需要能够在两个不同版本的 Hadoop 之间来回切换 - 2.2.0 版本和我定制的版本。但是,我在 ~/.bashrc 中设置它们的变量时遇到了问题——如果我同时拥有它们,就会发生冲突。我只能运行 2.2.0 版本,而不是我的。 但是,如果我在 ~/.bashrc 注释与 2.2.0 版本相关的变量,它将运行我的版本。 这是 ~/.bashrc 中与 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 版本)。
我做错了什么?任何帮助将不胜感激。
最佳答案
我在必须有多个冲突环境的类似情况下所做的是将它们封装到函数中:
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-env
或 hadoop-env
函数以在该 shell 中引入您想要的环境。
如果你觉得狡猾,你甚至可以让他们修改 PS1
,这样你就很清楚你在哪一个。
关于java - 如何在 Ubuntu 上保留两个 Hadoop 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23367052/