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(かなり一般的なようです)に設定することに成功した人はいないかと思います。または、タブセパレータを使用して解決する必要がある場合。

ありがとう!

CentOS6.2でHadoop0.20.2-cdh3u5を実行しています

4

1 に答える 1

4

周りを見回すと、この問題を解決するために私が見つけた3つのオプションがあるようです:

上記のリンクで説明されている可能な解決策は次のとおりです。

  1. 区切り文字を Base64 でエンコードできます。次に、getRecordWriter メソッドをオーバーライドし、Base64 でエンコードされたセパレーターをデコードするカスタム TextOutputFormat を作成する必要があります。
  2. タブからデフォルトの区切り文字を変更することを除いて、カスタム TextOutputFormat を再度作成します。
  3. XML リソース ファイルを使用して区切り記号を指定します。ジョブ構成の addResource() メソッドを使用して、カスタム リソース ファイルを指定できます。
于 2012-11-20T03:56:17.827 に答える