首先先引入hadoop2.7.1中的一个工具类GenericsUtil,顾名思义,是用来处理java泛型的一个工具类,这个类很简单,但很实用,不多说,直接上源码:
package org.apache.hadoop.util;
import java.lang.reflect.Array;
import java.util.List;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
/**
* Contains utility methods for dealing with Java Generics.
*/
@InterfaceAudience.Private
@InterfaceStability.Unstable
public class GenericsUtil {
/**
* Returns the Class object (of type <code>Class<T></code>) of the
* argument of type <code>T</code>.
* @param <T> The type of the argument
* @param t the object to get it class
* @return <code>Class<T></code>
*/
public static <T> Class<T> getClass(T t) {
@SuppressWarnings("unchecked")
Class<T> clazz = (Class<T>)t.getClass();
return clazz;
}
/**
* Converts the given <code>List<T></code> to a an array of
* <code>T[]</code>.
* @param c the Class object of the items in the list
* @param list the list to convert
*/
public static <T> T[] toArray(Class<T> c, List<T> list)
{
@SuppressWarnings("unchecked")
T[] ta= (T[])Array.newInstance(c, list.size());
for (int i= 0; i<list.size(); i++)
ta[i]= list.get(i);
return ta;
}
/**
* Converts the given <code>List<T></code> to a an array of
* <code>T[]</code>.
* @param list the list to convert
* @throws ArrayIndexOutOfBoundsException if the list is empty.
* Use {@link #toArray(Class, List)} if the list may be empty.
*/
public static <T> T[] toArray(List<T> list) {
return toArray(getClass(list.get(0)), list);
}
}
利用上面的工具类,下面举一个TestWritableSerialization的一个示例,源码如下:
import java.io.Serializable;
import java.util.EnumSet;
import org.apache.hadoop.io.DataInputBuffer;
import org.apache.hadoop.io.DataOutputBuffer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.EnumSetWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparator;
import org.apache.hadoop.util.GenericsUtil;
import org.junit.Test;
import static org.junit.Assert.*;
public class THT_TestWritableSerialization {
private static final Configuration conf = new Configuration();
enum TestEnumSet {
CREATE, OVERWRITE, APPEND;
}
@Test
public void testWritableSerialization() throws Exception {
IntWritable before1 = new IntWritable(123456789);
byte[] hadoop = "hadoop".getBytes();
BytesWritable before2 = new BytesWritable(hadoop);
String[] arraywr = { "zero", "one", "two" };
ArrayWritable arraywrA = new ArrayWritable(arraywr);
Writable[] arraywrW = arraywrA.get();
Writable before3 = arraywrW[0];
EnumSetWritable<TestEnumSet> before4 = new EnumSetWritable<TestEnumSet>(
EnumSet.of(TestEnumSet.APPEND));
Text before5=new Text("test for you");
IntWritable after1 = testSerialization(conf, before1);
BytesWritable after2 = testSerialization(conf, before2);
Writable after3 = testSerialization(conf, before3);
EnumSetWritable<TestEnumSet> after4 = testSerialization(conf, before4);
Text after5 = testSerialization(conf, before5);
assertEquals(before1, after1);
assertEquals(before2, after2);
assertEquals(before3, after3);
assertEquals(before4, after4);
assertEquals(before5, after5);
}
public static <K> K testSerialization(Configuration conf, K before)
throws Exception {
SerializationFactory factory = new SerializationFactory(conf);
Serializer<K> serializer = factory.getSerializer(GenericsUtil
.getClass(before));
Deserializer<K> deserializer = factory.getDeserializer(GenericsUtil
.getClass(before));
DataOutputBuffer out = new DataOutputBuffer();
serializer.open(out);
serializer.serialize(before);
serializer.close();
DataInputBuffer in = new DataInputBuffer();
in.reset(out.getData(), out.getLength());
deserializer.open(in);
K after = deserializer.deserialize(null);
deserializer.close();
return after;
}
}
分享到:
相关推荐
下载winutils.exe,hadoop.dll放到hadoop环境的bin目录,建议尽量使用版本匹配的,必然hadoop-2.6就使用2.6版本的。2.7版本就使用2.7.。理论上2.7版本可以使用在2.6版本上
与Hadoop 2.7.1一同提及的还有hive-1.2.1,Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。在Hive 1.2.1中,可能包含的改进有: 1. 性能优化,包括更快的查询执行...
- 设置I/O文件缓冲大小:`<value>131702</value>`。 - **修改`hdfs-site.xml`**: - 设置NameNode数据目录:`<value>file:/home/yy/hadoop-2.7.1/dfs/name</value>`。 - 设置DataNode数据目录:`<value>file:/...
Hadoop安装教程_单机/伪分布式配置_Hadoop2.7.1/Ubuntu 16.04 本教程主要讲述了在 Ubuntu 16.04 环境下安装 Hadoop 2.7.1 的步骤,包括单机模式、伪分布式模式和分布式模式三种安装方式。以下是本教程的知识点总结...
标题中的"hadoop2.7.1.rar"表明这是一个关于Apache Hadoop的压缩文件,具体版本为2.7.1。Hadoop是一个开源框架,主要用于分布式存储和计算,它由Apache软件基金会开发,广泛应用于大数据处理领域。这个压缩包可能是...
10. **安装与部署**:安装Hadoop 2.7.1通常涉及解压`hadoop-2.7.1.tar.gz`,配置环境变量,格式化HDFS,启动守护进程等步骤。集群部署还需要考虑节点间的通信和数据同步。 综上所述,Hadoop 2.7.1是一个强大的大...
hadoop2.7.1的eclipse插件,编译环境,eclipse 4.4(luna) ,jdk1.7,ant1.9.6,maven3.3,hadoop2.7.1,centos6.7,jdk1.7 要注意的是开发黄金下jdk版本必须是jdk1.7及以上,否则无法使用
5. 运行`bin/start-all.sh`启动Hadoop服务,或者使用Hadoop提供的图形化管理工具如Hadoop UI进行监控。 总之,要在Windows上运行Hadoop 2.7.1,我们需要解决与Unix/Linux不兼容的问题,包括使用模拟Linux环境、修改...
Hadoop2.7.1是Hadoop发展中的一个重要版本,它在前一个版本的基础上进行了一系列的优化和改进,增强了系统的稳定性和性能。这个压缩包文件包含的是Hadoop2.7.1的中文文档,对于学习和理解Hadoop的运作机制、配置以及...
在使用Hadoop时,需要注意数据的分块策略,合理设置Block Size以优化I/O效率。同时,为了保证数据安全,定期进行NameNode的快照备份是必要的。此外,监控系统性能,如磁盘使用率、CPU和内存使用情况,以及网络带宽,...
在Hadoop2.7.1安装包中,`hadoop-2.7.1.tar.gz`是主要的发布文件,包含了Hadoop的所有组件和依赖库。这个tarball文件通常在Linux环境下使用,通过解压缩可以得到Hadoop的源代码和二进制文件。用户需要配置环境变量、...
Hadoop2.7.1对MapReduce进行了优化,提高了任务调度和数据本地化的效率。 解压hadoop2.7.1tar包.zip后,你会得到一个包含配置文件、库文件、可执行文件等的目录结构。通常,这包括以下几个关键部分: 1. **bin**:...
`eclipse hadoop2.7.1 plugin`是为了方便开发者在Eclipse中进行Hadoop项目开发而设计的插件。本文将详细介绍如何配置Eclipse以支持Hadoop 2.7.1,并讨论相关的知识点。 首先,配置Eclipse Hadoop插件的步骤如下: ...
hadoop2.7.1平台搭建
标题 "hadoop2.7.1-win32.zip" 指示了这是一个适用于Windows 32位操作系统的Hadoop版本,具体为2.7.1。Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大量计算机节点上处理和存储海量数据。这个...
《Hadoop Winutils.exe在2.7.1版本中的应用与配置详解》 Hadoop作为一个分布式计算框架,广泛应用于大数据处理领域。在Windows环境中,Winutils.exe和hadoop.dll是Hadoop的重要组成部分,它们为Hadoop在Windows上的...
标题中的"hadoop-2.7.1.tar.gz"是一个压缩包文件,它是Apache Hadoop的2.7.1版本。Hadoop是一个开源框架,主要用于分布式存储和计算,它使得处理和存储海量数据变得可能。".tar.gz"是Linux/Unix系统中常用的文件压缩...
同时,此版本还对 HDFS 和 MapReduce 进行了性能优化,例如更快的数据读写速度、更高效的磁盘 I/O 和网络通信等。 在实际应用中,Hadoop 2.7.1 可用于各种场景,如日志分析、推荐系统、图像处理、生物信息学研究等...
Hadoop 2.7.1是这个框架的一个重要版本,它包含了各种优化和改进,以提高数据处理的效率和稳定性。在这个版本中,有两个关键的组件是hadoop.dll和winutils.exe,它们在Windows环境下运行Hadoop时扮演着至关重要的...
Hadoop2.7.1是Hadoop的一个重要版本,它带来了许多改进和优化,而Spark则是一个快速、通用且可扩展的数据处理框架,尤其在处理大规模数据时表现出色。Spark与Hadoop的兼容性是确保大数据工作流流畅运行的关键。 ...