java - 如何在 Ubuntu 上保留两个 Hadoop 版本?

标签 java linux ubuntu hadoop mapreduce

我正在运行一些测试,我需要能够在两个不同版本的 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-envhadoop-env 函数以在该 shell 中引入您想要的环境。

如果你觉得狡猾,你甚至可以让他们修改 PS1,这样你就很清楚你在哪一个。

关于java - 如何在 Ubuntu 上保留两个 Hadoop 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23367052/

相关文章:

Java 8 : How to elegantly remove redundant outer objects on base of inner object ID and date in Java 8?

java - java中如何访问其他类方法中的变量

android - 无法解析 : com. android.support :appcompat-v7. 15

linux - 如何使用CMake更新库路径?

c - Linux-使用pthread强制执行单核并调试多线程

linux - 如何配置php5-fpm.log的logrotate?

mysql - 无法使用 DBeaver 连接到 MariaDB

java - 使用 SOLR 4.0 索引许多表,然后在查询期间加入它们?

java - 从 JDeveloper 中的项目读取 json 文件 - Oracle MAF 项目

linux - gcov 过滤结果和文件