一:Spark概述
a:定义
spark是一种基于内存的快速,通用,可扩展的大数据分析计算引擎。
b:创始和服务公司
是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
c:spark发展历史
1、2009年,Spark诞生于伯克利大学AMPLab,属于伯克利大学的研究性项目;
2、2010 年,通过BSD 许可协议正式对外开源发布;
3、2012年,Spark第一篇论文发布,第一个正式版(Spark 0.6.0)发布;
4、2013年,成为了Aparch基金项目;发布Spark Streaming、Spark Mllib(机器学习)、Shark(Spark on Hadoop);
5、2014 年,Spark 成为 Apache 的顶级项目; 5 月底 Spark1.0.0 发布;发布 Spark Graphx(图计算)、Spark SQL代替Shark;
6、2015年,推出DataFrame(大数据分析);2015年至今,Spark在国内IT行业变得愈发火爆,大量的公司开始重点部署或者使用Spark来替代MapReduce、Hive、Storm等传统的大数据计算框架;
7、2016年,推出dataset(更强的数据分析手段);
8、2017年,structured streaming 发布;
9、2018年,Spark2.4.0发布,成为全球最大的开源项目。
而后spark的发展主要针对spark的可用性、稳定性进行改进,并持续进行润色代码。
二:spark特点
1.快速:逻辑回归算法一般需要多次迭代。分别使用Hadoop,mapreduce,spark运行逻辑回归算法。spark的运行速度是Hadoop mapreduce运行速度的100多倍,spark在内存中运行速度是Hadoop mapreduce运行速度的100多倍,spark在磁盘上的运行速度是Hadoop mapreduce运行速度的10多倍。
2.易用:Spark的版本已经更新到了Spark3.1.2(截止日期2021.06.01),支持了包括Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本。
3.通用:在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝的使用这些工具库。
4.随处运行:用户可以使用spark的独立集群模式运行spark,也可以在亚马逊弹性计算云,Hadoop yarn 资源管理器或apache mesos上运行spark。spark作为一个分布式计算框架,本身并没有存储功能,但是spark可以从hdfs,cassandra,hbase,hive,alluxio等数据源中读取数据。
5.代码简洁:spark支持使用Scala、python等语言编写代码。Scala和python的代码相对Java的代码而言相对简洁。
三.认识spark的生态圈
a.定义:
现在Apache Spark已经形成一个丰富的生态圈,包括官方和第三方开发的组件或工具。Spark生态圈也称为伯克利数据分析栈,由AMPLab打造,是致力于在算法,机器,人之间通过大规模集成展现大数据应用的平台。
b.spark生态圈中重要组件的简要介绍:
1.Spark Core:spark的核心,提供底层框架及核心支持。
2.BlinkDB:一个用于在海量数据上进行交互式SQL查询的大规模并进行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
3.spark SQL:应用于数据查询,数据存储.Spark SQL可以对接Hive,实现Spark查询Hive仓库数据的功能,底层走的是Spark core.
4.Spark Streaming:可以进行实时数据流式计算。
5.MLbase:MLbase是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。
6.GraphX:图计算的应用在很多情况下处理的数据量都是很庞大的。
7.SparkR:SparkR是AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为spark的作业运行在集群上,极大地提升R语言的数据处理能力。
四.spark作业工作运行流程
三种运行模式:Standalone、YARN、Mesos.,在Mesos模式和 YARN模式下,Spark作业的运行流程类似
Standalone模式是spark自带的资源管理器。在Standalone模式下,Driver既可以运行在主节点上,也可以运行在本地客户端上。
YARN:在YARN模式下有两种运行方式:Driver运行在集群NodeManager和Driver运行在客户端。
五.spark核心数据RDD
弹性分布式数据集是spark中非常重要的概念,可以简单地理解成一个提供了许多操作接口的数据集合。RDD是spark core的底层核心。
RDD支持两种数据的操作,分别为转换操作和行动操作,也称为转换算子和行动算子。
转换操作主要是指将原始数据集加载为RDD数据或将一个RDD转换为另一个RDD的操作。
行动操作主要指将RDD存储至硬盘中或触发转换操作一个新的RDD作为结果。
窄依赖是指子RDD的一个分区只依赖于某个父RDD中的一个分区。
宽依赖是指子RDD的每一个分区都依赖于某个父RDD中的一个以上的分区。
六.Scala
a.定义
Scala是Scalable Language的缩写,是一种多范式的编程语言,由洛桑联邦理工学院的马丁·奥德斯在2001年基于Funnel的工作开始设计,设计初衷是想集成面向对象编程和函数式编程的各种特性。
Scala 是一种纯粹的面向对象的语言,每个值都是对象。
Scala也是一种函数式语言,因此函数可以当成值使用。
由于Scala整合了面向对象编程和函数式编程的特性,因此Scala相对于Java、C#、C++等其他语言更加简洁。
Scala源代码会被编译成Java字节码,因此Scala可以运行于Java虚拟机(Java Virtual Machine,JVM)之上,并可以调用现有的Java类库。
b.scala特性
面向对象、函数式编程、静态类型 、可扩展。
七:spark部署与安装:
spark搭建需要在Hadoop集群上面搭建,如果搭建单机版集群需要在Hadoop伪分布式环境的基础上进行搭建,判断spark是否搭建好需要查看进程是否有Master进程和Work进程。如果要搭建完全分布式集群则需要在Hadoop完全分布式集群的基础下进行搭建。本文将进行完全分布式集群的部署与安装。
搭建Hadoop伪分布式集群:
卸载电脑自带jdk
查看 rpm -qa | grep java
rpm -e --nodeps + 已装java版本
java -version (查看是否删除成功)
安装jdk操作步骤
tar zxvf /root/Downloads/jdk-8u171-linux-x64.tar.gz -C /opt/
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin
java -version
安装hadoop操作步骤
tar zxvf /root/Downloads/hadoop-2.7.5.tar.gz -C /opt/
export HADOOP_HOME=/opt/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop
hadoop version
ssh免密登录
ifconfig查询ip地址
ssh-keygen
ssh-copy-id ip地址
ssh ip地址
配置hadoop文件
vim /opt/hadoop-2.7.5/etc/hadoop/core-site.xml
<configuration>
<property>
<name>ds.defaultFS</name>
<value>://192.168.67.128:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp</value>
</property>
</configuration>
vim /opt/hadoop-2.7.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_171
vim /opt/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp/dfs/data</value>
</property>
</configuration>
**格式化 **
cd /opt/hadoop-2.7.5/bin
hdfs namenode -format
cd /opt/hadoop-2.7.5/sbin
. /start-all.sh
查看进程
jps
判断Hadoop伪分布式集群是否搭建好的依据
datanode,namenode
c.搭建单机版集群
在spark官网选择对应版本的spark安装包并下载至Windows本地路径下。
将spark安装包上传至Linux虚拟机的/opt/目录下
将spark安装包解压至/usr/local目录下。
d.搭建完全分布式集群。
(1)上传并解压安装spark安装包
tar -zxvf / export/ software/ spark-3.0.3-bin-hadoop2.7.tgz
(2)设置环境变量
vim /etc/profile
#SPARK
export SPARK_HOME=/usr/local/soft/spark-3.0.3
export PATH=$PATH:${SPARK_HOME}/bin
export PATH=$PATH:${SPARK_HOME}/sbin
source /etc/profile使环境变量生效
(3)修改配置文件.
cd spark/ conf/
先备份文件cp spark env.sh.template spark env.sh
cp slaves. template slaves
vim spark-env.sh
加一些环境变量:
修改spark- env.sh文件,加以下内容:
export SCALA_HOME=/usr/local/soft/scala-2.12.12
export JAVA_HOME=/usr/local/soft/jdk1.8.0_202
export SPARK_MASTER_IP=master
export SPARK_WOKER_CORES=2
export SPARK_WOKER_MEMORY=2g
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.3/etc/hadoop
#export SPARK_MASTER_WEBUI_PORT=8080
#export SPARK_MASTER_PORT=7070
修改从节点ip
vi slaves 修改内容为slave1 slave2(我的子机分别为是slave1 slave2)
(4)分发文件
scp -r /usr/local/soft/spark-3.0.3/ slave1:/usr/local/soft/
scp -r /usr/local/soft/spark-3.0.3/ slave2:/usr/local/soft/
(5)分别在slave1 slave2上设置环境变量
vim /etc/profile
#SPARK
export SPARK_HOME=/usr/local/soft/spark-3.0.3
export PATH=$PATH:${SPARK_HOME}/binexport PATH=$PATH:${SPARK_HOME}/sbin
source /etc/profile使环境变量生效
(6)启动集群:spark目录下:./start-all.sh
查看节点:
Master:
Slave1:
Scala2:
在主节点master上出现Master 在s1上出现Worker在s2上出现Worker
Spark-shell
浏览器查看192.168.10.100:8080
八.scala搭建
在Linux和macOS系统上安装Scala https://www.scala-lang.org/html
(1)上传并解压安装scala安装包
tar -zxvf scala-2.2.12.12.tgz
(2)设置环境变量
vim /etc/profile
#SCALA
export SCALA_HOME=/usr/local/soft/scala-2.12.12
export PATH=$PATH:${SCALA_HOME}/bin
source /etc/profile使环境变量生效
(3)验证scala 启动成功
scala启动成功
在Windows系统上安装Scala https://www.scala-lang.org/html
点击allreleases
从Scala官网下载Scala安装包,安装包名称为“scala.msi”。
点击所需要的版本
双击scala.msi安装包,开始安装软件。
进入欢迎界面,单击右下角的“Next”按钮后出现许可协议选择提示框,选择接受许可协议中的条款并单击右下角的“Next”按钮。
选择安装路径,本文Scala的安装路径选择在非系统盘的“D:\Program Files (x86)\spark\scala\” ,单击“OK”按钮进入安装界面。
在安装界面中单击右下角的“Install”按钮进行安装,安装完成时单击“Finish”按钮完成安装。
右键单击“此电脑”图标,选择“属性”选项,在弹出的窗口中选择“高级系统设置”选项。在弹出的对话框中选择“高级”选项卡,并单击“环境变量”按钮,在环境变量对话框中,选择“Path”变量并单击“编辑”按钮,在Path变量中添加Scala安装目录的bin文件夹所在路径,如“D:\Program Files (x86)\spark\scala\bin”
八.
spark对比MapReduce框架
spark内置模块
Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义。
Spark SQL:是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的HQL来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。
Spark Streaming:是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应。
Spark MLlib:提供常见的机器学习功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
Spark GraphX:主要用于图形并行计算和图挖掘系统的组件。
集群管理器:Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫作独立调度器。
图解Scala和Java的关系
Hadoop完全分布式搭建代码
安装jdk 和hadoop的步骤
1.解压缩
jdk:tar zxvf /root/Downloads/jdk-8u171-linux-x64.tar.gz -C /opt/
hadoop:tar zxvf /root/Downloads/hadoop-2.7.5.tar.gz -C /opt/
2.编辑vim命令
vim /etc/profile
3.写入文件
export JAVA_HOME=/opt/jdk1.8.0_171
export HADOOP_HOME=/opt/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.保存写入的文件
source /etc/profile
5.检查版本号
jdk:java -version
hadoop:hadoop
hadoop version
配置Hadoop的免密登录
1.ifconfig 查询ip地址 192.168.242.134
2.ssh-keygen
ssh-copy-id IP地址
ssh ip地址
完全分布式搭建
1.首先克隆两个节点:slave1 slave2
2.修改名称:hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
3.查询两个节点的ip地址:ifconfig
返回master
4.设置免密登录 ssh-keygen
1、删除原来使用伪分布式创建的ssh的密码(公钥和私钥)
cd ~/.ssh/
rm id_rsa* (回车后要加yes)
2、删除认证的钥匙
rm ./authorized_keys (回车后要加yes)
3、生产新的公钥和私钥
如果没有设置免密登入
则
ssh-keygen -t rsa
4、将公钥当做认证文件进行认证
追加首先要进入(./ssh) cd ~/.ssh/
cat ./id_rsa.pub >> ./authorized_keys
5、产生的授权后的钥匙要发送给s1和s2节点
#scp 发送命令
scp ./authorized_keys root@slave1:/.ssh
scp ./authorized_keys root@slave2:/.ssh
ssh-copy-id slave1的ip
ssh-copy-id slave2的ip
ssh-add 启动ssh的服务
ssh slave1的ip/slave2的ip
配置Hadoop的文件
1.vim /opt/hadoop-2.7.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_171
2.vim /opt/hadoop-2.7.5/etc/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp</value>
</property>
3.vim /opt/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.7.5/tmp/dfs/data</value>
</property>
4.cd /root/opt/hadoop-2.7.5/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
ls
vim /opt/hadoop-2.7.5/etc/hadoop/yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
5.vim /opt/hadoop-2.7.5/etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
添加三个节点的IP映射
vim /etc/hosts
192.168.67.128 master
192.168.67.129 slave1
192.168.67.130 slave2
scp /etc/hosts/ root@slave1:/etc
scp /etc/hosts/ root@slave1的IP地址代替:/etc
scp /etc/hosts/ root@slave2:/etc
scp /etc/hosts/ root@slave2的IP地址代替:/etc
复制传输hadoop文件至slave1
scp -r /opt/hadoop-2.7.5/ root@slave1:/opt/
输入 yes
复制传输hadoop文件至slave2
scp -r /opt/hadoop-2.7.5/ root@slave2:/opt/
输入 yes
格式化namenode
进入sbin目录
cd /opt/hadoop-2.7.5/sbin
hdfs namenode -format
启动hadoop
cd /opt/hadoop-2.7.5/sbin
start-all.sh
节点查看启动情况
jps
版权归原作者 xidiexi 所有, 如有侵权,请联系我们删除。