banner.webp

1.Spark概述

  1. Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。SparkUC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。<br /> Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。<br /> Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。<br /> 尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。

2.Spark伪分布式搭建

因为Spark使用Scala写的,安装Spark之前要先安装Scala。从Scala官网下载解压并配置到环境变量即可。

下载地址:https://github.com/lampepfl/dotty/releases/download/3.1.2/scala3-3.1.2.tar.gz

  1. cd /usr/local/
  2. tar -xvf scala3-3.1.2.tar.gz
  3. mv scala3-3.1.2 scala

然后修改/etc/profile环境变量,新增Scala的环境变量,添加完后的如图所示

  1. export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
  2. export HADOOP_HOME=/usr/local/hadoop
  3. export HIVE_HOME=/usr/local/hive
  4. export JRE_HOME=$JAVA_HOME/jre
  5. export HDFS_NAMENODE_USER=root
  6. export HDFS_DATANODE_USER=root
  7. export HDFS_SECONDARYNAMENODE_USER=root
  8. export YARN_RESOURCEMANAGER_USER=root
  9. export YARN_NODEMANAGER_USER=root
  10. export SCALA_HOME=/usr/local/scala
  11. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SCALA_HOME/bin

然后使环境变量立即生效

  1. source /etc/profile

测试一下Scala是否安装成功
1.png
接下来安装Spark,还是到官网去下载,下载地址:https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz(注意选择与自己Hadoop对应版本)

下载完成后上传服务器,解压,配置环境变量

  1. cd /usr/local/
  2. tar -xvf spark-3.2.1-bin-hadoop3.2.tgz
  3. mv spark-3.2.1-bin-hadoop3.2 spark

然后修改/etc/profile环境变量,新增Spark的环境变量,添加完后的如图所示

  1. export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
  2. export HADOOP_HOME=/usr/local/hadoop
  3. export HIVE_HOME=/usr/local/hive
  4. export JRE_HOME=$JAVA_HOME/jre
  5. export HDFS_NAMENODE_USER=root
  6. export HDFS_DATANODE_USER=root
  7. export HDFS_SECONDARYNAMENODE_USER=root
  8. export YARN_RESOURCEMANAGER_USER=root
  9. export YARN_NODEMANAGER_USER=root
  10. export SCALA_HOME=/usr/local/scala
  11. export SPARK_HOME=/usr/local/spark
  12. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin
  13. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后我们来配置Spark,进入到Spark配置文件目录,将其中的三个模板配置文件复制出来

  1. cd /usr/local/spark/conf/
  2. cp workers.template workers
  3. cp spark-env.sh.template spark-env.sh
  4. cp spark-defaults.conf.template spark-defaults.conf

首先配置workers,追加自己的主机名,如图:
2.png
修改spark-env.sh,追加如下内容

  1. export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
  2. export SCALA_HOME=/usr/local/scala
  3. export HADOOP_HOME=/usr/local/hadoop
  4. export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
  5. export SPARK_MASTER_HOST=hadoop0
  6. export SPARK_PID_DIR=/usr/local/spark/data/pid
  7. export SPARK_LOCAL_DIRS=/usr/local/spark/data/spark_shuffle
  8. export SPARK_EXECUTOR_MEMORY=1G
  9. export SPARK_WORKER_MEMORY=4G

修改spark-defaults.conf

  1. spark.master spark://hadoop0:7077
  2. spark.eventLog.enabled true
  3. spark.eventLog.dir hdfs://hadoop0:9000/eventLog
  4. spark.serializer org.apache.spark.serializer.KryoSerializer
  5. spark.driver.memory 1g
  6. spark.jars.packages Azure:mmlspark:0.12

配置中指定hdfs://hadoop0:9000/eventLog来存放日志,我们要手动创建该目录

  1. hdfs dfs -mkdir /eventLog

然后启动Spark(先启动Hadoop)

  1. /usr/local/spark/sbin/start-all.sh

然后我们用jps查看是否已启动
3.png
如图所示则是已经正常启动

用官方的例子测试一下,计算π的近似值

  1. /usr/local/spark/bin/run-example SparkPi

4.png
自此,我们的Spark环境就搭建好了~