2012-11-20 49 views
8

我試圖使用^ A作爲鍵和值之間的分隔符,以減少輸出文件。 我發現,配置設置「mapred.textoutputformat.separator」是我想要的,這個正確切換分隔符「」:Hadoop - textouputformat.separator使用ctrlA(^ A)

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

+2

Upvote,這是一個有效的問題,必須鼓勵。 – Siddharth

回答

4

運行Hadoop的0.20.2-cdh3u5環顧四周,它看起來像有可能,我已經找到了解決這個問題的三個選項:

的可能的解決方案在上面的鏈路詳述如下:

  1. Base64可以對分隔符進行編碼。然後您需要創建一個覆蓋getRecordWriter方法並解碼Base64編碼分隔符的自定義TextOutputFormat。
  2. 再次創建自定義TextOutputFormat,除了更改選項卡中的默認分隔符。
  3. 通過XML資源文件提供分隔符。您可以使用作業配置的addResource()方法指定自定義資源文件。
+0

謝謝BN。 #3聽起來像最乾淨的方法。我會給你一個鏡頭。 –