我有一个用例,其中我使用hadoop流来运行可执行文件作为映射进程。在输入端,我有大量的序列文件。每个seq文件都有8个键和相应的值,它们是float数组的列表。我宁愿将一组seq文件分配给一个map进程,而不是让一个map进程处理一个seq文件。因此,我决定将所有这些seq文件合并为一个大文件。假设这个大的seq文件由50,000个小的seq文件组成。
现在,是否可以配置我的hadoop流媒体实用程序来为每个地图进程分配一部分seq文件?
如何让每个地图进程获取他们需要处理的文件名列表?如何在地图可执行文件中检索这些信息?可执行文件是用于处理stdin的普通groovy脚本。在这种情况下,我的stdin将如何显示(如何确定键/值对,以及它们的内容是什么) 或者,由于我合并了序列文件,它们变成了一个大文件并丢失了它们的个人身份,这意味着我不能拥有它们的文件名,我需要使用一堆序列文件的键/值?
我认为,这个大的seq文件将有key / value,其中key是filename,value是该文件的内容,而该文件又包含8个键和相应的值?如果是这种情况,当hadoop根据可能的地图数量拆分这个大文件(假设我的群集中可能有10个地图),每个地图会得到大约5000个密钥和相应的值?然后,在我的地图exec中,如何访问这些键和值?
任何提示都会有很大帮助