WSL中搭建SPARK平台(下)

打印 上一主题 下一主题

主题 559|帖子 559|积分 1677


第五章:配置ssh免密登录

核心思路
在 sm 容器中生成 SSH 密钥,并将公钥添加到 ~/.ssh/authorized_keys,实现免密登录自己。
在主机上直接将 sm 容器的 .ssh 目次复制到 sw1 和 sw2 的节点目次中,实现公钥的分发。
在容器启动时挂载 .ssh 文件夹到相应节点,并测试连接。
1.在 sm 容器中生成 SSH 密钥
  1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
复制代码
  1. -t rsa:使用 RSA 算法生成密钥。
  2. -P '':设置空密码,免去二次输入密码的步骤。
  3. -f ~/.ssh/id_rsa:密钥存储路径。
复制代码

2.配置免密登录自己
在 sm 容器中,将公钥添加到 ~/.ssh/authorized_keys:
  1. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制代码
验证自己登录自己是否免密成功:
  1. ssh localhost
复制代码
被拒绝:Permission denied (publickey).

调解权限
  1. chmod 600 ~/.ssh/authorized_keys
  2. chmod 600 ~/.ssh/id_rsa
  3. chmod 700 ~/.ssh
  4. chmod 700 ~
复制代码
主目次 ~ 和 ~/.ssh 目次的权限设置为 700,使只有当前用户能访问。
authorized_keys 和 id_rsa 文件权限设置为 600,确保只有当前用户能读取。
修复所有权:
  1. chown root ~
  2. chgrp root ~
  3. chown root:root ~/.ssh
  4. chown root:root ~/.ssh/authorized_keys
复制代码
修复了目次和文件的所有权,确保它们归当前用户(root)所有,并且所属组也为 root。SSH 服务会检查文件是否属于当前用户,如果所有权不正确,也会拒绝使用。
再次验证自己登录自己是否免密成功:

为什么之前的建议无效:
可能主目次 ~ 的权限或所有权存在问题,这导致 SSH 服务根本无法进入 ~/.ssh 目次。
~/.ssh 或 ~/.ssh/authorized_keys 的所有权不是当前用户,SSH 服务会出于安全性思量拒绝访问。
3.在主机上分发 .ssh 目次
回到主机,复制 sm 的 .ssh 文件夹到 sw1 和 sw2 的目次中:
  1. sudo cp -r /课程文件夹/sm/.ssh /课程文件夹/sw1/
  2. sudo cp -r /课程文件夹/sm/.ssh /课程文件夹/sw2/
复制代码

4.从不同的终端(小黑框)分别启动 sm、sw1 和 sw2 容器:
启动 sm 容器
  1. sudo docker run -it \
  2.   --name sm \
  3.   --hostname sm \
  4.   --net spark_network \
  5.   --ip 172.19.0.2 \
  6.   --volume /课程文件夹/sm:/root \
  7.   --volume /课程文件夹/sm/.bashrc:/root/.bashrc \
  8.   --volume /课程文件夹/sm/sshd_config:/etc/ssh/sshd_config \
  9.   --volume /课程文件夹/sm/hosts:/etc/hosts \
  10.   -p 8888:22
  11. -p 9870:9870
  12. -p 8088:8088
  13. -p 8080:8080
  14. -p 4041:4040
  15. \
  16.   cc /bin/bash -c "source ~/.bashrc
  17. && service ssh start && /bin/bash"
复制代码
  注意:-p 是 Docker 的端口映射选项,用于将容器内的网络端口映射到主机的端口,以便主机上的程序或用户可以访问容器的服务。
格式说明 -p <主机端口>:<容器端口>
通过这种映射,外部可以通过访问主机的 主机端口,间接访问容器内部对应的 容器端口。
  详细端口映射的解析:
  1. -p 8888:22
复制代码
容器端口 22:这是 SSH 服务的默认端口,容器内部通过端口 22 提供 SSH 服务。
主机端口 8888:主机通过端口 8888 与容器的 SSH 服务通信。
  1. -p 9870:9870
复制代码
容器端口 9870:这是 Hadoop 的 NameNode Web 界面的默认端口。
主机端口 9870:主机通过端口 9870 访问 Hadoop NameNode 的 Web UI。
启动 sw1 容器
  1. -p 8088:8088
复制代码
容器端口 8088:这是 Hadoop YARN ResourceManager Web 界面的默认端口。
主机端口 8088:主机通过端口 8088 访问 Hadoop YARN 的 Web UI。
  1. -p 8080:8080
复制代码
容器端口 8080:这是 Spark Master Web 界面的默认端口。
主机端口 8080:主机通过端口 8080 访问 Spark Master 的 Web UI。
  1. -p 4041:4040
复制代码
容器端口 4040:这是 Spark Application(使命)的默认 Web 界面端口。
主机端口 4041:主机通过端口 4041 访问容器中 Spark Application 的 Web UI。
启动 sw1 容器
  1. sudo docker run -it \
  2.   --name sw1 \
  3.   --hostname sw1 \
  4.   --net spark_network \
  5.   --ip 172.19.0.3 \
  6.   --volume /课程文件夹/sw1:/root \
  7.   --volume /课程文件夹/sw1/.bashrc:/root/.bashrc \
  8.   --volume /课程文件夹/sw1/sshd_config:/etc/ssh/sshd_config \
  9.   --volume /课程文件夹/sw1/hosts:/etc/hosts \
  10.   cc /bin/bash -c "source ~/.bashrc
  11. && service ssh start && /bin/bash"
复制代码
启动 sw2 容器
  1. sudo docker run -it \
  2.   --name sw2 \
  3.   --hostname sw2 \
  4.   --net spark_network \
  5.   --ip 172.19.0.4 \
  6.   --volume /课程文件夹/sw2:/root \
  7.   --volume /课程文件夹/sw2/.bashrc:/root/.bashrc \
  8.   --volume /课程文件夹/sw2/sshd_config:/etc/ssh/sshd_config \
  9.   --volume /课程文件夹/sw2/hosts:/etc/hosts \
  10.   cc /bin/bash -c "source ~/.bashrc
  11. && service ssh start && /bin/bash"
复制代码

上面容器的启动,已去除–rm参数,退出docker后不会烧毁,方便从desktop启动。


免密成功!
5.wsl终端进入已经启动容器的方法:
使用以下下令列出当前正在运行的容器:
  1. sudo docker ps
复制代码

找到你想进入的容器名称或容器 ID,例如 sm 或 a2af751745e8。

从desktop复制容器名称或容器 ID也可以。
用以下下令进入容器的 Bash 环境:
  1. 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:
  1. <configuration>
  2.   <property>
  3.     <name>fs.defaultFS</name>
  4.     <value>hdfs://sm:9000</value>
  5.   </property>
  6.   <property>
  7.     <name>hadoop.tmp.dir</name>
  8.     <value>/root/hadoop/tmp</value>
  9.   </property>
  10. </configuration>
复制代码
fs.defaultFS:设置 NameNode 的地址。
hadoop.tmp.dir:指定 Hadoop 的暂时存储路径。

$HADOOP_HOME/etc/hadoop/hdfs-site.xml:
  1. <configuration>
  2.   <property>
  3.     <name>dfs.replication</name>
  4.     <value>2</value>
  5.   </property>
  6.   <property>
  7.     <name>dfs.namenode.name.dir</name>
  8.     <value>/root/hadoop/dfs/name</value>
  9.   </property>
  10.   <property>
  11.     <name>dfs.datanode.data.dir</name>
  12.     <value>/root/hadoop/dfs/data</value>
  13.   </property>
  14. </configuration>
复制代码
dfs.replication:设置 HDFS 数据副本数量。
dfs.namenode.name.dir 和 dfs.datanode.data.dir:指定 NameNode 和 DataNode 的存储目次。

$HADOOP_HOME/etc/hadoop/mapred-site.xml:
如果文件不存在,可以复制默认文件:
  1. cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
复制代码
  1. <configuration>
  2.   <property>
  3.     <name>mapreduce.framework.name</name>
  4.     <value>yarn</value>
  5.   </property>
  6. </configuration>
复制代码
mapreduce.framework.name:指定使用 YARN 作为资源管理框架。

$HADOOP_HOME/etc/hadoop/yarn-site.xml:
  1. <configuration>
  2.   <property>
  3.     <name>yarn.resourcemanager.hostname</name>
  4.     <value>sm</value>
  5.   </property>
  6.   <property>
  7.     <name>yarn.nodemanager.aux-services</name>
  8.     <value>mapreduce_shuffle</value>
  9.   </property>
  10. </configuration>
复制代码
yarn.resourcemanager.hostname:指定 ResourceManager 的主机名。
yarn.nodemanager.aux-services:启用 Shuffle 服务,用于 MapReduce 使命。

workers文件,需要在 Worker 节点中指定附属角色(如 DataNode 和 NodeManager),也就是sw1和sw2。

在WSL中搭建SPARK平台(中)脚本会打印出配置的环境变量值,便于验证配置是否正确。
现在确定环境配置没问题的条件下,删除sw1和sw2~/.bashrc内的多余的输出,为保证后面使用ssh分发配置文件不出错而做准备。
  1. ssh root@sw1
  2. nano ~/.bashrc
复制代码
留下的内容:

删去的内容:

同理,sw2也删去。
分发配置文件
将配置文件从 sm 分发到 sw1 和 sw2 节点:
  1. scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/core-site.xml
  2. scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/core-site.xml
  3. scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
  4. scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
  5. scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/mapred-site.xml
  6. scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/mapred-site.xml
  7. scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/yarn-site.xml
  8. scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/yarn-site.xml
  9. scp $HADOOP_HOME/etc/hadoop/core-site.xml root@sw1:$HADOOP_HOME/etc/hadoop/workers
  10. scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@sw2:$HADOOP_HOME/etc/hadoop/workers
复制代码


在 sw1 和 sw2 节点登录后,检查分发文件的内容是否正确:
  1. cat $HADOOP_HOME/etc/hadoop/core-site.xml
  2. cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml
  3. cat $HADOOP_HOME/etc/hadoop/mapred-site.xml
  4. 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
重新使得配置环境见效一下:
  1. 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:
如果文件不存在,先复制模板文件:
  1. cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
复制代码
  1. export JAVA_HOME=/root/jdk/jdk1.8.0_351
  2. export HADOOP_HOME=/root/hadoop/hadoop-3.3.4
  3. export SPARK_HOME=/root/spark/spark-3.3.1-bin-hadoop3
  4. export SPARK_MASTER_HOST=sm
  5. export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH
  6. # Spark Worker 配置(根据实际需要修改)
  7. export SPARK_WORKER_MEMORY=1G
  8. export SPARK_WORKER_CORES=2
复制代码
SPARK_MASTER_HOST:指定 Spark Master 节点的主机名(在你的集群中是 sm)。
SPARK_WORKER_MEMORY:分配给每个 Worker 的内存巨细。
SPARK_WORKER_CORES:分配给每个 Worker 的 CPU 核数。

$SPARK_HOME/conf/workers:
如果文件不存在,先复制模板文件
  1. cp $SPARK_HOME/conf/workers.template $SPARK_HOME/conf/workers
复制代码
  1. sw1
  2. sw2
复制代码

作用:界说 Spark 的 Worker 节点列表,sw1 和 sw2 是 Worker 的主机名。
注意:确保 hosts 文件中已正确配置主机名到 IP 的映射。
$SPARK_HOME/conf/spark-defaults.conf(可选):
如果文件不存在,先复制模板文件:
  1. cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
复制代码
  1. spark.master                     spark://sm:7077
  2. spark.eventLog.enabled           true
  3. spark.eventLog.dir               hdfs://sm:9000/spark-logs
  4. spark.history.fs.logDirectory    hdfs://sm:9000/spark-logs
  5. spark.executor.memory            1G
  6. 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:
  1. scp $SPARK_HOME/conf/spark-env.sh root@sw1:$SPARK_HOME/conf/spark-env.sh
  2. scp $SPARK_HOME/conf/spark-env.sh root@sw2:$SPARK_HOME/conf/spark-env.sh
  3. scp $SPARK_HOME/conf/workers root@sw1:$SPARK_HOME/conf/workers
  4. scp $SPARK_HOME/conf/workers root@sw2:$SPARK_HOME/conf/workers
  5. scp $SPARK_HOME/conf/spark-defaults.conf root@sw1:$SPARK_HOME/conf/spark-defaults.conf
  6. scp $SPARK_HOME/conf/spark-defaults.conf root@sw2:$SPARK_HOME/conf/spark-defaults.conf
复制代码


第七章:启动 hadoop + Spark 集群

1.启动 Hadoop
格式化 NameNode(首次启动需要)
在 sm 节点运行以下下令格式化 Hadoop 的 NameNode(如果已经格式化过,可以跳过):
  1. $HADOOP_HOME/bin/hdfs namenode -format
复制代码

2.启动 HDFS 和 YARN
设置环境变量并运行:Hadoop 的默认安全策略不推荐直接使用 root 用户操纵 HDFS 或 YARN 服务,但可以通过显式界说用户环境变量来绕过这个限制。(为符合安全性和最佳实践就切换到非 root 用户运行)
直接使用 root:
  1. nano ~/.bashrc
复制代码
  1. export HDFS_NAMENODE_USER=root
  2. export HDFS_DATANODE_USER=root
  3. export HDFS_SECONDARYNAMENODE_USER=root
  4. export YARN_RESOURCEMANAGER_USER=root
  5. export YARN_NODEMANAGER_USER=root
复制代码
修改 ~/.bashrc 中以永世见效
分发给子节点:
  1. scp ~/.bashrc root@sw1:~/.bashrcscp ~/.bashrc root@sw2:~/.bashrcssh root@sw1 "source ~/.bashrc
  2. "ssh root@sw2 "source ~/.bashrc
  3. "
复制代码
在 sm 节点运行以下下令:
  1. $HADOOP_HOME/sbin/start-dfs.sh
  2. $HADOOP_HOME/sbin/start-yarn.sh
复制代码
验证 HDFS 是否启动
  1. jps
复制代码

验证 HDFS 状态:
  1. $HADOOP_HOME/bin/hdfs dfsadmin -report
复制代码
sw1和sw2节点已经启动,没问题。


验证 YARN 状态:
  1. $HADOOP_HOME/bin/yarn node -list
复制代码

3.启动 Spark
在 sm 节点启动 Spark 集群:
  1. $SPARK_HOME/sbin/start-all.sh
复制代码

验证 Spark Web 界面(localhost:8080)


第七章:测试集群 hadoop + Spark 集群

测试 HDFS
在 sm 节点,运行以下下令测试 HDFS 功能:
创建一个 HDFS 目次:
  1. $HADOOP_HOME/bin/hdfs dfs -mkdir /test
复制代码
上传文件到 HDFS:
  1. echo "Hello Hadoop" > testfile.txt
  2. $HADOOP_HOME/bin/hdfs dfs -put testfile.txt /test/
复制代码
列出文件:
  1. $HADOOP_HOME/bin/hdfs dfs -ls /test
复制代码
从 HDFS 下载文件:
  1. $HADOOP_HOME/bin/hdfs dfs -get /test/testfile.txt downloaded.txt
  2. cat downloaded.txt
复制代码

输出Hello Hadoop
5.测试 Spark
运行 Spark 示例使命:
  1. $SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi \
  2.   --master spark://sm:7077 \
  3.   --executor-memory 1G \
  4.   --total-executor-cores 2 \
  5.   $SPARK_HOME/examples/jars/spark-examples_2.12-3.3.1.jar 10
复制代码

从输出可以看出,Spark 示例使命 SparkPi 已成功运行并完成。效果是:
  1. Pi is roughly 3.1415351415351416
复制代码
这表明 Hadoop 和 Spark 集群已正确配置并运行,使命能够正常调治并完成。

6.简化运行脚本(可选)
启动脚本
  1. nano ~/start-cluster.sh
复制代码
  1. #!/bin/bash# 加载环境变量source ~/.bashrc
  2. # 启动 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
  3. echo "Cluster started successfully!"
复制代码
保存文件后,赋予可执行权限:
  1. chmod +x ~/start-cluster.sh
复制代码
停止脚本
  1. nano ~/stop-cluster.sh
复制代码
  1. #!/bin/bash# 加载环境变量source ~/.bashrc
  2. # 停止 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!"
复制代码
保存文件后,赋予可执行权限:
  1. chmod +x ~/stop-cluster.sh
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表