404 Not Found

Personal Notes


  • 首页

  • 归档

  • 标签

  • 搜索

MapReduce 之 InputFormat 分析

发表于 Feb 10 2018

这篇文章简要分析一下 MapReduce 的第一个核心组件 InputFormat,文中引用的源码都是来自 Hadoop 2.7.3,隐去了一些实现细节,只突出了与这次关注的内容比较相关的部分。

《Hadoop 技术内幕:深入解析 MapReduce 架构设计与实现原理》中写道,InputFormat 用于描述输入数据的格式,它提供以下两个功能:

数据切分:按某个策略将输入数据切分成若干 split,以便确定 Map Task 个数及对应的 split。

为 Mapper 提供输入数据:给定某个 split,能将其分解成一个个 key/value 对。

图 1:InputFormat 类层级结构
阅读全文 »

MapReduce 之概述

发表于 Feb 4 2018

工作这段时间已经写过不少 MapReduce Job,但未曾系统地研究过它的运行流程,接下来要花一点时间整理一下。先从概述整个流程开始,随后结合源码简单分析一下各个关键组件。
董西成的《Hadoop 技术内幕:深入解析 MapReduce 架构设计与实现原理》一书中讲到:

回调机制是一种常见的设计模式。它将工作流内的某个功能按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

Hadoop MapReduce 对外提供的 5 个组件(InputFormat、Mapper、Partitioner、Reducer 和 OutputFormat)实际上全部属于回调接口。当用户按照约定实现这几个接口后,MapReduce 运行时环境会自动调用它们。

图 1:MapReduce Overview
阅读全文 »

《Python进阶》笔记

发表于 Apr 5 2016

忘记从哪得知《Python进阶》这本书了,前几天花了几个小时读完之后,学到了很多以前不知道或是不了解的关于Python的种种,先挑几条比较实用的记录一下,以后再详细探讨。

1. open函数

很多人(也包括我)经常是这样使用open函数的:

f = open('data.txt', 'r')
data = f.read()
f.close()

但是,这种使用方式有一个隐患:open的返回值是操作系统分配的一个文件句柄,处理完文件需要归还这个文件句柄,避免超出一次能打开的文件句柄数上限。在如上代码中,如果有任意异常正好在f = open(…)之后产生,f.close()将不会被调用(文件句柄被归还与否,取决于Python解释器的实现),为了确保无论是否产生异常文件都能被关闭,可以使用Python中的with语句:

with open('data.txt', 'r') as f:
data = f.read()

阅读全文 »

C++引用计数的简单实现

发表于 Sep 6 2015

C++标准库中的 shared_ptr 是引用计数型指针,记录有多少用户共享它所指向的对象。当没有用户使用对象时,shared_ptr 类负责释放资源。为了说明引用计数如何工作,我将结合《C++ Primer(第5版)》第 13 章的内容,设计自己的引用计数。

引用计数的工作方式

  1. 除了初始化对象外,每个构造函数(拷贝构造函数除外)还要创建一个引用计数,用来记录有多少对象与正在创建的对象共享状态。当我们创建一个对象时,只有一个对象共享状态,因此将计数器初始化为 1。
  2. 拷贝构造函数不分配新的计数器,而是拷贝给定对象的数据成员,包括计数器。拷贝构造函数递增共享的计数器,指出给定对象的状态又被一个新用户所共享。
  3. 析构函数递减计数器,指出共享状态的用户少了一个。如果计数器变为 0,则析构函数释放状态。
  4. 拷贝赋值运算符递增右侧运算对象的计数器,递减左侧运算对象的计数器。如果左侧对象的计数器变为 0,意味着它的共享状态没有用户了,拷贝赋值运算符就必须销毁状态。
    阅读全文 »

C++简单Vector类的实现

发表于 Sep 6 2015

之前写过一个简单String类的实现,这次再写写简单Vector类的实现,主要参照《C++ Primer(第5版)》第 13 章的一个实现,做了一些简化和修改。我们知道new有一些灵活性上的局限,它将内存分配和对象构造组合在了一起,当分配一大块内存时,我们通常计划在这块内存上按需构造对象,标准库allocator类定义在memory中,它帮助我们将内存分配和对象构造分离开来。下面是实现代码,主要使用allocator而不是new分配内存:

图 1:Vector 内存布局
阅读全文 »

1…567…9
wind4869

wind4869

44 日志
12 标签
GitHub E-Mail
© 2014 - 2020 wind4869
由 Hexo 强力驱动
主题 - NexT.Pisces
0%