大数据实训第4天

Posted xiaohaigege666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据实训第4天相关的知识,希望对你有一定的参考价值。

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

 

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

 

package mapreduce1;
/*
 *  @create by 孙丙海
 *  2019年9月3日
   *       利用MapReduce计算pi值
 * */
import java.io.IOException;  
import java.util.StringTokenizer;  
import org.apache.hadoop.fs.Path;  
import org.apache.hadoop.io.IntWritable;  
import org.apache.hadoop.io.Text;  
import org.apache.hadoop.mapreduce.Job;  
import org.apache.hadoop.mapreduce.Mapper;  
import org.apache.hadoop.mapreduce.Reducer;  
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import PI.Pi;  


    public class WordCount   
        public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException   
            Job job = Job.getInstance();  
            job.setJobName("WordCount");  
            job.setJarByClass(WordCount.class);  
            job.setMapperClass(doMapper.class);
            job.setReducerClass(doReducer.class);  
            job.setOutputKeyClass(Text.class);  
            job.setOutputValueClass(IntWritable.class);  
            Path in = new Path("hdfs://192.168.43.34:9000/user/hadoop/pi.txt");   //输入路径
            Path out = new Path("hdfs://192.168.43.34:9000/user/hadoop/output_pi");  //输出路径
            FileInputFormat.addInputPath(job, in);  
            FileOutputFormat.setOutputPath(job, out);  
            System.exit(job.waitForCompletion(true) ? 0 : 1);  
          
        public static class doMapper extends Mapper<Object, Text, Text, IntWritable>  
            private static final IntWritable one = new IntWritable(1);  
            @Override  
            protected void map(Object key, Text value, Context context) throws IOException, InterruptedException   
                String line =  value.toString();    
                String word = line.toString();         //读取每个map的数值
                //System.out.println(word);
                int num = Integer.parseInt(word);      //转化为int类型 
                //System.out.println(num);
                int[] base = 2,5;
                Pi test = new Pi(base);  
                int a= 0;         // 是否在扇形区域内的标志符  1:在扇形区域内 2:不在扇形区域内
                int count = 0;  // 统计在扇形区域内点的个数
                for(int x = 0; x < num; x++)
                    double[] t = test.getNext();
                    if(t[0]*t[0]+t[1]*t[1]<1)   //在扇形区域内
                        a=1;
                        count++;                 //在扇形区域内的个数加+
                    
                    else                        //不在扇形区域内
                        a=2;
                    
                
                
                double result= count*4.00000000/num;    //每个map计算出pi的值
                String strresule = String.valueOf(result); 
                Text textresult = new Text();              /*转换类型为Text */
                textresult.set(strresule);                
                context.write(textresult, one);         //写入
              
          
        public static class doReducer extends Reducer<Text, IntWritable, Text, IntWritable>   //reduce 整合输出
            private IntWritable result = new IntWritable();  
            @Override  
            protected void reduce(Text key, Iterable<IntWritable> values, Context context)  
            throws IOException, InterruptedException   
            int sum = 0;  
            for (IntWritable value : values)   
                sum += value.get();  
              
                result.set(sum); 
                context.write(key, result);  
              
          
    

 

以上是关于大数据实训第4天的主要内容,如果未能解决你的问题,请参考以下文章

若泽大数据实战第一天大数据测试平台搭建

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

大数据实训

大数据实时传输组件Maxwell-问题集锦

大数据实时流式计算引擎 Flink 简单剖析

大数据实训