当前位置:   article > 正文

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

spark 源码编译与部署

目录

一、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 命令下载

  1. [peizk@hadoop software]$ wget https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
  2. --2022-04-09 10:42:23-- https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
  3. Resolving downloads.lightbend.com (downloads.lightbend.com)... 13.225.173.82, 13.225.173.69, 13.225.173.49, ...
  4. Connecting to downloads.lightbend.com (downloads.lightbend.com)|13.225.173.82|:443... connected.
  5. HTTP request sent, awaiting response... 200 OK
  6. Length: 21087658 (20M) [application/octet-stream]
  7. Saving to: ‘scala-2.12.15.tgz’
  8. 100%[==========================================================================================================================>] 21,087,658 4.28MB/s in 5.6s
  9. 2022-04-09 10:42:29 (3.60 MB/s) - ‘scala-2.12.15.tgz’ saved [21087658/21087658]

(3)解压

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

(4)配置环境变量

内容如下

  1. #SCALA_HOME
  2. export SCALA_HOME=/home/peizk/app/scala-2.12.15
  3. export PATH=$PATH:$SCALA_HOME/bin

配置完成后source一下

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

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

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

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

  1. [peizk@hadoop ~]$ scala -version
  2. 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下

  1. #SPARK_HOME
  2. export SPARK_HOME=/home/peizk/app/spark-3.2.1
  3. 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 如下:

  1. # Options read in YARN client/cluster mode
  2. # - SPARK_CONF_DIR, Alternate conf dir. (Default: ${SPARK_HOME}/conf)
  3. SPARK_CONF_DIR=${SPARK_HOME}/conf
  4. # - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
  5. HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  6. # - YARN_CONF_DIR, to point Spark towards YARN configuration files when you use YARN
  7. 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)执行一下官方例子,圆周率代码如下

  1. bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master yarn \
  4. /home/peizk/app/spark-3.2.1/examples/jars/spark-examples_2.12-3.2.1.jar 10
  5. [peizk@hadoop spark-3.2.1]$ bin/spark-submit \
  6. > --class org.apache.spark.examples.SparkPi \
  7. > --master yarn \
  8. > /home/peizk/app/spark-3.2.1/examples/jars/spark-examples_2.12-3.2.1.jar 10

(2)未执行成功报错

报错大致如下

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

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

修改文件 

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

添加如下: 

  1. <property>
  2. <name>yarn.nodemanager.vmem-pmem-ratio</name>
  3. <value>4</value>
  4. </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

内容如下:

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

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

路径如下:

  1. [peizk@hadoop spark-3.2.1]$ hadoop fs -mkdir /spark-test
  2. [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、查看一下的们的测试文件 

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

 5、实现wc

  1. scala> sc.textFile("/spark-test/spark-test.txt").flatMap(x => x.split(",")).map(x =>(x,1)).reduceByKey(_+_).foreach(println)
  2. (aa,3)
  3. (c,1)
  4. (bb,1)
  5. (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进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/816457
推荐阅读
相关标签
  

闽ICP备14008679号