是否可以将HDFS中文件的位置作为值传递给我的映射器,以便我可以在它们上运行可执行文件来处理它们?
答案 0 :(得分:0)
是的,您可以在HDFS中创建带有文件名的文件,并将其用作map / reduce作业的输入。您需要创建自定义拆分器,以便为每个映射器提供多个文件名。默认情况下,您输入的文件将被块拆分,并且可能整个文件列表将被传递给一个映射器。
另一种解决方案是将您的输入定义为不可拆分。在这种情况下,每个文件都将传递给映射器,您可以自由创建自己的InputFormat,它将在您需要处理文件的逻辑时使用 - 例如调用外部可执行文件。如果你这样做,Hadoop框架将关注数据局部性。
答案 1 :(得分:0)
接近这个的另一个方法是通过FileSplit获取文件名,可以使用以下代码完成:
FileSplit fileSplit = (FileSplit) context.getInputSplit();
String filename = fileSplit.getPath().getName();
希望这有帮助