今天本来打算写java虚拟机的学习记录的。
但是在工作室里做任务时,出现了一个乱码问题,现在也还没有很好的解决办法,所以写出来让大家交流一下,以求好办法。
我们搭建了个由5台机器的Hadoop集群,并在之前已经做过统计分析日志记录的任务。由于日志内容都是在linux服务器(代理服务器)上生成的,用的编码都是UTF-8,而都是英文记录、源IP、目的IP、目的地址、访问时间等信息,有固定的格式,进行分析时都没有出现过很大的困难。
但是,现在则出现了比较难解决的问题?
问题:hadoop 集群处理 GBK 文件里出现乱码.
具体描述:
我们共12G多的文本文件,这些文件都是来自门户网站,使用很简单的爬虫抓取而来。
文件采用GBK编码格式保存。
我们的任务过程:
(1)把文件从linux中上传到hadoop集群上(此时的文件编码格式: GBK)
(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
来源:oschina
链接:https://my.oschina.net/u/1167257/blog/140635