• hadoop入门程序


    首先复习一下hadoop中hdfs常用的命令

    /**
    * hadoop fs -mkdir 创建HDFS目录
    * hadoop fs -ls 列出HDFS目录
    * hadoop fs -copyFromLocal 使用-copyFromLocal 复制本地(local)文件到HDFS
    * hadoop fs -put 使用-put 复制本地(local)文件到HDFS
    * hadoop  fs -cat 列出HDFS目录下的文件内容
    * hadoop fs -copyToLocal
    * 使用-copyToLocal 将HDFS上文件复制到本地(local)
    * hadoop fs -get 使用-get 将HDFS上文件复制到本地(local)
    * hadoop fs -cp  复制HDFs文件
    * hadoop fs -rm 删除HDFS文件
    */

    一、maven配置

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.wu</groupId>
        <artifactId>HighTem</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--此程序需要以Hadoop文件作为输入文件,以Hadoop文件作为输出文件,因此需要用到文件系统,于是需要引入hadoop-hdfs包;-->
        <!--我们需要向Map-Reduce集群提交任务,需要用到Map-Reduce的客户端,于是需要导入hadoop-mapreduce-client-jobclient包;-->
        <!--另外,在处理数据的时候会用到一些hadoop的数据类型例如IntWritable和Text等,-->
        <!--因此需要导入hadoop-common包。于是运行此程序所需要的相关依赖有以下几个:-->
        <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>2.4.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
                <version>2.4.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.4.0</version>
            </dependency>
        </dependencies>
    
    </project>
    

      

    二、程序

    package com.wu;
    
    
    /**
     * 数据格式 年份日期+温度
     * 2014010114
     * 2014010216
     * 2014010317
     * 2014010410
     * 2014010506
     * 2012010609
     * 2012010732
     * 2012010812
     * 2012010919
     * 2012011023
     * 2001010116
     * 2001010212
     * 2001010310
     * 2001010411
     * 2001010529
     * 2013010619
     * 2013010722
     * 2013010812
     * 2013010929
     * 2013011023
     */
    
    
    /**
     * 1、首先创建input.txt文件,将上面的数据复制进去
     * 2、将input.txt文件上传到hdfs文件系统中
     *      hadoop fs -mkdir /test #新建一个test的目录
     *      hadoop fs -put /home/hadoop/runfile/input.txt /test/ #把对应的文件传入到hdfs里面的test目录下
     *      hadoop fs -ls /test #查询对应目录的信息
     *
     * 3、将下面的代码进行打包,并在hadoop环境下运行
     */
    
    
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    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.conf.Configuration;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import java.io.IOException;
    
    /**
     * @Auther: wuyilong
     * @Date: 2019/5/24 15:55
     * @Description: 一个简单的hadoop例子
     */
    public class Temperature {
    
        /**
         * 四个泛型类型分别代表:
         * KeyIn        Mapper的输入数据的Key,这里是每行文字的起始位置(0,11,...)
         * ValueIn      Mapper的输入数据的Value,这里是每行文字
         * KeyOut       Mapper的输出数据的Key,这里是每行文字中的“年份”
         * ValueOut     Mapper的输出数据的Value,这里是每行文字中的“气温”
         */
        static class TempMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
            @Override
            protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
                String line = value.toString();
                String year = line.substring(0, 4);
                int temperature = Integer.parseInt(line.substring(8));
                context.write(new Text(year), new IntWritable(temperature));
            }
        }
    
    
        /**
         * 四个泛型类型分别代表:
         * KeyIn        Reducer的输入数据的Key,这里是每行文字中的“年份”
         * ValueIn      Reducer的输入数据的Value,这里是每行文字中的“气温”
         * KeyOut       Reducer的输出数据的Key,这里是不重复的“年份”
         * ValueOut     Reducer的输出数据的Value,这里是这一年中的“最高气温”
         */
        static class TempReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
            @Override
            protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
                int maxValue = Integer.MIN_VALUE;
                StringBuilder sb = new StringBuilder();
                for(IntWritable value : values) {
    
                    maxValue = Math.max(maxValue, value.get());
    
                    sb.append(value).append(", ");
                }
    
                context.write(key, new IntWritable(maxValue));
            }
        }
    
    
        /**
         *
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            String dst = "hdfs://localhost:9000/intput.txt";// 1输入路径
            String dstOut = "hdfs://localhost:9000/output";// 2输出路径,必须是不存在的,空文件加也不行
    
            Configuration hadoopConfig = new Configuration();
            hadoopConfig.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
            hadoopConfig.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
    
            Job job = new Job(hadoopConfig);
    
            // job执行作业的输入和输出文件的路径
    
            FileInputFormat.addInputPath(job, new Path(dst));
            FileOutputFormat.setOutputPath(job, new Path(dstOut));
    
    
    
            // 指定Mapper和Reducer两个阶段的处理类
            job.setMapperClass(TempMapper.class);
            job.setReducerClass(TempReducer.class);
    
            // 设置最后输出的Key和Value的类型
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
    
            // 执行job,直到完成
            job.waitForCompletion(true);
            System.out.println("finished");
    
        }
    
    }
    

      

  • 相关阅读:
    android apk 反编译
    js 读 xml 非ie 可以支持 chrome 浏览器 与 android webView
    php+mySQl 环境搭建
    Activity 生命周期
    div 隐藏 显示 占空间 不占空间
    android 异步加载
    android 文件操作
    透明 GridView 背景透明
    eclipse 版本理解
    WebKit 上的JS直接使用Java Bean
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10918872.html
Copyright © 2020-2023  润新知