Hive 产生的背景


直接使用MapReduce 处理大数据,将面临以下的问题:

  • MapReduce 开发难度大,学习成本高
  • Hdfs 文件没有字段名,没有数据类型,不方便进行数据的有效管理
  • 使用MapReduce 框架开发,项目周期长,成本高

Hive 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表(类似于RDBMS中的表),并提供类SQL查询功能,HIVE是Facebook开源,用于解决海量结构化日志的数据统计。

  1. hive 的本质是:将SQL转化为MapReduce的任务进行运算。
  2. 底层有HDFS来提供数据存储
  3. Hive 可以理解成为将SQL转化为MapReduce 任务的工具。

Read more

Hadoop 系列


Hadoop 构成 HDFS + MapReduce + Yarn +Common

HDFS

Master/Slave

存入过程:
    对于大数据进行拆分,切割得到数据库,可以得到多个数据块。
获取文件过程:
    向NameNode请求获取到之前存入文件的块以及块所在的DataNode的信息,分别下载并最终合并,就得到之前的文件。
Master 节点:
    管理和维护元数据,元数据记录了文件的块列表以及块所在的DataNode节点信息。
slave:
    负责存储文件数据块
MN,DN:
    既是角色名称,也是进程名称,也代指电脑节点
2NN:
    辅助NameNod

Read more

slab 伙伴分配器


slab 思想及编程接口

  1. slab核心思想 为每种对象类型创建一个内存缓存,每个内存缓存由多个大块组成,一个大块是一个或多个连续的物理页,每个包含多个对象。slab采用面向对象的思想,基于对象类型管理内存,每种对象被划分为一个类,比如进程描述符(task_struct)是一个类,每个进程描述符实现是一个对象

    内存缓存组成结构如下

  2. 编程接口

      //slab.h
        void * __must_check __krealloc(const void *, size_t,gfp_t);
        void * __must_check krealloc(const void *,siz

Read more

伙伴分配器


伙伴分配器

分区的伙伴分配器

当系统内核初始化完毕后,使用页分配器管理物理页,当使用的页分配器是伙伴分配器,伙伴分配器的特点是算法简单且高效

连续的物理页成为页块(page block)。阶(order)是伙伴分配器的一个专业术语,是页的数量单位,2^n个连续页成为n阶页块。

满足以下条件的两个n阶页块成为伙伴(buddy):

  1. 两个页块是相邻,即物理地址是连续的;
  2. 页块的第一页的物理页号必须是2^n的整数倍;
  3. 如果合并成(n+1)阶页块,第一页的物理页号必须是2^(n+1)的整数倍

伙伴分配器分配和释放物理页的数量单位为阶,分配n阶页块的过程如下:

  1. 查看是否有空闲的n阶页块,如果有直接分

Read more

引导内存分配器原理


引导内存分配器原理

内存分配node ,每个 node 有多个zone,每个zone 有很多个page 组成。

bootmem分配器

在内核初始化的过程中需要分配内存,内核提供临时的引导内存分配器,在页分配器和块分配器初始化完成之后,把空闲的物理页交给页分配器关联,丢弃引导内存分配器。

  1. bootmem 分配器定义的数据结构,内核源码如下
typedef struct bootmem_data {
    unsigned long node_min_pfn;//起始物理页号
    unsigned long node_low_pfn;//结束物理页号
    void *  node_b

Read more