今天原本打算寫java虛擬機的學習記錄的。 html
可是在工做室裏作任務時,出現了一個亂碼問題,如今也尚未很好的解決辦法,因此寫出來讓你們交流一下,以求好辦法。 java
咱們搭建了個由5臺機器的Hadoop集羣,並在以前已經作過統計分析日誌記錄的任務。因爲日誌內容都是在linux服務器(代理服務器)上生成的,用的編碼都是UTF-8,而都是英文記錄、源IP、目的IP、目的地址、訪問時間等信息,有固定的格式,進行分析時都沒有出現過很大的困難。 linux
可是,如今則出現了比較難解決的問題? 服務器
問題:hadoop 集羣處理 GBK 文件裏出現亂碼. oop
具體描述: 學習
咱們共12G多的文本文件,這些文件都是來自門戶網站,使用很簡單的爬蟲抓取而來。
測試
文件採用GBK編碼格式保存。
網站
咱們的任務過程:
編碼
(1)把文件從linux中上傳到hadoop集羣上(此時的文件編碼格式: GBK)
spa
(2)使用登記分詞器對文件進行分析,分解的出文章中的詞彙,並保存到指定的文件中。
在查看hadoop集羣的輸出到指定文件的內容時,發現裏面全都是亂碼。
這是咱們以前分析日誌文件時沒有出現過的。
在找問題的解決辦法時,
Google、百度、論壇都是說一樣的緣由:Hadoop在代碼中設定的Charset爲UTF-8,屬於硬編碼。
截圖以下(點擊圖片連接到目標地址):
咱們作了一次試驗,使用UTF編碼的中文文件則能夠完成分析、分詞過程。
這些方法都試過了,但仍是沒有找到一個合適的方案。如今咱們只能作一下妥協,已經改了爬蟲的抓取文件後的保存方式,把之後所抓取到的文件一概都以UTF編碼方式保存。以便之後再作分析時,不會再出現亂碼問題。
咱們分析亂碼出來以下的緣由:
(1)GBK 文件上傳到Hadoop以後編碼格式改變了?這個目前尚未能夠檢測的方法,網上說上傳後,再拿下來看是否亂碼,這有可能上傳改變了編碼,下載時對反方向變回來了,這個很差測定?你有更好的方法嗎?
(2)如網上所說,Hadoop處理文本文件的類InputFormat、OutputFormat,我今天也寫的一個業,用來代替OutputFormat,來完成數據輸出到Hadoop中,測試仍是有問題。
(3)是否只是SSH Secure Shell顯示的問題?這個問題,文件在linux本地時(還沒上傳到hadoop),more中文文件也是有一點點亂碼,不多。這樣看來,SSH Secure Shell 的緣由可能性是有,但比較小,因hadoop運行輸出到指定文件的內容,幾乎全部文字都是亂碼。
大家有Hadoop處理中文的實踐嗎?
有沒有遇到過這樣的問題,求指教?
有沒有能夠在Hadoop中把大批量GBK文件轉換成UTF-8的代碼?若是能夠分享,請發到個人郵箱。
個人郵箱:guangyao1991@foxmail.com