• Linux 上运行 mapreduce 类型错误


    1.ClassCastException

    错误代码

    /**
     * 
     */
    /**
     * @author hadoop
     *
     */
    package WordCount;
    
    import java.io.IOException;
    import java.util.Iterator;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    
    /**
     * KEYIN :是map task读取到的数据的key的类型,是一行的起始偏移量Long
     * VALUEIN:是map task读取到的数据的value的类型,是一行的内容String
     * 
     * KEYOUT:是用户的自定义map方法要返回的结果kv数据的key的类型,在wordcount逻辑中,我们需要返回的是单词String
     * VALUEOUT:是用户的自定义map方法要返回的结果kv数据的value的类型,在wordcount逻辑中,我们需要返回的是整数Integer
     * 
     * 
     * 但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程中传输效率低下
     * 所以,hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口
     * 
     * hadoop为jdk中的常用基本类型Long String Integer Float等数据类型封住了自己的实现了hadoop序列化接口的类型:LongWritable,Text,IntWritable,FloatWritable
     * 
     * 
     * 
     *  
     *
     */
    public class WordCountMapper extends
            Mapper<IntWritable, Text, Text, IntWritable> { 
        @Override
        protected void map(IntWritable index, Text line,
                org.apache.hadoop.mapreduce.Mapper.Context context)
                throws IOException, InterruptedException {
            String str = line.toString();
            String[] strList = str.split(" ");
            for (String word : strList) {
                context.write(new Text(word), new IntWritable(1));
            } 
        }
    
    }

    正确代码

    将第一个泛型修改成LongWritable

    /**
     * 
     */
    /**
     * @author hadoop
     *
     */
    package WordCount;
    
    import java.io.IOException;
    import java.util.Iterator;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    
    /**
     * KEYIN :是map task读取到的数据的key的类型,是一行的起始偏移量Long
     * VALUEIN:是map task读取到的数据的value的类型,是一行的内容String
     * 
     * KEYOUT:是用户的自定义map方法要返回的结果kv数据的key的类型,在wordcount逻辑中,我们需要返回的是单词String
     * VALUEOUT:是用户的自定义map方法要返回的结果kv数据的value的类型,在wordcount逻辑中,我们需要返回的是整数Integer
     * 
     * 
     * 但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程中传输效率低下
     * 所以,hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口
     * 
     * hadoop为jdk中的常用基本类型Long String Integer Float等数据类型封住了自己的实现了hadoop序列化接口的类型:LongWritable,Text,IntWritable,FloatWritable
     * 
     * 
     * 
     *  
     *
     */
    public class WordCountMapper extends
            Mapper<LongWritable, Text, Text, IntWritable> { 
        @Override
        protected void map(LongWritable index, Text line,
                org.apache.hadoop.mapreduce.Mapper.Context context)
                throws IOException, InterruptedException {
            String str = line.toString();
            String[] strList = str.split(" ");
            for (String word : strList) {
                context.write(new Text(word), new IntWritable(1));
            } 
        }
    
    }
  • 相关阅读:
    git创建一个空的版本库
    程序后台服务启动,MongoDB未启动(启动较慢)/(关机重启情况下)。
    启动客户端后台服务
    客户端后台服务(已注册机器)RabbitMQ未消费的情况
    MongoDB数据重复解决方案
    github中新建一个branch(分支)
    MES-后台服务卸载
    linux 第八章 高级键盘
    socketserver
    jmeter发送邮件的模板
  • 原文地址:https://www.cnblogs.com/liuyongpingblog/p/9985857.html
Copyright © 2020-2023  润新知