环境配置
物理系统及相关配置 | Windows 10 pro 1903,内存:16G |
虚拟机软件 | VMware® Workstation 15 Pro 15.5.0 build-14665864 |
系统 | Ubuntu 18.04.1 4.15.0-29-generic |
Java | Java 1.8.0_202 |
Hadoop | Hadoop 2.7.7 |
spark | spark-2.4.4-bin-without-hadoop-scala-2.12 |
主要搭建步骤如下:
1.Ubuntu 虚拟机的安装
2.静态ip的分配
3.配置ssh无密码登录本机和访问集群机器
4.JDK和Hadoop安装配置
5.Hadoop集群配置
6.启动hadoop集群
7.Spark安装
8.配置Spark环境变量
9.Spark配置
10.启动Spark集群
11.关闭Spark集群
1.Ubuntu 虚拟机的安装
从官网可以获得VMware® Workstation 15 Pro和Ubuntu 18.04.1的镜像文件。
(ps:本人原来用的是VMware® Workstation 13,在windows到1093版本后出现了兼容性问题而被迫升级)
首先,利用镜像文件新建三个Ubuntu虚拟机(新建时用户名最好统一,搭建时本人用户名为master)
每台虚拟机的配置如下:
- 内存2G
- 处理器一个
- 硬盘20G
其余安装过程使用默认设置即可。
修改镜像源
启动虚拟机,将镜像源改为国内的镜像
修改主机名
使用Ctrl+Alt+T
打开终端
sudo vim /etc/hostname
#也可以使用sudo gedit /etc/hostname
将三台虚拟机中的hostname
分别改为master
、slave01
、slave02
,保存退出终端,重新打开生效。
2.静态ip的分配
首先给出本人的虚拟机IP配置
master | 192.168.75.100 |
slave01 | 192.168.75.101 |
slave02 | 192.168.75.103 |
虚拟网络编辑器
在集群搭建过程中需要保证每台虚拟机的IP地址固定,为此我们打开 VMware菜单栏-编辑-虚拟网络编辑器(需要将虚拟机关闭),移除原有网络,添加网络 VMnet8
,在VMnet模式
中,采用NAT模式
,并取消勾选“本地DHCP服务”。
需要注意的是此处的需要记住网关IP,比如我的是
192.168.75.2
,那么三台虚拟机的IP就可以为192.168.75.*
。
将每台虚拟机的网络适配器如图改为“自定义”,
VMnet8
:
在Settings-Network
添加 New profile, Name设置为ens33,IPv4 Method 设置为 Manual, 分别填入各自的IP地址(IP一定不能相同),子网掩码、网关和DNS。
本人DNS使用的是阿里的DNS解析服务器223.5.5.5
。
修改interface
终端输入
sudo vim /etc/network/interfaces
三台机器分别作修改如图,其中IP地址和网关需要用到上面虚拟网络编辑器中记下地址。
修改hosts
$ sudo vim /etc/hosts
配置如下:
127.0.0.1 localhost
192.168.1.104 master
192.168.1.107 slave01
192.168.1.108 slave02
输入sudo /etc/init.d/networking restart
重启网络。
此时可用ping
命令进行检查
ping master
ping slave01
ping slave02
ping www.baidu.com
3.配置ssh无密码登录本机和访问集群机器
在三台机器上分别使用如下命令:(以slave02为例)
sudo apt-get openssh-server
ssh-keygen -t rsa -P ""#此处需多次回车
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
#此时输入ssh slave02应该可以连接上
如图:
还需要让master主机免密码登录slave01和slave02主机。在master执行如下命令,将master的id_rsa.pub传送给两台slave主机。
scp ~/.ssh/id_rsa.pub master@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub master@slave02:/home/hadoop/
注:此处权限不够可先scp
到/tmp
目录下,在用cp
命令进行拷贝
如果master主机和slave01主机的用户名不一样,还需要在master修改~/.ssh/config文件,如果没有此文件,自己创建文件。
Host master
user ***
Host slave01
user ***
(为了实现三台机器ssh
的两两联通,可先将slave节点上的公钥发送到master,统一配置好后分发到各从节点)
4.JDK和Hadoop安装配置
配置Java JDK
由于官网下载速度过慢,我们使用华为的镜像:
https://repo.huaweicloud.com/java/jdk/8u202-b08/
分别在三台机器下,下载解压到/usr/local/java
目录下,并配置环境变量:
编辑/etc/profile,添加如下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
接着用source /etc/profile
更新设置。
安装Hadoop
先在master主机上做安装Hadoop,暂时不需要在slave01,slave02主机上安装Hadoop.稍后会把master配置好的Hadoop发送给slave01,slave02。
1.从hadoop的官网(http://www.apache.org/dyn/closer.cgi/hadoop/common)选择合适的版本下载(这里选择的是比较稳定的2.7.7)
2.解压之后将生成的文件夹名称改为hadoop(为了后期操作方便),移动到/usr/local/目录下面:
sudo tar -zxf ~/Downloads/hadoop-2.7.7.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R master ./hadoop # 修改文件权限
权限很重要!!!!
3.更改环境变量,/etc/profile文件中添加Hadoop的环境变量,如下:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
同样,用source /etc/profile
更新设置。
5.Hadoop集群配置
修改master主机修改Hadoop如下配置文件,这些配置文件都位于/usr/local/hadoop/etc/hadoop目录下。
1.修改slaves:
这里把DataNode的主机名写入该文件,每行一个。这里让master节点主机仅作为NameNode使用。
slave01
slave02
2.修改core-site.xml
hadoop.tmp.dir
file:/usr/local/hadoop/tmp
Abase for other temporary directories.
fs.defaultFS
hdfs://master:9000
3.修改hdfs-site.xml:
dfs.replication
3 #3这里指的集群下的节点的总数
4.修改mapred-site.xml(复制mapred-site.xml.template,再修改文件名)
mapreduce.framework.name
yarn
修改yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
master
!!!此处需要修改/etc/local/hadoop/etc/hadoop/hadoop-env.sh
因为不知什么原因hadoop无法解析系统的Java环境变量
必须手动配置,找到地方后修改为
export JAVA_HOME=/usr/java/jdk1.8.0_202
配置好后,将 master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 master 节点主机上执行:
cd /usr/local/
rm -rf ./hadoop/tmp # 删除临时文件
rm -rf ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop
cd ~
scp ./hadoop.master.tar.gz slave01:/home/hadoop
scp ./hadoop.master.tar.gz slave02:/home/hadoop
同样scp
的权限问题可以迂回解决。
在slave01
,slave02
节点上执行:
sudo rm -rf /usr/local/hadoop/
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R master /usr/local/hadoop
6.启动hadoop集群
在master主机上执行如下命令:
cd /usr/local/hadoop
bin/hdfs namenode -format
sbin/start-all.sh
运行后,在master,slave01,slave02运行jps命令,查看:
jps
master运行jps后,如下图:
slave01、slave02运行jps,如下图:
7.Spark安装
这里采用3台机器(节点)作为实例来演示如何搭建Spark集群,其中1台机器(节点)作为Master节点,另外两台机器(节点)作为Slave节点(即作为Worker节点),主机名分别为Slave01和Slave02。
从官网http://spark.apache.org/downloads.html(http://spark.apache.org/downloads.html选择user-provided Aoache Hadoop 版本
下载完成后,执行如下命令:
sudo tar -zxf ~/Downloads/spark-2.4.4-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.4.4-bin-without-hadoop/ ./spark
sudo chown -R hadoop ./spark
8.配置Spark环境变量
编辑/etc/profile
,添加如下配置
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
同样用source /etc/profile
使之生效。
9.Spark配置
在Master节点主机上进行如下操作:
- 配置slaves文件
将 slaves.template 拷贝到 slaves
cd /usr/local/spark/
cp ./conf/slaves.template ./conf/slaves
slaves文件设置Worker节点。编辑slaves内容,把默认内容localhost
替换成如下内容:
slave01
slave02
- 配置spark-env.sh文件
将 spark-env.sh.template 拷贝到 spark-env.sh
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
编辑spark-env.sh,添加如下内容:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=192.168.75.100
SPARK_MASTER_IP 指定 Spark 集群 Master 节点的 IP 地址;
配置好后,将Master主机上的/usr/local/spark文件夹复制到各个节点上。在Master主机上执行如下命令:
cd /usr/local/
tar -zcf ~/spark.master.tar.gz ./spark
cd ~
scp ./spark.master.tar.gz slave01:/home/hadoop
scp ./spark.master.tar.gz slave02:/home/hadoop
在slave01,slave02节点上分别执行下面同样的操作:
sudo rm -rf /usr/local/spark/
sudo tar -zxf ~/spark.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/spark
10.启动Spark集群
1.启动Spark集群前,要先启动Hadoop集群。在Master节点主机上运行如下命令:
cd /usr/local/hadoop/
sbin/start-all.sh
2.启动Master节点
在Master节点主机上运行如下命令:
cd /usr/local/spark/
sbin/start-master.sh
在Master节点上运行jps命令,可以看到多了个Master进程:
3.启动所有Slave节点
在Master节点主机上运行如下命令:
sbin/start-slaves.sh
11.关闭Spark集群
- 关闭Master节点
sbin/stop-master.sh
关闭Worker节点
sbin/stop-slaves.sh
- 关闭Hadoop集群
cd /usr/local/hadoop/
sbin/stop-all.sh