大数据技术之Hadoop之MapReduce(3)——NLineInputFormat使用案例

3.1.8 NLineInputFormat使用案例

1.需求
  • 对每个单词进行个数统计,要求根据每个输入文件的行数来规定输出多少个切片。此案例要求每三行放入一个切片中。
    (1)输入数据
banzhang ni hao
xihuan hadoop banzhang
banzhang ni hao
xihuan hadoop banzhang
banzhang ni hao
xihuan hadoop banzhang
banzhang ni hao
xihuan hadoop banzhang
banzhang ni hao
xihuan hadoop banzhang banzhang ni hao
xihuan hadoop banzhang

(2)期望输出数据

Number of splits:4
2.需求分析
  • 使用本地的Hadoop3.1.2进行测试输入的数据,得到输出的数据
3.代码实现

(1)编写Mapper类

/**
 * @Author zhangyong
 * @Date 2020/3/6 9:17
 * @Version 1.0
 */
public class NLineMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
    private Text k = new Text ();
    private LongWritable v = new LongWritable (1);
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // 1 获取一行
        String line = value.toString ();
        // 2 切割
        String[] splited = line.split (" ");
        // 3 循环写出
        for (int i = 0; i < splited.length; i++) {
            k.set (splited[i]);
            context.write (k, v);
        }
    }
}

(2)编写Reducer类

/**
 * @Author zhangyong
 * @Date 2020/3/6 9:18
 * @Version 1.0
 */
public class NLineReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
    LongWritable v = new LongWritable ();
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        long sum = 0L;
        // 1 汇总
        for (LongWritable value : values) {
            sum += value.get ();
        }
        v.set (sum);
        // 2 输出
        context.write (key, v);
    }
}

(3)编写Driver类

/**
 * @Author zhangyong
 * @Date 2020/3/6 9:18
 * @Version 1.0
 */
public class NLineDriver {

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

        // 数据输入路径和输出路径
        args = new String[2];
        args[0] = "src/main/resources/nlinei/";
        args[1] = "src/main/resources/nlineo";

        Configuration cfg = new Configuration();
        cfg.set("mapreduce.framework.name", "local");
        cfg.set("fs.defaultFS", "file:///");

        final FileSystem filesystem = FileSystem.get(cfg);
        if (filesystem.exists(new Path(args[1]))) {
            filesystem.delete(new Path(args[1]), true);
        }

        Job job = Job.getInstance (cfg);

        // 7设置每个切片InputSplit中划分三条记录
        NLineInputFormat.setNumLinesPerSplit (job, 3);

        // 8使用NLineInputFormat处理记录数
        job.setInputFormatClass (NLineInputFormat.class);

        // 2设置jar包位置,关联mapper和reducer
        job.setJarByClass (NLineDriver.class);
        job.setMapperClass (NLineMapper.class);
        job.setReducerClass (NLineReducer.class);

        // 3设置map输出kv类型
        job.setMapOutputKeyClass (Text.class);
        job.setMapOutputValueClass (LongWritable.class);

        // 4设置最终输出kv类型
        job.setOutputKeyClass (Text.class);
        job.setOutputValueClass (LongWritable.class);

        // 5设置输入输出数据路径
        FileInputFormat.setInputPaths (job, new Path (args[0]));
        FileOutputFormat.setOutputPath (job, new Path (args[1]));

        // 6提交job
        job.waitForCompletion (true);
    }
}
4.测试结果以及项目结构

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YARN(Yet Another Resource Negotiator)是Hadoop v2版本中用于资源管理和任务调度的框架。在Hadoop v1版本中,资源管理和任务调度是由MapReduce框架本身完成的,这导致了一些问题,例如任务难以弹性调度、资源利用率低等。 YARN的出现解决了这些问题。它的工作方式是将资源管理和任务调度分离开来。YARN有三个核心组件:ResourceManager、NodeManager和ApplicationMaster。 ResourceManager是整个集群的主要协调者,负责集群资源的管理和分配。它接收来自客户端的资源请求,并根据资源容量和使用情况进行调度。ResourceManager为每个应用程序分配一个ApplicationMaster。 NodeManager是每个节点上的代理程序,负责与ResourceManager通信,并管理本地节点的资源。它监测节点上的资源使用情况,并将这些信息报告给ResourceManager,同时启动和监控容器世界。 ApplicationMaster是每个应用程序的主管,负责与ResourceManager通信,申请资源并监控任务的执行。它将任务分成多个容器,并向NodeManager发送容器启动请求。一旦容器启动,ApplicationMaster就会监控这些任务的执行情况,并向ResourceManager报告任务的状态。 YARN的资源调度器是通过使用调度器插件实现的。YARN提供了多个调度器插件,例如先进先出调度器、容量调度器和公平调度器等。这些调度器插件可以根据应用程序的资源需求、业务优先级和集群资源的配置来灵活地分配和管理资源,从而实现更高的资源利用率和更好的任务调度性能。 总的来说,YARN的资源调度器是Hadoop框架中的一个重要组件,它通过将资源管理和任务调度分离,实现了更好的弹性和资源利用率,为大数据处理提供了更高的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值