当前课程知识点:高级大数据系统 > Introduction to Big Data Systems > Principles of big data system design > Video
我们给大家介绍了什么是大数据
什么是大数据系统
以及在我们的课程中
我们会以哪一些例子给大家介绍大数据系统
那么现在我会给大家简单的介绍一下
我们在大数据系统这门课中
我们关心的一些核心的问题是什么
以及我们一般性的一些原则是什么
那我们来看在大数据的这个系统
这门课当中我们至始至终关心的
一个核心问题是什么
我们就是说要怎么样把计算网络
和存储的资源把它们整合到一块
把它们进行结构化的这样一个优化
进行有效的资源分配
来达到一个高效的一个平台
针对我们不同的数据处理业务
也许我们的这种结构
我们的分配策略是不一样的
但是我们整体的目标是要利用这三种资源
进行有效的大数据的这样一个处理
那么在这里面我们会有一些一般性的目标
那么一般性的目标是什么样呢
我们就会在一个一切资源
都可能出错不可靠
比如说我们的网络会断掉
我们的存储可能会丢掉数据
在所有资源不可靠的这样一个背景下
我们想要达到这样的一些目标
首先我们有一个贪心的目标
假设我们有1万台机器
我们是希望我们的一个数据处理任务
能够有效的把这1万台机器上的计算
存储资源都利用起来
这是我们一个贪心的目标
我们希望我们有很多的资源
有很多的钱可以购买很多机器之后
我们的算法
我们的系统能够有效地
帮我们把这些资源都利用到
第二我们希望它是能够可扩展的adaptive
当我们有1000台机器的时候
我们的系统能够工作
我们后面又增加了5000台机器
我们希望这6000台机器能够
同样有效的可扩展的工作起来
我们希望整个系统
还能够呈现出模块化的特征
我们今天要处理的是批量的数据
我们使用了一个MapReduce
这样一个框架
那么过一段时间
我们需要处理流式的数据
我们希望增加一个spark streaming
或者是我们希望增加一个storm
它同样能够有效的工作起来
所有的系统的模块
它应该能够像搭积木一样
不断的在硬件的资源上得到净化
得到一个组合
这是我们对大数据系统里面的问题
和我们的目标
以及我们的假设的
一个最笼统也是最根本的一个定义
那么在大数据里面
我们会有什么样的一些原则呢
这两个原则是我们非常
是在大数据系统这门课里面非常重要的
一个就是并行的原则
我们希望所有的任务能够并行化
而不是像传统在单线程的这样一个模态下
我们进行的这样一个串行的行为并行
它将发生在我们课程的所有环节
从存储到处理到后面的计算
第二个是虚拟化
这个虚拟化不是简单的
云计算中的这种资源的虚拟化
我们的虚拟化会贯穿整个课程
包括我们怎么样对存储
进行一个有效的虚拟化
让存储成为上层的一个提供数据的一个接口
包括我们对计算怎么样进行虚拟化
怎么样去考虑计算的问题
把流式的处理
内存化的处理和批量的处理
都虚拟化成数据的这种处理的单元
在大数据系统的这个搭建当中
实际上我们还有一个原则
就是要去选择
我们要去取舍到底是scale out还是scale up
所谓的scale up
就是说我们要搭建一个非常大的这样一个计算机
有非常大的CPU
有非常大的内存
来处理大规模的数据
那么所谓的scale out
我们有很多小的这种server
我们把它们放到一起
通过网络
通过其他的方式进行互联
来进行一个大规模的系统搭建
这两条路实际上在过去的
几十年中都得到了发展
有相当一部分的工作
他们会去搭建非常大的这样一个计算机
比如说超算
有相当一部分工作
尤其是工业界在做的
他们会去搭建一系列这种scale out的这样一个集群
然后让很多能力比较弱的机器
能够组合在一起进行有效的工作
在我们这门课当中
我们可能更多的会去关心scale out
这样的一个问题
我们也会把scale out
把大量的小机器搭成大机器
这样的一个准则
作为我们这门课的一个目标
这是我们这门课的一个偏重
我们有了一大堆的小机器
我们想要在这些小机器上
对整个大数据系统进行scale out
实际上最基本的一个原则
就是怎么样对任务进行拆分
那么我相信各位同学
在之前的学习当中
已经接触到了分治这样的一个概念
什么意思呢
我们可以会把一个大的任务
进行切分
切分之后
我们会将每个小任务在不同的这个工作节点上
可能就是我们系统中的一些小服务器上
进行处理
处理之后
我们会得到一些局部的结果
每个小的数据可能会生成一个小结果
那么我们最后会对这些小结果
进行一个整合
然后如果我们整合的非常好的话
我们希望整合出来的结果就是
原来我们一个大问题一个大项目
需要得到的一个最终的结果
那么在这里面
我们发现它的一个核心是什么呢
我们怎么样有效的对任务进行切分
我们能够把一个大任务变成一系列小任务
第二我们怎么样
对局部的结果进行整合
并不是所有任务都能够进行拆分
进行整合的
那么我们在大数据系统里面
就会关心那些能够被拆分
能够被整合
当它们拆分和整合之后
我们又怎么样优化各个部分的
这个处理最后达到
比如说整体的这个任务处理的时间尽可能短
这样的一些目标
分治是我们大数据系统里面一个核心的思想
那么分治之后带来的一个必然的问题是什么呢
资源的不协调资源的不协同
那这张图确实开了这样一个玩笑
我们发现当每个车子分治的去运输自己的货物
需要有自己的路径去走的时候
假设我们没有一个很好的控制
很容易造成的一个问题就是死锁
大家可能会共同去增强某一些稀缺资源
一些关键资源
那么在我们这个例子当中
一个关键的资源就是
十字路口的通过权
当大家不受协调
去争抢这个资源的时候
可能就会造成性能的降低
那在我们的例子当中
直接造成了这个交通的拥堵
那么我们大数据系统一个核心的任务
就是要去解决这样的问题
怎么样让大家能够独立的去
做一些小任务
同时当大家在争抢核心资源的时候
又能够有序的进行有效的分配
以及做到对这种阻塞
尽可能的避免
那么在这里面
实际上我们把这个问题细化了之后
就会发现
其实它并不是一个说做就能做的一个事情
我们会面临这样的一些挑战
首先我们怎么样把任务
分配给各个工作节点
什么样的任务该分配给什么样的节点
因为它们可能本质上会有不同的能力
不同的数据以及不同的这个硬件资源
那么我们怎么样去进行它们之间的协调
当有的工作节点完成的快
有的工作节点完成的慢
我们在这个过程中怎么样去进行一个有效的协调
我们要怎么样去整合它们的结果
当有的结果先生成
有的结果后生成
我们怎么样最大化
我们整个系统的输出
以及在这个过程当中
如果发生一些意外
有的worker
有的工作节点死掉之后
我们应该怎么样去进行任务的重新分配
保证整个系统是健壮的
那么等等这样一些问题
都是我们在大数据系统课程当中会去慢慢触及到
然后会去解决的一些关键的点
那么在我们正式讲各个具体的系统之前
实际我们会给大家一些背景知识
那么这个背景知识就是今天我们
去控制大数据系统里面进行资源的协同
进行有效的这种死锁避免的一些方法
第一叫做master slave
中心节点和边缘节点
这样一个分配的方法
所有的工作的节点
它们都会和一个中心的节点
比如说叫做master
跟它进行沟通
然后来确定自己现在能做什么
不能做什么
那么中心的节点
就负责保证大家的这个执行次序
然后完成了一个事情的一个同步
那么我们今天的公司
我们今天的这个学校等等
很多组织实际上是以这种方式
来进行人员和过程的一个协调的
同时我们可以创建一种叫做生产者
和消费者的这样一个流
那么大家都会把自己生产出来的数据
生产出来的一些资源提供到
一个队列当中
我们通过这个生产者和消费者的队列
对这个核心的资源争抢的资源
以及关键的信号量进行一个维护
也可以达到对不同的工作节点
进行争端避免的这样一个功能
还有我们可以创建整个工作的这样一个队列
那么有点类似于我们生产者
和消费者这样的一个模型
在这样的一个工作队列当中
我们也可以对一些关键资源
进行顺序化的一个分配
那么核心思想就是我们还是需要
一个相对比较中心的一个地方来进行
一些争议资源的一个协同
那么这是在大数据课程当中
在后面我们会反复会用到的一些
比较基础的这样一个概念
好 那我们来看看
介绍了这些之后
我们到底需要在整门课中
我们需要去了解哪一些背景的
这样一个知识呢
首先我们可能要改变
我们对体系结构的这样一个认识
冯诺依曼结构它在一个单点上
可能是我们处理单机程序
尤其是单线程程序这样有效的一个架构
那么在大数据的这样一个系统中
我们依然用了冯诺依曼的这样一个体系结构
但是由于我们的工作节点非常多
实际上我们会需要去考虑
其他的一些因素
来有效的完成大数据的这样一个任务的处理
那么在大数据系统中
第二个这个思路是什么呢
我们需要去隐藏很多的信息
尤其是对于非编程人员
我们需要隐藏数据
我们需要隐藏计算资源等等这种
非常底层的这样一些信息
信息的隐藏化
接口化是大数据系统核心的设计的一个理念
那我们需要把what和how给分离
和刚刚第二点是对应的
在大数据系统中
我们通常会给数据分析提供
非常抽象化的一些接口
那么这些数据分析人员
使用这些接口的时候
他并不需要知道底层
对应了多少个CPU
或者是多大的memory
他需要使用的是这个接口
能够完成一个任务
比如说MapReduce
给到用户的接口就是map和reduce两个阶段
那么总结一下我们所有的这些principle
所有的这些设计原则
大概包含了哪一些要点
首先我们要的是scale out
尽管scale up是今天科研的一个方向
但是在大数据系统中
我们通常希望我们能够不断的
扩展这个系统的规模
我们能够让系统能够自适应的
不断的向外去扩延
我们在数据的处理当中
我们认为数据是不太能够移动的资源
我们通常需要把代码
不断的去靠近数据
那么这也是和我们刚刚说到的
冯诺依曼体系结构
它有一定差别的地方
我们在数据中心当中我们的代码
是可以移动的资源
而我们的数据是一个指定的位置指定的输入
那么我们尽可能的让代码去靠近数据
那么我们在大数据系统中
想要尽可能多的去顺序的处理数据
而不是随机的对数据进行处理
这也和我们单击上的这种编程体验是违背的
我们希望我们的数据能够有效的
利用到磁盘的顺序读取的优势
能够有效的利用到批量数据处理的这样一个性能
那么顺序数据处理就是核心的一个要求
scalability的这种seamless
我们需要整个系统的扩展是对用户透明的
当我们有100台机器的时候
我们能够有效地将100台机器的性能利用起来
而当另外的50个机器加入到
整个数据处理任务的时候
我们希望整个过程是无缝的
是能够自动拓延的
那么这是对大数据系统的
一个要求scale out
我们希望代码靠近数据
我们希望整个数据能够是
顺序化的处理而避免各种随机的跳动
我们希望整个系统的可扩展性是透明的
尤其是对非编程人员是透明的
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业