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

举报
华章计算机 发表于 2020/02/22 13:55:44 2020/02/22
【摘要】 本节书摘来自华章计算机《Spark Streaming实时流式大数据处理实战》 —— 书中第2章,第2.3.1节,作者是肖力涛 。

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三个相关文件。

  image.png

  图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

  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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。