我开始尝试使用 hadoop(但还没有访问集群的权限,所以只能独立使用)。我的问题是,一旦进入集群设置,任务如何分配以及代码库能否转移到新节点?
理想情况下,我想运行大型批处理作业,如果我需要更多容量,则向集群添加新节点,但我不确定是否必须复制在本地运行的相同代码或做一些特殊的事情批处理作业正在运行我可以添加容量。我以为我可以将我的代码库存储在 HDFS 上,并在每次需要时将其拉到本地运行,但这仍然意味着我需要在服务器上安装某种初始脚本,并且需要先手动运行它。
任何关于这是否可能的建议或建议都会很棒!
谢谢。
最佳答案
当您使用 hadoop jar
命令安排 mapreduce 作业时,jobtracker 将确定执行您的作业需要多少映射器。这通常由输入文件中的 block 数决定,而且这个数字是固定的,无论你有多少工作节点。然后它将招募一个或多个任务跟踪器来执行您的工作。
应用程序 jar(以及使用 -libjars
参数指定的任何其他 jar)会自动复制到所有运行用于执行 jar 的任务跟踪器的机器。所有这些都由 Hadoop 基础架构处理。
添加额外的 tasktracker 将增加你的工作的并行性假设有尚未安排的 map task 。它不会自动重新分区输入以并行化额外的 map 容量.因此,如果您的 map 容量为 24(假设在 4 个数据节点中的每一个上有 6 个映射器),并且您有 100 个 map task ,前 24 个正在执行,并且您添加另一个数据节点,您将获得一些额外的速度。如果您只有 12 个 map task ,添加机器对您没有帮助。
最后,您需要了解数据引用位置。由于理想情况下,数据应该在最初存储它的同一台机器上进行处理,添加新的任务跟踪器不一定会按比例增加处理速度,因为数据最初不会在这些节点上本地,需要通过网络复制。
关于hadoop - Hadoop 可以分发任务和代码库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330700/