1、创建Hadoop项目

2、创建包、类

这里使用hdfs.WordCount为例

3、编写自定Mapper和Reducer程序

MyMapper类

static class MyMapper extends
Mapper<LongWritable, Text, Text, LongWritable> {
	@Override
protected void map(LongWritable k1, Text v1, Context context)
throws IOException, InterruptedException {
// 对内容进行分词处理存到字符数组内
StringTokenizer tokenizer = new StringTokenizer(v1.toString());
// 创建Text k2
Text k2 = new Text();
// 遍历写入context中
while (tokenizer.hasMoreTokens()) {
k2.set(tokenizer.nextToken());
context.write(k2, new LongWritable(1));
} } }</pre></div>

Reducer类

static class MyReducer extends
Reducer<Text, LongWritable, Text, LongWritable> {
@Override
protected void reduce(Text k2, Iterable<LongWritable> v2s,
Context context) throws IOException, InterruptedException {
long sum = 0;
for(LongWritable val : v2s){
sum += val.get();
}
context.write(k2, new LongWritable(sum));
}
}

编写main驱动方法

public static void main(String[] args) throws Exception {
	if(args.length != 2){
System.err.print("Usage:wordcount");
System.exit(2);
} Configuration conf = new Configuration();
Job job = new Job(conf,WordCount.class.getSimpleName());
//用eclipse插件运行相当于是jar包运行
job.setJarByClass(WordCount.class);
//设置mapper
job.setMapperClass(MyMapper.class);
//设置map输出k2的类型
job.setMapOutputKeyClass(Text.class);
//设置map输出v2的类型
job.setMapOutputValueClass(LongWritable.class);
//设置分区类
job.setPartitionerClass(HashPartitioner.class);
//设置作业数量
job.setNumReduceTasks(1);
//设置reducer类
job.setReducerClass(MyReducer.class);
//设置输出的格式
job.setOutputFormatClass(TextOutputFormat.class);
//设置k3的输出类型
job.setOutputKeyClass(Text.class);
//设置v3的输出类型
job.setOutputValueClass(LongWritable.class); //这里是从外面传入参数
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//提交任务,如果返回false代表有异常,使用system.exit结束java虚拟机,如果没问题返回0正常执行.
System.exit(job.waitForCompletion(true)?0:1); }</pre></div>

4、运行mapreduce程序远程调用hadoop。

先配置访问路径

写hdfs访问路径。

现在使用Run as—Run on hadoop会出现一个错误

14/03/11 15:58:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/03/11 15:58:22 ERROR security.UserGroupInformation: PriviledgedActionException as:Sky cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Sky\mapred\staging\Sky1823204560\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Sky\mapred\staging\Sky1823204560\.staging to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:918)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:912)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:912)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)
at hdfs.WordCount.main(WordCount.java:58)

这个是windows下的权限问题,在linux上运行时正常的。

解决方法:

打开F:\Software\Hadoop\hadoop-1.1.2\src\core\org\apache\hadoop\fs\FileUtil.java

注释checkReturnValue函数中的内容,保存即可!

再运行时正常输出计算器,并生成了新的目录。输出目录不能存在,由hadoop自动创建完成!

14/03/11 16:08:40 INFO mapred.JobClient:  map 100% reduce 100%
14/03/11 16:08:41 INFO mapred.JobClient: Job complete: job_local_0001
14/03/11 16:08:41 INFO mapred.JobClient: Counters: 19
14/03/11 16:08:41 INFO mapred.JobClient:   File Output Format Counters
14/03/11 16:08:41 INFO mapred.JobClient:     Bytes Written=2154020
14/03/11 16:08:41 INFO mapred.JobClient:   FileSystemCounters
14/03/11 16:08:41 INFO mapred.JobClient:     FILE_BYTES_READ=631320575
14/03/11 16:08:41 INFO mapred.JobClient:     HDFS_BYTES_READ=141910490
14/03/11 16:08:41 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=774430506
14/03/11 16:08:41 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=2154020
14/03/11 16:08:41 INFO mapred.JobClient:   File Input Format Counters
14/03/11 16:08:41 INFO mapred.JobClient:     Bytes Read=70955245
14/03/11 16:08:41 INFO mapred.JobClient:   Map-Reduce Framework
14/03/11 16:08:41 INFO mapred.JobClient:     Reduce input groups=59150
14/03/11 16:08:41 INFO mapred.JobClient:     Map output materialized bytes=142981973
14/03/11 16:08:41 INFO mapred.JobClient:     Combine output records=0
14/03/11 16:08:41 INFO mapred.JobClient:     Map input records=255015
14/03/11 16:08:41 INFO mapred.JobClient:     Reduce shuffle bytes=0
14/03/11 16:08:41 INFO mapred.JobClient:     Reduce output records=59150
14/03/11 16:08:41 INFO mapred.JobClient:     Spilled Records=26709860
14/03/11 16:08:41 INFO mapred.JobClient:     Map output bytes=128572984
14/03/11 16:08:41 INFO mapred.JobClient:     Total committed heap usage (bytes)=305004544
14/03/11 16:08:41 INFO mapred.JobClient:     Combine input records=0
14/03/11 16:08:41 INFO mapred.JobClient:     Map output records=7201751
14/03/11 16:08:41 INFO mapred.JobClient:     SPLIT_RAW_BYTES=99
14/03/11 16:08:41 INFO mapred.JobClient:     Reduce input records=7201751

posted @
2014-03-11 16:17 
向着梦想奋斗 
阅读(...) 
评论(...) 
编辑 
收藏

Hadoop学习记录(7)|Eclipse远程调试Hadoop的更多相关文章

  1. Hadoop学习之配置Eclipse远程调试Hadoop

    构建完毕Hadoop项目后,接下来就应该跟踪Hadoop的运行情况,比方在命令行运行hadoop namenode–format时运行了Hadoop的那些代码.当然也能够直接通过阅读源码的方式来做到这 ...

  2. eclipse远程调试Hadoop

    环境需求: 系统:window 10 eclipse版本:Mars Hadoop版本:2.6.0 资源需求:解压后的Hadoop-2.6.0,原压缩包自行下载:下载地址 丑话前头说: 以下的操作中,e ...

  3. Eclipse远程调试hadoop源码

    1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...

  4. IDEA远程调试hadoop程序

    远程调试Hadoop各组件 Hadoop学习之配置Eclipse远程调试Hadoop IDEA远程调试hadoop Hadoop 研发之远程调试详细剖析--WordCount V2.0 eclipse ...

  5. Eclipse远程调试HDP源代码

    使用的是自己编译的HDP2.3.0的源代码编译的集群,此文介绍如何使用Eclipse远程调试Hadoop内核源代码,以调试namenode为例进行介绍. 在/usr/hdp/2.3.0.0-2557/ ...

  6. eclipse/intellij idea 远程调试hadoop 2.6.0

    很多hadoop初学者估计都我一样,由于没有足够的机器资源,只能在虚拟机里弄一个linux安装hadoop的伪分布,然后在host机上win7里使用eclipse或Intellj idea来写代码测试 ...

  7. 使用Windows上Eclipse远程调试Linux上的Hadoop

    一.设置Eclipse运行用户     如果以与Hadoop运行用户名(比如grid)不同的用户运行Eclipse,则无法对Hadoop运行用户所属的文件进行管理,运行Map/Reduce程序也会报& ...

  8. 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop

    背景:在上篇文章中按照大神“扎心了老铁”的博客,在服务器上搭建了hadoop的伪分布式环境.大神的博客上是使用eclipse来调试,但是我入门以来一直用的是idea,eclipse已经不习惯,于是便摸 ...

  9. 远程调试hadoop各组件

    远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序.其他情况包括:运行在内存小或 CUP 性能低的设备上的 Ja ...

随机推荐

  1. [HDOJ2830]Matrix Swapping II(胡搞)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2830 给一个矩阵只有0和1,矩阵的列可以和其他列交换无数次,问交换后整个矩阵形成的最大的全是1的子矩阵 ...

  2. php-redis中文文档(转)

    phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

  3. tuning 02 Diagnostic and Tuning Tools

    statspack 是一个很重要的工具, 这是我们重点要知道的在这章 每天一上班就要看一下 alert log 文件, 可以通过/ORA找, 这是vi的知识,所有的ORACLE错误都是以ORA开头的 ...

  4. POJ 1037 (计数 + DP) 一个美妙的栅栏

    这道题总算勉勉强强看懂了,DP和计数都很不好想 DP部分: 称i根木棒的合法方案集合为S(i),第二根木棒比第一根长的方案称作UP方案,反之叫做DOWN方案 C[i][k][DOWN] 是S(i)中以 ...

  5. Tyvj 1085 派对

    这道题和HDU 1016的素数环那道题很相似. 虽然1A了,但写代码的过程中还是丢三落四的. 贴完代码闪人,嘿嘿 //#define LOCAL #include <iostream> # ...

  6. JavaScript的一些常见误区

    原文出处: 色拉油的博客   接触JavaScript两年多遇到过各种错误,其中有一些让人防不胜防,原来对JavaScript的误会如此之深,仅以此文总结一下常见的各种想当然的误区. String r ...

  7. 07_js走路小游戏

    <html> <head> <!-- 不做了,思路: 按enter键停止,将xs,ys替换为0,再次按,判断xs和ys是否为0,是的话,讲根据fx给xsys赋值. 实现鼠 ...

  8. IOS中tableView每组的头部控件、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态

    一.tableView每组的头部控件 1.控件宽度默认就是tableView的宽度 2.控件高度由下面的代理方法决定 - (CGFloat)tableView:(UITableView *)table ...

  9. UML和模式应用

    引言 Applying UML and Patterns,以一个商店POS系统NextGen和一个掷骰子游戏Monopoly为例,围绕OOA/D的基本原则GRASP,以迭代作为基本方法.以UML为表达 ...

  10. linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序

    1. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时, 首先启动 /etc/profile 文件, 然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login ...