`
lbxhappy
  • 浏览: 308057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop Text编码问题

 
阅读更多
Hadoop写map/reduce作业开始,就遇到了输入数据是GBK编码的问题,hadoop的writable默认是以utf-8进行编码,如果输入数据时GBK编码的话,则进行转码操作如:
String line=new String(value.getBytes(),0,value.getLength(),"GBK");
String line=value.toString();之所以会把GBK编码的输入变成乱码,很关键的一个因素是Text这个Writable类型造成的。初学时,一直认为和LongWritable对long的封装一样,Text类型是String的Writable封装。但其实Text和String还是有些区别,它是一种UTF-8格式的Writable,而Java中的String是Unicode字符。所以直接使用value.toString()方法,会默认其中的字符都是UTF-8编码过的,因而原本GBK编码的数据使用Text读入后直接使用该方法就会变成乱码。
正确的方法是将输入的Text类型的value转换为字节数组,使用String的构造器String(byte[] bytes, int offset, int length, Charset charset),通过使用指定的charset解码指定的byte子数组,构造一个新的String。即
1

String line=new String(value.getBytes(),0,value.getLength(),"GBK");

Text的UTF-8特性也可以从TextOutputFormat中看出一二,在TextOutputFormat的源码中,
1

        private static final String utf8 = “UTF-8″;//这里被写死成了utf-8

所以如果需要map/reduce输出其它编码格式的数据,需要自己实现OutputFormat,在其中指定编码方式,而不能使用默认的TextOutputFormat。具体的范例可以见淘宝数据平台与产品部官方博客上的博文 http://www.tbdata.org/archives/244 。
博文引用了http://blog.linezing.com/2011/04/hadoop%E7%9A%84mapreduce%E4%BD%9C%E4%B8%9A%E8%BE%93%E5%85%A5%E9%9D%9Eutf-8%E7%BC%96%E7%A0%81%E6%95%B0%E6%8D%AE%E7%9A%84%E5%A4%84%E7%90%86%E5%8E%9F%E7%90%86
分享到:
评论

相关推荐

    hadoop中文乱码问题

    解决Hadoop中文乱码问题的关键在于识别和匹配数据的正确编码,并在Hadoop组件和工具中设置相应的编码选项。在实际操作中,可能需要结合日志信息和源码调试来定位问题。同时,建立良好的编码规范,统一数据的编码格式...

    Hadoop序列化机制

    标题中的“Hadoop序列化机制”是指Hadoop生态系统中用于数据传输和存储的数据表示方式,它是Hadoop MapReduce和Hadoop Distributed File System (HDFS)等组件之间交换数据的关键技术。序列化是将对象转化为可存储或...

    Hadoop基础架构与历史技术教程

    Hadoop最初的设计目的是解决大规模数据处理问题,通过构建一个能够运行在廉价硬件上的分布式文件系统(HDFS)和一个分布式计算框架(MapReduce),实现了数据的高效处理。这使得企业无需依赖昂贵的专用服务器,就能...

    java-Hadoop序列化

    Hadoop提供了一些预定义的`Writable`实现类,如`Text`,它可以看作是Java `String`的序列化版本,用于处理UTF-8编码的文本数据。例如,我们可以创建一个`Text`对象来存储字符串: ```java Text test = new Text(...

    11、hadoop环境下的Sequence File的读写与合并

    import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.GzipCodec; import org.apache....

    nutch乱码BUG修正

    4. **检索索引阶段**:当从索引中检索数据并展示时,如果没有按照正确的编码进行解码,同样会出现乱码问题。 修复Nutch乱码问题的步骤如下: 1. **配置HTTP客户端**:在Nutch的conf/regex-urlfilter.txt中,可以...

    Hadoop文件的存储格式实例详解

    不过,需要注意的是,使用`hdfs dfs -text`命令查看SequenceFile内容时可能会出现乱码,因为它是为二进制数据设计的,不适合直接以文本形式显示。正确查看SequenceFile内容的方法是使用`hdfs dfs -cat`命令,但请...

    Hadoop_RPCDemo:Hadoop原始解析之RPC协议

    Hadoop的RPC协议基于Java的序列化机制,它定义了一套规范,包括了客户端和服务器端的交互流程、数据编码和解码方式等。以下是其主要步骤: 1. **建立连接**:客户端首先通过Socket连接到服务器的指定端口。 2. **...

    云计算 mapreduce - <Data-Intensive[1].Text.Processing.With.MapReduce>

    《Data-Intensive Text Processing With MapReduce》是一本专注于使用MapReduce处理大规模文本数据的专业书籍。该书由Jimmy Lin和Chris Dyer撰写,于2010年2月出版。这本书不仅适合MapReduce的新手,也适合有一定...

    Data-Intensive Text Processing with MapReduce

    ### 数据密集型文本处理与MapReduce #### 一、引言 《数据密集型文本处理与MapReduce》是由马里兰大学的Jimmy ...通过学习这本书,读者不仅能掌握MapReduce的核心原理,还能学会如何运用这一强大工具来解决实际问题。

    1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(一)

    - 优点:Parquet采用了高效的压缩和编码,减少了IO操作,因此查询速度相对较快。它适用于Impala和Hive共享数据的场景。 - 缺点:Parquet不支持数据更新,不支持ACID(原子性、一致性、隔离性和持久性)特性,且...

    MapReduce.pdf

    在map方法中处理字符串时,可以使用字符编码转换的方式解决乱码问题,比如将字符串的byte数组转换为GBK格式的字符串。 在实现MapReduce程序之前,需要在计算机上安装JDK,这是因为Java是编写MapReduce程序的必需...

    秒针系统:面试问题

    - **ORC**:优化的列式存储格式,支持高效压缩和编码。 - **TextFile**:简单的文本文件格式,适用于小型数据集。 通过以上问题的回答,我们可以看到面试中不仅关注技术细节,也重视应聘者的基础知识掌握程度、解决...

    18Nov_Serialization.docx

    为了节省存储空间,Hadoop提供了`VIntWritable`这样的变体,它可以更有效地编码和解码整数值,减少不必要的字节浪费。 在实际应用中,我们可能会创建自定义的序列化类,例如`UserWritable`,它实现了`...

    数据仓库课程作业21

    1. 文件编码转换:由于原始文件采用UTF-8编码导致读取问题,需要将其转换为iso-8859-1编码以便正确处理。 2. 内容筛选:保留评论的"summary"和"text"两个关键部分,去除如"review"和"user"等标识符。 3. 清理特殊...

    mapreduce 自定义分隔符源码

    在处理分隔符之前,我们先要了解`Text`类,它是Hadoop用于表示文本数据的类,它使用UTF-8编码。 为了自定义分隔符,我们需要创建一个新的`RecordReader`类,例如命名为`CustomDelimiterRecordReader`。这个类会继承...

    共现矩阵解题报告[借鉴].pdf

    为了实现Stripe方法,作者采用了Text类来封装输出列表,虽然这会增加一些传输量(如空格和数字),但简化了编码。同时,定制了输出字符串格式,例如,当与单词b的共现次数为1时省略,大于1则输出x#b,这减少了不必要...

    Data-Intensive Text Processing with MapReduce Jimmy Lin and Chris Dyer

    - **字节对齐和单词对齐编码**:通过调整编码方式来减少索引占用的空间。 - **位对齐编码**:更高级的压缩技术,能够进一步减小索引大小。 - **发布列表压缩**:专门针对发布列表进行的压缩技术,可以显著减少存储...

Global site tag (gtag.js) - Google Analytics