8

我正在尝试使用 ^A 作为减少输出文件中键和值之间的分隔符。我发现配置设置“mapred.textoutputformat.separator”是我想要的,这正确地将分隔符切换为“,”:

conf.set("mapred.textoutputformat.separator", ",");

但它不能处理 ^A 字符:

conf.set("mapred.textoutputformat.separator", "\u0001");

抛出此错误:

ERROR security.UserGroupInformation: PriviledgedActionException as:user (auth:SIMPLE) cause:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.RuntimeException: org.xml.sax.SAXParseException; lineNumber: 68; columnNumber: 94; Character reference "&#

我找到了这张票https://issues.apache.org/jira/browse/HADOOP-7542并看到他们试图解决这个问题,但由于 XML1.1 问题而恢复了补丁。

所以我想知道是否有人成功地将分隔符设置为 ^A (似乎很常见),使用简单的解决方法。或者,如果我应该解决并使用制表符分隔符。

谢谢!

我在 CentOS 6.2 上运行 Hadoop 0.20.2-cdh3u5

4

1 回答 1

4

环顾四周,我发现可能有三个选项可以解决这个问题:

上面链接中详述的可能解决方案是:

  1. 您可以对分隔符进行 Base64 编码。然后,您需要创建一个自定义 TextOutputFormat 来覆盖 getRecordWriter 方法并解码 Base64 编码的分隔符。
  2. 再次创建自定义 TextOutputFormat,除了更改选项卡中的默认分隔符。
  3. 通过 XML 资源文件提供分隔符。您可以使用作业配置的 addResource() 方法指定自定义资源文件。
于 2012-11-20T03:56:17.827 回答