Hadoop 集群环境搭建(Docker)
实验环境
- 系统环境:CentOS Linux release 7.6.1810 (Core)
- JDK 版本:jdk1.8.0_291
- Hadoop 版本:hadoop-3.3.1
实验步骤
1.安装 Docker
安装工具包,缺少这些依赖将无法完成
yum install -y yum-utils
设置远程仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker
yum install docker-ce
启动 Docker
systemctl start docker
查看版本
docker version
2.Docker 部署 CentOS
拉取镜像
docker pull centos
查看镜像
docker images
设置docker网桥,用于分配固定 IP
docker network create --subnet=172.15.0.0/16 netgroup
创建容器
- --name 容器名称
- -h 容器主机名
- --net 设置网桥
--ip 指定容器IP
# master docker run --privileged -itd -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-master -h cluster-master --net netgroup --ip 172.15.0.2 centos /usr/sbin/init # slave1 docker run --privileged -itd -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave1 -h cluster-slave1 --net netgroup --ip 172.15.0.3 centos /usr/sbin/init # slave2 docker run --privileged -itd -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave2 -h cluster-slave2 --net netgroup --ip 172.15.0.4 centos /usr/sbin/init
查看运行中的容器
docker ps
3.配置节点 ssh 免密
分别进入进入容器(宿主机操作)
docker exec -it cluster-master bash
docker exec -it cluster-slave1 bash
docker exec -it cluster-slave2 bash
安装 OpenSSH(每个节点均要操作)
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
设置用户密码(每个节点均要操作)
yum install -y passwd
passwd root
生成密钥(每个节点均要操作)
ssh-keygen -t rsa
配置hosts文件(每个节点和宿主机均要操作)
# 安装VIM编辑工具
yum install -y vim
vim /etc/hosts
追加以下内容(每个节点和宿主机均要操作)
172.15.0.2 cluster-master
172.15.0.3 cluster-slave1
172.15.0.4 cluster-slave2
公钥分发(每个节点均要操作)
ssh-copy-id -f -i ~/.ssh/id_rsa.pub cluster-master
ssh-copy-id -f -i ~/.ssh/id_rsa.pub cluster-slave1
ssh-copy-id -f -i ~/.ssh/id_rsa.pub cluster-slave2
测试免密登录(每个节点均要操作)
ssh cluster-master
ssh cluster-slave1
ssh cluster-slave2
4.节点安装 Java 及 Hadoop
创建解压目录(每个节点均要操作)
mkdir /opt/jdk
mkdir /opt/hadoop
发送文件到容器(宿主机操作)
docker cp jdk-8u291-linux-x64.tar.gz cluster-master:/opt/jdk
docker cp jdk-8u291-linux-x64.tar.gz cluster-slave1:/opt/jdk
docker cp jdk-8u291-linux-x64.tar.gz cluster-slave2:/opt/jdk
# hadoop 只需发送到主节点,配置完后再拷贝至从节点
docker cp hadoop-3.3.1.tar.gz cluster-master:/opt/hadoop
解压文件(每个节点均要操作)
tar -zxvf jdk-8u291-linux-x64.tar.gz
tar -zxvf hadoop-3.3.1.tar.gz
配置环境变量(每个节点均要操作)
vim /etc/profile
追加以下内容(每个节点均要操作)
export JAVA_HOME=/opt/jdk/jdk1.8.0_291
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_HOME=/opt/hadoop/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使环境变量立即生效(每个节点均要操作)
source /etc/profile
验证 java 安装(每个节点均要操作)
java -version
5. 修改 Hadoop 配置
创建 hadoop 文件目录(每个节点均要操作)
# hadoop 临时文件目录
mkdir -p /home/hadoop/tmp
# hadoop 主节点(namenode)文件目录
mkdir -p /home/hadoop/hdfs/name
# hadoop 数据节点(datanode)文件目录
mkdir -p /home/hadoop/hdfs/data
进入 cluster-master 的 ${HADOOP_HOME}/etc/hadoop 目录下,修改配置文件
hadoop-env.sh(指定JDK的安装位置及启动用户)
export JAVA_HOME=/opt/jdk/jdk1.8.0_291/ 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
core-site.xml(指定 namenode 的 hdfs 协议文件系统的通信地址、存储临时文件的目录)
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://cluster-master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> </property> </configuration>
hdfs-site.xml(设置 namenode 节点数据的存放位置、datanode 节点数据的存放位置)
<property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/hdfs/data</value> </property>
yarn-site.xml(配置 NodeManager 上运行的附属服务及 resourcemanager 的主机名)
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>cluster-master</value> </property> </configuration>
mapred-site.xml(指定 mapreduce 作业运行在 yarn 上)
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> </configuration>
workers(配置所有从属节点的主机名,每行一个)
cluster-master cluster-slave1 cluster-slave2
分发程序(将 Hadoop 安装包分发到其他两台服务器)(主节点操作)
scp -r /opt/hadoop/hadoop-3.3.1 cluster-slave1:/opt/hadoop/
scp -r /opt/hadoop/hadoop-3.3.1 cluster-slave2:/opt/hadoop/
6.启动集群
初始化 cluster-master 的 namenode(主节点操作)
进入 ${HADOOP_HOME}/bin/ 目录下,执行以下命令格式化 hadoop 文件系统:
./hdfs namenode -format
启动集群(主节点操作)
进入到 cluster-master 的 ${HADOOP_HOME}/sbin 目录下,启动 Hadoop:
# 启动dfs服务
./start-dfs.sh
# 启动yarn服务
./start-yarn.sh
此时 cluster-slave1 和 cluster-slave2 上的相关服务也会被启动
7.查看集群
在每台服务器上使用 jps 命令查看服务进程
查看 Namenode Web-UI,端口为 9870
查看 YARN Web-UI,端口号为 8088