hadoop初学的第一个程序详细讲解-含排错过程

学hadoop,第一个程序当然就是WordCount,这个程序不用自己照着书上抄写,hadoop的安装包里已经带了很多学习示例,其中就包括WordCount,如下图中的最后一个文件就是了

先附上两个测试文件如下:

echo "Hello World Bye World" > file01

echo "Hello Hadoop Goodbye Hadoop" > file02

hadoop dfs -mkdir input

hadoop dfs -put file0* /user/hadoop/input

然后我用myeclipse打开进行编辑:

1.添加必要的JAR包,jar包在3个地方:1.hadoop安装包解压出来的首层目录中;2.lib文件夹内;3.lib\jsp-2.1文件夹内。注意lib文件夹里面还有两个文本文件,不要拷进去。

2.还有个关于字符编码方式的小细节要注意一下,不然执行的时候容易报错,设置方式见下图:

先在项目上右键,在弹出菜单中选择属性:

然后在项目属性对话框中,我这里原来默认的是GBK编码,现已经改为UTF-8,如下图:

3.源代码中有如下一个片段,让我初次调试时遇到些麻烦

if (otherArgs.length != 2) {

System.err.println("Usage: wordcount  < in > < out >");

System.exit(2);

}

这个意思是说,如果执行的时候,参数个数不等于2,就提示错误信息并且退出。

但是我执行的时候是参考了书上的命令,如下:

hadoop jar wordcount.jar WordCount input output

这个命令我解释一下:

第一个参数hadoop,没什么可讲的,运行hadoop的所有命令,都得以hadoop开头

第二个参数jar,表示即将输入一个jar包

第三个参数wordcount.jar,是我打包上传的jar包的具体名字,就存在于本地路径,而非hdfs上面

第上个参数WordCount,是主类名,也就是要运行的主要的程序了

后面两个参数,都是集群上的,一个是输入路径,一个是输出路径,注意输出路径应该保障是不存在的,否则会被覆盖

运行上面的命令的结果,很显然,输出如下:

Usage: wordcount < in > < out >

这就表明,参数个数不是2个,所以执行了这段代码,程序就退出了

我一开始也不明白,所以把代码改了一下:

for(int i=0;i

System.out.println(otherArgs[i]);

}

if (otherArgs.length != 2) {

System.err.println("Usage: wordcount  < in > < out >");

System.exit(2);

}

结果输出如下:

WordCount

/user/hadoop/input

/user/hadoop/output

Usage: wordcount

原来是3个参数,咋办呢???

很简单

我把这段命令注掉了,然后调用命令改了一下:

hadoop jar wordcount.jar  /user/hadoop/input /user/hadoop/output -mapper WordCount -reducer WordCount

终于见到了正常的输出界面如下:

****hdfs://localhost:9000/user/hadoop/input

16/07/19 02:07:28 INFO input.FileInputFormat: Total input paths to process : 2

16/07/19 02:07:29 INFO mapred.JobClient: Running job: job_201607170436_0003

16/07/19 02:07:30 INFO mapred.JobClient:  map 0% reduce 0%

16/07/19 02:07:55 INFO mapred.JobClient:  map 100% reduce 0%

16/07/19 02:08:07 INFO mapred.JobClient:  map 100% reduce 33%

16/07/19 02:08:16 INFO mapred.JobClient:  map 100% reduce 100%

16/07/19 02:08:21 INFO mapred.JobClient: Job complete: job_201607170436_0003

16/07/19 02:08:21 INFO mapred.JobClient: Counters: 29

16/07/19 02:08:21 INFO mapred.JobClient:   Job Counters

16/07/19 02:08:21 INFO mapred.JobClient:     Launched reduce tasks=1

16/07/19 02:08:21 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=29309

16/07/19 02:08:21 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0

16/07/19 02:08:21 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0

16/07/19 02:08:21 INFO mapred.JobClient:     Launched map tasks=2

16/07/19 02:08:21 INFO mapred.JobClient:     Data-local map tasks=2

16/07/19 02:08:21 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=18127

16/07/19 02:08:21 INFO mapred.JobClient:   File Output Format Counters

16/07/19 02:08:21 INFO mapred.JobClient:     Bytes Written=41

16/07/19 02:08:21 INFO mapred.JobClient:   FileSystemCounters

16/07/19 02:08:21 INFO mapred.JobClient:     FILE_BYTES_READ=79

16/07/19 02:08:21 INFO mapred.JobClient:     HDFS_BYTES_READ=272

16/07/19 02:08:21 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=64576

16/07/19 02:08:21 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=41

16/07/19 02:08:21 INFO mapred.JobClient:   File Input Format Counters

16/07/19 02:08:21 INFO mapred.JobClient:     Bytes Read=50

16/07/19 02:08:21 INFO mapred.JobClient:   Map-Reduce Framework

16/07/19 02:08:21 INFO mapred.JobClient:     Map output materialized bytes=85

16/07/19 02:08:21 INFO mapred.JobClient:     Map input records=2

16/07/19 02:08:21 INFO mapred.JobClient:     Reduce shuffle bytes=85

16/07/19 02:08:21 INFO mapred.JobClient:     Spilled Records=12

16/07/19 02:08:21 INFO mapred.JobClient:     Map output bytes=82

16/07/19 02:08:21 INFO mapred.JobClient:     Total committed heap usage (bytes)=246685696

16/07/19 02:08:21 INFO mapred.JobClient:     CPU time spent (ms)=6910

16/07/19 02:08:21 INFO mapred.JobClient:     Combine input records=8

16/07/19 02:08:21 INFO mapred.JobClient:     SPLIT_RAW_BYTES=222

16/07/19 02:08:21 INFO mapred.JobClient:     Reduce input records=6

16/07/19 02:08:21 INFO mapred.JobClient:     Reduce input groups=5

16/07/19 02:08:21 INFO mapred.JobClient:     Combine output records=6

16/07/19 02:08:21 INFO mapred.JobClient:     Physical memory (bytes) snapshot=387923968

16/07/19 02:08:21 INFO mapred.JobClient:     Reduce output records=5

16/07/19 02:08:21 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=4964081664

16/07/19 02:08:21 INFO mapred.JobClient:     Map output records=8

[[email protected] data]# hadoop dfs -ls /user/hadoop/output

Found 3 items

-rw-r--r--   1 root supergroup          0 2016-07-19 02:08 /user/hadoop/output/_SUCCESS

drwxrwxrwx   - root supergroup          0 2016-07-19 02:07 /user/hadoop/output/_logs

-rw-r--r--   1 root supergroup         41 2016-07-19 02:08 /user/hadoop/output/part-r-00000

[[email protected] data]# hadoop dfs -cat /user/hadoop/output/part-r-00000

Bye     1

Goodbye 1

Hadoop  2

Hello   2

World   2

时间: 2024-08-04 10:08:06

hadoop初学的第一个程序详细讲解-含排错过程的相关文章

详细讲解NFS配置过程

为什么要用NFS NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样. NFS最早是由Sun公司发展出来的, 简单的来说:它就是是可以透过网络,让不同的主机.不同的操作系统可以共享存储. 以下是NFS最显而易见的好处: 1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

mac下 Struts2 第一个程序的详细步骤(附带源码链接)

mac下 Struts2 第一个程序的详细步骤 1.新建web工程 (1) 打开MyEclipse 2015,选择File->New->Web Porject 菜单,新建一个web project. (2)配置Project信息 填写工程名字myFirstStrust2WebProject,选择默认项目存放路径,选在javaEE 6版本. 选择下一步,再下一步,选择默认创建默认首页index.jsp和web.xml(web.xml文件作用)文件,这两个文件也可以后来添加,然后选择完成. 2.下

kafka入门详细讲解

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案.Kafka的目的是通过Hadoop的并行加载机制来统一线上和离

JStorm第一个程序WordCount详解

一.Strom基本知识(回顾) 1,首先明确Storm各个组件的作用,包括Nimbus,Supervisor,Spout,Bolt,Task,Worker,Tuple nimbus是整个storm任务的管理者,并不实际进行工作.负责在集群中分发代码,对节点分配任务,并监视主机故障. supervisor是实际进行工作的节点,负责监听工作节点上已经分配的主机作业,启动和停止Nimbus已经分配的工作进程. Worker是具体处理Spout/Bolt逻辑的进程,worker数量由拓扑中的conf.s

二进制编码-详细讲解

负数: 原码就是原来的表示方法 反码是除符号位(最高位)外取反 补码=反码+1 以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又找来了一些编码的基础知识,如果只想看负数编码记忆法,请跳转到 1.如果你不知道二进制怎么编码,请继续,否则请跳到2 1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,

java中Integer包装类的详细讲解(java二进制操作,所有进制转换)

程序员都很懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往需要操作Integer,或者各种进制的转换等等.我今天就为大家详细讲解一下Integer的使用吧.看代码: package com.herman.test; public class IntegerTest { public static void main(String[] args) { System.out.println("Integer中的常量***************************

【C语言探索之旅】 第三课:你的第一个程序

内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算符 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写

vc++HOOK详细讲解

消息钩子函数入门 Windows 系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是 Windows 系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理.这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见,利用钩子可以实现许多特殊而有用的功能.因此,对