我刚开始使用Apache Hadoop,因此,我的首要目标基本上是运行一个“ hello world”应用程序。首要任务始终是设置开发环境并能够编译代码。更具体地说,我正在尝试编译找到的here类。这些文件代表了一个简单的MapReduce作业,是Hadoop上一本书的一部分。
该书的作者使用hadoop-client
作为依赖项(source),但是由于有如此多的工件(我将返回到它们),我想知道是否不能使用另一个依赖项。我一直试图“导入”或仅依赖于最少的工件和类型。
该书的作者尚未(尚未)谈到Hadoop分发哪些工件的话题,为什么我要使用其中一个。 Hadoop的网站和Internet的其余部分似乎也没有为这个小“细节”打扰。某些SO线程之前对此有所触及(请参阅this和that),对此有一些答案,并提出了意见,即应将哪些工件“作为”依赖项来获取有问题的特定代码进行编译。
这不是我的问题。使我的代码编译起来相当“容易”,并且已经完成。我试图弄清楚存在哪些工件,何时应该使用哪些工件。我怎么知道从Java类型A转换为二进制工件依赖B?最重要的是,所有这些都记录在哪里?
对于初学者来说,存在哪些构建工件?
好吧,根据this page的说法,这些是:
hadoop-client
hadoop-client-api
hadoop-client-minicluster
hadoop-client-runtime
hadoop-hdfs-client
hadoop-hdfs-native-client
hadoop-mapreduce-client-app
hadoop-mapreduce-client-common
hadoop-mapreduce-client-core
hadoop-mapreduce-client-jobclient
hadoop-mapreduce-client-nativetask
hadoop-yarn-client
但是根据JCenter,大约还有五百万种东西。特别是其中约有499.99.99万,其中有“客户”一词。令人困惑!
从Hadoop列表中删除,我可以简单地测试哪些有效,哪些无效。要获取本书提供的类中使用的所有全部,以下全部有效:
hadoop-client
hadoop-client-api
hadoop-client-minicluster
hadoop-client-runtime
hadoop-mapreduce-client-app
hadoop-mapreduce-client-nativetask
我遗漏的那些在各种程度上都行不通。有些不能解决所有的进口,有些只能解决其中的一部分。
我在这里的个人押注-如果我想尽可能少地胡扯,那就使用hadoop-mapreduce-client-app
。但是,为了使“ hello world”应用程序中最平凡的部分工作而不得不诉诸于大猩猩战争,这真让我烦恼。我不想知道当我真正沉迷于Hadoop时,将来会流下多少眼泪。
一定是我想念的东西!
答案 0 :(得分:1)
我建议您只使用Maven / Gradle过渡性地提取所需的一切。
如果您想要的只是MapReduce依赖项,那么这在Gradle中已经fine for me有效了
implementation group: 'org.apache.hadoop', name: 'hadoop-client', version: "2.8.5"
这是一个aggregator POM,它在其他几个库上具有编译依赖关系(向下滚动)。