今天原本打算写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