1. import org.apache.hadoop.conf.{Configuration, Configured};
  2. import org.apache.hadoop.util.{ToolRunner, Tool};
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  5. import org.apache.hadoop.io.{LongWritable, Text, IntWritable};
  6. import org.apache.hadoop.mapreduce.{Reducer, Mapper, Job};
  7. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  8.  
  9. /**
  10. * Created with IntelliJ IDEA.
  11. * User: riley
  12. * Date: 8/26/13
  13. * Time: 1:58 PM
  14. */
  15. object WordCount extends Configured with Tool
  16. {
  17. class Map extends Mapper[LongWritable, Text, Text, IntWritable]
  18. {
  19. private val one: IntWritable = new IntWritable(1);
  20. private var word: Text;
  21.  
  22. override def map(key: LongWritable, rowLine: Text, context: Mapper[LongWritable, Text, Text, IntWritable]#Context)
  23. {
  24. val line = rowLine.toString();
  25. if (line.isEmpty) return;
  26.  
  27. val tokens: Array[String] = line.split(" ");
  28. for (item: String <- tokens) {
  29. word.set(item);
  30. context.write(word, one);
  31. }
  32. }
  33. }
  34.  
  35. class Reduce extends Reducer[Text, IntWritable, Text, IntWritable]
  36. {
  37. private var count: IntWritable = new IntWritable();
  38.  
  39. override def reduce(key: Text, values: Iterable[IntWritable], context: Reducer[Text, IntWritable, Text, IntWritable]#Context)
  40. {
  41. var sum: Int = 0;
  42.  
  43. for (i: IntWritable <- values) sum = sum + i.get();
  44.  
  45. count.set(sum);
  46. context.write(key, count);
  47. }
  48. }
  49.  
  50. def run(args: Array[String]) =
  51. {
  52. val conf = super.getConf();
  53. val job = new Job(conf, "WordCount");
  54.  
  55. job.setJarByClass(this.getClass);
  56. job.setOutputKeyClass(classOf[Text]);
  57. job.setOutputValueClass(classOf[IntWritable]);
  58.  
  59. job.setMapperClass(classOf[Map]);
  60. job.setReducerClass(classOf[Reduce]);
  61. job.setCombinerClass(classOf[Reduce]);
  62.  
  63. FileInputFormat.addInputPath(job, new Path(args(0)));
  64. FileOutputFormat.setOutputPath(job, new Path(args(1)));
  65.  
  66. val status = job.waitForCompletion(true);
  67. if (status) 0 else 1;
  68. }
  69.  
  70. def main(args: Array[String])
  71. {
  72. val conf: Configuration = new Configuration();
  73. System.exit(ToolRunner.run(conf, this, args));
  74. }
  75. }

Scala开发Hadoop示例的更多相关文章

  1. 使用scala开发spark入门总结

    使用scala开发spark入门总结 一.spark简单介绍 关于spark的介绍网上有很多,可以自行百度和google,这里只做简单介绍.推荐简单介绍连接:http://blog.jobbole.c ...

  2. 通过IDEA搭建scala开发环境开发spark应用程序

    一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安装scala插件,具体安装办法如下. 1.打开idea,点击c ...

  3. IDEA搭建scala开发环境开发spark应用程序

    通过IDEA搭建scala开发环境开发spark应用程序   一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安 ...

  4. Scala系统学习(二):Scala开发环境安装配置

    Scala可以安装在任何基于UNIX/Linux或基于Windows的系统上.在您的机器上开始安装Scala之前,必须在计算机上安装Java 1.8或更高版本. 下面请按照以下步骤安装Scala. 步 ...

  5. 转】[1.0.2] 详解基于maven管理-scala开发的spark项目开发环境的搭建与测试

    场景 好的,假设项目数据调研与需求分析已接近尾声,马上进入Coding阶段了,辣么在Coding之前需要干马呢?是的,“统一开发工具.开发环境的搭建与本地测试.测试环境的搭建与测试” - 本文详细记录 ...

  6. IDEA 支持scala开发

    IDEA支持scala开发,需要安装scala插件,并且pom.xml也需要添加对应依赖. 1. 安装scala插件 下载地址:https://plugins.jetbrains.com/plugin ...

  7. Java开发Hbase示例

    Java开发Hbase示例 使用Hbase操作数据 package com.sunteng.clickidc.test; import java.io.IOException; import java ...

  8. Linux下使用Eclipse开发Hadoop应用程序

    在前面一篇文章中介绍了如果在完全分布式的环境下搭建Hadoop0.20.2,现在就再利用这个环境完成开发. 首先用hadoop这个用户登录linux系统(hadoop用户在前面一篇文章中创建的),然后 ...

  9. Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用

    前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...

随机推荐

  1. .net SMTP 发送邮件

    using System.Net.Mail; public static bool SendMail(string messTo,string messBody) { MailMessage mess ...

  2. bzoj4806 炮

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 这种题应该想状压的. 于是发现压不下,结合每一行每一列最多放两个炮想到记一下放炮的列就 ...

  3. python从网络时间服务器获取并打印当前时间以及pip安装ntplib的一次体验

    首先需要安装ntplib,科一通过pip安装. ubuntu下科一通过如下指令安装pip: $ sudo apt-get install python-pip 使用如下指令安装ntplib: $ su ...

  4. 老齐python-基础9(函数)

    继续上篇 函数 多参数: >>> def foo(x,y,z,*args,**kargs): ... print(x) ... print(y) ... print(z) ... p ...

  5. composer包php-amqplib

    php-amqplib官方文档 url:http://www.rabbitmq.com/tutorials/tutorial-one-php.html #测试demo: url: http://**. ...

  6. socket 阻塞,同步、I/O模型

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一个功能调用时, ...

  7. python set集合 以及 深浅拷贝

    set集合 特点: 无序, 不重复, 元素必须可哈希(不可变) 作用: 去重复 本身是可变的数据类型. 有增删改查操作. frozenset()冻结的集合. 不可变的. 可hash的 深浅拷贝() 1 ...

  8. POJ 2991 Crane(线段树)

    Crane Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7687   Accepted: 2075   Special J ...

  9. Centos6-7安装Python3.5以及SSL的编译安装,识别https

    Python3中无法导入ssl模块的解决办法 如果你发现在python3脚本运行过程中发现涉及到ssl模块都无法运行的情况下.那么需要进行如下步骤 第一步: yum install openssl o ...

  10. nginx web服务优化

    nginx基本安全优化 1. 调整参数隐藏nginx软件版本号信息 软件的漏洞和版本有关,我们应尽量隐藏或消除web服务对访问用户显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就 ...