Ubuntu本地文件上传至HDFS文件系统出现的乱码问题及解决方案

1.问题来源及原因

用shell命令上传到HDFS中之后出现中乱码,在shell命令窗口查看如图:

在eclipse中的文件HDFS查看工具查看如图:

原因:上传至HDFS文件系统的文本文件(这里是A.txt)的编码格式是ISO-8859,与hdfs文件系统和eclipse默认的编码格式UTF-8不符。

2.解决方案

 把源文本文件的编码格式改为UTF-8,统一编码格式,问题完美解决。

Ubuntu中查看文件编码格式的shell命令(文件名含路径):

file 文件名

Ubuntu中改变文件编码格式的shell命令(源文件和目标文件含路径):

sudo iconv -f '源编码格式' -t '目标编码格式' 源文件 > 目标文件

经测试,ISO-8859格式的文本文件不能直接转码为UTF-8,具体原因不明。而GB-2312采用双字节编码,兼容ISO-8859,而GBK是对GB-2312的扩展,因此GBK也兼容ISO-8859,因此源文件的编码格式可以用GBK,而目标编码格式为UTF-8,经验证,可以实现转码。
操作实例

①首先,查看源文本文件A.txt的编码格式

file /data/jixian1211/A.txt

 

②改变A.txt的编码格式,输出到A1.txt

sudo iconv -f 'GBK' -t 'UTF-8' /data/jixian1211/A.txt > /data/jixian1211/A1.txt

③查看输出文件A1.txt的编码格式(源文件A.txt的编码格式依然不变)

file /data/jixian1211/A1.txt

④将A1.txt文件上传至HDFS(别忘了先启动HDFS)

hadoop fs -put /data/jixian1211/A1.txt /jixian1211/in

⑤在HDFS中查看A1.txt文件

hadoop  fs -cat /jixian1211/in/A1.txt

 中文字符正常显示。

⑥在eclipse的HDFS查看工具中查看

 中文字符正常显示。

原文地址:https://www.cnblogs.com/iCheny/p/10108868.html