大数据营销的特点(大数据分析在营销中的作用)
917
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
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小时内删除侵权内容。