准备至少2台虚拟机,装好linux系统,我装的是Ubuntu20.04。
1.修改主机名(每台)
1)修改/etc/hostsname内容,主节点改为master,子节点改为slaver1
sudo vim /etc/hostname
2)在/etc/hosts中修改各个节点的IP与主机名的对应:
sudo vim /etc/hosts
修改如下:
192.168.50.193 master
192.168.50.40 slave1
2.配置ssh免密码登录(每台)
2.1 安装ssh,并启动
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
2.2 检查是否正确启动
ps -e | grep ssh
2.3 配置免密码登录
为了能够无密码登录本地localhost,需要生成SSH密钥并配置免密码登录。
1 )生成密钥对:
ssh-keygen -t rsa -P "" //-t 指定生成RSA类型的密钥以及管理密钥
一直回车,会在/root/.ssh/文件夹下生成id_rsa id_rsa.pub
id_rsa —— 私有密钥
id_rsa.pub —— 公有密钥
2) 把id_rsa.pub追加到authorized_key里面去
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)修改/etc/ssh/sshd_config 文件,使得本机允许远程连接
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitRootLogin yes
4)重启ssh
service ssh restart
5)修改权限:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
2.3 pub复制
2.3.1 把master里的pub复制到slave1。
scp /home/wang/.ssh/id_rsa.pub slave1@slave1:/home/slave1/.ssh/id_rsa.pub_sl
2.3.2 传过来的公钥追加到authorized_keys
在slave1中转到.ssh路径下,执行如下命令
cat id_rsa.pub_sl >> authorized_keys
2.3.3 在master验证ssh
ssh slave1@slave1
3.Hadoop安装(每台)
3.1 下载hadoop-3.3.6
http://https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/
3.2 安装
将下载好的安装包拷贝到虚拟机,在其所属目录下打开终端,执行如下代码:
sudo tar -xzf hadoop-3.3.6.tar.gz -C /usr/local/
4.Java环境搭建(每台)
4.1 安装jdk
更新Ubuntu软件包,安装default-jdk
sudo apt update
sudo apt install default-jdk
查看java版本
java -version
4.2 配置环境变量
编辑.bashrc
文件
vim ~/.bashrc
配置Hadoop和Java的环境变量
export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
是配置文件生效,查看hadoop版本号
source ./.bashrc
hadoop version
5.Spark安装(master)
5.1下载spark-3.3.0
在Linux上的浏览器直接下载spark-3.3.0,下载地址如下:
https://archive.apache.org/dist/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
转到文件所在路径执行解压
sudo tar -xzf spark-3.3.0-bin-hadoop3.tgz -C /usr/local/
5.2 配置Spark环境变量
vim ~/.bashrc
在最后一行添加如下内容:
export SPARK_HOME=/usr/local/spark-3.3.0-bin-hadoop3
export PATH=$JAVA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source ./.bashrc
5.3 修改配置文件
进入spark conf目录:
cd /usr/local/spark-3.3.0-bin-hadoop3/conf |
拷贝模板文件:
cp spark-defaults.conf.template spark-defaults.conf
cp spark-env.sh.template spark-env.sh
cp workers.template workers
5.3.1 修改spark-defaults.conf
1). 进入spark-defaults.conf文件:
vim spark-defaults.conf
2). 添加如下内容:
spark.master spark://master:7077
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 1g
spark.executor.memory 1g
5.3.2 修改spark-env.sh
1). 进入spark-env.sh文件:
vim spark-env.sh
2). 添加如下内容:
export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export HADOOP_CONF_DIR=/usr/local/hadoop-3.3.6/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.3.6/bin/hadoop classpath)
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
5.3.3 修改workders文件
1) 进入workers文件:
vim workers
2) 删除localhost后,添加如下内容:
master slave1 |
3) 分发spark目录到其他节点
cd /usr/local/
scp -r ./spark-3.3.0-bin-hadoop3 slave1@slave1:/usr/local/
6.启动
# 切换到 standalone 模式的安装目录下
cd /usr/local/spark-3.3.0-bin-hadoop3
# 启动
sbin/start-all.sh
启动成功后,在浏览器输入http://192.168.50.193:8080/,查看运行情况,注意这里的IP是master节点的IP。
standalone 模式部署完成。
7. 遇到的问题及解决
7.1 分发节点时,出现Permission denied
scp: /usr/local/spark-3.3.0-bin-hadoop3: Permission denied
方法1、修改本地文件夹,sudo chmod 777 + 文件夹名字,测试是否可行。
方法2、目标主机上创建该文件夹,然后将下层文件传过去,或者文件夹整个传过去再去一层文件夹。
方法3:scp到目标主机的/tmp,然后用mv移动到你想放的位置。
解决办法参考:scp: /usr/local/hadoop: Permission denied问题解决_scp: /home/hadoop/hadoop.master.tar.gz: permission-CSDN博客
7.2 节点用户名不一致,启动失败问题
在启动spark时,出现如下问题。
master的用户名是wang,子节点的用户名是slave1,在启动时默认使用了master的用户名,导致启动失败,实际应该是slave1@slave1。
解决:在master主机上修改(或者是创建) ~/.ssh/config文件,输入如下内容
Host slave1
user slave1
有多个节点,都需要配置。