hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,有很多软件只能靠文件的BOM才能成够识别编码为UTF-8的文件,因此当用此类软件打开文件时,显示的是乱码。为了能够正常显示文件内容,在输出内容到文件内之前,先写入BOM(0xEFBBBF)即可。
Map Reduce运行的结果是一些列文件,通过使用如下函数将输出文件归并到一个文件中:
org.apache.hadoop.fs.FileUtil.copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addString)
其内的代码如下:/** Copy all files in a directory to one output file (merge). */
public static boolean copyMerge(FileSystem srcFS, Path srcDir,
FileSystem dstFS, Path dstFile,
boolean deleteSource,
Configuration conf, String addString) throws IOException {
dstFile = checkDest(srcDir.getName(), dstFS, dstFile, false);
if (!srcFS.getFileStatus(srcDir).isDirectory())
return false;
OutputStream out = dstFS.create(dstFile);
try {
FileStatus contents[] = srcFS.listStatus(srcDir);
Arrays.sort(contents);
for (int i = 0; i < contents.length; i++) {
if (contents[i].isFile()) {
InputStream in = srcFS.open(contents[i].getPath());
try {
IOUtils.copyBytes(in, out, conf, false);
if (addString!=null)
out.write(addString.getBytes("UTF-8"));
} finally {
in.close();
}
}
}
} finally {
out.close();
}
if (deleteSource) {
return srcFS.delete(srcDir, true);
} else {
return true;
}
}
在第12行加入如下代码即可完成对UTF-8 BOM的写入:out.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});
最终的结果为:/** Copy all files in a directory to one output file (merge). */
public static boolean copyMerge(FileSystem srcFS, Path srcDir,
FileSystem dstFS, Path dstFile,
boolean deleteSource,
Configuration conf, String addString) throws IOException {
dstFile = checkDest(srcDir.getName(), dstFS, dstFile, false);
if (!srcFS.getFileStatus(srcDir).isDirectory())
return false;
OutputStream out = dstFS.create(dstFile);
out.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF}); // 写入BOM
try {
FileStatus contents[] = srcFS.listStatus(srcDir);
Arrays.sort(contents);
for (int i = 0; i < contents.length; i++) {
if (contents[i].isFile()) {
InputStream in = srcFS.open(contents[i].getPath());
try {
IOUtils.copyBytes(in, out, conf, false);
if (addString!=null)
out.write(addString.getBytes("UTF-8"));
} finally {
in.close();
}
}
}
} finally {
out.close();
}
if (deleteSource) {
return srcFS.delete(srcDir, true);
} else {
return true;
}
}
分享到:
相关推荐
本篇将深入探讨Hadoop中文乱码问题的原因及解决方案。 首先,我们需要理解Hadoop系统中的编码设置。Hadoop默认使用的是UTF-8编码,但并非所有系统或文件都遵循这一标准。当输入的中文数据使用了不同的编码格式,...
《Hadoop权威指南中文版(第二版)》与《Hadoop in Action》及《Pro Hadoop》这三本书是深入理解和掌握Hadoop生态系统的关键资源。Hadoop作为一个分布式计算框架,其核心是解决大规模数据处理的问题,它允许在廉价...
二进制输出 多个输出 延迟输出 数据库输出 第8章 MapReduce的特性 计数器 内置计数器 用户定义的Java计数器 用户定义的Streaming计数器 排序 准备 部分排序 总排序 二次排序 联接 map...
在探讨Hadoop数据输出压缩这一主题时,我们深入解析了Hadoop如何通过不同的压缩格式、工具及算法来优化数据处理效率。以下是对标题、描述、标签以及部分内容中提及的关键知识点的详细阐述: ### Hadoop数据输出压缩...
Hadoop 故障解决方法 Hadoop 是一种大数据处理技术,它可以对大量数据进行处理和分析。但是在使用 Hadoop 过程中,我们经常会遇到一些错误和问题,本文将为您提供一些常见的 Hadoop 故障解决方法。 一、Shuffle ...
hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文文档hadoop2.7中文...
Hadoop In Action 中文第二版 卷二 rar
《Hadoop权威指南(第二版)》是一本深入解析Hadoop生态系统的经典著作,中文版的发布为国内的Hadoop开发者提供了便利的学习资源。这本书详细介绍了Hadoop的核心组件,包括HDFS(分布式文件系统)、MapReduce(分布式...
根据提供的文件信息,我们可以提炼出以下关于Hadoop官方中文文档的知识点。 首先,文档标题为“Hadoop官方中文文档”,这意味着文档是Apache Hadoop项目的官方指南,且已经被翻译成中文,以便中文读者更容易理解和...
大数据与Hadoop解决方案是当前信息技术领域的重要议题,它预示着数据管理和分析方法的重大变革。EMC作为信息存储和管理的领先企业,其Hadoop解决方案是针对大数据分析需求而设计的一套系统。 大数据商机在于数据的...
在使用MapReduce框架时,经常需要处理输出数据,这时可能会遇到需要将输出分散到多个文件中的需求,这就是Hadoop MapReduce多输出功能的用途。Hadoop MapReduce多输出的功能主要由MultipleOutputFormat类及其相关类...
hadoop常见问题及解决方法 Hadoop是大数据处理的重要工具,但是在安装和使用Hadoop时,可能会出现一些常见的问题,这些问题可能会导致Hadoop无法正常工作,或者无法达到预期的性能。下面是Hadoop常见的问题及解决...
在Hadoop中文文档的第二版中,读者可以深入了解到以下几个关键知识点: 1. **Hadoop安装与配置**:包括Hadoop环境的搭建,配置文件详解,以及如何进行单机模式、伪分布式模式和完全分布式模式的安装。 2. **HDFS...
《Hadoop权威指南中文第二版》是一本深度探讨Hadoop生态系统的重要著作,它全面而深入地阐述了Hadoop的核心技术和应用。这本书分为16个章节,涵盖了从基础理论到实践应用的广泛内容,旨在帮助读者理解和掌握大数据...
在《Hadoop实战》一书中,读者将了解到如何设置和管理Hadoop集群,包括安装配置Hadoop环境、优化集群性能以及解决常见问题。此外,书中还会详细介绍如何使用Hadoop进行数据导入与导出,如使用Hadoop的工具如sqoop与...
Hadoop 2.7.1 是一个开源框架,主要...通过阅读这份Hadoop 2.7.1的中文文档,无论是初学者还是经验丰富的开发者,都能深入了解Hadoop的工作原理,掌握其核心功能,并学会如何在实际环境中应用Hadoop解决大数据问题。
作为一个开源框架,Hadoop为海量数据的存储、处理和分析提供了高效且可扩展的解决方案。本文将深入探讨“Hadoop高级编程——构建与实现大数据解决方案”这一主题,旨在帮助读者掌握如何利用Hadoop构建实际的大数据...
这些项目与Hadoop结合使用,可以构建出更强大的大数据解决方案。 总的来说,Hadoop2.7.1中文文档是一个宝贵的资源,涵盖了Hadoop的基本概念、架构、配置、使用和最佳实践。无论你是初学者还是经验丰富的开发者,都...
这个“Hadoop 官方文档(中文版)”提供了全面的指导,涵盖了从初学者到高级用户的各个层面。下面将详细阐述文档中可能涉及的主要知识点。 1. **Hadoop 快速入门**: - Hadoop 的核心组件:包括HDFS(Hadoop 分布式...