Spark 学习第一章——基础知识
背景
Spark起源于伯克利实验室,已经成为处理分析大量数据的一个标准工具,为了更容易的理解Spark,我们首先了解关于电脑的一些处理速度的数据。
1.1基本数据的了解
CPU 0.4ns
Memory 100ns
random read from ssd(固态硬盘) 16us
network 150ms
- CPU speed:
6000 tweets/second
each tweet=2000 bytes
1.2million bytes /second
a typical cpu can operate 2.5billion(25亿) operations/second
(2.5GHZ)
- memory speed
Memory (aka RAM) is known to be “efficient, expensive, and ephemeral”.
The times that momory take the data of 1 hour‘s twitter the CPU could process 1 week twiter .
To combine the cpu and momory better,we could create the computer with lots of memory and cpu.
Google leverage the expense to build a distributed cluster(a bunch of connected machine) of commodity hardwares(cheap computer)
- storage speed
- network
1.2 大数据的概念
- small data
当数据比较小的时候,在自己电脑上进行处理速度是最快的此时的network 是bottlecheck,也就是如果分发数据给分布式系统进行处理,通过网络传送数据的时间远远大于自己处理数据的时间,并且还要解决例如版本环境不一致代码兼容性问题和不同系统的调度分配问题 - big data
当数据非常大时,storage和memory的处理成为瓶颈。例如当我们要处理200GB 的数据时,首先需要将8GB的数据从storage调取到内存,这几乎占满了memory,导致没有其他空间分给别的进程了,而当CPU迅速处理完后,再继续写入一小部分结果到内存后内存已满,需要将写入后数据从memory转移至storage,再继续重复上述过程,由于这两个速度相比于cpu处理速度非常耗时,cpu需要等待很长时间 也不能运行其他进程,这将会造成超负荷震荡现象。此时,采用分布式系统分发数据同步处理对比自己处理将会加速很多。
如果数据集大于 RAM 的大小,我们仍然可以在单台计算机上分析数据。 默认情况下,Python pandas 库将把整个数据集从磁盘读入内存。 如果数据集大于计算机的内存,程序将无法工作。
但是,Python pandas 库可以在一个文件中读取更小的块。 因此,如果要计算有关数据集的摘要统计信息(如求和或计数) ,可以一次读取数据集的一部分并累积求和或计数。
1.3 Hadoop生态系统
-
分布式计算意味着每个结点各自拥有多个 cpu以及自己的内存,他们之间痛过网络进行通信。
并行计算则是使用分布式计算的一个紧密的方式即多个 cpu 共享相同的内存,通过访问共享内存进行信息的交换。 -
Hadoop框架
-
Hadoop :一个用于大数据存储和数据分析的工具生态系统。 是一个比 Spark 更老的系统,但是仍然被许多公司使用。 Spark和
Hadoop 的主要区别在于如何使用内存。 Hadoop 将中间结果写入磁盘,而 Spark 则尽可能地将数据保存在内存中。对于许多用例来说,这使得 Spark 更快。并且Spqrk没有文件存储系统。它可以从其他来源进行数据的读入。 -
Hadoop MapReduce :一个并行处理和分析大型数据集的系统。
-
Hadoop YARN:一个跨集群调度作业的资源管理器。 管理跟踪可用的计算机资源,然后将这些资源分配给特定的任务。
Hadoop Distributed File System
(HDFS):是一个大数据存储系统,它将数据分割成大块,并将这些分散式档案系统存储在一个集群的计算机上。
随着 Hadoop 的成熟,其他工具也被开发出来,使得 Hadoop 更容易使用。这些工具包括:
- Apache Pig ——一种类似 sql 的语言,运行在 Hadoop MapReduce 之上
- Apache Hive ——另一个类似 sql 的接口,运行在 Hadoop MapReduce 之上
- MapReduce
Mapreduce 是一种用于操作大型数据集的编程技术,“ Hadoop MapReduce”是这种编程技术的具体实现。该技术的工作原理是首先划分大型数据集(通过HDFS),然后将数据分布到集群(cluster)中。 在映射步骤(map)中,分析每个数据并将其转换为一个(键、值)对。 然后这些键值对在集群中进行混合(shuffle),以便所有相同的键都在同一台机器上。 在 reduce 步骤中,将具有相同键的值组合在一起。
虽然 Spark 没有实现 MapReduce,但是可以编写与 map-reduce 范例行为相似的 Spark 程序。
下一节我们将一起分析一个计算每首歌被播放多少次的MapReduce的的代码来充分理解mapreduce。