【问题标题】:How to create HAR(Hadoop Archive) from Java?如何从 Java 创建 HAR(Hadoop 存档)?
【发布时间】:2020-10-25 06:38:15
【问题描述】:

我做rest-service,它必须在hadoop集群中创建har-files。其余的工作在应用程序服务器上,而不是在 hadoop 集群中。我为此使用 org.apache.hadoop.tools.HadoopArchives。但我不知道在创建 HadoopArchive 对象时如何设置集群。

HadoopArchives har = new HadoopArchives(conf);

另一方面,当我尝试使用 org.apache.hadoop.fs.FsShell 时,我使用 next

FsShell shell = newShellInstance();

conf.set("fs.defaultFS", "hdfs://...");

shell.setConf(conf);

而且每件事都运作良好。

但我不明白相同的 HadoopArchives 是如何做到的。

谢谢。

【问题讨论】:

  • 我相信您的问题与休息有关。您能否提供更多关于您尝试使用 HAR 做什么、您归档哪些文件的信息?
  • HDFS中有一些文件。我想将它们放入 har 文件中。我想从其余的或从另一种 java 应用程序中完成它。但最后一个不是作为 hadoop jar 运行的......这在应用程序服务器上运行作为通常的应用程序。我不知道如何为新的 HadoopArchives(conf) 设置 conf。

标签: hadoop har


【解决方案1】:

您最好的选择是将hadoop archive 命令作为外部进程运行(例如ProcessBuilder),并将您的配置作为HADOOP_CONF 环境变量传递。 否则,您将不得不编写一个 MapReduce 作业并直接从您的休息服务启动它,这将是令人费解的。 HadoopArchives 本质上是一个命令行实用程序,并非旨在用作库。

【讨论】:

  • 感谢您的建议!如果可能的话,您能否获得简单的示例,如何使用 ProcessBuilder 运行 hadoop 存档以及在这种情况下如何使用 HADOOP_CONF。我不知道如何将我的配置作为 HADOOP_CONF 发送。在我的例子中,conf 由“fs.defaultFS”加上 Kerberos 设置组成。对象配置如何作为 HADOOP_CONF 发送?
  • 你不需要Configuration作为对象,Configuration在创建时从HADOOP_CONF读取文件,现在你只需传递HADOOP_CONF。如果您没有HADOOP_CONF,您需要创建它或从您的集群下载它(CDH 和 HDP 有可以下载它的 zip 存档的页面)
  • 显然我是个失败者)我不明白两件事。 1. Rest 在非 hadoop 服务器上工作。如果使用 ProcessBuilder 运行 hadoop 存档,如何“说”这个命令应该在 hadoop 集群上运行。 2. HADOOP_CONF 是一组文件(conf/core-site.xml,conf/hdfs-site.xml,conf/mapred-site.xml,conf/yarn-site.xml)?我需要创建或下载它们到其他位置,更正它们(设置 kerberos 设置)。正确的?但是如何将它们作为 HADOOP_CONF 环境变量发送?对不起我的愚蠢问题,但我站在十字路口,现在不知道该做什么。感谢您的回答和耐心。
  • 看来您必须设置机器,让您的 REST 服务作为边缘节点运行。当然还有其他选择,你可以提交一份做归档的工作,你可以通过休息oozie.apache.org/docs/4.0.0/WebServicesAPI.html#Job_Submission
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 2010-11-15
  • 2017-08-19
相关资源
最近更新 更多