准备四台虚拟机或者物理机,我使用虚拟机,需要使用80G外存
我先准备一台虚拟机,配置完成后克隆出剩下的三台,这样可以解决配置时间
这里我使用的是Centos8.5,虚拟机外存20G,内存4G,我安装的是带桌面版的
阿里Centos8.5下载地址
安装过程中设置install source
http://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/
jdk17下载地址
我把所有的软件都安装在了 /opt 下面
创建一个文件夹 /java17
把安装包上传到该文件夹
在这里解压
rpm -ivh 软件包名字
进入**/usr/lib/jvm/jdk-17-oracle-x64**,可以看到刚才的java就安装在这里了
打开**/etc/proflie**文件,添加如下代码来配置环境变量
export JAVA_HOME=/usr/lib/jvm/jdk-17-oracle-x64
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar;
export set JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
之后输入下面的命令,让配置生效
source /etc/profile
现在完成了一台虚拟机的配置,把这台虚拟机再克隆三份
一主三从
登陆时选择root用户登录
改完后四台主机的hostname分别为:master vice1 vice2 vice3 vice4
在 **/**目录下输入命令
ssh-keygen -t rsa
一共按下三次回车
创建成功,之后可以在**/**目录下看到一个 .ssh 的隐藏文件
把**.pub**文件打开,复制出里面的内容,把内容复制到一个临时的txt中,我复制到了windows桌面的一个文件里
之后把每台虚拟机的 .pub 文件中的内容都复制到这个临时的txt中
把这个txt临时文件改名为 authorized_keys
之后把这个文件放到每台虚拟机的 /.ssh目录下
关闭防火墙,每台虚拟机都需要关闭
systemctl stop firewalld
systemctl disable firewalld
获取每台虚拟机的ip,写入每台虚拟机的hosts文件
hosts文件路径是 /etc/hosts
192.168.186.148 master
192.168.186.149 vice1
192.168.186.150 vice2
192.168.186.151 vice3
这4个分别对应四台虚拟机的hostname和ip地址
使用ifconfig可以查看IP地址
在每台虚拟机上,分别与其他虚拟机进行通信
输入命令
ssh master/vice
与master腾讯就输入 ssh master
第一次通信会出现让你输入yes的情况,如果要输入密码,那么就是产生公钥和私钥环节出错,重新进行产生公钥和私钥
此时就通信成功了,之后输入exit退出,再试一次,看看需不需要输入yes或者密码
此时直接进来了,说明互信成功,接下来退出去,与其他虚拟机互信,自己与自己也互信一次
hadoop3.3.5下载地址
把安装包上传到 /opt 目录下
tar -xvzf 安装包
进入 /opt/hadoop-3.3.5/etc/hadoop 目录
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.3.5/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
export JAVA_HOME=/usr/lib/jvm/jdk-17-oracle-x64
设置java虚拟机启动参数
export HADOOP_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
<configuration>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/opt/localdir</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
在 /opt 目录下创建localdir
在 /etc/profile 文件中加入如下代码
export HADOOP_HOME=/opt/hadoop-3.3.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
启用配置
source /etc/profile
至此,一台虚拟机配置完毕,接下来配置其他虚拟器
现在,四台虚拟机已经都安装了hadoop,并且环境变量已经配置成功,下面就是启动hadoop了
确保四台机子都已经打开
在主节点master机器上运行如下命令
hdfs namenode -format
start-all.sh
出现报错
解决方法:在每个虚拟机的 /etc/profile 文件中加入如下代码
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
启用配置
source /etc/profile
之后再次运行start-all.sh
使用 jps 命令
主节点查看
在浏览器输入ip
http://主节点IP地址:9870/
关闭hadoop,在master节点输入下面的命令
stop-all.sh
https://www.apache.org/dyn/closer.lua/spark/spark-3.3.2/spark-3.3.2-bin-without-hadoop.tgz
下载的是没有自带hadoop的版本
tar -xzvf spark-3.3.2-bin-without-hadoop.tgz
进入 /opt/spark/conf 目录下
把spark-defaults.conf.template文件的.template删除
spark.master spark://master:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/spark-eventlog
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 5g
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" --add-opens java.base/java.lang=ALL-UNNAMED
spark.driver.extraJavaOptions --add-opens java.base/java.lang=ALL-UNNAMED
创建workers文件,并修改内容
把spark-env.sh.template文件的.template删除
export JAVA_HOME=/usr/lib/jvm/jdk-17-oracle-x64
export HADOOP_CONF_DIR=/opt/hadoop-3.3.5/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-3.3.5/bin/hadoop classpath)
在 /etc/profile 文件中加入如下代码
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
启用配置
source /etc/profile
至此,一台虚拟机的spark配置完毕,接下来配置其他虚拟器,过程与该虚拟机配置过程一致
现在,四台虚拟机已经都安装了Spark,并且环境变量已经配置成功,下面就是启动Spark了
确保四台机子都已经打开
先启动hadoop,start-all.sh
进入浏览器界面,访问hadoop的web页面,点击utilities
创建文件夹 /spark-eventlog
点击create
进入 /opt/spark/sbin 目录下
输入如下命令启动
./start-all.sh
如果出现 permission deny或者权限不足,需要把对应虚拟机的spark文件夹加权限
访问网址
http://主节点IP地址:8080/
在主节点上输入一下命令
spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 100
这个 /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 是spark路径下的一个jar包,是官方提供的样例
100表示运行100次
下面是运行过程
修改 /opt/spark/conf/spark-defaults.conf文件
spark.master spark://master:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9000/spark-eventlog
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 5g
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" --add-opens java.base/java.lang=ALL-UNNAMED
spark.driver.extraJavaOptions --add-opens java.base/java.lang=ALL-UNNAMED
其他的虚拟机也要修改
接下来关闭spark,再启动
关闭使用 ./stop-all.sh, 注意要在spark的sbin目录下
访问下面的url
http://主节点IP地址:8088/cluster