Spark Streaming实时流式大数据处理实战》 ——2.3 搭建开发环境

网友投稿 932 2022-05-30

2.3  搭建开发环境

在2.2节中对Spark的几种运行模式做了介绍,本书在进行实战的过程中重点以Spark Standalone模式进行,该模式也可以在生产环境中直接部署,不依赖于其他框架模式。当然,对于需要用到Hadoop的读者,也可以尝试Spark On Yarn的部署模式,对资源进行统一的管理。下面就来一步一步地搭建Spark Standalone运行模式及Scala-Eclipse的开发环境。

2.3.1  修改配置

2.1节下载和解压Spark之后,在Spark的安装目录下进入conf目录,可以看到以下几个配置文件:

$ ll conf/

drwxr-xr-x@ 12 xiaolitao  staff   384  8  2 21:29 ./

drwxr-xr-x@ 18 xiaolitao  staff   576 11  5  2017 ../

-rw-r--r--@  1 xiaolitao  staff   996  7  1  2017 docker.properties.template

-rw-r--r--@  1 xiaolitao  staff  1105  7  1  2017 fairscheduler.xml.template

-rw-r--r--@  1 xiaolitao  staff  2025  7  1  2017 log4j.properties.template

-rw-r--r--@  1 xiaolitao  staff  7313  7  1  2017 metrics.properties.template

-rw-r--r--@  1 xiaolitao  staff   865  7  1  2017 slaves.template

-rw-r--r--@  1 xiaolitao  staff  1292  7  1  2017 spark-defaults.conf.

template

-rwxr-xr-x@  1 xiaolitao  staff  3699  7  1  2017 spark-env.sh.template*

conf目录中给出了很多模板文件,这里对几个常用的文件进行简单说明(默认目录中给出了后缀带有template的示例文件,在正式使用时我们需要将这个后缀去掉)。

* docker.properties:当使用Docker容器时,需要就该文件进行相关修改和配置。

* log4j.properties:Spark作为源生于Java和Scala的开源系统,其使用的日志服务也依赖于经典的log4j,所以当需要修改日志的显示级别,以及日志的保存文件等相关内容时,就需要在这里做相应配置。

* slaves:该文件用来配置slave节点,一般将每个slave节点的IP配置在该文件中。

* spark-defaults.conf:在提交Spark应用时,可以在程序内部指定相关配置,如使用的核的数量、最大占用内存数量等,另外也可以在提交命令中指定。如果两处都没有指定,就会按照该文件进行Spark应用的默认配置。

* spark-env.sh:是整个Spark集群环境变量的配置文件,我们需要在该文件中配置Java和Scala的安装路径,如果需要,还要配置Hadoop的安装路径。其他配置选项,读者可以参考官方文档http://spark.apache.org/docs/latest/spark-standalone.html。

下面就来修改配置文件,搭建我们自己的集群,用于本书的所有实例。为了方便操作,我们以单一机器来搭建集群,即概念上的Master和Worker节点进行同机部署,而在实际生产环境中,只需要做相应的扩展,添加到集群中即可。集群的架构如图2.5所示。

我们以单一机器进行同机部署,以本地机器作为Master节点,同时该节点也是我们的Slave节点,并在此节点上启动两个Worker进程,图2.5中所示的两个Worker进程是Spark虚拟分配的两个IP。为了完成整个集群的搭建,我们需要简单配置以log4j.properties、slaves和spark-env.sh三个相关文件。

图2.5  Spark集群部署

首先将前面介绍的模板文件的*.template的后缀template去掉,如下:

$ ll conf/

drwxr-xr-x@ 12 xiaolitao  staff   384  8  2 21:29 ./

drwxr-xr-x@ 18 xiaolitao  staff   576 11  5  2017 ../

-rw-r--r--@  1 xiaolitao  staff   996  7  1  2017 docker.properties.template

-rw-r--r--@  1 xiaolitao  staff  1105  7  1  2017 fairscheduler.xml.template

-rw-r--r--@  1 xiaolitao  staff  2025 11  5  2017 log4j.properties

-rw-r--r--@  1 xiaolitao  staff  2025  7  1  2017 log4j.properties.template

-rw-r--r--@  1 xiaolitao  staff  7313  7  1  2017 metrics.properties.template

-rw-r--r--@  1 xiaolitao  staff   865 11  5  2017 slaves

-rw-r--r--@  1 xiaolitao  staff   865  7  1  2017 slaves.template

-rw-r--r--@  1 xiaolitao  staff  1292  7  1  2017 spark-defaults.conf.

template

-rwxr-xr-x@  1 xiaolitao  staff  3997 12 13  2017 spark-env.sh*

-rwxr-xr-x@  1 xiaolitao  staff  3699  7  1  2017 spark-env.sh.template*

然后将这三个文件从模板文件中复制出来并进行简单的配置。首先对spark-env.sh也是最重要的文件进行如下配置:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

SCALA_HOME=/usr/local/Cellar/scala/2.11.7/

SPARK_HOME=/Users/xiaolitao/Tools/spark-2.2.0-bin-hadoop2.7/

SPARK_MASTER_HOST=127.0.0.1

SPARK_WORKER_CORES=2

SPARK_WORKER_MEMORY=7g

SPARK_WORKER_INSTANCES=2

SPARK_DAEMON_MEMORY=1g

首先需要配置本地Java、Scala及Spark的安装目录,以上分别配置了其相应的安装路径(大家实际配置时,需要根据自己的实际环境来配置)。其次配置Master节点的IP,由于我们使用单一机器进行部署,所以这里指定的IP为127.0.0.1。之后的配置是针对每一个Worker实例,包含2核和7GB内存,我们这里共配置了两个Worker实例(特别说明的是,根据机器的实际情况进行配置,由于本书用于试验的机器是4核16GB内存,因此这里进行了如上配置)。

最后配置守护进程的内存总量,包括Master和Worker等。我们进行了一些关键配置,Spark关于Standalone模式还提供了很多其他的配置,大家可以直接看模板文件或者参考官网(http://spark.apache.org/docs/latest/spark-standalone.html)。

对于slaves文件,由于我们目前的集群只有一台机器,所以这里仅仅配置了localhost,Spark会在slaves列出的所有机器节点中启动Worker进程,用来进行计算。

关于log4j.properties,当我们打开从模板文件复制过来的配置文件时,其中已经进行了很详细的日志输出配置,因此这里基本没有改动,主要将log4j.rootCategory的日志输出级别改为了WARN,否则会产生大量的系统日志信息,当程序发生错误的时候将很难进行定位,具体修改如下:

# 设置日志信息在控制台输出

log4j.rootCategory=WARN, console

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.target=System.err

log4j.appender.console.layout=org.apache.log4j.PatternLayout

《Spark Streaming实时流式大数据处理实战》 ——2.3 搭建开发环境

log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p

%c{1}: %m%n

# 将日志级别设置为WARN

# 会覆盖默认日志级别的设置

# 针对不同的Spark应用可以设置不同的日志级别

log4j.logger.org.apache.spark.repl.Main=WARN

# 将第三方库的日志级别设置高些

log4j.logger.org.spark_project.jetty=WARN

log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=

ERROR

log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO

log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

log4j.logger.org.apache.parquet=ERROR

log4j.logger.parquet=ERROR

# 避免SparkSQL支持Hive中不存在的UDFs的各种噪音信息

log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL

log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

Spark spark 大数据 大数据

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python装饰器总结,带你几步跨越此坑!
下一篇:华为鲲鹏云服务最佳实践-Zabbix-4.0 安装配置指南
相关文章