0


Spark概述及Scala搭建操作步骤

一: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

标签: spark scala 大数据

本文转载自: https://blog.csdn.net/xidiexi/article/details/136496820
版权归原作者 xidiexi 所有, 如有侵权,请联系我们删除。

“Spark概述及Scala搭建操作步骤”的评论:

还没有评论