Spark基础+Scala环境搭建+ Spark源码编译部署+ Spark配置History Server +通过算子实现WC例子

目录

一、Spark基础知识

二、Scala环境搭建

1、部署本地SCALA

(1)官网下载2.12.15版本

(2)配置环境变量

(3)cmd   检查一下 

2、部署服务器Scala 

(1)复制下载链接

(2)使用wget 命令下载

(3)解压

(4)配置环境变量

(5)创建一个软连接 ,方便使用

(6)检查一下是否安装成功

三、Spark编译

1、官网下载 3.2.1版本

2、将文件上传至服务器解压,并对其dev下 make-distribution.sh做配置

3、对文件   make-distribution.sh 进行配置

 4、指定scala版本

5、进行编译

6、编译成功

7、编译遇到的问题 

(1)编译所需依赖包下载慢

解决办法

(2)编译时提示内存不足等

四、spark服务器部署

1、将二编译好的spark放入我们的用户文件夹下的software下,并解压至app下,并重命名

2、配置spark环境变量在/etc/profile下

3、配置spark下conf文件下的 spark-env.sh 文件

(1)cp 一个文件spark-env.sh

(2)配置文件spark-env.sh

4、配置mysql驱动

5、将hive的配置文件  hive-site.xml  拷贝到 spark下conf下

6、测试一下我们的spark是否配置成功

(1)执行一下官方例子,圆周率代码如下

(2)未执行成功报错

(3)查询了一下是由于YARN内存设置小导致 ,尝试将yarn比例调大一点

(4)重新执行测试代码

五、配置spark   History Server

1、进入spark下conf下  复制一个配置文件 spark-defaults.conf

2、 在 hdfs上创建一个存放  history的文件夹

3、修改conf下 文件  spark-env.sh

4、打开我们的history服务

 5、查看是否启动成功

 6、重跑下之前的测试例子求pi的,刷新history界面

 六、使用spark算子实现wc例子

1、创建一个测试文件 spark-test.txt

 2、将测试文件上传至hdfs上

3、启动scala 

4、查看一下的们的测试文件 

 5、实现wc

6、换一种方式实现wc

七、关于运行角色-Driver/Executor

1、Driver

2、Executor


一、Spark基础知识

二、Scala环境搭建

1、部署本地SCALA

(1)官网下载2.12.15版本

链接:Scala 2.12.15 | The Scala Programming Language

(2)配置环境变量

 

(3)cmd   检查一下 

 

本地 Scala 部署完成

2、部署服务器Scala 

(1)复制下载链接

(2)使用wget 命令下载

[peizk@hadoop software]$ wget https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
--2022-04-09 10:42:23--  https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
Resolving downloads.lightbend.com (downloads.lightbend.com)... 13.225.173.82, 13.225.173.69, 13.225.173.49, ...
Connecting to downloads.lightbend.com (downloads.lightbend.com)|13.225.173.82|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21087658 (20M) [application/octet-stream]
Saving to: ‘scala-2.12.15.tgz’

100%[==========================================================================================================================>] 21,087,658  4.28MB/s   in 5.6s   

2022-04-09 10:42:29 (3.60 MB/s) - ‘scala-2.12.15.tgz’ saved [21087658/21087658]

(3)解压

[peizk@hadoop software]$ tar -zxvf scala-2.12.15.tgz -C ~/app

(4)配置环境变量

内容如下

#SCALA_HOME
export SCALA_HOME=/home/peizk/app/scala-2.12.15
export PATH=$PATH:$SCALA_HOME/bin

配置完成后source一下

[root@hadoop app]# source /etc/profile

(5)创建一个软连接 ,方便使用

[root@hadoop bin]# ln -s /home/peizk/app/scala-2.12.15/bin/scala  /usr/bin/scala

(6)检查一下是否安装成功

[peizk@hadoop ~]$ scala -version
Scala code runner version 2.12.15 -- Copyright 2002-2021, LAMP/EPFL and Lightbend, Inc.

部署成功

三、Spark编译

1、官网下载 3.2.1版本

链接:Downloads | Apache Spark

2、将文件上传至服务器解压,并对其dev下 make-distribution.sh做配置

3、对文件   make-distribution.sh 进行配置

将版本信息注释掉

自己指定,如下

 4、指定scala版本

[root@hadoop dev]# ./change-scala-version.sh  2.12

5、进行编译

[root@hadoop spark-3.2.1]# ./dev/make-distribution.sh --name 3.2.1-hadoop3.1.3 --tgz -Phive -Phive-thriftserver -Pyarn -Dhadoop.version=3.1.3 -Dscala.version=2.12.15

 过程会比较慢一点

6、编译成功

并且可在 家目录下找到编译好的文件

7、编译遇到的问题 

(1)编译所需依赖包下载慢

exec: curl --silent --show-error -L https://downloads.lightbend.com/scala/。。。。

解决办法

在linux 配置 maven,并且maven镜像要使用阿里云镜像,并在 spark家目录下dev下文件make-distribution.sh如下处 指定maven路径,如下:

(2)编译时提示内存不足等

Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled

解决办法

指定mav内存,调大

在  /etc/profile  添加

export MAVEN_OPTS="-Xms1024m -Xmx1024m -Xss1m"

不要忘记source!!!! 

四、spark服务器部署

1、将二编译好的spark放入我们的用户文件夹下的software下,并解压至app下,并重命名

[root@hadoop spark-3.2.1]# cp spark-3.2.1-bin-3.2.1-hadoop3.1.3.tgz /home/peizk/software
[peizk@hadoop software]$ tar -zxvf spark-3.2.1-bin-3.2.1-hadoop3.1.3.tgz  -C ~/app
[peizk@hadoop app]$ mv spark-3.2.1-bin-3.2.1-hadoop3.1.3 spark-3.2.1

2、配置spark环境变量在/etc/profile下

#SPARK_HOME
export SPARK_HOME=/home/peizk/app/spark-3.2.1
export PATH=$PATH:$SPARK_HOME/bin

不要忘记source

3、配置spark下conf文件下的 spark-env.sh 文件

(1)cp 一个文件spark-env.sh

[peizk@hadoop conf]$ cp spark-env.sh.template  spark-env.sh

(2)配置文件spark-env.sh

配置三个 conf_dir 如下:

# Options read in YARN client/cluster mode
# - SPARK_CONF_DIR, Alternate conf dir. (Default: ${SPARK_HOME}/conf)
SPARK_CONF_DIR=${SPARK_HOME}/conf
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
# - YARN_CONF_DIR, to point Spark towards YARN configuration files when you use YARN
YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop

4、配置mysql驱动

从 hive的lib下偷过来,如下

[peizk@hadoop lib]$ cp mysql-connector-java-5.1.47.jar ../../spark-3.2.1/jars/

5、将hive的配置文件  hive-site.xml  拷贝到 spark下conf下

[peizk@hadoop spark-3.2.1]$ cp ../hive-3.1.2/conf/hive-site.xml conf/

6、测试一下我们的spark是否配置成功

(1)执行一下官方例子,圆周率代码如下

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
/home/peizk/app/spark-3.2.1/examples/jars/spark-examples_2.12-3.2.1.jar 10


[peizk@hadoop spark-3.2.1]$ bin/spark-submit \
> --class org.apache.spark.examples.SparkPi \
> --master yarn \
> /home/peizk/app/spark-3.2.1/examples/jars/spark-examples_2.12-3.2.1.jar 10

(2)未执行成功报错

报错大致如下

Caused by: java.io.IOException: Connection reset by peer
	at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
	at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
	at sun.nio.ch.IOUtil.read(IOUtil.java:192)
	at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
	at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253)
	at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
	at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)

(3)查询了一下是由于YARN内存设置小导致 ,尝试将yarn比例调大一点

修改文件 

[peizk@hadoop hadoop]$ vim yarn-site.xml 

添加如下: 

<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
    </property>

 重启启动下集群

(4)重新执行测试代码

执行成功!如下

spark配置成功!! 

五、配置spark   History Server

1、进入spark下conf下  复制一个配置文件 spark-defaults.conf

[peizk@hadoop conf]$ cp spark-defaults.conf.template spark-defaults.conf

 修改两处地方 如下:

2、 在 hdfs上创建一个存放  history的文件夹

 

将1 中的地址修改为我们刚创建的的spark-log文件地址,如下:

 

 

3、修改conf下 文件  spark-env.sh

添加如下:

SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop:9000/spark-log"

4、打开我们的history服务

[peizk@hadoop sbin]$ ./start-history-server.sh 

 5、查看是否启动成功

ip:18080    

启动成功!!

 6、重跑下之前的测试例子求pi的,刷新history界面

如下:

 

 

 六、使用spark算子实现wc例子

1、创建一个测试文件 spark-test.txt

内容如下:

[peizk@hadoop spark-3.2.1]$ cat spark-test.txt 
aa,bb,cc
aa,c,cc
aa

 2、将测试文件上传至hdfs上

路径如下:

[peizk@hadoop spark-3.2.1]$ hadoop fs -mkdir /spark-test
[peizk@hadoop spark-3.2.1]$ hadoop fs -put spark-test.txt /spark-test/

 

3、启动scala 

[peizk@hadoop spark-3.2.1]$ spark-shell

 

4、查看一下的们的测试文件 

scala> sc.textFile("/spark-test/spark-test.txt").foreach(println)
aa
aa,bb,cc
aa,c,cc

 5、实现wc

scala> sc.textFile("/spark-test/spark-test.txt").flatMap(x => x.split(",")).map(x =>(x,1)).reduceByKey(_+_).foreach(println)
(aa,3)
(c,1)
(bb,1)
(cc,2)

6、换一种方式实现wc

sc.textFile("/spark-test/spark-test.txt").flatMap(_.split(",")).map((_, 1)).groupByKey().map(tuple => {(tuple._1, tuple._2.sum)}).collect().foreach(println)

 

七、关于运行角色-Driver/Executor

1、Driver

Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:

  • 将用户程序转化为作业(job)
  • 在Executor之间调度任务(task)
  • 跟踪Executor的执行情况
  • 通过UI展示查询运行情况

简单理解,所谓的Driver就是驱使整个应用运行起来的程序,也称之为Driver类。

2、Executor

Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。

Executor有两个核心功能:

  • 负责运行组成Spark应用的任务,并将结果返回给驱动器进程
  • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值