1.写hadoop的map-reduce程序之前所必须知道的基础知识:
1)hadoop map-reduce的自带的数据类型:
 Hadoop提供了如下内容的数据类型,这些数据类型都实现了WritableComparable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储,以及进行大小比较。(如果是自定义的key,value的数据类型,必须也要写其大小比较的方法)
BooleanWritable:标准布尔型数值

ByteWritable:单字节数值

DoubleWritable:双字节数

FloatWritable:浮点数

IntWritable:整型数

LongWritable:长整型数

Text:使用UTF8格式存储的文本

NullWritable:当<key,value>中的key或value为空时使用

 
2)hadoop的 map -combiner - reduce 之间的输入输出数据类型的关系:

一个Map/Reduce 作业的输入和输出类型如下所示:

(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)

特别注意:combine的输入输出和map的输出完全一样
 
2.在写第一个hadoop程序中出现的问题:
1)由以上map-reduce的输入输出数据类型关系可以看出:
在hadoop中,只要定义了map和reduce的输出类型,那么整个hadoop的运行流程中的数据类型基本都确定了
hadoop程序在job中配置输出类型
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(Text.class); //combine的输入输出一定是<Text,Text,Text,Text>,reduce的输入一定是<Text,Text>
 
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(NullWritable.class);
 
2)以上job中的配置一定要与程序中mapper、combiner和reducer中定义的数据类型一致:
如果job中是以上配置,那么mapper,combiner和reducer的定义一定要是下面这样:
mapper:
  public static class MyMapper  extends Mapper<Object, Text, Text1, Text1>
combiner:
  public static class MyCombiner  extends Reducer<Text1,Text1,Text1,Text1>
reducer:
  public static class MyReducer  extends Reducer<Text1,Text1,Text,NullWritable>
注意:以上标红的地方类型必须完全一致(实际程序中应是Text类型,这里为了表明对应关系用Text)
 
3.调试map-reduce程序中,发现在eclipse中写map-reduce程序中经常程序会莫名其妙的终止,但是在eclipse中的console中却没有任何错误的提示——因为hadoop的很多输出时输出到log或系统的标准输出流中,如果想要看程序到底在哪里出现了问题,必须要在命令行中运行,才会显示所有的错误,如何在命令行中配置编译hadoop map-reduce程序的环境请看上一篇hadoop——在命令行下编译并运行map-reduce程序
 
4.调试程序中,每次编译好生成.class和.jar后,都要输入命令,运行完还得输入查询结果的命令,下一次运行还要清除上次放在hdfs中的文件,因此可以将整个程序执行过程通过写bash脚本来完成
具体的bash脚本如下:
#!/bin/bash
rm -f *.class *.jar && #删除当前目录下上次生成的jar包和.class文件
javac Hw2Part1.java &&#重新编译map-reduce程序
jar cfm Hw2Part1.jar WordCount-manifest.txt Hw2Part1*.class &&#生成jar包
hdfs dfs -rm -f -r hw2/output  hw2/example-input.txt#删除hdfs中上次的输入输出文件
hdfs dfs -put ./example-input.txt hw2/&&;#将选择的输入文件放到hdfs中
hadoop jar ./Hw2Part1.jar hw2/example-input.txt hw2/output &&#执行map-reduce程序
hdfs dfs -cat 'hw2/output/part-*'#查看map-reduce的输出

注意:在bash脚本中&&表示上条命令正确执行完后才会继续执行下条指令

值得注意的是:hadoop程序的输入可以是目录也可以是某个具体的文件,如果输入是目录就会顺序读取该目录下所有的文件,如果输入是文件,那么就只会读取这一个指定的文件
 
5。每次调试运行以上脚本后,就可以看到程序执行中具体哪个地方有问题,如果程序执行正确会直接在控制台上输出运行的结果
 
转:http://blog.csdn.net/guoqingpei/article/details/45620153

hadoop-初学者写map-reduce程序中容易出现的问题 3的更多相关文章

  1. Hadoop学习笔记2 - 第一和第二个Map Reduce程序

    转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...

  2. eclipse 中运行 Hadoop2.7.3 map reduce程序 出现错误(null) entry in command string: null chmod 0700

    运行map reduce任务报错: (null) entry in command string: null chmod 0700 解决办法: 在https://download.csdn.net/d ...

  3. Hadoop学习:Map/Reduce初探与小Demo实现

    原文地址:https://blog.csdn.net/liyong199012/article/details/25423221 一.    概念知识介绍 Hadoop MapReduce是一个用于处 ...

  4. map reduce程序示例

    map reduce程序示例 package test2; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop. ...

  5. 使用Python实现Map Reduce程序

    使用Python实现Map Reduce程序 起因 想处理一些较大的文件,单机运行效率太低,多线程也达不到要求,最终采用了集群的处理方式. 详细的讨论可以在v2ex上看一下. 步骤 MapReduce ...

  6. 第一个map reduce程序

    完成了第一个mapReduce例子,记录一下. 实验环境: hadoop在三台ubuntu机器上部署 开发在window7上进行 hadoop版本2.2.0 下载了hadoop-eclipse-plu ...

  7. Hadoop 使用Combiner提高Map/Reduce程序效率

    众所周知,Hadoop框架使用Mapper将数据处理成一个<key,value>键值对,再网络节点间对其进行整理(shuffle),然后使用Reducer处理数据并进行最终输出. 在上述过 ...

  8. Hadoop实战:使用Combiner提高Map/Reduce程序效率

    好不easy算法搞定了.小数据測试也得到了非常好的结果,但是扔到进群上.挂上大数据就挂了.无休止的reduce不会结束了. .. .. .... .. ... .. ================= ...

  9. hadoop自己写的最高温度程序源码

    package com.teset; import java.io.IOException; import java.util.StringTokenizer; import org.apache.h ...

  10. Hadoop Map/Reduce教程

    原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/mapred_tutorial.html 目的 先决条件 概述 输入与输出 例子:WordCount v1.0 ...

随机推荐

  1. 浏览器的CSS各种hack,大汇总

    对着IE久了也有感觉了,在win10出新浏览器以及中国的IE6+用户没有普及新的浏览器前IE还是个坑,所以hack这东西还是要掌握一点的.不废话直接贴图 记得之前在项目里面针对IE6的hack是这样写 ...

  2. lintcode:二叉树的路径和

    题目 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径. 一个有效的路径,指的是从根节点到叶节点的路径. 解题 下面有个小bug 最后比较的时候是叶子节点为空,左右都有叶子结点,所 ...

  3. hdu 1847 Good Luck in CET-4 Everybody!(简单博弈SG)

    #include<stdio.h> #include<string.h> #define N 1010 int hash[N]; int sg[N]; void GetSG() ...

  4. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...

  5. 预编译头文件 StdAfx.h

    预编译头文件: 最常见的使用场景就是 StdAfx.h 文件,在这个文件中包含常用的头文件,比如windows.h,cstdio,string,别的 .cpp 文件去包含 StdAfx.h 头文件.编 ...

  6. 配置Linux系统网卡连接网络

    本实验需要两台虚拟机来完成,环境如下: 主机名称 操作系统 ip地址 本地主机 RHEL7_64 192.168.157.134 -> 192.168.129.127 远程主机 CentOS 6 ...

  7. 局部敏感哈希Locality Sensitive Hashing(LSH)之随机投影法

    1. 概述 LSH是由文献[1]提出的一种用于高效求解最近邻搜索问题的Hash算法.LSH算法的基本思想是利用一个hash函数把集合中的元素映射成hash值,使得相似度越高的元素hash值相等的概率也 ...

  8. OkHttp使用进阶(译自OkHttp官方教程)

    没有使用过OkHttp的,可以先看OkHttp使用介绍 英文版原版地址 Recipes · square/okhttp Wiki 同步get 下载一个文件,打印他的响应头,以string形式打印响应体 ...

  9. OTP【转】

    转自:http://baike.baidu.com/link?url=58z3oZfEMvNRiDUmWrxtzfDhv--UZ1jaW4rBHg1d9kIWd6HQaYZ96DH8QAFopSZBK ...

  10. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...