【问题标题】:Can I use hadoop jar command to run normal java programs as well?我也可以使用 hadoop jar 命令来运行普通的 java 程序吗?
【发布时间】:2017-05-28 18:31:36
【问题描述】:

我的 Java 代码中有一些 hadoop 文件系统操作(例如:hdfs mkdir)。当我尝试使用 java -cp 运行 java 程序时,该目录在 linux 本地文件系统中创建。所以我使用 hadoop jar 命令运行程序,并在 hdfs 中创建了目录。现在我打算使用 hadoop jar 命令运行整个 java 程序。我想知道使用 hadoop jar 命令会不会有任何问题,尤其是在从本地文件夹读取文件或执行Runtime.getRuntime().exec(some linux command); 下面如果我的 hdfs 文件操作的代码的 sn-p 时

Configuration conf = new Configuration();       
FileSystem fs = FileSystem.get(conf);
boolean res = fs.mkdirs(directory path);

【问题讨论】:

    标签: java hadoop


    【解决方案1】:

    是的,hadoop jar 命令也可以用来运行普通的 java 程序。但相反是错误的。 Hadoop 文件系统操作只能在 hadoop 环境中运行。但是如果你在hadoop集群中运行,linux命令可能会在slave节点中执行。

    【讨论】:

    • 显然,如果我使用 hadoop jar 命令,我似乎无法指定外部依赖 jar。请注意,我没有任何 map reduce 代码,我只是有一些 hdfs 文件操作。
    • 是的,在hadoop环境中运行时也可以使用外部依赖jar。它可以通过不同的方式来完成。您可以创建一个包含所有依赖项的 uber jar,或者在每个节点中分发依赖 jar 并在 $HADOOP_CLASSPATH 变量中定义路径。
    • 我正在尝试不同的解决方案,因为我没有管理权限。我也不想构建一个胖 jar,因为它会增加我的部署 jar 并且是多余的。有没有一种方法可以在我的新 Configuration() 对象中指定配置,以便我可以直接写入 HDFS?
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2018-04-24
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多