Hadoop流程

Hadoop流程

Mapper

package com.lagou.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;
//单词计数
//继承Mapper类
//Mapper类的泛型参数:共4个,两对kv
//2.1第一对KV:map输入类型参数
//2.2第二对KV:map输出类型参数
//LongWritable, Text-->文本偏移量,一行文本内容
//Text,IntWritable单词,1


public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    //3重写Mapper类的map方法
    /*
    * 1.接受到文本内容,转为string
    * 按照空格进行分割
    * 输出<单词,1>*/

    Text word = new Text();
    IntWritable one = new IntWritable(1);

    //LongWritable, Text-->文本偏移量,一行文本内容,map方法的输入参数,一行文本就调用一次map方法
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //接受到文本内容转为 String类型
        String str = value.toString();
        //按照空格进行切分
        String[] words = str.split(" ");
        //输出<单词,1>

        for (String s : words) {
            word.set(s);
            context.write(word,one);
        }


    }



}

继承的选择:继承的选择

Reducer

package com.lagou.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;
import org.w3c.dom.Text;

import java.io.IOException;

//继承Reducer类型有四个泛型参数
//第一对参数与Mapper输出类型一致
//第二对,自己设计决定输出结果是什么类型:Text,IntWritable
public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
    int sum;
    IntWritable v = new IntWritable();

    //重写reducer方法
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        // 1 累加求和
        sum = 0;
        for (IntWritable count : values) {
            sum += count.get();
        }

        // 2 输出
        v.set(sum);
        context.write(key,v);
    }
}

reduce的key:value的意义
在这里插入图片描述

Driver

package com.lagou.mr.wc;

import org.apache.hadoop.conf.Configuration;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class WordCountDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

        // 1 获取配置信息以及封装任务
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "WordCountDriver");
        // 2 设置jar加载路径
        job.setJarByClass(WordCountDriver.class);
        // 3 设置map和reduce类
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);
        // 4 设置map输出
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        // 5 设置最终输出kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        // 6 设置输⼊和输出路径
        FileInputFormat.setInputPaths(job, new Path(args[0]));//指定读取数据的原始路径
        FileOutputFormat.setOutputPath(job, new Path(args[1]));//指定结果数据输出路径
        // 7 提交
        boolean result = job.waitForCompletion(true);
        //jvm推出:正常退出0,非0为错误退出
        System.exit(result ? 0 : 1);

    }
}

driver类控制思路
在这里插入图片描述
几个错误的解决办法:
1.Text cannot be cast to org.apache.hadoop.io.LongWritable -MapReduce数据类型不一致运行错误
解决办法:注意Text的引包
2.wordcount在本地运行报错解决:Exception in thread “main” java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.native.NativeID$Windows.access
解决办法:链接中的办法。首先查看hadoop.dll文件是否存在于c:/windows/System32。其次就是修改源码文件NationIO.class

Hadoop是一个开源的分布式计算框架,它的启动流程可以简单概括为以下几个步骤: 1. 启动NameNode:NameNode是Hadoop的主节点,负责管理文件系统的命名空间和数据块的位置信息。在启动过程中,NameNode会加载文件系统的元数据,并监听来自客户端和其他节点的请求。 2. 启动DataNode:DataNode是Hadoop的数据节点,负责存储实际的数据块。在启动过程中,DataNode会向NameNode注册自己,并定期向NameNode发送心跳信号以保持连接。 3. 启动ResourceManager:ResourceManager是Hadoop的资源管理器,负责协调集群中各个应用程序对资源的请求。在启动过程中,ResourceManager会加载集群的配置信息,并监听来自客户端和其他节点的请求。 4. 启动NodeManager:NodeManager是Hadoop的节点管理器,负责管理每个节点上的容器和任务。在启动过程中,NodeManager会向ResourceManager注册自己,并定期向ResourceManager发送心跳信号以保持连接。 5. 启动JobHistoryServer:JobHistoryServer是Hadoop的作业历史服务器,负责存储和展示作业执行的历史信息。在启动过程中,JobHistoryServer会加载历史信息的存储路径,并监听来自客户端和其他节点的请求。 6. 启动其他组件:除了上述核心组件外,Hadoop还包括其他一些组件,如SecondaryNameNode、JournalNode等,它们在启动过程中会根据需要进行相应的初始化和启动。 以上是Hadoop的简要启动流程,涉及到的组件和步骤可能会因具体的Hadoop版本和配置而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值