CentOS系统下Spark单机版部署全攻略

CentOS系统下Spark单机版部署全攻略

摘要

在大数据处理与分析领域,Apache Spark以其高效的内存计算能力和丰富的数据处理功能,成为了众多企业和开发者的首选。本文将详细阐述如何在CentOS系统上部署Spark单机版,从环境准备、安装步骤、配置优化到简单应用示例,为开发者及运维人员提供一份详尽的指南。

一、环境准备

1.1 系统要求

  • 操作系统:CentOS 7或更高版本,推荐使用最新稳定版。
  • 内存:至少4GB RAM,对于大型数据处理任务,建议8GB或更多。
  • 磁盘空间:至少20GB可用空间,用于安装Spark及其依赖项。
  • Java环境:Spark需要Java运行环境,推荐使用OpenJDK 8或11。

1.2 安装Java

在CentOS上安装OpenJDK,可以通过yum包管理器进行:

  1. sudo yum install java-1.8.0-openjdk-devel

安装完成后,验证Java版本:

  1. java -version

1.3 配置SSH免密登录

Spark在运行过程中,可能会通过SSH在不同节点间通信(即使是单机版,某些组件如Spark Shell也可能使用)。因此,配置SSH免密登录可以简化操作:

  1. ssh-keygen -t rsa
  2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. chmod 600 ~/.ssh/authorized_keys

二、安装Spark

2.1 下载Spark

访问Apache Spark官方网站,下载最新稳定版的Spark二进制包。选择与Hadoop兼容的版本(如果计划与Hadoop集成),或选择“Pre-built for Apache Hadoop X.Y”版本。

  1. wget https://downloads.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz

2.2 解压并安装

将下载的Spark包解压到指定目录,如/opt

  1. sudo tar -xzf spark-3.3.0-bin-hadoop3.tgz -C /opt
  2. sudo mv /opt/spark-3.3.0-bin-hadoop3 /opt/spark

2.3 设置环境变量

编辑~/.bashrc/etc/profile文件,添加Spark的环境变量:

  1. export SPARK_HOME=/opt/spark
  2. export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

使环境变量生效:

  1. source ~/.bashrc
  2. # 或
  3. source /etc/profile

三、配置Spark

3.1 配置spark-env.sh

进入Spark配置目录,复制模板文件并编辑:

  1. cd $SPARK_HOME/conf
  2. cp spark-env.sh.template spark-env.sh
  3. vi spark-env.sh

spark-env.sh中添加以下内容(根据实际情况调整):

  1. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  2. export SPARK_MASTER_HOST=localhost
  3. export SPARK_WORKER_MEMORY=2g # 根据可用内存调整

3.2 配置log4j.properties(可选)

为了控制日志输出级别,可以编辑log4j.properties文件:

  1. cp log4j.properties.template log4j.properties
  2. vi log4j.properties

修改log4j.rootCategoryERROR, console(或其他你希望的级别),以减少不必要的日志输出。

四、启动Spark

4.1 启动Spark Master

在单机环境下,Spark Master和Worker通常运行在同一节点上。启动Master:

  1. $SPARK_HOME/sbin/start-master.sh

查看Master的Web UI,默认端口为8080,访问http://localhost:8080

4.2 启动Spark Worker

启动Worker,连接到本地Master:

  1. $SPARK_HOME/sbin/start-worker.sh spark://localhost:7077

同样,可以通过Web UI(默认端口8081)查看Worker状态。

五、简单应用示例

5.1 Spark Shell

启动Spark Shell,进行交互式数据分析:

  1. $SPARK_HOME/bin/spark-shell

在Spark Shell中,可以执行Scala或Python(如果安装了PySpark)代码,例如:

  1. val textFile = sc.textFile("README.md")
  2. textFile.count() // 计算文件行数

5.2 提交Spark作业

编写一个简单的Spark作业(如WordCount.scala),然后使用spark-submit提交:

  1. // WordCount.scala
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. object WordCount {
  4. def main(args: Array[String]): Unit = {
  5. val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
  6. val sc = new SparkContext(conf)
  7. val lines = sc.textFile("README.md")
  8. val words = lines.flatMap(line => line.split(" "))
  9. val wordCounts = words.countByValue()
  10. wordCounts.foreach(println)
  11. sc.stop()
  12. }
  13. }

编译并打包为JAR文件,然后提交:

  1. $SPARK_HOME/bin/spark-submit \
  2. --class WordCount \
  3. --master local[*] \
  4. /path/to/your/wordcount.jar

六、总结与展望

通过上述步骤,我们成功在CentOS系统上部署了Spark单机版,并进行了简单的应用示例。Spark的强大之处在于其能够处理大规模数据集,并提供丰富的API支持多种编程语言。未来,随着数据量的不断增长和处理需求的多样化,Spark的应用场景将更加广泛。对于开发者而言,掌握Spark的部署与使用,将极大地提升数据处理与分析的能力。