在hadoop-2.2.0集群上使用TotalOrderPartitioner进行排序时遇到的新旧接口问题

最近我所在的一个项目进行了Hadoop版本迁移,由hadoop-0.20.2迁移至hadoop-2.2.0,旧版的mapreduce Job虽然都是用旧的API写的,但在新环境下基本上都是兼容的,只有两个涉及到global sort的Job,出现了同样的问题,报错分别如下:

1、wrong key class: org.apache.hadoop.io.LongWritable is not class com.cmri.bcpdm.v2.filters.sort.NewText
at org.apache.hadoop.io.SequenceFile$RecordCompressWriter.append(SequenceFile.java:1380)
at org.apache.hadoop.mapreduce.lib.partition.InputSampler.writePartitionFile(InputSampler.java:340)
at org.apache.hadoop.mapred.lib.InputSampler.writePartitionFile(InputSampler.java:49)
at com.cmri.bcpdm.v2.filters.sort.Sort.run(Sort.java:295)
2、wrong key class: org.apache.hadoop.io.LongWritable is not class org.apache.hadoop.io.IntWritable
at org.apache.hadoop.io.SequenceFile$RecordCompressWriter.append(SequenceFile.java:1380)
at org.apache.hadoop.mapreduce.lib.partition.InputSampler.writePartitionFile(InputSampler.java:340)
at org.apache.hadoop.mapred.lib.InputSampler.writePartitionFile(InputSampler.java:49)
at com.cmri.bcpdm.v2.filters.counttransform.CountTransform.run(CountTransform.java:223)

一开始怎么也搞不清怎么回事啊。。。后来上网找了半天,才发现hadoop源码包里边的example中就自带有sort.java的程序,仔细比较了一下新旧两个版本,觉得有必要用新的API改改旧代码了。就的API放在org.apache.hadoop.mapred包中,新API则放在org.apache.hadoop.mapreduce包中。

照着example中的程序改了之后,上述错误不见了,但出现了新的错误:

Can‘t read partitions file

Caused by: java.io.FileNotFoundException: File _partition.lst does not

exist.

意思是找不到分区文件。

又在google上找了半天,最后在这里找到了答案,其实就是把代码中的conf都改成job.getConfiguration(),具体原因不是太清楚。

PS:在用API重写的过程中,还发现了另一个问题,mapreduce在用conf.set("name","value")设置全局变量的时候,这行代码应该放在Job定义之前,也就是尽量往前放,否则可能设置不成功,map 或 reduce在读取这个全局变量的时候读出的是null,造成之后的错误。

时间: 2024-12-22 18:07:16

在hadoop-2.2.0集群上使用TotalOrderPartitioner进行排序时遇到的新旧接口问题的相关文章

Linux下Hadoop 2.2.0 集群配置攻略

Hadoop 2.2.0 集群配置攻略 用户输入标识: chmod +x jdk-7u45-linux-x64.rpm  为黑色带底纹 系统输出标识: java version "1.7.0_51" 为绿色小字 2014年3月20-日 by lilihao Q 404536204 1. 安装sun jdk (1). 到Oracle的官方网站下载jdk,目前最新版本是7u51 安装包: http://www.oracle.com/technetwork/java/javase/downl

Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)

现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机,增加更多的slave只需重复slave部分的内容即可. 系统版本: master:Ubuntu 12.04 slave:Ubuntu 12.04 hadoop:hadoop 2.2.0 安装ssh服务:sudo apt-get install ssh 有时也要更新一下vim:sudo apt-ge

CentOS7上Hadoop 2.6.0集群的安装与配置

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45740791 1.CentOS7安装 (1)最小化安装CentOS7 (2)配置网络连接 vi/etc/sysconfig/network-scripts/ifcfg-eth0 修改:BOOTPROTO=static ONBOOT=yes 添加:IPADDR= ipaddress(ip地址) NETMASK=subnetmask(子网掩码) GATEWAY=gateway(网关)

Hadoop 2.2.0 集群搭建

概述 在前面我有写过关于 Hadoop 集群的搭建,不过之前的 Hadoop 是 1.x 版本的.目前是基于 2.x 版本的 Hadoop,与之前的 1.x 版本的差别还是挺大的.以及更为详细的 SSH 免密码互连登录的配置过程.所以,这里也把我搭建的过程记录下来了.希望于你有益. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Coding-Naga 发表日期: 2016年5月4日 本文链接:http://blog.csdn.net/lemon_tr

Hadoop 2.6.0集群搭建(未完)

分给我的云服务器只有2台= = 所以只用两台来搭建~多台也就是多配几个slave节点木有关系的啦~那么下来开始啦 一.首先准备好编译过的hadoop2.6版本,以及相关jar包~准备开始搞啊~ 解压命令是 tar zxvf xxxxxxx(文件名) 创建tmp路径 用于hadoop相关路径 mkdir tmp 在tmp下创建hadoop路径 mkdir hadoop 创建在根目录创建data路径 随后路径如图 二.配置环境变量 随后输入命令 source ~./bash_profile 修改ho

在Hadoop集群上运行R程序--安装RHadoop

RHadoop是由Revolution Analytics发起的一个开源项目,它可以将统计语言R与Hadoop结合起来.目前该项目包括三个R packages,分别为支持用R来编写MapReduce应用的rmr.用于R语言访问HDFS的rhdfs以及用于R语言访问HBASE的rhbase.下载网址为https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads. 说明:下面的记录是在安装成功后的总结,中间的过程描述及解决方法可能并不精确

用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控

写在前面 前文:用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 为了方便,这篇文章里的例子均为伪分布式运行,一般来说只要集群配置得当,在伪分布式下能够运行的程序,在真实集群上也不会有什么问题. 为了更好地模拟集群环境,我们可以在mapred-site.xml中增设reducer和mapper的最大数目(默认为2,实际可用数目大约是CPU核数-1). 假设你为Hadoop安装路径添加的环境变量叫$HADOOP_HOME(如果是$HAD

Hadoop集群上使用JNI,调用资源文件

hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明hadoop上面如何使用JNI.以及调用资源文件. 首先介绍一下ICTClass,ICTClass是中国科学院开发的一个分词软件(ICTClass官网).该套软件采用C/C++编写.ICTClass虽然支持java,但是必须使用到的JNI技术.因此,在使用ICTClass之前需要配置好JNI资源以及IC

通过eclipse方法来操作Hadoop集群上cassandra数据库(包括创建Keyspace对象以及往数据库写入数据)

(1)下载cassandra,我所用版本为apache-cassandra-2.0.13-bin.tar.gz(hadoop版本为1.0.1),将其上传到hadoop集群,然后解压,tar -xzf apache-cassandra-2.0.13-bin.tar.gz; 并改名为 cassandra,放在目录/usr/下面,然后修改几个文件: vim cassandra.yaml  按照下面的字段修改 data_file_directories: - /usr/cassandra/data #