admin管理员组文章数量:1565355
主要记录阅读《从0开始学大数据》课程的学习笔记。课程系统性的介绍大数据的发展史、大数据系统的原理及架构、大数据生态体系中的主要产品、如何进行呢大数据开发实践、大数据平台开发及系统集成、使用大数据平台进行分析和运营、大数据的算法等。比较适合进行系统性的学习实践,能够较为深入的理解大数据相关技术。
预习模块
开篇词 | 为什么说每个软件工程师都应该懂大数据技术?
如果未来是面向AI编程的,希望软件工程师不要把AI当做什么万能的东西。即使自己不做大数据与机器学习相关的开发,每个程序员也应该懂大数据和机器学习。
预习 01 | 大数据技术发展史:大数据的前世今生
2004 三篇论文 GFS 、 MapReduce 、 BigTable
2006 Doug Cutting : Hadoop
2008 Hadoop 成为 Apache 顶级项目 , Doug 成为基金会的主席
Yahoo pig 脚本语言 类SQL – > Facebook Hive 支持SQL
2011 逐步形成 大数据生态体系 其中包括:专门将关系数据库中的数据导入导出到 Hadoop 平台的 Sqoop;针对大规模日志进行分布式收集、聚合和传输的 Flume;MapReduce 工作流调度引擎 Oozie 等。
2012 年,Yarn 成为一个独立的项目开始运营,随后被各类大数据产品支持,成为大数据平台上最主流的资源调度系统。
2012 Spark 开始崭露头角
批处理计算 大数据离线计算
大数据流式计算 Storm\ Flink \ Spark Streaming
正所谓在历史前进的逻辑中前进,在时代发展的潮流中发展
大数据处理的主要应用场景包括数据分析、数据挖掘与机器学习。
预习 02 | 大数据应用发展史:从搜索引擎到人工智能
- 大数据应用的搜索引擎时代
大数据量 带来计算和存储的创新 - 大数据应用的数据仓库时代
有数据 就会进行统计分析 , 规模大 ,想到用Hadoop 大数据技术 - 大数据应用的数据挖掘时代
数据存在关联 关联分析 寻找多样化关联 - 大数据应用的机器学习时代
在过去,我们受数据采集、存储、计算能力的限制,只能通过抽样的方式获取小部分数据,无法得到完整的、全局的、细节的规律。而现在有了大数据,可以把全部的历史数据都收集起来,统计其规律,进而预测正在发生的事情。 这就是机器学习
将人类活动产生的数据,通过机器学习得到统计规律,进而可以模拟人的行为,使机器表现出人类特有的智能,这就是人工智能 AI。
大数据从搜索引擎到机器学习,发展思路其实是一脉相承的,就是想发现数据中的规律并为我们所用。
预习 03 | 大数据应用领域:数据驱动一切
- 大数据在医疗健康领域的应用
医学影响智能识别
病历大数据智能诊疗 - 大数据在教育领域的应用
AI外语老师
智能解题 : 查找答案 – 识别题目,匹配答案 – 转化形式语言 分析 自动推导 - 大数据在社交媒体领域的应用
舆情监控与分析 - 大数据在金融领域的应用
大数据风控 - 大数据在新零售领域的应用
进行全链路管理 从生产、物流、购物体验,使用大数据分析和预判,实现精准生产、零库存、全新购物体验 - 大数据在交通领域的应用
实时监控
导航
无人驾驶
Hadoop 大数据原理与架构
04 | 移动计算比移动数据更划算
- 如何解决PB级数据进行计算的问题呢?
大数据计算处理通常针对的是网站的存量数据
网站大数据系统要做的就是将这些统计规律和关联关系计算出来,并由此进一步改善网站的用户体验和运营决策 。
将程序分发到数据所在的地方进行计算,也就是所谓的移动计算比移动数据更划算。- 移动计算程序到数据所在位置进行计算是如何实现的?
- 将待处理的大规模数据存储在服务器集群的所有服务器上,主要使用 HDFS 分布式文件存储系统,将文件分成很多块(Block),以块为单位存储在集群的服务器上。
- 大数据引擎根据集群里不同服务器的计算能力,在每台服务器上启动若干分布式任务执行进程,这些进程会等待给它们分配执行任务。
- 使用大数据计算框架支持的编程模型进行编程,比如 Hadoop 的 MapReduce 编程模型,或者 Spark 的 RDD 编程模型。应用程序编写好以后,将其打包,MapReduce 和 Spark 都是在 JVM 环境中运行,所以打包出来的是一个 Java 的 JAR 包。
- 用 Hadoop 或者 Spark 的启动命令执行这个应用程序的 JAR 包,首先执行引擎会解析程序要处理的数据输入路径,根据输入数据量的大小,将数据分成若干片(Split),每一个数据片都分配给一个任务执行进程去处理。
- 任务执行进程收到分配的任务后,检查自己是否有任务对应的程序包,如果没有就去下载程序包,下载以后通过反射的方式加载程序。走到这里,最重要的一步,也就是移动计算就完成了。
- 加载程序后,任务执行进程根据分配的数据片的文件地址和数据在文件内的偏移量读取数据,并把数据输入给应用程序相应的方法去执行,从而实现在分布式服务器集群中移动计算程序,对大规模数据进行并行处理的计算目标。
- 移动计算程序到数据所在位置进行计算是如何实现的?
05 | 从RAID看垂直伸缩到水平伸缩的演化
数据容量 、读写速度 、 可靠性
单机系统 RAID 垂直伸缩
分布式 HDFS 水平伸缩
06 | 新技术层出不穷,HDFS依然是存储的王者
- HDFS是如何实现大数据高速、可靠的存储和访问的?
NameNode 元数据 、 协调
DataNode 文件数据 分割成若干数据块 , 复制副本数量 (提高速度)- 高可用 :
- 数据存储故障容错 存储校验和 读取时校验,不正确则选其他备份
- 磁盘故障容错 DataNode 监测本机磁盘损坏,上报该磁盘上所有BlockId 给NameNode , 通知其他DataNode 做复制备份,使数量满足要求
- DataNode 故障容错 心跳 , 超时未收到心跳 则发起复制备份 , 查找有DataNode数据的副本,并再复制,满足副本数量要求
- NameNode 故障容错 主从热备的方式
集群部署两台 NameNode 服务器,一台作为主服务器提供服务,一台作为从服务器进行热备,两台服务器通过 ZooKeeper 选举,主要是通过争夺 znode 锁资源,决定谁是主服务器。而 DataNode 则会向两个 NameNode 同时发送心跳数据,但是只有主 NameNode 才能向 DataNode 返回控制信息 - 冗余备份 、 失效转移 、 限流降级
- 高可用 :
07 | 为什么说MapReduce既是编程模型又是计算框架?
其编程模型只包含 Map 和 Reduce 两个过程,map 的主要输入是一对 值,经过 map 计算后输出一对 值;然后将相同 Key 合并,形成 ;再将这个 输入 reduce,经过计算输出零个或多个 对。
- 模型
对事物的洞察力
这种洞察力就是来源于他们对事物的抽象能力
08 | MapReduce如何让数据完成一次旅行?
-
如何为每个数据块分配一个 Map 计算任务,也就是代码是如何发送到数据块所在服务器的,发送后是如何启动的,启动以后如何知道自己需要计算的数据在文件什么位置(BlockID 是什么)。
-
处于不同服务器的 map 输出的 ,如何把相同的 Key 聚合在一起发送给 Reduce 任务进行处理。
-
MapReduce 作业启动和运行机制
大数据应用进程
JobTracker 进程 唯一
TaskTracker 进程 -
MapReduce 数据合并与连接机制
shuffle 按key的哈希值 对Reduce 任务数量取模
将不同服务器上的相关数据合并到一起进行下一步计算 , 让数据关联起来
09 | 为什么我们管Yarn叫作资源调度框架?
- Yarn : Yet Another Resource Negotiator 另一种资源调度器
调度器
Container NodeManager ResourceManager
应用程序管理器
ApplicationMaster
实现 MapReduce 编程接口、遵循 MapReduce 编程规范就可以被 MapReduce 框架调用,在分布式集群中计算大规模数据;实现了 Yarn 的接口规范,比如 Hadoop 2 的 MapReduce,就可以被 Yarn 调度管理,统一安排服务器资源。所以说,MapReduce 和 Yarn 都是框架
10 | 模块答疑:我们能从Hadoop学到什么?
一主多从架构 : 集中管理 分布式存储
在学习新知识的时候会遵循一个 5-20-2 法则,用 5 分钟的时间了解这个新知识的特点、应用场景、要解决的问题;用 20 分钟理解它的主要设计原理、核心思想和思路;再花 2 个小时看关键的设计细节,尝试使用或者做一个 demo。
大数据生态体系主要产品原理与架构
11 | Hive是如何让MapReduce实现SQL操作的?
- MapReduce 实现SQL的原理
以输入的数据的Value记录为key , 作为map 的输入
以<Key , Value 集合> 作为reduce的输入 - Hive的架构
Client
Metastore - Driver - Hadoop
Compiler
语句类型:
DDL 数据定义语言
DQL 数据查询语句
依据SQL生成内置函数的DAG(有向无环图) - Hive如何实现join操作
标记来源表 <1,X> 来源第一张表 记录数X
其他类似产品: Impala \ Spark SQL \ Hive on Spark \
嫁接技术: 数据库相关技术和架构 嫁接到MapReduce 上 , 就得到了Hadoop 大数据仓库Hive
12 | 我们并没有觉得MapReduce速度慢,直到Spark出现
我们常常意识不到问题的存在,直到有人解决了这些问题。
当你去询问人们有什么问题需要解决,有什么需求需要被满足的时候,他们往往自己也不知道自己想要什么,常常言不由衷。但是如果你真正解决了他们的问题,他们就会恍然大悟:啊,这才是我真正想要的,以前那些统统都是“垃圾”,我早就想要这样的东西(功能)了。
所以顶尖的产品大师(问题解决专家),并不会拿着个小本本四处去做需求调研,问人们想要什么。而是在旁边默默观察人们是如何使用产品(解决问题)的,然后思考更好的产品体验(解决问题的办法)是什么。最后当他拿出新的产品设计(解决方案)的时候,人们就会视他为知己:你最懂我的需求(我最懂你的设计)。
-
Spark 面向对象的大数据计算
-
Map Reduce 面向过程的大数据计算
-
Spark :
- RDD 弹性数据集
- RDD 上定义的函数分两种,一种是转换(transformation)函数,这种函数的返回值还是 RDD;另一种是执行(action)函数,这种函数不再返回 RDD。
- RDD 定义了很多转换操作函数,比如有计算 map(func)、过滤 filter(func)、合并数据集 union(otherDataset)、根据 Key 聚合 reduceByKey(func, [numPartitions])、连接数据集 join(otherDataset, [numPartitions])、分组 groupByKey([numPartitions]) 等十几个函数。
- Spark 应用程序代码中的 RDD 和 Spark 执行过程中生成的物理 RDD 不是一一对应的,RDD 在 Spark 里面是一个非常灵活的概念,同时又非常重要,需要认真理解。
如何向大师靠拢?
不要直接提出你的问题和方案,不要直接说 “你的需求是什么? 我这里有个方案你看一下 。。 ”
- RDD 弹性数据集
13 | 同样的本质,为何Spark可以更高效?
- Spark的计算阶段 task
分割计算阶段 DAG分阶段 分析关联
DAGScheduler
shuffle 过程: 需要shuffle 宽依赖 , 不需要shuffle 窄依赖
MapReduce 依据shuffle将计算分为Map和Reduce两个阶段,再循环重复这样的过程;Spark 将前一个的Reduce和后一个Map链接起来,作一个持续计算 , 减少对HDFS的访问 。 另外 Spark优先使用内存数据(内存不够则用磁盘的或SDD ) , mapreduce是从hdfs取数据 保存数据,再取数据 用的磁盘数据 . - Spark的作业管理
action函数 调用后不再返回RDD , 以job 形式执行 作业
一个作业至少包含一个计算阶段 每个阶段由很多个任务组成 - Spark 的执行过程
支持Standalone \ Yarn \ Mesos \ Kubernetes 等多种部署方案
Driver Program : SparkContext - DAGScheduler
Cluster Manager :
Worker Node : Executor Cache Task
RDD的编程模型更简单,DAG切分的分阶段计算过程更快速,使用内存存储中间计算结果更高效。
14 | BigTable的开源实现:HBase
- HBase 可伸缩架构
HRegionServer HRegion HFile
Zookeeper HMaster - HBase 可扩展数据模型
列族 ColumnFamily 无须指定字段名 Column
字段的名称和字段的值 以 Key-Value 形式存储 - HBase 的高性能存储
LSM Log Structed Merge Tree log结构合并数
数据写入的时候以Log方式连续写入 ,然后异步对磁盘上的多个LSM树进行合并
按一定规则的顺序操作 减少磁盘访问次数
架构上通过数据分片的设计配合 HDFS,实现了数据的分布式海量存储;数据结构上通过列族的设计,实现了数据表结构可以在运行期自定义;存储上通过 LSM 树的方式,使数据可以通过连续写磁盘的方式保存数据,极大地提高了数据写入性能。
15 | 流式计算的代表:Storm、Flink、Spark Streaming
- 大数据流计算系统
- Storm
原先的消息流 处理系统 ,偏业务系统 ,处理逻辑和业务系统在一起 ,复用难
Strom 成为早起的流计算框架 数据源 spout \ 处理逻辑 bolt ; 建立拓扑逻辑关系 topology
大数据的分片处理 \ 数据的流转 、 任务的部署与执行 - Spark Streaming
利用Spark的分片和快速计算的特性 ,将实时传输进来的数据按照时间进行分段 ,一段时间的数据合并在一起,当做一批数据,交给Spark处理 - Flink
按照流处理计算设计的 (从文件系统读入的数据也可以当做数据流 ,此时变成批处理系统)
StreamExecutionEnvironment DataStream(流处理) DataSet (批处理)
架构: Flink Program (client) - JobManager (Actor System \ Scheduler \ Checkpoint Coordinator) – TaskManager (taskSlot (task) )
框架的演进 – 将业务逻辑与技术实现 分离
16 | ZooKeeper是如何保证数据一致性的?
- 分布式一致性原理
CAP原理 一致性Consistency 可用性Availibility 分区耐受性Patition Tolerance - ZAB算法与Zookeeper 架构
Paxos 算法的简化版
写请求交给主节点Leader 提议 确认 提交
读请求可以自己处理
主主热备 : 记录心跳 续期 , zk 的监听机制
17 | 模块答疑:这么多技术,到底都能用在什么场景里?
滴滴 用HBase 存 司机端的GPS 数据 , 行程结束时 依据GPS轨迹计算路程和车费
用Hive火Spark SQL 大数据仓库工具进行大数据分析和计算
Yarn 进行资源分配
计算引擎 资源调度 实际部署可能是在一起 同一个集群
HBase 单独部署 保障 OLTP(在线事务处理) 高可用和资源独占性
王小波的《我的精神家园》 ” 我活在世上,无非想要明白些道理,遇见些有趣的人,做一些有趣的事。倘能如我所愿,我的一生就算成功 。“ “ 我只愿蓬勃生活在此时此刻,无所谓去哪,无所谓见谁。那些我将要去的地方,都是我未谋面的故乡。以前是以前,现在是现在。我不能选择怎么生,怎么死;但我能决定怎么爱,怎么活。”
《敏捷软件开发》 软件设计不应该是面向需求设计,而应该是面向需求变更设计
大数据开发实践
18 | 如何自己开发一个大数据SQL引擎?
学习一样技术,如果只是作为学习者,被动接受总是困难的。但如果从开发者的视角看,很多东西就豁然开朗了,明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。
- Hive的主要处理过程:
- 将输入的 Hive QL 经过语法解析器转换成 Hive 抽象语法树(Hive AST)。
- 将 Hive AST 经过语义分析器转换成 MapReduce 执行计划。
- 将生成的 MapReduce 执行计划和 Hive 执行函数代码提交到 Hadoop 上执行。
- Panthera :
Hive 语义分析器不动, 替换Hive语法解释器 , (开源的SQL语法解释器 + SQL抽象语法书分析与转换器)
关系代数 并 差 积 选择 、 投影 ; 嵌套子查询可以等价转换成链接操作
装饰模式 扩展开发新的语法转换类Transformer
组合模式 进行具体Transformer 类中的遍历调用, 替代递归方式
19 | Spark的性能优化案例分析(上)
Apache 开源社区的组织和参与方式
PMC - committer – contributor pr
- 软件性能优化
你不能优化一个没有经过性能测试的软件
你不能优化一个你不了解其架构设计的软件
主要性能指标 :
响应时间、并发数、 吞吐量、性能计数器
性能优化的一般过程:
1、做性能测试,分析性能状况和瓶颈点
2、针对软件架构设计进行分析,寻找导致性能问题的原因
3、修改相关代码和架构,进行性能优化
4、做性能测试,对比是否提升性能,并寻找下一个性能瓶颈 - 大数据软件性能优化
SQL语句优化
不同语句的性能差异可能有数量级的区别
数据倾斜处理
如 where userID != null ,过滤掉无效的大量脏数据
MapReduce \ Spark 代码优化
配置参数优化
如 yarn 每个Container 包含的cpu个数和内存 , hdfs数据块的大小
大数据开源软件代码优化 - Spark性能优化
20 | Spark的性能优化案例分析(下)
- Spark任务文件初始化优化
同一台机器上的Executor 让一个去下载应用程序,其他从缓存复制 ,用文件锁阻塞其他进程 - Spark 任务调度优化 等待大部分计算资源注册了再分配任务,防止任务不均匀
- Spark 应用配置优化 启动的Executor 数量和Cpu核数匹配
- 操作系统配置优化 关闭transparent huge pages
- 硬件优化 网卡升级
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项
对工程师而言,业务产品的开发技术难度相对较低,如果要想更快提高自己的技术水平,去开发基础技术产品更能得到提升和锻炼,所以优秀的工程师更愿意去开发有难度有挑战的创新性基础技术产品,而不是去开发那些千篇一律的业务产品。
这样,在工程师和公司之间就形成了一种博弈:工程师想要开发基础技术产品,但是必须要得到公司管理层的支持;管理层资源有限,只愿意支持开发那些对业务有价值、技术有创新、风险比较低的基础技术产品。
所以事情就变成工程师需要说服公司管理层,想要做的就是对业务有价值、技术有创新、风险比较低的基础技术产品;而管理层则要从这些竞争者中选出最优秀的项目。
当前现状
产品定位
产品目标
技术指标
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
必须证明自己有已经经过论证的架构技术方案,可以实现前面设定的目标,立项后可以迅速启动执行,不需要再去摸索尝试,风险可以把控。
整体架构
- 创新:
- 分区路由算法
基于虚拟节点的一致性哈希映射 , W=2 R=1 - 失效转移策略
瞬时失效 重试 三次失败上报
临时失效 收到上报检查 标记 通知Client ; 失效期的读写及恢复期的读写
永久失效 拷贝数据到添加的新服务器 人工在控制中心配置新服务器信息 - 集群伸缩设计
- 向集群中一个分组 group 添加新的物理服务器,部署并启动 Doris 服务器进程。
- 将这个 group 的所有服务器设置为临时失效。
- 使用路由算法重新计算加入服务器后的虚拟节点分布,并把需要迁移的虚拟节点对应的物理文件拷贝到新服务器上。
- 设置 group 所有服务器临时失效恢复,将扩容期间的数据更新写回到这些服务器。
- 分区路由算法
23 | 大数据基准测试可以带来什么好处?
- 大数据基准测试的应用
Impala \ Spark - 大数据基准测试工具HiBench
- HiBench 内置了若干主要的大数据计算程序作为基准测试的负载(workload)。
- Sort,对数据进行排序大数据程序。
- WordCount,前面多次提到过,词频统计大数据计算程序。
- TeraSort,对 1TB 数据进行排序,最早是一项关于软件和硬件的计算力的竞赛,所以很多大数据平台和硬件厂商进行产品宣传的时候会用 TeraSort 成绩作为卖点。
- Bayes 分类,机器学习分类算法,用于数据分类和预测。
- k-means 聚类,对数据集合规律进行挖掘的算法。逻辑回归,数据进行预测和回归的算法。
- SQL,包括全表扫描、聚合操作(group by)、连接操作(join)几种典型查询 SQL。
- PageRank,Web 排序算法。
- 使用步骤:
- 配置,配置要测试的数据量、大数据运行环境和路径信息等基本参数。
- 初始化数据,生成准备要计算的数据,比如要测试 1TB 数据的排序,那么就生成 1TB 数据。
- 执行测试,运行对应的大数据计算程序。
- HiBench 内置了若干主要的大数据计算程序作为基准测试的负载(workload)。
24 | 从大数据性能测试工具Dew看如何快速开发大数据系统
- Dew 设计与开发
Dew Master : herse
Dew Agent : DewDrop
基于Akka 搭建了Dew的底层通信和消息传输机制 - Akka 原理与应用
异步消息 Actor
大数据流处理系统中的应用
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
怎样去做一些技术框架或基础技术产品的开发
学习: 读论文 – 看官网资料 – 看源码
练习实践
原理学习
掌握细节 应用实践
开发实践
参考资料
从 0 开始学大数据
版权声明:本文标题:读《从0开始学大数据》-- 学习笔记和感想随笔(一) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726221462a1061109.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论