论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
WSL中搭建SPARK平台(下)
WSL中搭建SPARK平台(下)
星球的眼睛
金牌会员
|
2025-1-3 17:30:48
|
显示全部楼层
|
阅读模式
楼主
主题
559
|
帖子
559
|
积分
1677
第五章:配置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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
星球的眼睛
金牌会员
这个人很懒什么都没写!
楼主热帖
体系集成项目招标要诀
Java项目:基于SSM框架实现的康健综合 ...
微调神器LLaMA-Factory官方保姆级教程 ...
SecureCRT连接Linux利用教程
防止邮箱发信泄露服务器IP教程 ...
Git必知必会根本(07):git diff的利 ...
CMake构建学习笔记11-minizip库的构建 ...
这可能是最全面的Spring面试题总结了 ...
【Neo4j】Windows11使用Neo4j导入CSV数 ...
Ubuntu上安装Chrome浏览器
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表