`
tenght
  • 浏览: 51828 次
社区版块
存档分类
最新评论

[hadoop2.7.1]I/O之序列化(WritableSerialization)示例

阅读更多

首先先引入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;
	}
}





分享到:
评论

相关推荐

    hadoop2.7.1 windows缺少的文件winutils.exe,hadoop.dll

    下载winutils.exe,hadoop.dll放到hadoop环境的bin目录,建议尽量使用版本匹配的,必然hadoop-2.6就使用2.6版本的。2.7版本就使用2.7.。理论上2.7版本可以使用在2.6版本上

    hadoop-2.7.1.zip

    与Hadoop 2.7.1一同提及的还有hive-1.2.1,Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。在Hive 1.2.1中,可能包含的改进有: 1. 性能优化,包括更快的查询执行...

    Hadoop2.7.1安装与配置

    - 设置I/O文件缓冲大小:`&lt;value&gt;131702&lt;/value&gt;`。 - **修改`hdfs-site.xml`**: - 设置NameNode数据目录:`&lt;value&gt;file:/home/yy/hadoop-2.7.1/dfs/name&lt;/value&gt;`。 - 设置DataNode数据目录:`&lt;value&gt;file:/...

    Hadoop安装教程_单机/伪分布式配置_Hadoop2.7.1/Ubuntu 16.04

    Hadoop安装教程_单机/伪分布式配置_Hadoop2.7.1/Ubuntu 16.04 本教程主要讲述了在 Ubuntu 16.04 环境下安装 Hadoop 2.7.1 的步骤,包括单机模式、伪分布式模式和分布式模式三种安装方式。以下是本教程的知识点总结...

    hadoop2.7.1.rar

    标题中的"hadoop2.7.1.rar"表明这是一个关于Apache Hadoop的压缩文件,具体版本为2.7.1。Hadoop是一个开源框架,主要用于分布式存储和计算,它由Apache软件基金会开发,广泛应用于大数据处理领域。这个压缩包可能是...

    hadoop-2.7.1

    10. **安装与部署**:安装Hadoop 2.7.1通常涉及解压`hadoop-2.7.1.tar.gz`,配置环境变量,格式化HDFS,启动守护进程等步骤。集群部署还需要考虑节点间的通信和数据同步。 综上所述,Hadoop 2.7.1是一个强大的大...

    hadoop2.7.1 eclipse插件

    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及以上,否则无法使用

    hadoop2.7.1的Windows版本

    5. 运行`bin/start-all.sh`启动Hadoop服务,或者使用Hadoop提供的图形化管理工具如Hadoop UI进行监控。 总之,要在Windows上运行Hadoop 2.7.1,我们需要解决与Unix/Linux不兼容的问题,包括使用模拟Linux环境、修改...

    Hadoop2.7.1中文文档

    Hadoop2.7.1是Hadoop发展中的一个重要版本,它在前一个版本的基础上进行了一系列的优化和改进,增强了系统的稳定性和性能。这个压缩包文件包含的是Hadoop2.7.1的中文文档,对于学习和理解Hadoop的运作机制、配置以及...

    hadoop 2.7.1

    在使用Hadoop时,需要注意数据的分块策略,合理设置Block Size以优化I/O效率。同时,为了保证数据安全,定期进行NameNode的快照备份是必要的。此外,监控系统性能,如磁盘使用率、CPU和内存使用情况,以及网络带宽,...

    hadoop.zip hadoop2.7.1安装包

    在Hadoop2.7.1安装包中,`hadoop-2.7.1.tar.gz`是主要的发布文件,包含了Hadoop的所有组件和依赖库。这个tarball文件通常在Linux环境下使用,通过解压缩可以得到Hadoop的源代码和二进制文件。用户需要配置环境变量、...

    hadoop2.7.1tar包.zip

    Hadoop2.7.1对MapReduce进行了优化,提高了任务调度和数据本地化的效率。 解压hadoop2.7.1tar包.zip后,你会得到一个包含配置文件、库文件、可执行文件等的目录结构。通常,这包括以下几个关键部分: 1. **bin**:...

    eclipse hadoop2.7.1 plugin 配置

    `eclipse hadoop2.7.1 plugin`是为了方便开发者在Eclipse中进行Hadoop项目开发而设计的插件。本文将详细介绍如何配置Eclipse以支持Hadoop 2.7.1,并讨论相关的知识点。 首先,配置Eclipse Hadoop插件的步骤如下: ...

    hadoop2.7.1平台搭建

    hadoop2.7.1平台搭建

    hadoop2.7.1-win32.zip

    标题 "hadoop2.7.1-win32.zip" 指示了这是一个适用于Windows 32位操作系统的Hadoop版本,具体为2.7.1。Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大量计算机节点上处理和存储海量数据。这个...

    winutils.exe_hadoop-2.7.1

    《Hadoop Winutils.exe在2.7.1版本中的应用与配置详解》 Hadoop作为一个分布式计算框架,广泛应用于大数据处理领域。在Windows环境中,Winutils.exe和hadoop.dll是Hadoop的重要组成部分,它们为Hadoop在Windows上的...

    hadoop-2.7.1.tar.gz

    标题中的"hadoop-2.7.1.tar.gz"是一个压缩包文件,它是Apache Hadoop的2.7.1版本。Hadoop是一个开源框架,主要用于分布式存储和计算,它使得处理和存储海量数据变得可能。".tar.gz"是Linux/Unix系统中常用的文件压缩...

    hadoop-2.7.1.rar

    同时,此版本还对 HDFS 和 MapReduce 进行了性能优化,例如更快的数据读写速度、更高效的磁盘 I/O 和网络通信等。 在实际应用中,Hadoop 2.7.1 可用于各种场景,如日志分析、推荐系统、图像处理、生物信息学研究等...

    hadoop2.7.1版本的hadoop.dll,winutils.exe

    Hadoop 2.7.1是这个框架的一个重要版本,它包含了各种优化和改进,以提高数据处理的效率和稳定性。在这个版本中,有两个关键的组件是hadoop.dll和winutils.exe,它们在Windows环境下运行Hadoop时扮演着至关重要的...

    Spark所需的hadoop2.7.1相关资源

    Hadoop2.7.1是Hadoop的一个重要版本,它带来了许多改进和优化,而Spark则是一个快速、通用且可扩展的数据处理框架,尤其在处理大规模数据时表现出色。Spark与Hadoop的兼容性是确保大数据工作流流畅运行的关键。 ...

Global site tag (gtag.js) - Google Analytics