准备工作
- 服务器资源:三台服务器节点,配置均为4核8G,500G硬盘。
- 操作系统:Ubuntu 16.04
- Hadoop安装包:hadoop-2.6.0-cdh5.13.0.tar.gz (hadoop-cdh5官方下载链接)
- Spark安装包:spark-2.2.0-bin-hadoop2.6.tgz (Spark官网下载链接)
- JDK安装包:jdk-8u144-linux-x64.tar.gz
服务器相关设置
三台服务器节点,采用一主二从的模式,需要修改主机名并建立服务器间的 ssh 通信便于各服务器间免密访问以及 scp 命令分发文件。
host相关设置
执行vi /etc/hostname
修改主机名,主节点命名为master,从节点命名为slave01和slave02,执行reboot
重启服务器生效。
三台服务器都修改/etc/hosts
文件,IP地址为内网IP。
1 | 192.168.10.6 master |
配置ssh免密通信
普通用户登录后,执行sudo passwd root
修改root密码,su root
切换为root用户。
修改 ssh 配置文件 /etc/ssh/sshd_config
,允许root登录。
1 | PermitRootLogin yes |
在/root
目录下执行如下命令,生成.ssh
文件夹和公钥私钥。
1 | ssh-keygen -t rsa |
将三台服务器以及客户端主机的公钥复制到三台服务器的/root/.ssh/authorized_keys
文件中。并重启ssh服务。
1 | service sshd restart |
现在已完成了服务器间 ssh 免密通信的功能,可以通过 scp 命令将文件从客户端主机分发到各个服务器,以及从主节点服务器分发到从节点服务器。scp 命令使用格式如下:
1 | scp ~/Downloads/jdk-8u144-linux-x64.tar.gz root@master:/opt |
接下来按照步骤依次安装 JDK、Hadoop和Spark。均安装在 /opt
目录下,并分别命名为 jdk8、hadoop、spark。
安装软件包
将下载好的 JDK、Hadoop和Spark 的软件安装包分发到主节点的/opt
路径下,解压并改名。
1 | tar -xzvf jdk-8u144-linux-x64.tar.gz |
同理,解压hadoop和spark压缩包至 /opt
路径下,改名为hadoop和spark,然后将整个 /opt
文件夹从主节点分发给从节点。
配置环境变量
修改服务器环境变量配置文件 /etc/profile
。
1 | export JAVA_HOME=/opt/jdk8 |
可以直接将修改后的配置文件分发给从节点。
1 | scp /etc/profile root@slave01:/etc/profile |
三台服务器都需执行 source /etc/profile
命令,使配置文件生效。
配置Hadoop
Hadoop支持为所有主从节点采用同一套配置文件,除非新机器的硬件规格与现有机器不同时,需要一套新的配置文件以充分利用新硬件的额外资源。官网配置文档
- HDFS(Hadoop分布式文件系统):启动HDFS时主节点启动NameNode,负责管理namespace、控制客户端访问。从节点启动DataNode,提供存储和客户端读写操作。
- Hadoop YARN(资源管理系统):用于改善MapReduce的实现,启动Yarn时主节点启动ResourceManager,用于调度、分发资源。从节点启动NodeManager,用于启动、监控运行应用程序的容器。
cd /opt/hadoop/etc/hadoop
,前往hadoop配置文件目录。
vi hadoop-env.sh
,修改运行hadoop时的环境变量。
1 | export JAVA_HOME=/opt/jdk8 |
vi core-site.xml
,该属性描述了HDFS文件系统的URI,默认端口是8020。
1 | <configuration> |
vi hdfs-site.xml
,Hadoop守护进程配置,包括Namenode、辅助NameNode和DataNode等。
1 | <configuration> |
分别配置了namenode存储永久性文件系统元数据的目录、datanode存储数据块目录、辅助namenode存储文件系统的检查点目录。均可冗余备份,逗号隔开。
vi yarn-site.xml
,Yarn守护进程的配置项,包括资源管理器、web应用代理服务器和节点管理器。
1 | <configuration> |
vi slaves
,在该文件中列出所有从节点的主机名或IP。
1 | slave01 |
配置Spark
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。它并没有以MapReduce作为执行引擎,而是使用的自己的分布式运行环境在集群上执行工作。Spark与Hadoop紧密集成,可以在Yarn上运行并支持HDFS。
cd /opt/spark/conf
前往Spark配置文件目录。
拷贝模版文件。
1 | cp spark-env.sh.template spark-env.sh |
vi slaves
添加从节点。
1 | slave01 |
vi spark-env.sh
,配置spark启动环境脚本。
1 | export JAVA_HOME=/opt/jdk8 |
vi spark-defaults.conf
。
1 | spark.master spark://master:7077 |
启动和测试
以下操作均在主节点下完成,主节点会启动从节点的相关程序。
在/root
目录下新建存储文件夹,目录结构如下。
1 | . |
分发给从节点。
1 | scp -r hdfs/ root@slave01:/root/ |
现在JDK、Hadoop和Spark均已安装配置完成,将/opt
文件夹分发给从节点。
1 | scp -r /opt root@slave01:/ |
启动hadoop
执行ufw disable
关闭防火墙。
初始化文件系统
1 | hdfs namenode -format |
启动Hadoop集群(该命令其实是包含了start-dfs.sh
和start-yarn.sh
两个命令)。
1 | start-all.sh |
在各节点上执行jps
查看启动情况,日志文件在/opt/hadoop/logs
目录下。
在本地浏览器上访问{IP}:/50070
查看hdfs的WebUI(50070为默认端口);访问{IP}:/10000
查看ResourceManager的WebUI。
启动Spark
启动Spark集群。
1 | /opt/spark/sbin/start-all.sh |
各节点执行jps
可以看到主节点启动了Master程序,从节点启动了Worker程序。
可以在本地浏览器上访问{IP}:8080
验证Spark已启动