四、本地模式
Spark的本地模式不需要启动任何进程,主要为了方便验证算法的可行性,能够启用的资源有限,可以使用多线程。
1. 解压安装
- 解压缩
tar -zxvf tar -zvxf spark-3.3.2-bin-hadoop3.tgz
- 环境变量配置
在.bashrc文件结尾添加以下内容:
export SPARK_HOME=/home/hadoop/spark-3.3.2-bin-hadoop3 export PATH=$PATH:$SPARK_HOME/bin
- 刷新测试
配置完成后使其立即生效,并通过spark-shell命令进行测试【使用:q退出】:
source ~/.bashrc spark-shell
2. 运行测试
如果你能够正常的使用spark-shell,已经足以说明安装过程已经完成了,在spark-shell输出的日志中,可以清楚的看到,开启了一个本地模式master = local并创建了Spark Context对象,可以在交互环境里直接使用sc。
- 找到自带案例
这里我们去运行一个自带的程序,当然你也可以继续在spark-shell里面玩耍。进入到Spark的examples路径下,可以看到一个jar包:spark-examples_2.12-3.3.2.jar,我们将其作为一个计算任务提交。
- 提交计算任务
使用spark-submit提交一个最简单的圆周率输出任务,命令如下:
spark-submit --class org.apache.spark.examples.SparkPi --master local[2] /home/hadoop/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar 10
执行后,将以本地模式开启两个线程,参数10为样本个数,也可以理解为精度。如果我们使用1000将会运行更长的时间,但是结果会更加精确,如图:
五、伪分布模式
对于Spark来说,需要修改的配置文件比较少,只需要指定好端口号以及相关的环境、分配的资源即可。
配置文件路径:$SPARK_HOME/conf
1. spark-env.sh
- 重命名文件
mv spark-env.sh.template spark-env.sh
- 修改配置
编辑spark-env.sh文件,找到对应配置打开注释或者直接添加新的一行:
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64 SPARK_MASTER_HOST=hadoop SPARK_MASTER_PORT=7077 # 默认为8080,如果有冲突可以修改 SPARK_MASTER_WEBUI_PORT=18080 # 如果已经配置好Hadoop【非必需】 HADOOP_CONF_DIR=/home/hadoop/hadoop-3.3.5/etc/hadoop
2. spark-defaults.conf
- 重命名文件
mv spark-defaults.conf.template spark-defaults.conf
- 修改配置
在这个配置文件中可以修改一些在运行过程中的默认设置,也可以在提交计算任务时手动指定,可根据需要进行配置。
# Spark 主节点的地址和端口号 spark.master spark://hadoop:7077 # Spark Driver内存分配 spark.driver.memory 1g # Spark Executor内存分配 spark.executor.memory 1g # Spark Executor内核分配 spark.executor.cores 1
3. workers
- 重命名文件
mv workers.template workers
- 修改配置
在伪分布模式下,只需要将原有的localhost改为当前主机名即可。
4. SSH免密登录
在使用Hadoop集群时,建议使用主机名称,这样即使ip地址发生变化,也不需要去修改相关的配置文件,只需要去修改一下主机名映射文件就可以了。上文的配置文件中都使用了hadoop作为主机名,以此为例进行演示。
- Ubuntu修改主机名
在root用户下修改主机名设置文件:
sudo hostnamectl set-hostname hadoop
此时已经修改成功,打开一个新的回话和终端时将看到变化。
- 开启SSH服务
首先确认SSH服务状态:
systemctl status ssh
如果没有安装使用以下命令:
apt-get install openssh-server
启动SSH服务:
sudo systemctl enable ssh sudo systemctl start ssh systemctl status ssh
- 生成密钥
# 切换到hadoop用户下执行 su - hadoop # 整个过程一直回车即可 ssh-keygen -t rsa
- 配置免密登录
Hadoop启动时,会逐一登录到worker节点去启动相应的进程,对于伪分布模式来说,相当于自己登录自己。配置免密登录后,不再需要密码,而是通过密钥进行认证。
ssh-copy-id hadoop@hadoop ssh hadoop
5. 集群启动
现在所有的配置已经完成,进入到Spark的sbin目录,启动集群。
cd $SPARK_HOME/sbin ./start-all.sh # 使用jps验证 jps
如果出现Master和Worker证明成功。
六、全分布模式
全分布模式的配置方式和步骤其实与伪分布式没有任何差别,在一台机器上配置好所有的配置文件后,分发到其它机器即可,核心步骤如下:
1. 前置环境
- 部署安装JDK【三台机器】
- 创建单独用户【三台机器】
- 解压安装Scala【主节点】
- 解压安装Spark【主节点】
- 配置环境变量【主节点】
2. 配置免密登录
假设我们有3台机器:hadoop01、hadoop02、hadoop03,每一台机器都执行如下操作:
# 在hadoop用户下执行 ssh-keygen -t rsa ssh-copy-id hadoop@hadoop01 ssh-copy-id hadoop@hadoop02 ssh-copy-id hadoop@hadoop03
这样执行完成后,三台机器都可以免密互相登录,这样以后我们可以在任意一台机器上控制集群状态或者提交任务。
3. 文件分发
现在我们将已经安装好的软件和配置分发到另外两台机器,保证三台机器的配置文件和环境是完全一致的,如果配置文件发生修改,也要记得手动同步覆盖。
scp -r /home/hadoop/scala-2.12.17 hadoop@hadoop02:/home/hadoop scp -r /home/hadoop/scala-2.12.17 hadoop@hadoop03:/home/hadoop scp -r /home/hadoop/spark-3.3.2-bin-hadoop3@hadoop02:/home/hadoop scp -r /home/hadoop/spark-3.3.2-bin-hadoop3@hadoop03:/home/hadoop scp -r /home/hadoop/.bashrc hadoop@hadoop02:/home/hadoop scp -r /home/hadoop/.bashrc hadoop@hadoop03:/home/hadoop
由于我们已经配置了免密登录,整个过程不需要密码。
4. 集群启动
集群的启动和停止与伪分布模式相同,可以在任一节点上执行启动脚本:
cd $SPARK_HOME/sbin ./start-all.sh
如果在workers文件中填写了主节点,则在主节点中会出现Master和Worker进程,从节点上会出现Worker进程。