Spark学习笔记1-基本概念、部署、启动
实验楼平台上的实验环境及版本:java8,python2.7,scala2.11.8,hadoop2.7.3,spark2.4.4
学习内容
基本概念
Spark 是 UC Berkeley AMP lab 开发的一个集群计算的框架,类似于 Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入 HDFS,更适用于需要迭代的 MapReduce 算法场景中,可以获得更好的性能提升。例如一次排序测试中,对 100TB 数据进行排序,Spark 比 Hadoop 快三倍,并且只需要十分之一的机器。Spark 集群目前最大的可以达到 8000 节点,处理的数据达到 PB 级别,在互联网企业中应用非常广泛。
Hadoop 的核心是分布式文件系统 HDFS 和计算框架 MapReduces。Spark 可以替代 MapReduce,并且兼容 HDFS、Hive 等分布式存储层,良好的融入 Hadoop 的生态系统。
Spark 执行的特点
中间结果输出:Spark 将执行工作流抽象为通用的有向无环图执行计划(DAG),可以将多 Stage 的任务串联或者并行执行。
数据格式和内存布局:Spark 抽象出分布式内存存储结构弹性分布式数据集 RDD,能够控制数据在不同节点的分区,用户可以自定义分区策略。
任务调度的开销:Spark 采用了事件驱动的类库 AKKA 来启动任务,通过线程池的复用线程来避免系统启动和切换开销。
Spark 的优势
速度快,运行工作负载快 100 倍。Apache Spark 使用最先进的 DAG 调度器、查询优化器和物理执行引擎,实现了批处理和流数据的高性能。
易于使用,支持用 Java、Scala、Python、R 和 SQL 快速编写应用程序。Spark 提供了超过 80 个算子,可以轻松构建并行应用程序。您可以从 Scala、Python、R 和 SQL shell 中交互式地使用它。
普遍性,结合 SQL、流处理和复杂分析。Spark 提供了大量的库,包括 SQL 和 DataFrames、用于机器学习的 MLlib、GraphX 和 Spark 流。您可以在同一个应用程序中无缝地组合这些库。
各种环境都可以运行,Spark 在 Hadoop、Apache Mesos、Kubernetes、单机或云主机中运行。它可以访问不同的数据源。您可以使用它的独立集群模式在 EC2、Hadoop YARN、Mesos 或 Kubernetes 上运行 Spark。访问 HDFS、Apache Cassandra、Apache HBase、Apache Hive 和数百个其他数据源中的数据。
Spark 生态系统 BDAS
目前,Spark 已经发展成为包含众多子项目的大数据计算平台。BDAS 是伯克利大学提出的基于 Spark 的数据分析栈(BDAS)。其核心框架是 Spark,同时涵盖支持结构化数据 SQL 查询与分析的查询引擎 Spark SQL,提供机器学习功能的系统 MLBase 及底层的分布式机器学习库 MLlib,并行图计算框架 GraphX,流计算框架 Spark Streaming,近似查询引擎 BlinkDB,内存分布式文件系统 Tachyon,资源管理框架 Mesos 等子项目。这些子项目在 Spark 上层提供了更高层、更丰富的计算范式。
名词学习
-
HDFS:Hadoop分布式文件系统
-
MapReduce:面向大数据并行处理的计算模型、框架和平台
-
需要迭代的MapReduce算法:map可以理解为数据的列表,reduce是缩减的意思,这里我觉得可以理解为把map列表里的数据经过特征值提取最后被分类分成了有规律的数据,在分布式计算完成后再用reduce合并。迭代计算一般使用在机器学习和图像处理中,spark比MapReduce计算要快
-
RDD:弹性式分布数据集
-
hadoop和spark,hadoop用作基础设施把数据指派到分布式的节点进行存储,spark主要用来做计算做数据处理
操作
- spark-shell
和在命令行输python弹出来python的shell差不多,这个spark-shell是scala语言的
file是个用/etc/protocols创建的RDD对象,file.count()获取file这个RDD的行数,file.first()获取的是第一行的内容
获取包含tcp和udp两个字符串的行数
说是这个给单词计数的操作用到了刚才我没弄清楚的MapReduce,暂时还不太懂。
目前猜测大概意思是,用空格作为分割,两个空格中间是一个单词,然后生成了一个RDD对象wordcount,它的行数就是单词的个数 - Pyspark
相当于是一个用python来操纵spark的一个sparkshell
spark服务的启动(一个主机)
首先要切到hadoop用户下
主节点
输入命令cd /opt/spark-2.4.4-bin-hadoop2.7/sbin
运行脚本:start-master.sh
启动spark,输http://localhost:8080看到这个master
第一行像随机数一样的是master参数
通过这个参数,可以用它来指定启动spark-shell
然后刷新locahost:8080就能够看到多了一个RunningApplication是spark-shell
从节点
然后运行脚本start-slave.sh启动从节点
显然这样不行,提示需要主节点参数,就是上面那个看起来像随机数一样的东西
刷新刚才那个localhost:8080可以看到多了一个worker
查看启动的服务
使用jps命令,jps命令是这样描述的
所以这个命令是列举配置运行的java虚拟机个数,可是输入它能够看到启动的服务
集群部署
这个还没做,我的几个kali和ubuntu虚拟机里一堆打比赛装的乱七八糟的库,特别大,装了我主机容易崩溃,还是先整理一下空间再搞这个吧
集群部署的图先截下来留着
服务终止
使用stop-all.sh
大佬给的可以参考的资料
与 Hadoop 对比,如何看待 Spark 技术?
如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?