Hadoop - textouputformat.separator使用ctrlA(^ A)

ale*_*ton 8 hadoop control-characters separator

我正在尝试使用^ A作为我的reduce输出文件中Key和Value之间的分隔符.我发现配置设置"mapred.textoutputformat.separator"是我想要的,这正确地将分隔符切换为",":

conf.set("mapred.textoutputformat.separator", ",");
Run Code Online (Sandbox Code Playgroud)

但它无法处理^ A字符:

conf.set("mapred.textoutputformat.separator", "\u0001");
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

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

Bin*_*erd 4

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

\n\n\n\n

上面链接中详细介绍了可能的解决方案:

\n\n
    \n
  1. 您可以对分隔符进行 Base64 编码。然后,您需要创建一个自定义 TextOutputFormat 来重写 getRecordWriter 方法并解码 Base64 编码的分隔符。
  2. \n
  3. 再次创建自定义 TextOutputFormat,但更改选项卡中的默认分隔符除外。
  4. \n
  5. 通过 XML 资源文件提供分隔符。您可以使用作业配置的 addResource() 方法指定自定义资源文件。
  6. \n
\n