-
启动一台虚拟机 centos7
-
安装好yum源
-
先下载一个centos7镜像作为基础镜像
docker pull docker.io/ansible/centos7-ansible
-
运行该镜像
docker run -tid --name hadoop_cluster_1 --privileged=true -t docker.io/ansible/centos7-ansible /usr/sbin/init
-
进入该镜像
docker ps -a docker exec -it 1e476c9b81ab /bin/bash
-
修改容器密码:
passwd 123456 123456
-
yum安装一些基础软件
yum -y install vim wget screen openssh-server openssh-clients ifconfig ip initscripts tcping
-
修改完成后验证一下
systemctl restart sshd.service ssh 127.0.0.1
-
安装jdk
yum -y install java-11-openjdk yum -y install java-11-openjdk-devel
-
ssh免密登录
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
-
用ssh验证一下
ssh 127.0.0.1
-
增加hadoop用户
useradd hadoop passwd hadoop
-
下载hadoop安装包,上传到宿主机
wget https://archive.apache.org/dist/hadoop/core/hadoop-2.9.1/hadoop-2.9.1.tar.gz
-
将安装包上传到容器中
docker ps -a docker cp /opt/install/hadoop-2.9.1.tar.gz ecef8319d2c8:/opt/install
-
进入容器
docker exec -it 7893fe714427 /bin/bash
-
进入/usr/local文件夹创建一个hadoop文件夹,将下载好的hadoop-2.7.3.tar.gz解压,复制到hadoop文件加下
cd /opt/install/ tar -zxvf hadoop-2.9.1.tar.gz -C ./ cd /usr/local/ mkdir hadoop cp -r /opt/install/hadoop-2.9.1 hadoop/
-
配置hadoop环境变量
vim /etc/profile JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/ JRE_HOME=/usr/lib/jvm/jre-11-openjdk-11.0.7.10-4.el7_8.x86_64/ HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME PATH
-
加载环境变量,使配置生效
source /etc/profile
-
执行hadoop命令确认可以使用
hdfs dfs -ls /
-
hadoop环境变量配置成功之后,需要进入到hadoop_home同级目录下为hadoop创建几个工作目录。
cd /usr/local/hadoop/ mkdir tmp mkdir -p hdfs/name mkdir hdfs/data
-
修改相关配置文件
cd /usr/local/hadoop/hadoop-2.9.1/etc/hadoop # 修改hadoop-env.sh,指定JAVA_HOME vim hadoop-env.sh export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/ # 修改yarn-env.sh,重新指定JAVA_HOME vim yarn-env.sh export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/ # 修改core-site.xml vim core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> </configuration> # 修改hdfs-site.xml vim hdfs-site.xml <configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> <description>副本个数(每个本分割的文件会存储在几台datanode上,默认是3),这个数量应该小于datanode机器数</description> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration> # 修改mapred-site.xml cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>mapreduce's framework is yarm</description> </property> </configuration> # 修改yarn-site.xml vim yarn-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> <description>yarn resourcemanager hostname is master</description> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <description>just mapreduce_shuffle can run MapReduce</description> </property> </configuration> # 修改slaves,添加datanode的hostname vim slaves node01 node02 node03
-
安装hive
-
使用默认的derby作为元数据库
-
下载安装包
https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz
-
将安装包上传到宿主机上,并且拷贝到容器中
# 退出容器后执行 docker cp apache-hive-2.3.7-bin.tar.gz 412b869263bf:/opt/install
-
进入容器解压安装包
tar -zxvf apache-hive-2.3.7-bin.tar.gz -C ./
-
将解压好的目录拷贝到/usr/local/hadoop
cd /usr/local/hadoop cp -r /opt/install/apache-hive-2.3.7-bin ./
-
删除安装包和多余目录
rm -rf /opt/install/*
-
修改配置文件
cp /usr/local/hadoop/apache-hive-2.3.7-bin/conf/hive-default.xml.template /usr/local/hadoop/apache-hive-2.3.7-bin/conf/hive-site.xml cd /usr/local/hadoop/apache-hive-2.3.7-bin/conf mkdir -p /usr/local/hadoop/hive/java vim hive-site.xml # 在最前面加上这些配置: <property> <name>system:java.io.tmpdir</name> <value>/usr/local/hadoop/hive/java</value> </property> <property> <name>system:user.name</name> <value>${user.name}</value> </property> # hive.metastore.schema.verification改为false
-
配置环境变量
vim /etc/profile # 在文本最后加上 export HIVE_HOME="/usr/local/hadoop/apache-hive-2.3.7-bin" # 设置PATH变量 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
-
加载环境变量
source /etc/profile
-
初始化hive数据库
schematool -initSchema -dbType derby
-
初始化成功标志:
Initialization script completed schemaTool completed
-
后台启动metastore服务
hive --service metastore &
-
-
安装完基础环境后,可以将镜像保存成一个新的镜像
# 退出容器后执行 docker commit hadoop_cluster_1 tfws/hadoop-baseenv:v1.2
-
通过如下命令查看容器是否保存为一个新的镜像了
docker image ls
-
创建master节点,即namenode节点
docker run -tid --name hadoop-master -p 50010:50010 -p 50020:50020 -p 50070:50070 -p 50075:50075 -p 50090:50090 -p 8020:8020 -p 9000:9000 -p 10020:10020 -p 8030:8030 -p 19888:19888 -p 8031:8031 -p 8032:8032 -p 8033:8033 -p 8040:8040 -p 8042:8042 -p 8088:8088 -p 49707:49707 -p 2122:2122 -p 9083:9083 -p 10000:10000 -p 7077:7077 -p 8080:8080 -v /opt/install:/opt/install -h master tfws/hadoop-baseenv:v1.2 /usr/sbin/init
-
创建node01节点,即datanode节点
docker run -tid --name hadoop-node01 -p 50010 -p 50020 -p 50070 -p 50075 -p 50090 -p 8020 -p 9000 -p 10020 -p 8030 -p 19888 -p 8031 -p 8032 -p 8033 -p 8040 -p 8042 -p 8088 -p 49707 -p 2122 -p 9083 -p 10000 -p 7077 -p 8080 -v /opt/install:/opt/install -h node01 tfws/hadoop-baseenv:v1.2 /usr/sbin/init
-
创建node02节点,即datanode节点
docker run -tid --name hadoop-node02 -p 50010 -p 50020 -p 50070 -p 50075 -p 50090 -p 8020 -p 9000 -p 10020 -p 8030 -p 19888 -p 8031 -p 8032 -p 8033 -p 8040 -p 8042 -p 8088 -p 49707 -p 2122 -p 2122 -p 9083 -p 10000 -p 7077 -p 8080 -v /opt/install:/opt/install -h node02 tfws/hadoop-baseenv:v1.2 /usr/sbin/init
-
创建node03节点,即datanode节点
docker run -tid --name hadoop-node03 -p 50010 -p 50020 -p 50070 -p 50075 -p 50090 -p 8020 -p 9000 -p 10020 -p 8030 -p 19888 -p 8031 -p 8032 -p 8033 -p 8040 -p 8042 -p 8088 -p 49707 -p 2122 -p 2122 -p 9083 -p 10000 -p 7077 -p 8080 -v /opt/install:/opt/install -h node03 tfws/hadoop-baseenv:v1.2 /usr/sbin/init
-
依次进入四个容器,配置ip映射
docker exec -it hadoop-master /bin/bash docker exec -it hadoop-node01 /bin/bash docker exec -it hadoop-node02 /bin/bash docker exec -it hadoop-node03 /bin/bash vim /etc/hosts 172.17.0.2 mysql_server 172.17.0.3 master 172.17.0.4 node01 172.17.0.5 node02 172.17.0.6 node03
-
如果重启了容器,需要对容器重新source环境变量
-
检查ssh服务是否启动了,如果没有启动,需要启动起来
systemctl status sshd systemctl restart sshd
-
完成以上操作后在master上执行
start-all.sh
启动hadoop# 第一次启动时,需要格式化 hadoop namenode -format bash /usr/local/hadoop/hadoop-2.9.1/sbin/start-all.sh
-
启动失败?
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
-
解决办法,在master节点ssh每个node之后就可以了,需要每两个节点之间都互相登录一遍
-
基础镜像可能少安装的rpm
ntpd java-11-openjdk-devel 基础镜像时间改为CST的
-
到每个容器上使用jps,确认有如下进程
[root@master sbin]# jps 465 NameNode 844 ResourceManager 1118 Jps 671 SecondaryNameNode [root@node01 logs]# jps 401 NodeManager 282 DataNode 524 Jps [root@node02 logs]# jps 516 Jps 277 DataNode 391 NodeManager [root@node03 logs]# jps 482 Jps 244 DataNode 358 NodeManager
通过docker搭建hadoop集群
最新推荐文章于 2024-05-12 10:03:23 发布