多个输出突然不写任何输出?

iyzzxitl  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(366)

突然多个输出没有写入任何输出到目标。
我使用多个输出的自定义实现,其中,我只是更改了:

if((ch == '/') || (ch == ':')||(ch == '-')||(ch =='.'))
      {
          continue;
      }

在方法中,如下所示。但同样的方法一直在起作用,突然就不起作用了。它没有向输出目录写入任何内容:
/主页/用户/mlakshm/
请帮忙!!!

private static void checkTokenName(String namedOutput) {
    if (namedOutput == null || namedOutput.length() == 0) {
      throw new IllegalArgumentException(
        "Name cannot be NULL or emtpy");
    }
    for (char ch : namedOutput.toCharArray()) {
      if ((ch >= 'A') && (ch <= 'Z')) {
        continue;
      }
      if ((ch >= 'a') && (ch <= 'z')) {
        continue;
      }
      if ((ch >= '0') && (ch <= '9')) {
        continue;
      }
      if((ch == '/') || (ch == ':')||(ch == '-')||(ch =='.'))
      {
          continue;
      }
      throw new IllegalArgumentException(
        "Name cannot be have a '" + ch + "' char");
    }
  }
3yhwsihp

3yhwsihp1#

正如你可能注意到的方法 checkTokenName() 确保输出名称有效。现在,您正试图修改 MultipleOutputs 你不应该这样。角色喜欢的原因有很多 / , : , . 以及 - 首先不允许:
许多文件系统不允许在文件名中包含这些字符
使用multipleoutputs,可以写入多个文件,但在指定的目录中,而不是在任何所需的位置。
您可能已经注意到,对于以下命名输出:
//为job multipleoutputs.addnamedoutput(job,“text”,textoutputformat.class,longwritable.class,text.class)定义其他基于单个文本的输出“text”;输出文件名将是text-0000、text0001等。
所以如果你想在不同的目录下写,那么最好去重写 MultipleTextOutputFormat ; 如果您不能自由地使用旧的api,那么最好自己编写hdfs/s3,而不是依赖hadoop来完成。

相关问题