背景

公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的,需要考虑离线存储和计算引擎。

标签的数据量是巨大的,此时存储在mysql中是不合适的,所以我们考虑了分布式存储系统HDFS。目前考虑的架构是,把每条明细数据存储到HDFS中,利用Hive或者其他类SQL的解析引擎,定期进行离线统计计算。

查找相关资料后,我下载了深入理解Haddoop这本书,从大数据的一些基础原理开始调研,这一系列的笔记就是调研笔记。

深入理解Hadoop

  1. 大数据的核心处理思想

    • 数据分布在多个节点并行处理

      • 提高处理速度
      • 同一个数据在不同节点有多份拷贝可以保持容错
    • 计算程序尽量靠近数据
    • 数据的处理尽量在本地完成
    • 顺序IO代替随机IO
  2. MapReduce的编程模型

    假设有海量的文档需要统计词频

    • 每个mapper处理一个输入文件,逐行处理数据,生成键值对
    • 排序键值对,根据reducer的个数,分发<key,lisy<值>>到不同的reducer处理(确保相同的key可以被分到同一个子集)
    • reducer任务合并多个相同key中的list<值>数据,输出键值对,最后合并到文件

  1. Hadoop1.X系统(守护进程)构成

    • NameNode:维护存储在HDFS上的所有文件的元数据信息,包括:数据块信息和数据块在节点的位置

    • Secondary NameNode:内务处理功能

    • Data Node:负责把真正的数据块存储在本地硬盘上

    • Job Tracker:调度子任务/监控任务和节点/失败子任务的重新调度

    • Task Tracker:运行在数据节点上,负责子任务的启动和管理

      还可以按照主从节点来分类:

    • 主节点

      • NN SN JT
    • 从节点

      • DN TT
  2. HDFS分布式文件系统为什么适合存储大文件而不适合存储大量的小文件?

    HDFS中文件会被分成多个数据块,每个数据块默认有三个备份,NN默认把信息保存在本地磁盘中,为了加快访问,会存储在内存中。假设有1G的一个文件和1000个1MB的文件,数据块默认大小为64MB,总数据块的数量为 1024/64 * 3 = 48块 和 1000 * 3 = 3000块的差距。(同一个文件可以存储在同一个数据块在中,不同文件不能存储在同一个数据块)

  3. 辅助名称节点的工作原理(待完成)

  4. HDFS的写入过程你能简单说说吗?

    1. 客户端需要像NN请求写入,NN会检查是否有权限

    2. 客户端接收到允许写入后,开始准备数据,当数据大小为一个块时,会调用NN请求数据节点信息

    3. NN创建文件,并生成块id,同时把数据节点相关的连接信息返回给客户端

    4. 客户端开始和节点1通信,等待节点1回复ACK

    5. 节点1存储数据,同时会与节点二通信,等待节点2返回ACK

    6. 节点3存储数据后,直接返回ACK

  5. 写入过程中存在哪些异常情况?

    • 写入错误-成功备份的块数量小于设置的数量

      当集群数量较小时,比如只有四台机器,如果默认开启三个数据块备份,那么当数据管道中有DN失败时,会去找其他健康的DN进行备份,假如两台DN都有问题,那么就无法满足最小3个数据块的备份需求。可以修改一个参数: dfs.client.block.write.replace-datanode-on-failure.enable 设置为false,表示如果在写入的pipeline有datanode失败的时候是否要切换到新的机器,默认为true。

    • 待添加..

  6. HDFS读文件机制

    1. 客户端请求NN读取文件

    2. NN返回文件的元数据信息

    3. 客户端直接访问对应数据节点获取数据块即可

  7. 简单说说 任务跟踪器和作业跟踪器的工作原理,各自负责什么?

    作业跟踪器负责接收客户端提交的任务,从名称节点获取输入文件的数据块信息,并采取数据就近原则把任务分配到 数据节点的任务跟踪器上。同时监控任务跟踪器的执行情况,在任务跟踪器节点故障时分配任务到其他的任务跟踪器节点。

    任务跟踪器负责实际执行任务,并且定时汇报心跳信息给作业跟踪器。

  1. Hadoop2.0中的Yarn都有什么组件?负责做什么?

    • 全局资源管理器:负责全局的资源调度
    • 节点管理器:负责具体节点的资源监控和资源分配
    • 应用程序管理器:每种应用有不同的应用程序管理器,负责分析任务数量,向全局资源管理器申请资源,监控任务运行情况,重新调度任务。
    • 容器:cpu和内存的抽象,任务和应用程序管理器都需要运行在容器中。
  2. Yarn提交任务的执行流程

    1. 客户端提交作业
    2. 全局资源管理器判断作业的类型,通过节点管理器给应用程序管理器分配容器
    3. 应用程序管理器运行在容器中,同时像全局资源管理器注册自己,申请任务资源
    4. 全局资源管理器确定资源后,通过节点管理器分配任务所需容器
    5. 运行在容器中的任务,通过应用特定的协议像应用程序管理器上报状态



深入理解Hadoop读书笔记-1的更多相关文章

  1. Hadoop读书笔记(二)HDFS的shell操作

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 1.shell操作 1.1全部的HDFS ...

  2. Hadoop读书笔记(四)HDFS体系结构

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  3. java内存区域——深入理解JVM读书笔记

    本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息 ...

  4. 00-深入理解C#读书笔记说明

    带着问题去看书 尝试着,根据每一小节,先列出大纲.然后根据自己原先的认知和理解以及不理解,对每一个小的chapter,我会先自我提问,带着问题去阅读,然后把我的理解以及不理解记录下来,对于错误的地方做 ...

  5. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入hive

    安装hive 1.下载hive-2.1.1(搭配hadoop版本为2.7.3) 2.解压到文件夹下 /wdcloud/app/hive-2.1.1 3.配置环境变量 4.在mysql上创建元数据库hi ...

  6. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE

    导入命令 sqoop import --connect jdbc:mysql://192.168.200.250:3306/sqoop --table widgets --hbase-create-t ...

  7. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 数据在mysq和hdfs之间的相互转换

    P573 从mysql导入数据到hdfs 第一步:在mysql中创建待导入的数据 1.创建数据库并允许所有用户访问该数据库 mysql -h 192.168.200.250 -u root -p CR ...

  8. [hadoop读书笔记] 第十章 管理Hadoop集群

    P375 Hadoop管理工具 dfsadmin - 查询HDFS状态信息,管理HDFS. bin/hadoop dfsadmin -help 查询HDFS基本信息 fsck - 检查HDFS中文件的 ...

  9. [hadoop读书笔记] 第九章 构建Hadoop集群

    P322 运行datanode和tasktracker的典型机器配置(2010年) 处理器:两个四核2-2.5GHz CPU 内存:16-46GN ECC RAM 磁盘存储器:4*1TB SATA 磁 ...

  10. [hadoop读书笔记] 第五章 MapReduce工作机制

    P205 MapReduce的两种运行机制 第一种:经典的MR运行机制 - MR 1 可以通过一个简单的方法调用来运行MR作业:Job对象上的submit().也可以调用waitForCompleti ...

随机推荐

  1. HashMap源码解析-JDK18

    引言 HashMap在JDK1.8和1.7中差异较大,在JDK1.8中HashMap引入了红黑树,优化减少了哈希冲突,提高了哈希表的存取效率. 本篇文章分析的就是JDK1.8中的HashMap源码. ...

  2. Linux 终端

    在 Linux 系统中,终端设备通常分为主设备和从设备.这是一种特殊的设备对的概念,其中: 主设备: 主设备也称为 "master device". 它是终端设备的控制端,用于与用 ...

  3. .NetCore依赖注入(DI)之生命周期

    在 .NET Core 中,依赖注入(Dependency Injection,DI)是一种实现控制反转(Inversion of Control,IoC)的技术,它通过将依赖对象注入到需要它们的对象 ...

  4. CDS标准视图:催款级别分配 I_DunningLevelDistribution

    视图名称:催款级别分配 I_DunningLevelDistribution 视图类型:参数视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IFIDUNLVLDI ...

  5. VAE模型简析和精要(原理和代码)

    1. 前言 这篇博客主要用于记录VAE的原理部分. 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流. 如有不对之处,欢迎评论区指出错误,你我共同进步学习! 图均引用自4部分的博客!!!! ...

  6. 将个人PC转变为高效的云电脑:理论、实践与优化

    本文分享自天翼云开发者社区<将个人PC转变为高效的云电脑:理论.实践与优化>,作者:不知不觉 在数字化时代的今天,我们越来越依赖互联网和计算机技术进行工作和生活.然而,传统的个人电脑(PC ...

  7. 任务调度器Azkaban(Azkaban环境部署)

    文章链接:https://www.cnblogs.com/liugp/p/16273966.html

  8. Luogu P1930 亚瑟王的宫殿 题解 [ 蓝 ] [ 分层图最短路 ] [ 枚举 ]

    亚瑟王的宫殿:比较 tricky 的图论. 图论做法 思路 因为是无向图,所以考虑一个经典 trick,把所有点到集合点的距离之和化为集合点到其他所有点的位置之和,就可以从集合点做单源最短路了. 于是 ...

  9. Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟 ]

    Dangerous Sugoroku:赛时写了矩乘 T 飞了,受到 sunkuangzheng 大佬的启发才知道要状压矩乘. 暴力矩乘思路 直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路, ...

  10. 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~

    大家好,我是汤师爷! 最近,腾讯发布了一款ima产品,主打用AI来帮你搜索信息.管理知识库. 说实话,一开始用混元大模型,感觉不咋地,很鸡肋的. 不过最近腾讯把DeepSeek R1接进来了,一下子解 ...