【发布时间】:2018-11-23 16:05:52
【问题描述】:
我刚刚开始使用 Apache Hadoop,因此,我的第一个目标基本上是让“hello world”应用程序运行。第一个任务始终是设置开发环境并能够编译代码。更具体地说,我正在尝试编译找到here 的类。这些文件代表了一个简单的 MapReduce 作业,作为 Hadoop 书籍的一部分。
本书作者使用hadoop-client 作为依赖项(source),但由于有这么多工件 - 我将返回 - 我想知道我是否不能使用另一个依赖项。我总是试图“导入”或仅依赖于最少的工件和类型。
本书作者(还)没有谈到 Hadoop 分发了哪些工件,为什么我会使用其中一个。 Hadoop 的网站和 Internet 的其他部分似乎也不关心这个小“细节”。一些 SO 线程之前已经涉及到这一点(参见 this 和 that),对此有一些答案,其中包含关于“应该”将哪些工件作为依赖项以获取相关特定代码进行编译的意见。
这不是我的问题。 编译我的代码相当“容易”并且已经完成。我试图弄清楚存在哪些工件,何时应该使用哪些工件。我怎么知道从 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