ToB企服应用市场:ToB评测及商务社交产业平台
标题:
WSL中搭建SPARK平台(下)
[打印本页]
作者:
星球的眼睛
时间:
2025-1-3 17:30
标题:
WSL中搭建SPARK平台(下)
第五章:配置ssh免密登录
核心思路
在 sm 容器中生成 SSH 密钥,并将公钥添加到 ~/.ssh/authorized_keys,实现免密登录自己。
在主机上直接将 sm 容器的 .ssh 目次复制到 sw1 和 sw2 的节点目次中,实现公钥的分发。
在容器启动时挂载 .ssh 文件夹到相应节点,并测试连接。
1.在 sm 容器中生成 SSH 密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
复制代码
-t rsa:使用 RSA 算法生成密钥。
-P '':设置空密码,免去二次输入密码的步骤。
-f ~/.ssh/id_rsa:密钥存储路径。
复制代码
2.配置免密登录自己
在 sm 容器中,将公钥添加到 ~/.ssh/authorized_keys:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制代码
验证自己登录自己是否免密成功:
ssh localhost
复制代码
被拒绝:Permission denied (publickey).
调解权限
:
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 700 ~
复制代码
主目次 ~ 和 ~/.ssh 目次的权限设置为 700,使只有当前用户能访问。
authorized_keys 和 id_rsa 文件权限设置为 600,确保只有当前用户能读取。
修复所有权:
chown root ~
chgrp root ~
chown root:root ~/.ssh
chown root:root ~/.ssh/authorized_keys
复制代码
修复了目次和文件的所有权,确保它们归当前用户(root)所有,并且所属组也为 root。SSH 服务会检查文件是否属于当前用户,如果所有权不正确,也会拒绝使用。
再次验证自己登录自己是否免密成功:
为什么之前的建议无效:
可能主目次 ~ 的权限或所有权存在问题,这导致 SSH 服务根本无法进入 ~/.ssh 目次。
~/.ssh 或 ~/.ssh/authorized_keys 的所有权不是当前用户,SSH 服务会出于安全性思量拒绝访问。
3.在主机上分发 .ssh 目次
回到主机,复制 sm 的 .ssh 文件夹到 sw1 和 sw2 的目次中:
sudo cp -r /课程文件夹/sm/.ssh /课程文件夹/sw1/
sudo cp -r /课程文件夹/sm/.ssh /课程文件夹/sw2/
复制代码
4.从不同的终端(小黑框)分别启动 sm、sw1 和 sw2 容器:
启动 sm 容器
sudo docker run -it \
--name sm \
--hostname sm \
--net spark_network \
--ip 172.19.0.2 \
--volume /课程文件夹/sm:/root \
--volume /课程文件夹/sm/.bashrc:/root/.bashrc \
--volume /课程文件夹/sm/sshd_config:/etc/ssh/sshd_config \
--volume /课程文件夹/sm/hosts:/etc/hosts \
-p 8888:22
-p 9870:9870
-p 8088:8088
-p 8080:8080
-p 4041:4040
\
cc /bin/bash -c "source ~/.bashrc
&& service ssh start && /bin/bash"
复制代码
注意:-p 是 Docker 的端口映射选项,用于将容器内的网络端口映射到主机的端口,以便主机上的程序或用户可以访问容器的服务。
格式说明 -p <主机端口>:<容器端口>
通过这种映射,外部可以通过访问主机的 主机端口,间接访问容器内部对应的 容器端口。
详细端口映射的解析:
-p 8888:22
复制代码
容器端口 22:这是 SSH 服务的默认端口,容器内部通过端口 22 提供 SSH 服务。
主机端口 8888:主机通过端口 8888 与容器的 SSH 服务通信。
-p 9870:9870
复制代码
容器端口 9870:这是 Hadoop 的 NameNode Web 界面的默认端口。
主机端口 9870:主机通过端口 9870 访问 Hadoop NameNode 的 Web UI。
启动 sw1 容器
-p 8088:8088
复制代码
容器端口 8088:这是 Hadoop YARN ResourceManager Web 界面的默认端口。
主机端口 8088:主机通过端口 8088 访问 Hadoop YARN 的 Web UI。
-p 8080:8080
复制代码
容器端口 8080:这是 Spark Master Web 界面的默认端口。
主机端口 8080:主机通过端口 8080 访问 Spark Master 的 Web UI。
-p 4041:4040
复制代码
容器端口 4040:这是 Spark Application(使命)的默认 Web 界面端口。
主机端口 4041:主机通过端口 4041 访问容器中 Spark Application 的 Web UI。
启动 sw1 容器
sudo docker run -it \
--name sw1 \
--hostname sw1 \
--net spark_network \
--ip 172.19.0.3 \
--volume /课程文件夹/sw1:/root \
--volume /课程文件夹/sw1/.bashrc:/root/.bashrc \
--volume /课程文件夹/sw1/sshd_config:/etc/ssh/sshd_config \
--volume /课程文件夹/sw1/hosts:/etc/hosts \
cc /bin/bash -c "source ~/.bashrc
&& service ssh start && /bin/bash"
复制代码
启动 sw2 容器
sudo docker run -it \
--name sw2 \
--hostname sw2 \
--net spark_network \
--ip 172.19.0.4 \
--volume /课程文件夹/sw2:/root \
--volume /课程文件夹/sw2/.bashrc:/root/.bashrc \
--volume /课程文件夹/sw2/sshd_config:/etc/ssh/sshd_config \
--volume /课程文件夹/sw2/hosts:/etc/hosts \
cc /bin/bash -c "source ~/.bashrc
&& service ssh start && /bin/bash"
复制代码
上面容器的启动,已去除–rm参数,退出docker后不会烧毁,方便从desktop启动。
免密成功!
5.wsl终端进入已经启动容器的方法:
使用以下下令列出当前正在运行的容器:
sudo docker ps
复制代码
找到你想进入的容器名称或容器 ID,例如 sm 或 a2af751745e8。
从desktop复制容器名称或容器 ID也可以。
用以下下令进入容器的 Bash 环境:
docker exec -it <容器名称或容器ID> /bin/bash
复制代码
例如:docker exec -it spark_master /bin/bash
第六章:配置 Hadoop 和 Spark (建议使用vscode,方便)
1.Hadoop 配置
Hadoop 配置文件位于 $HADOOP_HOME/etc/hadoop/,需要编辑以下文件:
core-site.xml:配置 Hadoop 的文件体系。
hdfs-site.xml:配置 HDFS 相干参数。
mapred-site.xml:配置 MapReduce 框架。
yarn-site.xml:配置 YARN 资源调治器。
$HADOOP_HOME/etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://sm:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
</property>
</configuration>
复制代码
fs.defaultFS:设置 NameNode 的地址。
hadoop.tmp.dir:指定 Hadoop 的暂时存储路径。
$HADOOP_HOME/etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoop/dfs/data</value>
</property>
</configuration>
复制代码
dfs.replication:设置 HDFS 数据副本数量。
dfs.namenode.name.dir 和 dfs.datanode.data.dir:指定 NameNode 和 DataNode 的存储目次。
$HADOOP_HOME/etc/hadoop/mapred-site.xml:
如果文件不存在,可以复制默认文件:
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
复制代码
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
复制代码
mapreduce.framework.name:指定使用 YARN 作为资源管理框架。
$HADOOP_HOME/etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>sm</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
复制代码
yarn.resourcemanager.hostname:指定 ResourceManager 的主机名。
yarn.nodemanager.aux-services:启用 Shuffle 服务,用于 MapReduce 使命。
workers文件,需要在 Worker 节点中指定附属角色(如 DataNode 和 NodeManager),也就是sw1和sw2。
在WSL中搭建SPARK平台(中)脚本会打印出配置的环境变量值,便于验证配置是否正确。
现在确定环境配置没问题的条件下,删除sw1和sw2~/.bashrc内的多余的输出,为保证后面使用ssh分发配置文件不出错而做准备。
ssh root@sw1
nano ~/.bashrc
复制代码
留下的内容:
删去的内容:
同理,sw2也删去。
分发配置文件
:
将配置文件从 sm 分发到 sw1 和 sw2 节点:
scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/core-site.xml
scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/core-site.xml
scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/mapred-site.xml
scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/mapred-site.xml
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/yarn-site.xml
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/yarn-site.xml
scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/workers
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/workers
复制代码
在 sw1 和 sw2 节点登录后,检查分发文件的内容是否正确:
cat $HADOOP_HOME/etc/hadoop/core-site.xml
cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml
cat $HADOOP_HOME/etc/hadoop/mapred-site.xml
cat $HADOOP_HOME/etc/hadoop/yarn-site.xml
复制代码
如果发生:
root@sw1:~# cat $HADOOP_HOME/etc/hadoop/core-site.xml cat: /etc/hadoop/core-site.xml: No such file or directory
重新使得配置环境见效一下:
source ~/.bashrc
复制代码
2.Spark 配置
Spark 的配置文件位于 $SPARK_HOME/conf/,需要编辑以下文件:
spark-env.sh:配置 Spark 环境变量(如 Master 节点)。
slaves:指定 Worker 节点列表。
spark-defaults.conf:可选,用于设置 Spark 的默认运行参数。
$SPARK_HOME/conf/spark-env.sh:
如果文件不存在,先复制模板文件:
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
复制代码
export JAVA_HOME=/root/jdk/jdk1.8.0_351
export HADOOP_HOME=/root/hadoop/hadoop-3.3.4
export SPARK_HOME=/root/spark/spark-3.3.1-bin-hadoop3
export SPARK_MASTER_HOST=sm
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH
# Spark Worker 配置(根据实际需要修改)
export SPARK_WORKER_MEMORY=1G
export SPARK_WORKER_CORES=2
复制代码
SPARK_MASTER_HOST:指定 Spark Master 节点的主机名(在你的集群中是 sm)。
SPARK_WORKER_MEMORY:分配给每个 Worker 的内存巨细。
SPARK_WORKER_CORES:分配给每个 Worker 的 CPU 核数。
$SPARK_HOME/conf/workers:
如果文件不存在,先复制模板文件
cp $SPARK_HOME/conf/workers.template $SPARK_HOME/conf/workers
复制代码
sw1
sw2
复制代码
作用:界说 Spark 的 Worker 节点列表,sw1 和 sw2 是 Worker 的主机名。
注意:确保 hosts 文件中已正确配置主机名到 IP 的映射。
$SPARK_HOME/conf/spark-defaults.conf(可选):
如果文件不存在,先复制模板文件:
cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
复制代码
spark.master spark://sm:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://sm:9000/spark-logs
spark.history.fs.logDirectory hdfs://sm:9000/spark-logs
spark.executor.memory 1G
spark.executor.cores 2
复制代码
spark.master:指定 Spark Master 的地址。
spark.eventLog.enabled:启用事件日记记载。
spark.eventLog.dir:日记存储位置,建议存储在 HDFS。
spark.executor.memory 和 spark.executor.cores:为每个 Executor 分配资源。
分发配置文件到 Worker 节点
只需分发修改的文件到 sw1 和 sw2:
scp $SPARK_HOME/conf/spark-env.sh root@sw1:$SPARK_HOME/conf/spark-env.sh
scp $SPARK_HOME/conf/spark-env.sh root@sw2:$SPARK_HOME/conf/spark-env.sh
scp $SPARK_HOME/conf/workers root@sw1:$SPARK_HOME/conf/workers
scp $SPARK_HOME/conf/workers root@sw2:$SPARK_HOME/conf/workers
scp $SPARK_HOME/conf/spark-defaults.conf root@sw1:$SPARK_HOME/conf/spark-defaults.conf
scp $SPARK_HOME/conf/spark-defaults.conf root@sw2:$SPARK_HOME/conf/spark-defaults.conf
复制代码
第七章:启动 hadoop + Spark 集群
1.启动 Hadoop
格式化 NameNode(首次启动需要)
在 sm 节点运行以下下令格式化 Hadoop 的 NameNode(如果已经格式化过,可以跳过):
$HADOOP_HOME/bin/hdfs namenode -format
复制代码
2.启动 HDFS 和 YARN
设置环境变量并运行:Hadoop 的默认安全策略不推荐直接使用 root 用户操纵 HDFS 或 YARN 服务,但可以通过显式界说用户环境变量来绕过这个限制。(为符合安全性和最佳实践就切换到非 root 用户运行)
直接使用 root:
nano ~/.bashrc
复制代码
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
复制代码
修改 ~/.bashrc 中以永世见效
分发给子节点:
scp ~/.bashrc root@sw1:~/.bashrcscp ~/.bashrc root@sw2:~/.bashrcssh root@sw1 "source ~/.bashrc
"ssh root@sw2 "source ~/.bashrc
"
复制代码
在 sm 节点运行以下下令:
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
复制代码
验证 HDFS 是否启动
jps
复制代码
验证 HDFS 状态:
$HADOOP_HOME/bin/hdfs dfsadmin -report
复制代码
sw1和sw2节点已经启动,没问题。
验证 YARN 状态:
$HADOOP_HOME/bin/yarn node -list
复制代码
3.启动 Spark
在 sm 节点启动 Spark 集群:
$SPARK_HOME/sbin/start-all.sh
复制代码
验证 Spark Web 界面(localhost:8080)
第七章:测试集群 hadoop + Spark 集群
测试 HDFS
在 sm 节点,运行以下下令测试 HDFS 功能:
创建一个 HDFS 目次:
$HADOOP_HOME/bin/hdfs dfs -mkdir /test
复制代码
上传文件到 HDFS:
echo "Hello Hadoop" > testfile.txt
$HADOOP_HOME/bin/hdfs dfs -put testfile.txt /test/
复制代码
列出文件:
$HADOOP_HOME/bin/hdfs dfs -ls /test
复制代码
从 HDFS 下载文件:
$HADOOP_HOME/bin/hdfs dfs -get /test/testfile.txt downloaded.txt
cat downloaded.txt
复制代码
输出Hello Hadoop
5.测试 Spark
运行 Spark 示例使命:
$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://sm:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.1.jar 10
复制代码
从输出可以看出,Spark 示例使命 SparkPi 已成功运行并完成。效果是:
Pi is roughly 3.1415351415351416
复制代码
这表明 Hadoop 和 Spark 集群已正确配置并运行,使命能够正常调治并完成。
6.简化运行脚本(可选)
启动脚本
nano ~/start-cluster.sh
复制代码
#!/bin/bash# 加载环境变量source ~/.bashrc
# 启动 Hadoop HDFSecho "Starting HDFS..."$HADOOP_HOME/sbin/start-dfs.sh# 启动 Hadoop YARNecho "Starting YARN..."$HADOOP_HOME/sbin/start-yarn.sh# 启动 Sparkecho "Starting Spark..."$SPARK_HOME/sbin/start-all.sh
echo "Cluster started successfully!"
复制代码
保存文件后,赋予可执行权限:
chmod +x ~/start-cluster.sh
复制代码
停止脚本
nano ~/stop-cluster.sh
复制代码
#!/bin/bash# 加载环境变量source ~/.bashrc
# 停止 Sparkecho "Stopping Spark..."$SPARK_HOME/sbin/stop-all.sh# 停止 Hadoop YARNecho "Stopping YARN..."$HADOOP_HOME/sbin/stop-yarn.sh# 停止 Hadoop HDFSecho "Stopping HDFS..."$HADOOP_HOME/sbin/stop-dfs.shecho "Cluster stopped successfully!"
复制代码
保存文件后,赋予可执行权限:
chmod +x ~/stop-cluster.sh
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4