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. Lua的require和module小结

    Lua的require和module小结  module特性是lua5.1中新增的,用于设置Lua文件自己的模块,最常用的方式是module(name,package.seeall),有时候lua文件 ...

  2. 与Wii控制手柄通信的托管代码库(转)

    2009-01-16 翻译 HID Human Input Device     人工输入设备 Wii Fit Balance Board       平衡板 IR                   ...

  3. Shell练习 行列转换

    原题:https://leetcode.com/problems/transpose-file/Given a text file file.txt, transpose its content. Y ...

  4. 华为上机:IP地址转换

    IP地址转换 描述: IP地址的长度为32,即有2^32-1个地址.IP地址一般采用点分十进制表示法,例如"192.168.1.1".IP地址也可以直接用一个32位的整数进行表示. ...

  5. android-exploitme(六):基础加密

    这次我们看看程序在设备上存储了什么敏感信息 (server-env)sartre:AndroidLabs2 maxim$ adb shell # cd /data/data/com.securityc ...

  6. 2、Spring的LocalSessionFactoryBean创建过程源码分析

    spring的LocalSessionFactoryBean生成过程与hibernate的SessionFactory生成过程是高度吻合的. 为了后面源码分析,首先讲解一个接口,一个类的功能:①.接口 ...

  7. JS可改变列宽table

    <!DOCTYPE HTML> <html> <head> <meta charset="gbk"> <title>ta ...

  8. bootstrap table 服务器端分页例子

    1,前台引入所需的js 可以从官网上下载 function getTab(){ var url = contextPath+'/fundRetreatVoucher/fundBatchRetreatV ...

  9. Debugging JTAG Connectivity Problems

    2013-12-04 22:34:26 转自:http://processors.wiki.ti.com/index.php/Debugging_JTAG_Connectivity_Problems ...

  10. ubuntu下启动和关闭tomcat的简单方法

    在ubuntu下面,我们安装tomcat可以有两种方式[1]用aptitude安装aptitude install tomcat6 [2]免安装版从apache tomcat 网站下载apache-t ...