Hadoop自带的例子中,有一个计算Pi值的例子。

这个程序的原理是这样的。假如有一个边长为1的正方形。以正方形的一个端点为圆心,以1为半径,画一个圆弧,于是在正方形内就有了一个直角扇形。在正方形里随机生成若干的点,则有些点是在扇形内,有些点是在扇形外。正方形的面积是1,扇形的面积是0.25*Pi。设点的数量一共是n,扇形内的点数量是nc,在点足够多足够密集的情况下,会近似有nc/n的比值约等于扇形面积与正方形面积的比值,也就是nc/n= 0.25*Pi/1,即Pi = 4*nc/n。

在正方形内生成的样本点越多,计算Pi值越精确,这样,这个问题就很适合用Hadoop来处理啦。假设要在正方形内生成1000万个点,可以设置10个Map任务,每个Map任务处理100万个点,也可以设置100个Map任务,每个Map任务处理10万个点。

  1. package mapreduce1;
  2. /*
  3. * @create by 刘大哥
  4. * 2019年9月3日
  5. * 利用MapReduce计算pi值
  6. * */
  7. import java.io.IOException;
  8. import java.util.StringTokenizer;
  9. import org.apache.hadoop.fs.Path;
  10. import org.apache.hadoop.io.IntWritable;
  11. import org.apache.hadoop.io.Text;
  12. import org.apache.hadoop.mapreduce.Job;
  13. import org.apache.hadoop.mapreduce.Mapper;
  14. import org.apache.hadoop.mapreduce.Reducer;
  15. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  16. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  17. import PI.Pi;
  18.  
  19. public class WordCount {
  20. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  21. Job job = Job.getInstance();
  22. job.setJobName("WordCount");
  23. job.setJarByClass(WordCount.class);
  24. job.setMapperClass(doMapper.class);
  25. job.setReducerClass(doReducer.class);
  26. job.setOutputKeyClass(Text.class);
  27. job.setOutputValueClass(IntWritable.class);
  28. Path in = new Path("hdfs://192.168.100.129:9000/user/hadoop/p1i.txt"); //输入路径
  29. Path out = new Path("hdfs://192.168.100.129:9000/user/hadoop/out_pi1"); //输出路径
  30. FileInputFormat.addInputPath(job, in);
  31. FileOutputFormat.setOutputPath(job, out);
  32. System.exit(job.waitForCompletion(true) ? : );
  33. }
  34. public static class doMapper extends Mapper<Object, Text, Text, IntWritable>{
  35. private static final IntWritable one = new IntWritable();
  36. @Override
  37. protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
  38. String line = value.toString();
  39. String word = line.toString(); //读取每个map的数值
  40. //System.out.println(word);
  41. int num = Integer.parseInt(word); //转化为int类型
  42. //System.out.println(num);
  43. int[] base = {,};
  44. Pi test = new Pi(base);
  45. int a= ; // 是否在扇形区域内的标志符 1:在扇形区域内 2:不在扇形区域内
  46. int count = ; // 统计在扇形区域内点的个数
  47. for(int x = ; x < num; x++){
  48. double[] t = test.getNext();
  49. if(t[]*t[]+t[]*t[]<) { //在扇形区域内
  50. a=;
  51. count++; //在扇形区域内的个数加+
  52. }
  53. else { //不在扇形区域内
  54. a=;
  55. }
  56.  
  57. }
  58. double result= count*4.00000000/num; //每个map计算出pi的值
  59. String strresule = String.valueOf(result);
  60. Text textresult = new Text(); /*转换类型为Text */
  61. textresult.set(strresule);
  62. context.write(textresult, one); //写入
  63. }
  64. }
  65. public static class doReducer extends Reducer<Text, IntWritable, Text, IntWritable>{ //reduce 整合输出
  66. private IntWritable result = new IntWritable();
  67. @Override
  68. protected void reduce(Text key, Iterable<IntWritable> values, Context context)
  69. throws IOException, InterruptedException {
  70. int sum = ;
  71. for (IntWritable value : values) {
  72. sum += value.get();
  73. }
  74. result.set(sum);
  75. context.write(key, result);
  76. }
  77. }
  78. }

Hadoop下MapReduce实现Pi值的计算的更多相关文章

  1. Mapreduce案例之Pi值估算

    题目: 这个程序的原理是这样的.假如有一个边长为1的正方形.以正方形的一个端点为圆心,以1为半径,画一个圆弧,于是在正方形内就有了一个直角扇形.在正方形里随机生成若干的点,则有些点是在扇形内,有些点是 ...

  2. 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...

  3. Mapreduce求气温值项目

    Mapreduce前提工作 简单的来说map是大数据,reduce是计算<运行时如果数据量不大,但是却要分工做这就比较花时间了> 首先想要使用mapreduce,需要在linux中进行一些 ...

  4. Hadoop基础-MapReduce的工作原理第二弹

    Hadoop基础-MapReduce的工作原理第二弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Split(切片)  1>.MapReduce处理的单位(切片) 想必 ...

  5. Hadoop基础-MapReduce的工作原理第一弹

    Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...

  6. Hadoop 新 MapReduce 框架 Yarn 详解【转】

    [转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/] 简介: 本文介绍了 Hadoop 自 0.23.0 版本 ...

  7. Hadoop解析--MapReduce

    从本篇博客開始咱们一起来具体了解Hadoop的每一个部分.我们在上篇博客中介绍了HDFS,MapReduce,MapReduce为了更有效率事实上是建立在HDFS之上的.有了分布式的文件系统,我们就能 ...

  8. hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化

    https://blog.csdn.net/u010697988/article/details/70173104 大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spar ...

  9. hadoop之mapreduce详解(进阶篇)

    上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...

随机推荐

  1. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  2. new与malloc有什么区别

    转自http://www.cnblogs.com/QG-whz/p/5140930.html 前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老 ...

  3. 14.Sqoop把数据从HDFS导出到mysql

    创建数据文件 ,gopal,manager,,TP ,manisha,preader,,TP ,kalil,php dev,,AC ,prasanth,php dev,,AC ,kranthi,adm ...

  4. 03 Python基础

    1.输出和输入 (1)print打印 Python 提供print方法来打印信息 输入: print ("hello python") 调用print方法,用户双引号(" ...

  5. Ugly Numbers UVA - 136(优先队列+vector)

    Problem Description Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, ...

  6. Forest Program(dfs方法---树上的环)

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=6736 沙漠中的每一个连通块都是一棵仙人掌:一个连通块是一棵仙人掌当且仅当连通块中不存在重边和自环,并且每一 ...

  7. Redis主从及哨兵

    Redis主从用法 像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构. 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承 ...

  8. Java 封装与类

    一.面向对象编程 面向对象编程三大特性:封装.继承和多态. 类是实现封装的手段,是面向对象编程的基本单元. 封装隐藏了类的内部实现细节,暴露给外界可控的操作,提高数据的完整性和安全性,提高模块的可重用 ...

  9. 面试常考的js题目(三)

    1.查找两个节点的最近的一个共同父节点,可以包括节点自身 function commonParentNode(oNode1, oNode2) { if(oNode1.contains(oNode2)) ...

  10. DisableThreadLibraryCalls与DLLMain死锁

    1.首先写个简单的DLL,用来验证 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserve ...