大数据基础入门

1. 大数据产生背景

1.1. 概念的产生

  • 1980年,托夫勒在《第三次浪潮》中提到“大数据”一词
  • 2011年,麦肯锡正式定义了大数据的概念
  • 2010年后,随着互联网及云计算的发展,大数据技术开始走向实现,并进入人们的生活

1.2. 大数据的特征

  • Volume(规模):每天产生海量数据
  • Velocity(速度):数据产生的速度越来越快
  • Variety(多样):数据格式的多样性,例如文本、语音、图片等
  • Veracity(质量):数据的质量差别可以非常大
  • Valence(连接):大数据之间的联系

大数据的核心价值是预测

大数据基础入门_第1张图片
image

1.3. 文件系统的演进

  • 本地文件系统(LFS)- 本地硬盘
  • 网络文件系统(NFS)- 网络共享
  • 分布式文件系统(DFS)
大数据基础入门_第2张图片
image
大数据基础入门_第3张图片
image

DFS文件系统的优点:

  • 数据可扩展性(Data Scalability):存储量不够了增加磁盘阵列即可
  • 容错性(Fault Tolerance):如果主机或者机柜宕机,很难导致数据丢失,或系统停止工作
  • 高并发性(High Concurrency):并行处理数据成为可能

2. 大数据技术

2.1. 理论基础

  • 2003 Google File System
  • 2004 MapReduce: Simplified Data Processing on Large Clusters
  • 2006 Google Big Table

2.2. MapReduce

MapReduce的灵感来源于函数式语言中的内置函数Map和Reduce。简单来说,在函数式语言里,Map表示对一张列表(List)中的每个元素进行计算,Reduce表示对一张列表中的每个元素进行迭代计算。

大数据基础入门_第4张图片
image
  1. Input:英文单词组
  2. Map:将每个单词拆分开,并组成key-value对(Deer, 1)
  3. Shuffle:将key相同的放到一起 {Car: 1, 1, 1}
  4. Reduce:将key相同的进行累加

2.3. HADOOP

大数据基础入门_第5张图片
image

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,其核心是HDFS和MapReduce。

2.3.1. 组件

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

[图片上传失败...(image-2975a7-1519780100688)]

2.3.1. HDFS

大数据基础入门_第6张图片
image
  • NameNode:Master节点管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
  • SecondaryNameNode:保存着NameNode的部分信息,是NameNode的冷备份;
  • DataNode:负责存储client发来的数据块block;执行数据块的读写操作。

HDFS读文件流程

大数据基础入门_第7张图片
image
  1. 首先调用FileSystem对象的open方法获取DistributedFileSystem实例。
  2. DistributedFileSystem通过RPC获得文件第一批block的locations,同一block按照重复数会返回多个locations,距离客户端近的排在前面。
  3. 前两步会返回一个FSDataInputStream对象,该对象会被封装成 DFSInputStream对象。客户端调用read方法,DFSInputStream就会找出离客户端最近的datanode并连接。
  4. 数据从datanode源源不断的流向客户端。
  5. 如果第一个block块的数据读完了,就会关闭指向第一个block块的datanode连接,接着读取下一个block块。
  6. 如果第一批block都读完了,DFSInputStream就会去namenode拿下一批blocks的location,然后继续读,如果所有的block块都读完,这时就会关闭掉所有的流。

HDFS写文件流程

大数据基础入门_第8张图片
image
  1. 客户端通过调用 DistributedFileSystem 的create方法,创建一个新的文件。
  2. DistributedFileSystem 通过 RPC调用 NameNode,去创建一个没有blocks关联的新文件。创建前,NameNode 会做各种校验,比如文件是否存在,客户端有无权限去创建等。
  3. 前两步结束后会返回 FSDataOutputStream 的对象,和读文件的时候相似,FSDataOutputStream 被封装成 DFSOutputStream,DFSOutputStream 可以协调 NameNode和 DataNode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet,然后排成队列 data queue。
  4. DataStreamer 会去处理接受 data queue,它先问询 NameNode 这个新的 block 最适合存储的在哪几个DataNode里,比如重复数是3,那么就找到3个最适合的 DataNode,把它们排成一个 pipeline。DataStreamer 把 packet 按队列输出到管道的第一个 DataNode 中,第一个 DataNode又把 packet 输出到第二个 DataNode 中,以此类推。
  5. DFSOutputStream 还有一个队列叫 ack queue,也是由 packet 组成,等待DataNode的收到响应,当pipeline中的所有DataNode都表示已经收到的时候,这时akc queue才会把对应的packet包移除掉。
  6. 客户端完成写数据后,调用close方法关闭写入流。
  7. DataStreamer 把剩余的包都刷到 pipeline 里,然后等待 ack 信息,收到最后一个 ack 后,通知 DataNode 把文件标示为已完成。

2.3.2. HADOOP中的MapReduce

[图片上传失败...(image-78f9ed-1519780100687)]

2.3.3. YARN(Yet Another Resource Negotiator)

大数据基础入门_第9张图片
image

YARN中任务执行过程:

大数据基础入门_第10张图片
image

YANR带来的好处:

  1. 减小了JobTracker的资源消耗,并且让监测每一个Job子任务(tasks)状态的程序分布式化了,更安全、更优美。
  2. 在新的Yarn中,ApplicationMaster是一个可变更的部分,用户可以对不同的编程模型写自己的AppMst,让更多类型的编程模型能够跑在Hadoop集群中。
  3. 对于资源的表示以内存为单位,比之前以剩余slot数目更加合理。
  4. MRv1中JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在这个部分就扔给ApplicationMaster做了。
  5. ResourceManager中有一个模块叫做ApplicationManager,它是监测ApplicationMaster的运行状况,如果出问题,会在其他机器上重启。
  6. Container用来作为YARN的一个资源隔离组件,可以用来对资源进行调度和控制。

2.3.4. HADOOP的局限和不足

  • 抽象层次低,需要手工编写代码来完成,使用上难以上手;
  • 只提供两个操作,Map和Reduce,表达力欠缺;
  • 一个Job只有Map和Reduce两个阶段(Phase),复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的;
  • 处理逻辑隐藏在代码细节中,没有整体逻辑;
  • 中间结果也放在HDFS文件系统中;
  • ReduceTask需要等待所有MapTask都完成后才可以开始;
  • 时延高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够;
  • 对于迭代式数据处理性能比较差。

2.4. SPARK

大数据基础入门_第11张图片
image

专为大规模数据处理而设计的快速通用的计算引擎。

SPARK的特点:

  • 快速。比HADOOP快10-100倍。
  • 易用。可使用多种编程语言进行交互。
  • 通用。提供了SQL,流式计算,机器学习,图计算等框架。
  • 多平台运行。可运行于HADOOP、MESOS、云或单机上。
大数据基础入门_第12张图片
image

2.4.1. RDD(resilient distributed dataset)

一个RDD代表一个只读的可分区的分布式数据集,内部可以有许多分区(partitions),每个分区又拥有大量的记录(records)。

特征:

  • dependencies:建立RDD的依赖关系,主要rdd之间是宽窄依赖的关系,具有窄依赖关系的rdd可以在同一个stage中进行计算。
  • partition:一个rdd会有若干个分区,分区的大小决定了对这个rdd计算的粒度,每个rdd的分区的计算都在一个单独的任务中进行。
  • preferedlocations:按照“移动数据不如移动计算”原则,在spark进行任务调度的时候,优先将任务分配到数据块存储的位置
  • compute:spark中的计算都是以分区为基本单位的,compute函数只是对迭代器进行复合,并不保存单次计算的结果。
  • partitioner:只存在于(K,V)类型的rdd中,非(K,V)类型的partitioner的值就是None。

操作:

  • transformations - map, flatMap, union, ReduceByKey...
  • actions - collect, reduce, count, save, lookupKey...

action会触发真正的作业提交,而transformation算子是不会立即触发作业提交的。(惰性)

每一个 transformation() 方法返回一个新的RDD。(只读)

当遇到action算子时会触发一个job的提交,然后反推回去看前面的transformation算子,进而形成一张有向无环图。在DAG中会进行stage的划分,划分的依据是依赖是否是shuffle,每个stage又可以划分成若干task。

2.4.2. SPARK运行架构

大数据基础入门_第13张图片
image
  • Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
  • Worker Node:从节点,负责控制计算节点,启动Executor或者Driver。
  • Driver: 运行Application 的main()函数
  • Executor:执行器,是为某个Application运行在worker node上的一个进程

2.4.3. 运行流程

大数据基础入门_第14张图片
image
  1. 构建Spark Application的运行环境,启动SparkContext
  2. SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源
  3. Executor向SparkContext申请Task
  4. SparkContext将应用程序分发给Executor
  5. SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行
  6. Task在Executor上运行,运行完释放所有资源
大数据基础入门_第15张图片
image

2.5. 其它大数据相关项目

  • HIVE
  • HBASE
  • STORM
  • ZOOKEEPER
  • FLUME
  • KAFKA

你可能感兴趣的:(大数据基础入门)