我正在亚马逊网络服务上运行一个mapreduce程序(它实际上是一个相当复杂的wordcount算法)。我生成了一个.jar在AWS节点上运行。我现在正在做的是将所有mapreduce库jar合并到我的.jar文件中。一切都很好,但我认为这不是一个很好的做法(他们对机器图像进行了一些更新,我收到了可能与此有关的奇怪异常)。有人能解释一下我如何自动链接到亚马逊上安装的hadoop版本,这样我就可以不用在我的jar中添加外部库了吗?
谢谢你的帮助!
所以您使用的是Amazons Elastic MapReduce!?有不同的ami版本和不同的hadoop版本,请参阅http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-ami.html#emr-默认版本。
hadoop jar本身+it第三方依赖项(例如commons io)已经在您的作业的类路径中。所以你是对的,如果你将hadoop jar与另一个版本捆绑到你的作业jar中,可能会产生问题。所以我想说你可以:-确定要引导的hadoop版本(基于ami版本)-确定该hadoop版本中使用的库是什么(检查正在运行的ec2实例或从apache网站下载hadoop版)-再次编译正确的hadoop程序,并在捆绑胖jar