【问题标题】:Is Apache Hadoop's build artifacts documented anywhere?Apache Hadoop 的构建工件是否记录在任何地方?
【发布时间】:2018-11-23 16:05:52
【问题描述】:

我刚刚开始使用 Apache Hadoop,因此,我的第一个目标基本上是让“hello world”应用程序运行。第一个任务始终是设置开发环境并能够编译代码。更具体地说,我正在尝试编译找到here 的类。这些文件代表了一个简单的 MapReduce 作业,作为 Hadoop 书籍的一部分。

本书作者使用hadoop-client 作为依赖项(source),但由于有这么多工件 - 我将返回 - 我想知道我是否不能使用另一个依赖项。我总是试图“导入”或仅依赖于最少的工件和类型。

本书作者(还)没有谈到 Hadoop 分发了哪些工件,为什么我会使用其中一个。 Hadoop 的网站和 Internet 的其他部分似乎也不关心这个小“细节”。一些 SO 线程之前已经涉及到这一点(参见 thisthat),对此有一些答案,其中包含关于“应该”将哪些工件作为依赖项以获取相关特定代码进行编译的意见。

这不是我的问题。 编译我的代码相当“容易”并且已经完成。我试图弄清楚存在哪些工件,何时应该使用哪些工件。我怎么知道从 Java 类型 A 到二进制工件依赖项 B?最重要的是,所有这些都记录在哪里?

对于初学者来说,存在哪些构建工件?

嗯,根据this page,有这些:

hadoop 客户端
hadoop-client-api
hadoop-client-minicluster
hadoop 客户端运行时
hadoop-hdfs-客户端
hadoop-hdfs-本机客户端
hadoop-mapreduce-client-app
hadoop-mapreduce-client-common
hadoop-mapreduce-client-core
hadoop-mapreduce-client-jobclient
hadoop-mapreduce-client-nativetask
hadoop-yarn-client

但是根据JCenter,还有大约五百万件事情。特别是,其中约有四十九万九千九百九十九个中有“客户”二字。非常混乱!

根据 Hadoop 的列表,我可以简单地测试哪些有效,哪些无效。为了获得我的书提供的类中使用的所有导入,以下所有方法都有效:

hadoop 客户端
hadoop-client-api
hadoop-client-minicluster
hadoop 客户端运行时
hadoop-mapreduce-client-app
hadoop-mapreduce-client-nativetask

我遗漏的那些在不同程度上不起作用。有些无法解析所有导入,有些只能解析部分导入。

我个人的赌注——如果我想尽可能少地依赖废话,那就是使用hadoop-mapreduce-client-app。但是,为了让最平凡的“hello world”应用程序正常工作,我不得不诉诸这场大猩猩战争,这让我大吃一惊。我不想知道,当我真正对Hadoop感到沮丧和肮脏时,我会流多少眼泪。

一定有我遗漏的东西!

【问题讨论】:

    标签: java hadoop dependencies code-documentation


    【解决方案1】:

    我建议你只使用 Maven/Gradle 来传递你需要的一切。

    如果您想要的只是 MapReduce 依赖项,那么这在 Gradle 中可以使用 fine for me

    implementation group: 'org.apache.hadoop', name: 'hadoop-client', version: "2.8.5"
    

    这是一个aggregator POM,它在其他几个库上具有编译依赖项(向下滚动)。

    【讨论】:

      猜你喜欢
      • 2014-04-18
      • 2012-12-03
      • 1970-01-01
      • 2014-11-19
      • 2017-11-24
      • 2021-08-26
      • 1970-01-01
      • 2021-02-16
      • 2016-08-17
      相关资源
      最近更新 更多