基于CentOS虚拟机的Spark分布式开发环境搭建

基于CentOS虚拟机的Spark分布式开发环境搭建
⦁    下载软件
⦁    Linux:CentOS9 Stream
主页:https://www.centos.org/download/
下载CentOS Stream 9   x86_64
链接:https://mirrors.centos.org/mirrorlist?path=/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso&redirect=1&protocol=https
也可以在国内镜像地址下载最新的CentOS Stream 9   x86_64版本:
https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso

把下载链接复制粘贴到迅雷或者浏览器中,进行下载,文件大约10G左右。
⦁    Hadoop:
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/current/hadoop-3.3.6.tar.gz

⦁    Spark:
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz

⦁    推荐使用终端软件MobaXterm(可选软件)
https://mobaxterm.mobatek.net/download.html
⦁    虚拟机安装
⦁    关闭Windows的虚拟机Hyper-v功能
进入Windows控制面板,选择“卸载”、“打开或者关闭windows功能”,看到Hyper-V选项,将√给勾选掉就可以了
 
⦁    VMware中安装CentOS Stream 9
⦁    安装VMware Workstation 17 Pro,可以免费试用30天。
      
⦁    选择“稍后安装操作系统”
⦁    客户机操作系统选择Linux,版本选择Red Hat Enterprise Linux 9 64位
    
 
⦁    其它设置按照推荐设置即可。
 
⦁    注意虚拟机设置中,CD/DVD(SATA)选择之前下载的CentosStream的ISO文件,并选择“启动时连接”
⦁    开启虚拟机。
 
  
 
 
⦁    设置IPV4(手动IP地址),注意IP地址要参考系统自动分配的地址和网关,每个人的地址可能不同。
⦁    主机名Host1
⦁    安装结束后,重启Centos。进入登录界面:
 
⦁    此时可以用MobaXterm、Windows的CMD或者其它终端登录刚安装的Centos服务器。
⦁    注意,要用ssh协议远程登录Centos。
 
⦁    登录成功后:
 
⦁    登录后,查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --state
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

⦁    注:CentOS Stream 9配置静态IP地址的两种方法:
⦁    在终端中命令行运行:nmtui
⦁    直接编辑配置文件:/etc/NetworkManager/system-connections目录下的文件ensXXX.nmconnection
     文件名根据机器的硬件稍有不同。
⦁    第一次登录服务器后,根据提示,可以运行命令:systemctl enable --now cockpit.socket
作用是允许通过浏览器管理服务器,在浏览器中输入网址:
https://192.168.245.128:9090/
注意:如果用root不能登录的话,需要用一个具有root权限的非root用户登录web!
如果安装Centos的时候,没有创建新用户(具有管理员权限的),可以手工添加:
(添加新的具有root权限用户的方法很多,例如:
    useradd newuser
    passwd newuser
    编辑文件 /etc/sudoers
    找到类似于下面的一行
    root    ALL=(ALL)       ALL
    在这一行下面,添加新用户的配置。例如,要为名为 newuser 的用户添加 sudo 权限,可以添加以下行
    newuser   ALL=(ALL)       ALL
然后就可以用newuser登录web)
 
 
⦁    在C:\Windows\System32\drivers\etc\hosts文件添加:(IP地址可能不同,根据自己实际地址改写后续有关IP)
192.168.245.128 Host1
192.168.245.129 Host2
在终端可以用主机名登录,不用每次都输入IP地址。登录Host1: ssh root@Host1
⦁    CentOS Stream 9更换官方软件源为镜像源,在终端命令行运行下列脚本:
sed -i 's|metalink|#metalink|g' /etc/yum.repos.d/*.repo

sed -i '/name=CentOS Stream $releasever - BaseOS/a baseurl=https://mirrors.aliyun.com/centos-stream/$stream/BaseOS/$basearch/os/' /etc/yum.repos.d/*.repo

sed -i '/name=CentOS Stream $releasever - AppStream/a baseurl=https://mirrors.aliyun.com/centos-stream/$stream/AppStream/$basearch/os/' /etc/yum.repos.d/*.repo

sed -i '/name=CentOS Stream $releasever - Extras packages/a baseurl=https://mirrors.aliyun.com/centos-stream/SIGs/$stream/extras/$basearch/extras-common/' /etc/yum.repos.d/*.repo

yum clean all
yum makecache
yum update
⦁    查看CentOS版本、内核信息:
cat /etc/redhat-release
uname -a
⦁    如果需要调整时间(相差8小时):date -s '-8hour'
⦁    安装Java
yum list installed |grep java-
如果安装了java11,卸载:yum remove java-11-openjdk-headless.x86_64 (根据上一步搜索出来的名称)
yum search java|grep jdk
yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel.x86_64
⦁    拷贝、解压Hadoop和Spark
⦁    把前面下载的“hadoop-x.x.x.tar.gz”文件,通过终端的sftp功能上传到虚拟机的目录:    /Hadoop
⦁    解压:终端中进入目录/Hadoop,然后输入命令:   tar -xvf hadoop-x.x.x.tar.gz
⦁    在/Hadoop目录下创建数据存放的文件夹:    tmp、hdfs、hdfs/data、hdfs/name
⦁    sftp上传spark-x.x.x-bin-hadoopx.x.tgz到/Spark
⦁    tar -xvf spark-x.x.x-bin-hadoopx.x.tgz
⦁    编辑/etc/hosts文件
IP地址根据虚拟机实际地址设置:(注意IP地址要与自己的虚拟机设置一致,酌情修改)
192.168.245.128 Host1
192.168.245.129 Host2
⦁    编辑/etc/profile
注意下面软件版本号的差异,酌情修改!

export JAVA_HOME=/etc/alternatives/java_sdk
export HADOOP_HOME=/Hadoop/hadoop-3.3.6
export SPARK_HOME=/Spark/spark-3.5.1-bin-hadoop3
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export LD_LIBRARY_PATH=$JAVA_LIBRARY_PATH
export PATH=$PATH:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=notebook

使配置生效,输入命令,source /etc/profile
⦁    安装Python3
yum install python39 (或者其他版本)注意:如果系统中已经安装,略过此步骤。(yum list installed|grep python 查看已安装的Python情况)
yum install pip
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
pip3 install jupyter
⦁    Jupyter Notebook 设置
⦁    新建目录:/Spark/source/pyspark   (将来源代码存在这里)
⦁    执行命令:jupyter notebook --generate-config,生成配置文件:/root/.jupyter/jupyter_notebook_config.py
⦁    打开Python界面,运行下述代码,产生web访问密码:
from jupyter_server.auth import passwd
passwd()   (设置将来通过浏览器访问Jupyter Notebook的密码)
'argon2:… '   (注:将生成的单引号里面的加密字符串拷贝出来待用)
⦁    打开配置文件/root/.jupyter/jupyter_notebook_config.py,修改下述内容
(去掉原文件中的注释符号##,并修改相应的值):
## 是否允许notebook在root用户下运行.
c.ServerApp.allow_root = True
## notebook服务会监听的IP地址.
c.ServerApp.ip = '0.0.0.0'
##用于笔记本和内核的目录。
c.ServerApp.notebook_dir = '/Spark/source'
c.ServerApp.open_browser = False
c.ServerApp.password = '上面生成的密码加密字符串'
⦁    配置好以后,在命令行运行:jupyter lab
⦁    可以在局域网内的任意计算机,通过浏览器访问Jupyter Lab界面,不局限于虚拟机自身,方便后续的Python程序开发。地址是:
http://Host1:8888/lab
(注意:如果用主机名Host1等名字来访问主机,需要在windows系统目录\Windows\System32\drivers\etc\hosts文件中添加主机名字和IP地址的映射关系,见前面文档。)
 

⦁    配置Hadoop
⦁    配置/Hadoop/hadoop-x.x.x/etc/hadoop目录下的core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Host1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/Hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>
⦁    /Hadoop/hadoop-x.x.x/etc/hadoop/hdfs-site.xml
<configuration>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/Hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/Hadoop/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>Host1:9001</value>
    </property>
    <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
    </property>
    <property>
            <name>dfs.blocksize</name>
            <value>16777216</value>
    </property>
    <property>
            <name>dfs.namenode.handler.count</name>
            <value>100</value>
    </property>
</configuration>
⦁    在脚本/Hadoop/hadoop-x.x.x/etc/hadoop/hadoop-env.sh中添加:
export    JAVA_HOME=/etc/alternatives/java_sdk 
⦁    在文件/Hadoop/hadoop-x.x.x/etc/hadoop/workers 写入: 
(去掉原文件中的localhost一行)
Host1
Host2
⦁    配置Spark
⦁    /Spark/spark-x.x.x-bin-hadoopx.x/conf/spark-env.sh  (原来的文件名是spark-env.sh.template,修改为spark-env.sh)
export SPARK_MASTER_HOST Host1
⦁    /Spark/spark-x.x.x-bin-hadoop3/conf/workers文件中,
Host1
Host2
升级系统:
yum upgrade

到目前为止,我们已经配置好了一台虚拟机Host1,为了配置一个分布式的Spark计算环境,我们至少需要两台虚拟机。第二台虚拟机在配置上与第一台基本上一样,可以使用VMware的克隆功能,很方便地复制一台新的服务器。新的服务器需要更改的地方包括:IP地址、主机名、Mac地址。
⦁    克隆虚拟机
   
   
⦁    首先编辑克隆得到的新虚拟机Host2的设置,修改虚拟机网络适配器的MAC地址,点击“生成”按钮。
 
⦁    开启虚拟机Host2,修改IP地址。可以在终端登录Host2(注意:此时新克隆的虚拟机的IP地址仍是之前的旧地址)以后,在命令行使用nmtui
 
 

或者直接修改配置文件:
/etc/NetworkManager/system-connections/ensXX.nmconnection
修改好主机名和IP地址后,重新启动,用终端登录新的IP地址。
⦁    SSH免密码登录
为了方便集群中管理节点对其它节点的管理,需要配置SSH免密码登录。
⦁    去掉/etc/ssh/sshd_config中下行的注释,每台服务器都要设置:
PubkeyAuthentication yes
⦁    输入命令,ssh-keygen -t rsa,生成key,都不输入密码,一直回车,/root就会生成.ssh文件夹,每台服务器都要设置
⦁    合并公钥到authorized_keys文件,在Host1服务器,进入/root/.ssh目录,通过重定向命令合并:cat id_rsa.pub>> authorized_keys
⦁    把其余每台虚拟机节点上的id_rsa.pub文件内容都复制合并到Host1的authorized_keys文件中
(参考命令ssh-copy-id 来实现上述两个步骤)
⦁    把Host1的authorized_keys复制到每台主机的/root/.ssh目录
⦁    在Host1的终端上执行:
ssh root@Host1
ssh root@Host2
在Host2的终端上执行:
ssh root@Host2
ssh root@Host1
检查登录过程中,是否不再需要输入密码。否则,还要重新设置免密登录,不然运行Hadoop和Spark过程中会出错。
⦁    初始化HDFS
⦁    启动两台虚拟机
⦁    在Host1上执行:/Hadoop/hadoop-3.3.6/bin/hdfs namenode -format
⦁    在Host1上执行:在/Hadoop/hadoop-3.3.6/sbin/start-dfs.sh和stop-dfs.sh两个文件代码开始处,添加下列参数
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
⦁    启动Hadoop的DFS,在Host1上执行:
hadoop-3.3.6/sbin/start-dfs.sh
(关闭是stop-dfs.sh)
⦁    创建HDFS的文件目录,在Host1上执行:
hadoop fs -mkdir /sparkdata
测试DFS是否正常工作,在Host1上执行:
hadoop fs -put /Spark/spark-3.5.1-bin-hadoop3/data/mllib/kmeans_data.txt /sparkdata 
执行下列Hadoop文件系统命令后,可以看见上一步上传到Hadoop分布式文件系统的文件:
hadoop fs -ls /sparkdata
⦁    修改Hdfs目录权限,实现Web方式上传文件,输入命令:
hadoop fs -chmod -R 777 /sparkdata
⦁    网页查看Hadoop状态
⦁    Web访问,要先开放端口或者直接关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
⦁    浏览HDFS
http://Host1:9870/
    
  
⦁    启动Spark
/Spark/spark-3.5.1-bin-hadoop3/sbin/start-all.sh
浏览器访问 http://host1:8080/    master节点Web UI地址
可以看出两个节点都已正常启动:
 
⦁    连接Spark集群的master主机,在Spark安装目录下,运行命令(注意目录的相对位置要正确):
/Spark/spark-3.5.1-bin-hadoop3/bin/pyspark --master spark://Host1:7077
⦁    可以通过浏览器访问Jupyter Notebook,编辑运行代码,地址是:
http://Host1:8888/
 
http://host1:4040  
运行Pyspark代码后,可以在上述网址查看job信息

由两个节点构成的完全分布式Spark计算环境配置完成!配置3个节点及更多的情况类似!

关机注意事项:
每次关闭虚拟机前,要先关闭dfs和Spark:
/Hadoop/hadoop-3.3.6/sbin/stop-dfs.sh
/Spark/spark-3.5.1-bin-hadoop3/sbin/stop-all.sh
关闭虚拟机。

  • 44
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值