【pySpark教程】Big Data, Hardware trends, and Spark(二)

版权声明:如需转载,请附上本文链接。作者主页:http://blog.csdn.net/cyh_24 https://blog.csdn.net/cyh24/article/details/50659856

Big Data, Hardware trends, and Spark

本博客是【pySpark教程】系列的文章。

是 Berkeley 的 Python Spark公开课的学习笔记(see 原课程)。

由于个人能力有限,不免有些错误,还望各位批评指正。

更多相关博客请猛戳:http://blog.csdn.net/cyh24/article/category/6092916

如需转载,请附上本文链接:http://blog.csdn.net/cyh_24/article/details/50659856


在本系列课程中,我们会学习如下内容:

  1. Apache Spark 介绍
  2. Data Management
    • Semi-Structed Data
    • Structured Data
    • 实验二:使用 Spark 分析网络服务器日志
  3. 数据分析与机器学习
    • 数据处理
    • 数据分析
    • 机器学习
    • 实验三:文本分析与实体解析
    • 实验四:Spark 机器学习介绍

The Big Data Problem

传统的数据分析的工具有下面这些,包括:Unix shell命令,Pandas 和 R 语言等等。这些工具都是运行到单个机器上的,遇到Big Data Problem 的时候就不太能work了。

那么 Big Data Problem 是啥呢?

  • 数据增加速度大于计算性能
  • 数据源越来越丰富
    >> Web, mobile, scientific,…
  • 存储变得越来越便宜
    >> 基本上每18个月便宜一半
  • 但是CPU性能的增长速度却达不到这样的水平

举一些 Big Data Examples
此处输入图片的描述

可以看到,从disk中读取 1TB 数据需要3个小时,而且单个机器已经很难处理这样规模的数据了,一个解决方法就是把数据分布到大型集群中去。

Hardware for Big Data

如果集群使用的是廉价的机器,那么很容易发生一些问题:

扫描二维码关注公众号,回复: 3518735 查看本文章
  • Failures (Google的数据)
    1~5% 硬盘会损坏/年
    0.2% 内存条损坏/年
  • Network 速度 VS 共享内存
    从网络中读取的速度远远小于从硬盘或者内存中读取的速度
  • Uneven performance
    机器的性能不均,有些机器很快,有些则计算的很慢

Distributing Work

集群的计算有没有困难的地方?

第一个challenge就是,如何将任务分配到不同的机器中?

来看一个例子(统计词频):

1. 文件不是很大的情况下:
很简单,使用一个hash 表就能解决问题了。
此处输入图片的描述

2. 文件很大的情况下:
这种情况下,其实也很简单,就是使用MapReduce 的思想,把数据map之后处理,然后再reduce结果。
此处输入图片的描述

上图貌似可以解决问题了,但是,当数据特别大的时候,machine 5 的压力特别大,因为它要保存所有的结果(可能会存不下)。

这种情况下,可以采用下面这种分而治之的思想,把结果也分布到不同的机器上:

此处输入图片的描述

这就是 Google 在04年提出的 Map Reduce:
此处输入图片的描述

有便捷,肯定也会有缺陷,使用这种分而治之思想,会带来哪些问题呢?

  • 数据的传输非常耗时
  • 处理更多的机器意味着你需要解决更多的机器故障带来的问题
    Solution:当一台机器故障的时候,你可以将这个未完成的任务分配给其他机器,或者等到这台机器恢复的时候再重新分配给它;
  • 机器多了,性能差距也会变大,所以,你还需解决性能不均带来的问题
    Solution:如果有一台机器非常慢,一直无法完成任务,那么你可以杀掉这个任务,并将它分配给其他机器;

所以,没有什么万能方法,你想要达到一些便利,就需要面对由此而来的困扰。

Map Reduce

Map Reduce 在每一次任务完成之后,都要把结果写入硬盘,并在下一次任务开始再读进来。
此处输入图片的描述
如果我们的job是迭代式的(比如,机器学习中的迭代优化),那么计算性能就会非常慢。因为,每一次的迭代,你都需要重新读写。我们都知道,读写硬盘是一件非常非常耗时的事情。

Apache Spark

随着内存价格越来越低,我们可以更多的利用内存来进行计算。Spark 正是利用了内存速率高的特点,大大改进了Map Reduce的性能。

下图是 MapReduce 的过程:
此处输入图片的描述

下图是 Spark 的过程:
此处输入图片的描述

避免频繁的网络、硬盘读取,使得Spark速度大大提升。

Spark 发展到现在已经非常成熟,它提供了很多的数据分析工具,如下图:

此处输入图片的描述

Spark 与 Hadoop 的不同之处:

此处输入图片的描述

这些不同之处,带来了一些性能上的提升如下:

此处输入图片的描述

Spark,拥有Hadoop MapReduce所具有的优点;
但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS。

Spark 能更好地适用于数据挖掘、机器学习等需要迭代优化的 MapReduce 的算法。

猜你喜欢

转载自blog.csdn.net/cyh24/article/details/50659856
今日推荐