本文主要内容:
- 对比Spark和Hadoop
- 介绍PysPark和Anaconda
- 搭建并配置
- 运行WordCount
最近想学习大数据分析平台Spark,由于实验室设备不足,只能先在本地搭建一个独立式的Spark环境,进行简单分析,逐步探索Spark的奥秘,为以后Spark集群操作打好基础。
对于从事数据挖掘和机器学习人员来说,使用anaconda的ipython notebook无疑是最棒的体验。那么,如何在ipython notebook中使用spark呢?
Spark和Hadoop
大数据框架
- Hadoop是对大数据集进行分布式计算的标准工具。提供了包括工具和技巧在内的丰富的生态系统,允许使用相对便宜的商业硬件集群进行超级计算机级别的计算。主要核心:HDFS和MapReduce;
- Spark使用函数式编程范式扩展了MapReduce编程模型以支持更多计算类型,可以涵盖广泛的工作流。
- Spark据称要比Hadoop快100倍,但它本身没有一个分布式存储系统;
- Spark需要一个第三方的分布式存储系统;
- 结合Spark和Hadoop,将Spark安装在Hadoop之上,使得Spark可以使用存储在HDFS中的数据。
速度
- Spark基于内存:Spark使用内存缓存来提升性能,因此进行交互式分析也足够快速(就如同使用Python解释器,与集群进行交互一样)。缓存同时提升了迭代算法的性能,这使得Spark非常适合数据理论任务,特别是机器学习。
- Hadoop基于磁盘:MapReduce要求每隔步骤之间的数据要序列化到磁盘,这意味着MapReduce作业的I/O成本很高,导致交互分析和迭代算法(iterative algorithms)开销很大。而事实是,几乎所有的最优化和机器学习都是迭代的。
高级数据处理(实时流处理、机器学习)
- Spark胜过Hadoop——受欢迎原因;
- Spark平台的速度和流数据处理能力非常适合机器学习算法;
- Spark有自己的机器学习库MLlib,而Hadoop系统则需要借助第三方机器学习库,如Apache Mahout。
Spark库
Spark附带一些强大的库:
- SparkSQL:提供SQL语句,进行结构化数据查询和大数据集的探索。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作;
- SparkMLLIB:提供主要机器学习算法和框架。这个库包含可扩展的学习算法,如分类、聚类、回归等需要对大量数据集进行迭代的操作;
- Spark Streaming:提供实时处理;
- Spark GraphX:提供图处理和计算。
由于这些库满足了很多大数据需求,也满足了很多数据科学任务的算法和计算上的需要,Spark快速流行起来。不仅如此,Spark也提供了使用Scala、Java和Python编写的API;满足了不同团体的需求,允许更多数据科学家简便地采用Spark作为他们的大数据解决方案。
PySpark
Spark是用Scala写的,整个Spark生态系统需要运行在JVM环境中,并且需要利用本地的HDFS。Hadoop的HDFS是Spark支持的数据存储之一。Spark可以处理不同类型的数据资源、种类、格式等。
PySpark提供了Spark集成的API,并允许在集群中的所有节点上使用Python的生态系统。更重要的是,它提供Python机器学习的库(如sklearn)和数据处理方法(pandas)。
PySpark的工作原理如下图: