Hadoop-textouputformat.разделитель использовать ctrlA (^A)

Я пытаюсь использовать ^A в качестве разделителя между ключом и значением в моих выходных файлах reduce. Я обнаружил, что настройка конфигурации " mapred.textoutputformat.разделитель "- это то, что я хочу, и это правильно переключает разделитель на",":

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 (кажется довольно распространенным), используя легкую работу. Или если я должен просто установить и использовать tab separator.

спасибо!

я запускаю Hadoop 0.20.2-cdh3u5 на CentOS 6.2

1 ответов


оглядываясь вокруг, похоже, что есть, возможно, три варианта, которые я нашел для решения этой проблемы:

возможные решения, как описано в ссылке выше:

  1. вы можете Base64 кодировать символ разделителя. Вы затем необходимо создать пользовательский TextOutputFormat, который переопределяет метод getRecordWriter и декодирует разделитель с кодировкой Base64.
  2. создайте пользовательский TextOutputFormat снова, за исключением изменения символа разделителя по умолчанию на вкладке.
  3. укажите разделитель через XML-файл ресурсов. Можно указать пользовательский файл ресурсов с помощью метода addResource () конфигурации заданий.