我刚刚开始使用apachehadoop,因此,我的第一个目标基本上是运行一个“helloworld”应用程序。第一个任务始终是设置开发环境并能够编译代码。更具体地说,我试图编译这里找到的类。这些文件表示一个简单的mapreduce作业,作为hadoop书籍的一部分。
这本书的作者 hadoop-client
作为一个依赖(源),但由于有这么多工件-我将返回-我想知道我是否可以使用另一个依赖。我总是试图“导入”或只依赖于最少量的工件和类型集。
这本书的作者(还)没有触及hadoop分发哪些工件的主题,为什么我会使用其中一个。hadoop的网站和互联网的其他部分似乎也不关心这个小“细节”。一些sothreads之前已经提到了这一点(请看这一点和那一点),对于这一点有一些答案,其中有一些关于什么工件“应该”作为依赖项来获得要编译的特定代码的意见。
这不是我的问题。让我的代码编译起来相当“容易”,而且已经完成了。我试图弄清楚存在哪些工件,什么时候应该使用哪些工件。我怎么知道从java类型a到二进制工件依赖关系b呢?最重要的是,这些都记录在哪里?
首先,存在什么构建工件?
好吧,根据这一页,有:
hadoop客户端
hadoop客户端api
hadoop客户端微集群
hadoop客户端运行时
hadoop hdfs客户端
hadoop hdfs本机客户端
hadoop mapreduce客户端应用程序
hadoop mapreduce客户端公用
hadoop mapreduce客户端核心
hadoop mapreduce客户端jobclient
hadoop mapreduce客户端nativetask
hadoopYarn客户端
但根据jcenter的数据,还有大约500万件事情。特别是,大约四百九十九万九千九百九十九其中有“客户”一词。太令人困惑了!
在hadoop的列表之外,我可以简单地测试哪些有效,哪些无效。为了获得我的书中提供的类中使用的所有导入,以下各项都起了作用:
hadoop客户端
hadoop客户端api
hadoop客户端微集群
hadoop客户端运行时
hadoop mapreduce客户端应用程序
hadoop mapreduce客户端nativetask
我遗漏的那些在不同程度上都不起作用。有些无法解决所有的导入,有些只能解决部分导入。
我个人在这里打赌-如果我想依靠尽可能少的垃圾,是使用 hadoop-mapreduce-client-app
. 不过,为了让最平凡的“你好世界”应用程序正常工作,我不得不求助于这场大猩猩大战,这真让我烦透了。我不想知道当我真的用hadoop把自己弄得一团糟的时候,我会流下多少眼泪。
一定有我遗漏的东西!
1条答案
按热度按时间0pizxfdo1#
我建议您使用maven/gradle来过渡地提取您需要的所有内容。
如果您只需要mapreduce依赖项,那么这对我在gradle的工作很好
这是一个聚合器pom,它对其他几个库具有编译依赖关系(向下滚动)。