MapReduce程序执行过程

本文介绍Hadoop MapReduce的基本工作流程,包括输入数据如何从HDFS读取,FileInputFormat如何处理每一行数据为key-value对,mapper阶段如何进行行分割处理,以及shuffle过程中的分区、分组和排序步骤。最后还详细解释了reduce阶段如何汇总相同key的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop hive spark
hive spark HBASE

input
    -》默认从HDFS中读取数据
        FileInputFormat
    -》将每一行转成keyvalue
    -》输出:
        <行偏移量,行内容>
        key     value
        0       Hadoop hive spark
        17      hive spark HBASE
mapper
    -》输入:input输出<LongWritable,Text>
    -》map:方法,一行调用一次
        针对每一个行进行分割
        输出:
        key     value
        Hadoop  1       reduce1
        hive    1       reduce2
        spark   1       reduce1
        hive    1       reduce2
        spark   1       reduce1
        HBASE   1       reduce1
shuffle:分区,分组,排序
    输出:
        key     value
        Hadoop  <1>         
        HBASE   <1>
        hive    <1,1>
        spark   <1,1>
reduce:
    reduce方法:每一条keyvalue调用一次reduce方法
        将相同key的值List<value>,进行了相加求和
    输入:
        key     value
        Hadoop  <1>
        HBASE   <1>
        hive    <1,1>
        spark   <1,1>
    输出:
        key     value
        Hadoop  1
        HBASE   1
        hive    2
        spark   2
output:
    输出:默认将reduce的输出写入到hdfs
    FileOutputFormat

MapReduce开发模板
POJO:没有继承类也没有实现任何接口

不继承也不实现
继承及实现
    extends Configured implements Tool
    官方推荐
不继承只实现
    implements Tool
    企业中用的比较多,一般Configured需要自定义一些配置,

自定义数据类型
基本数据类型
IntWritable,
LongWritable
Text
NullWritable
和java类型的转换
int –>set—> IntWritable
IntWritable –>get—>int

需求:

Map
    输入:

    输出
        key     value
    hive    0   1
    Hadoop  0   1
    spark   0   1
    HBASE   0   1
    hive    0   1
    spark   0   1

reduce 
    输入:
        Hadoop  0   <1>
        HBASE   0   <1>
        hive    0   <1,1>
        spark   0   <1,1>
    输出
        Hadoop  1   1
        HBASE   1   1
        hive    2   2
        spark   2   2

<key,value>

-》implements WritableComparable
-》定义成员变量,及get,set
-》序列化和反序列,顺序必须一致
-》compareTo
-》构造方法,带参数和无参
-》setAllValue
-》toString
### 如何在分布式环境中执行MapReduce程序 #### 配置MapReduce作业 主程序类负责配置MapReduce作业的关键组件,包括Mapper和Reducer类的选择、输入输出键值类型的设定以及输入输出路径的定义[^2]。 ```java Job job = Job.getInstance(new Configuration(), "Word Count"); job.setJarByClass(WordCount.class); job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.class); // 设置输入输出类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); ``` 此代码片段展示了如何创建一个简单的MapReduce任务,并指定了必要的参数来启动该任务。通过`setJarByClass()`方法可以指定包含Mapper和Reducer逻辑的JAR文件;而`addInputPath()`与`setOutputPath()`则分别设定了数据源位置及结果存储地点。 #### 编译打包 完成上述编码工作之后,需将项目编译成可执行形式——即构建出含有所有依赖项在内的单一JAR档案。这一步骤通常借助于Maven或Gradle等工具自动完成。对于手动操作而言,则涉及到了解压缩库文件并将它们加入classpath的过程。 #### 提交至集群运行 一旦获得了准备好的应用程序包(通常是`.jar`),便可以通过命令行提交给Hadoop集群以供调度器安排具体节点上的实际运算过程: ```bash hadoop jar /path/to/your/application.jar com.yourcompany.YourMainClass input_path output_path ``` 这里假设已经安装好并正确设置了环境变量指向本地Hadoop实例的位置。以上指令中的各个部分应当依据实际情况作出调整,比如替换为真实的全限定名类名(`com.yourcompany.YourMainClass`)、待处理的数据集所在目录(input_path),还有期望保存分析成果的地方(output_path)[^4]。 #### 查看结果 当任务完成后,可通过如下方式获取最终的结果: ```bash hadoop fs -cat /output/part-r-00000 //查看程序最终的运行结果 ``` 这条命令会读取由先前步骤生成的一个或多份分割后的文本文件(part-r-*), 并将其内容打印出来以便审查验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值