1 引子
因兼具
跨平台兼容性优
、资源消耗少
、自动化程度高
、运行稳定
、环境隔离
等优点,Docker大受欢迎,在应用打包、分发、部署、开源分享方面得到广泛应用。其实Docker在本地快速安装试用及学习方面也有独具天赋,本文以基于Docker搭建Hadoop大数据集群环境展开说明,给需要在本地PC学习大数据的小伙伴参考。
抛开底层的虚拟化技术对比不谈,选择Docker而非VMWare最直接的原因是方便快捷且占用资源少
,对于本地终端资源及性能本就不富裕的我来说,Docker更划算
;同时因为一些个人原因,近期正好在“复习”大数据相关知识,同时也在拓展Docker相关技术应用,所谓最好的学习就是应用,一举两得。
此为开篇,往后可能会有免费的系列指南或者操作手册,具体看个人时间及是否有小伙伴真的需要,例如Docker从入门到精通再到放弃
、基于VMWare搭建Hadoop大数据集群
、大数据核心技术应用
、Hadoop集群优化
、实时计算
、离线计算
等,如有需要可以互动留言。
2 环境及前置条件
Docker Desktop安装及基础不在此次讨论范畴,这里就不展开说明了
- 系统环境:win10
- 软件环境:
- VSCode
- Docker Desktop
C:Usersczy>docker version
Client:
Cloud integration: v1.0.35
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:53:15 2023
OS/Arch: windows/amd64
Context: default
Server: Docker Desktop 4.21.1 (114176)
Engine:
Version: 24.0.2
API version: 1.43 (minimum version 1.12)
Go version: go1.20.4
Git commit: 659604f
Built: Thu May 25 21:52:17 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
3 操作流程
3.0 资源下载及gitee
- 资源链接:pan.baidu.com/s/1zlVgXiE0… 提取码:7orl
- gitee:gitee.com/cy4010/hado…
3.1 核心软件版本
CentOS7.5,镜像Tag:7.5.1804
Hadoop-3.1.3
jdk-8u212 Java1.8
3.2 Hadoop集群规划
类型 | hadoop102 | hadoop103 | hadoop104 |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
3.3 使用Dockerfile完成基础系统镜像构建
新建bigdata
文件夹,使用VScode打开bigdata
,bigdata
为基于Docker搭建Hadoop大数据集群的项目根目录,目录结构如下
bigdata
├─app // volumns挂载目录,集群数据存放就日志存放
│ ├─dfs
│ │ ├─hadoop102
│ │ ├─hadoop103
│ │ └─hadoop104
│ └─logs
│ ├─hadoop102
│ ├─hadoop103
│ └─hadoop104
├─code // 存放集群需要用到的分装好的代码
├─conf // 存放集群配置文件,default为模板配置文件
│ └─default
└─lib // 存放集群需要用到的软件包、安装包
3.3.1 conf目录准备hadoop集群核心配置文件
core-default.xml-->common类之类的配置
hdfs-default.xml-->文件存储相关
yarn-default.xml-->资源调度相关
mapred-default.xml-->MR计算相关
- core-site.xml(为精简不必要的注释已删除)
common核心配置
fs.defaultFS
hdfs://hadoop102:8020
hadoop.tmp.dir
/app/hdfs
- hdfs-site.xml(为精简不必要的注释已删除)
文件存储相关配置
dfs.namenode.http-address
hadoop102:9870
dfs.namenode.secondary.http-address
hadoop104:9868
- yarn-site.xml(为精简不必要的注释已删除)
资源调度相关配置
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
Environment variables that containers may override rather than use NodeManager's default.
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
- mapred-site.xml(为精简不必要的注释已删除)
MR相关配置
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoop102:10020
MapReduce JobHistory Server IPC host:port
mapreduce.jobhistory.webapp.address
hadoop102:19888
MapReduce JobHistory Server Web UI host:port
- workers
集群节点配置,旧版本文件名为slaves,由于众所周知的和谐原因,新版本文件名变为workers
注意:节点间需要换行;节点不要出现任何空格tab符换行符等,否则可能会有报错
hadoop102
hadoop103
hadoop104
3.3.2 lib目录准备hadoop集群依赖的软件包
bigdata
├─lib
│ ├─hadoop-3.1.3.tar.gz
│ └─jdk-8u212-linux-x64.tar.gz
3.3.3 项目根目录编写Dockerfile文件
dockerfile可以理解为自定义镜像的规则约束,由一系列Docker指令构成,Docker指令就不详细介绍了,有兴趣详询官网,此处简要交代下Dockerfile
做了哪些事情
FROM centos:7.5.1804
指定镜像源,镜像源获取方法https://hub.docker.com/
搜索centos
镜像
- 查找合适
Tag
的centos镜像
LABEL maintainer="bigdata"
明确标的维护者USER root
指明使用root用户RUN yum -y install wget sudo...(省略部分自行关联)...RUN yum makecache
更新yum镜像源RUN tar -zxvf ${JAVA_HOME}/${JAVA_TAR_NAME} --strip-components 1 -C /usr/java && ...(省略部分自行关联)...ln -s $JAVA_HOME/bin/java /bin/java
解压java包并配置环境变量,--strip-components 1
的好处是不携带解压后的根目录,这样目录结构会简洁一些RUN tar -zxvf ${HADOOP_HOME}/${HADOOP_TAR_NAME} --strip-components 1 -C /app/hadoop && ...(省略部分自行关联)...source /etc/profile
解压hadoop包并配置环境变量- 给
root
增加了密码,同时新建bigdata
用户并设置了密码,后续集群主要由bigdata
用户维护及管理 RUN echo $TZ > /etc/timezone
设置时区EXPOSE 9870...EXPOSE 22
对外暴露必要的端口如22端口
FROM centos:7.5.1804
LABEL maintainer="bigdata"
LABEL description="hadoop cluster docker"
USER root
ENV TZ=Asia/Shanghai
ARG HADOOP_TARBALL=./lib/hadoop-3.1.3.tar.gz
ARG HADOOP_TAR_NAME=hadoop-3.1.3.tar.gz
ARG JAVA_TARBALL=./lib/jdk-8u212-linux-x64.tar.gz
ARG JAVA_TAR_NAME=jdk-8u212-linux-x64.tar.gz
ENV HADOOP_HOME /app/hadoop
ENV JAVA_HOME /usr/java
RUN yum -y install wget sudo
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all
RUN yum makecache
COPY ${JAVA_TARBALL} ${JAVA_HOME}/${JAVA_TAR_NAME}
COPY ${HADOOP_TARBALL} ${HADOOP_HOME}/${HADOOP_TAR_NAME}
RUN touch /etc/profile.d/my_env.sh
# 设置JAVA8环境变量
RUN tar -zxvf ${JAVA_HOME}/${JAVA_TAR_NAME} --strip-components 1 -C /usr/java &&
rm ${JAVA_HOME}/${JAVA_TAR_NAME} &&
echo export JAVA_HOME=${JAVA_HOME} >> /etc/profile.d/my_env.sh &&
echo export PATH=$PATH:$JAVA_HOME/bin >> /etc/profile.d/my_env.sh &&
source /etc/profile &&
ln -s $JAVA_HOME/bin/java /bin/java
# 设置Hadoop环境变量
RUN tar -zxvf ${HADOOP_HOME}/${HADOOP_TAR_NAME} --strip-components 1 -C /app/hadoop &&
rm ${HADOOP_HOME}/${HADOOP_TAR_NAME} &&
echo export HADOOP_HOME=${HADOOP_HOME} >> /etc/profile.d/my_env.sh &&
echo export PATH=$PATH:$HADOOP_HOME/bin >> /etc/profile.d/my_env.sh &&
echo export PATH=$PATH:$HADOOP_HOME/sbin >> /etc/profile.d/my_env.sh &&
source /etc/profile
# 拷贝hadoop配置文件
COPY ./conf/hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml
COPY ./conf/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml
COPY ./conf/mapred-site.xml $HADOOP_HOME/etc/hadoop/mapred-site.xml
COPY ./conf/yarn-site.xml $HADOOP_HOME/etc/hadoop/yarn-site.xml
COPY ./conf/workers $HADOOP_HOME/etc/hadoop/workers
RUN yum update -y
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y openssh-clients
RUN yum install rsync -y sudo
RUN yum -y install ntp sudo
RUN yum -y install net-tools sudo
RUN yum install vim -y sudo
RUN yum install dos2unix -y sudo
RUN echo "root:a123456" | chpasswd
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN echo $TZ > /etc/timezone
RUN systemctl enable ntpd
RUN systemctl enable sshd
RUN mkdir /var/run/sshd
RUN useradd bigdata
RUN echo "bigdata:a123456" | chpasswd
RUN echo "bigdata ALL=(ALL) ALL" >> /etc/sudoers
EXPOSE 9870
EXPOSE 9868
EXPOSE 8020
EXPOSE 8088
EXPOSE 19888
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
3.3.4 构建集群所需的基础镜像
在
bigdata
目录下执行docker build -t hadoop .
,镜像名称为hadoop,Tag默认为lastest
,可以按需打Tag例如hadoop:7.5
3.3.4.1 镜像查询
+ 命令行查询:`docker images`
+ Docker Desktop 桌面工具查询
3.3.4.2 容器运行
- 命令行执行
docker run -d -p 50088:22 --name hadoop-demo hadoop:latest
,-d
表示后台运行,-p
指明外部IP与容器内部IP映射关系,--name
指明运行容器名称,hadoop:latest
配置依赖镜像(也就是上文构建的镜像) - 继续执行
docker ps
查找运行容器
3.3.4.3 远程连接
- xshell工具建立连接,按照实际情况输入账号密码即可,因为Docker默认桥连,所以通过
localhost
或者127.0.0.1
+映射的外部端口50088
可以实现连接
- 命令行执行
java -version
,看到版本信息即可 - 命令行执行
hadoop version
,看到版本信息即可
3.3.5 基于docker-compose.yml构建hadoop集群容器
3.3.5.1 docker-compose极简说明
容器间共享网络实现通讯需要指定网络,如果容器太多一一指定非常麻烦,
docker-compose
在构建之初就可以指定网络,一次配置“终生”有效,省去了很多麻烦。当然docker-compose
还有容器资源统一管理等诸多优点。注意:Docker Desktop 自带docker-compose,无需额外安装,其他环境可能需要单独装下
3.3.5.2 项目根目录编写docker-compose.yml
指令本身不是本文重点,这里重点说明下重要配置的含义及注意事项:
- 根据集群规划,集群有
hadoop102、hadoop103、hadoop104
3个节点,因而配置了对应三个名称对应的子服务(子容器),在container_name
、hostname
也有体现 image
指定上文中构建的基础镜像hadoop
ports
:根据xml
配置及集群规划,不同的节点对外暴露不同的端口networks
:集群节点设定统一的网络,driver: bridge
桥连的好处这里就不过多说明了volumes
::
前面是本地磁盘路径,:
后面是容器内部路径,/app/hdfs
是配置的HDFS路径,/app/hadoop/logs
是默认的日志路径。容器内部目录挂载的外部磁盘路径,挂载磁盘目录的好处是即使容器重启、关停或者异常避免出现数据丢失的情况,也方便后续可能需要的数据迁移
version: '3'
services:
hadoop102:
image: hadoop
container_name: hadoop102
hostname: hadoop102
restart: always
ports:
- "8020:8020"
- "9870:9870"
- "19888:19888"
- "10020:10020"
- "50022:22"
volumes:
- ./app/dfs/hadoop102:/app/hdfs
- /app/logs/hadoop102:/app/hadoop/logs
networks:
- hd_net
hadoop103:
image: hadoop
container_name: hadoop103
hostname: hadoop103
restart: always
ports:
- "8088:8088"
- "50023:22"
volumes:
- ./app/dfs/hadoop103:/app/hdfs
- ./app/logs/hadoop103:/app/hadoop/logs
networks:
- hd_net
hadoop104:
image: hadoop
container_name: hadoop104
hostname: hadoop104
restart: always
ports:
- "9868:9868"
- "50024:22"
volumes:
- ./app/dfs/hadoop104:/app/hdfs
- ./app/logs/hadoop104:/app/hadoop/logs
networks:
- hd_net
networks:
hd_net:
driver: bridge
3.3.5.3 启动集群容器
-
根目录执行
docker-compose up -d
拉取镜像并启动hadoop集群容器up
字如其意-d
后台运行
-
hadoop集群容器验证
- 命令行查询:
docker ps -a
- Docker Desktop 桌面工具查询
- 命令行查询:
- 集群网络查询:
docker network inspect bigdata_hd_net
,高能预警,此处有坑:在docker-compose.yml
中networks
明明是hd_net
,查询却要填入bigdata_hd_net
,因为配置容器默认会加上维护者信息。正常会看到如下信息,信息用途后面会详解,目前只需要知道IPv4Address
很重要即可,此处先放1个彩蛋:
[
{
"Name": "bigdata_hd_net",
"Id": "08f31c1480b1091abf8c54733bc06b863719767d760b0a915ca17ee336eba4f0",
"Created": "2023-07-15T08:50:26.4258148Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"167d7bc3ef7d62ddf2f7e667cd8dbccadac8f7a1d41cb24ba96c245b10c3985b": {
"Name": "hadoop102",
"EndpointID": "7bfb05681c5ace1408507d27e201a91d6aee964d44a3da92222fb457c4eca4d0",
"MacAddress": "02:42:ac:13:00:04",
"IPv4Address": "172.19.0.4/16",
"IPv6Address": ""
},
"ab0f83bd3a26d199a3ee0f57a39e85566aa7c5b53b75e4fb34c9b9a70a511491": {
"Name": "hadoop103",
"EndpointID": "9673a4caee01ea46481d00cf0638cbd856d0be1f038bfcb6085737c424ef319a",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"dfe4a5e24784ca0be76c018e23b860095cf7d87bef0972167f66400a8b532edd": {
"Name": "hadoop104",
"EndpointID": "2e240d6569875c5aca09fa315ec8a4ea67227349c3b3e4addaed720f03a72040",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "hd_net",
"com.docker.compose.project": "bigdata",
"com.docker.compose.version": "2.19.1"
}
}
]
3.3.5.4 xshell连接真正的集群节点
- 端口映射说明(不知道怎么来的可以往上翻,查看docker-compose.yml配置文件)
- hadoop102内部
22
端口映射的外部端口为50022
- hadoop103内部
22
端口映射的外部端口为50023
- hadoop103内部
22
端口映射的外部端口为50024
- hadoop102内部
- 为统一规范,建议登录
bigdata
用户(不知道怎么来的可以往上翻,查看Dockerfile配置文件)- 账号及密码:bigdata:a123456
3.3.6 集群节点基础配置
xshell或者CRT连接hadoop102、hadoop103、hadoop104登录bigdata用户进行配置
3.3.6.1 修改/etc/hosts文件
- 进入
hadoop102
su root
vim /etc/hosts
,增加hadoop103、hadoop104 IP映射,ip信息在上文中通过docker network inspect bigdata_hd_net
查询每台子容器IPv4Address
,前面说的彩蛋在这里成功释出啦~:
172.19.0.4 hadoop102
172.19.0.3 hadoop103
172.19.0.2 hadoop104
- 参照如上流程,逐一进入
hadoop103
、hadoop104
修改/etc/hosts
文件
3.3.6.2 修改vim配置文件
vim默认配置中文会乱码,配置是为了方便后续操作,如不需要,可以跳过
- 进入
hadoop102
su root
vim /etc/vimrc
,增加如下配置(此处有坑:注意windows环境下换行符与linux不同,切忌windows环境编写好直接复制,转换后复制或者直接源文件编写):
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
- 参照如上流程,逐一进入
hadoop103
、hadoop104
修改/etc/vimrc
文件
3.3.6.3 修改/tmp属性
hadoop集群启动过程可能会生成临时文件,因为集群规划是需要
bigdata
用户管理集群,可能会有权限问题,提早解决比较妥当
- 进入
hadoop102
su root
chmod 777 /tmp
- 参照如上流程,逐一进入
hadoop103
、hadoop104
操作chmod 777 /tmp
3.3.6.4 修改/app/hadoop
、/app/hdfs
所属用户及属组
为什么要这样多此一举?此处是自己挖坑自己填坑,Dockerfile在构建基础镜像的时候,使用的
USER
是root
,显然/app/hadoop属于root:root
,但是根据hadoop集群规划默认交由bigdata
用户管理,权限上有冲突,后续可能会报错。
/app/hadoop
是集群安装目录,集群启动后日志/app/hadoop/logs
/app/hdfs
是基础镜像中配置的hdfs路径
- 进入
hadoop102
su root
cd /app
chown -R bigdata:bigdata hadoop
chown -R bigdata:bigdata hdfs
- 参照如上流程,逐一进入
hadoop103
、hadoop104
操作用户及属组变更
3.3.6.5 设置集群节点间免密登录
免密登录按照提示输入对应的密码即可,只需实现bigdata用户免密登录
bigdata用户
登录hadoop102
ssh-keygen -t rsa
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
- 参照如上流程,逐一进入
hadoop103
、hadoop104
实现到每个节点的免密登录即可
3.3.6.6 集群初始化
bigdata用户
登录hadoop102
cd /app/hadoop/bin/
hdfs namenode -format
- 操作完成后,集群节点
/app/hadoop
会自动创建logs
文件夹,至此,集群基础配置完成
3.3.6.7 集群数据同步代码封装
scp
适合首次初始化同步(全量同步),sync
适合增量同步(增量同步效率更高,会自动忽略没有变化的),xsync
是对sync
的封装,为后续偷懒做好充分准备
bigdata用户
登录hadoop102
cd /home/bigdata/bin
vim xsync
#!/bin/bash
# 判断参数个数 不合规则退出
if [ $# -lt 1 ]
then
echo Not Enough Args!
exit;
fi
# 遍历主机
for host in hadoop102 hadoop103 hadoop104
do
echo =========== $host ===========
# 遍历入参(遍历文件)
for file in $@
do
# 判断文件是否存在
if [ -e $file ]
then
# dirname获取相对路径文件的父一级目录或者绝对路径文件父一级目录
# -P是为了应对软连接问题 使父一级目录查询时能找到真正的父一级目录
# 创建软连接:ls -a 软链接源文件 软链接文件
pdir=$(cd -P $(dirname $file); pwd)
# 获取当前文件名称
fname=$(basename $file)
# -p如果存在不报错
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file not exists!
fi
done
done
dos2unix xsync
chmod 777 xsync
xsync xsync
同步所有集群节点
3.3.6.8 集群启停代码封装
bigdata用户
登录hadoop102
cd /home/bigdata/bin
vim myhadoop.sh
#!/bin/bash
# 判断参数个数 不合规则退出
if [ $# -lt 1 ]
then
echo Not Enough Args!
exit;
fi
case $1 in
"start")
echo "=========================启动hadoop集群========================="
echo "-------------------------启动hdfs-------------------------"
ssh hadoop102 "/app/hadoop/sbin/start-dfs.sh"
echo "-------------------------启动yarn-------------------------"
ssh hadoop103 "/app/hadoop/sbin/start-yarn.sh"
echo "-------------------------启动historyserver-------------------------"
ssh hadoop102 "/app/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
echo "=========================关闭hadoop集群========================="
echo "-------------------------关闭historyserver-------------------------"
ssh hadoop102 "/app/hadoop/bin/mapred --daemon stop historyserver"
echo "-------------------------关闭yarn-------------------------"
ssh hadoop103 "/app/hadoop/sbin/stop-yarn.sh"
echo "-------------------------关闭hdfs-------------------------"
ssh hadoop103 "/app/hadoop/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
dos2unix myhadoop.sh
chmod 777 myhadoop.sh
xsync myhadoop.sh
同步所有集群节点
3.3.6.9 集群状态查询代码封装
bigdata用户
登录hadoop102
cd /home/bigdata/bin
vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo "=======================$host======================="
ssh $host jps
done
dos2unix jpsall
chmod 777 jpsall
xsync jpsall
同步所有集群节点
3.3.7 集群运行及验证
3.3.7.1 Hadoop集群运行
- xshell
bigdata用户
登录hadoop102
myhadoop.sh stop
myhadoop.sh start
- 集群正常运行的话,会看到如下日志
=========================启动hadoop集群=========================
-------------------------启动hdfs-------------------------
Starting namenodes on [hadoop102]
Starting datanodes
Starting secondary namenodes [hadoop104]
-------------------------启动yarn-------------------------
Starting resourcemanager
Starting nodemanagers
-------------------------启动historyserver-------------------------
3.3.7.2 Hadoop集群状态查看
- xshell
bigdata用户
登录hadoop102
jpsall
- 集群正常的话,会看到如下信息
=======================hadoop102=======================
562 DataNode
1172 Jps
1080 JobHistoryServer
906 NodeManager
431 NameNode
=======================hadoop103=======================
1072 DataNode
1409 NodeManager
1782 Jps
1270 ResourceManager
=======================hadoop104=======================
291 SecondaryNameNode
181 DataNode
396 NodeManager
541 Jps
3.3.7.3 Hadoop集群验证
3.3.7.3.1 Web UI访问
yarn UI:访问
http://127.0.0.1:8088/cluster
,结果如下
dfs.namenode.http-address:访问
http://127.0.0.1:9870
,结果如下
browsing HDFS:访问
http://127.0.0.1:9870/explorer.html#/
,结果如下
3.3.7.3.2 Hadoop/HDFS命令行操作
bigdata用户
登录hadoop102
cd /home/bigdata
mkdir mydata
cd mydata
touch words.txt
echo "hello world" >> words.txt
hadoop fs -ls /
hadoop fs -mkdir /test
hadoop fs -put words.txt /test
hadoop fs -ls /
3.3.7.4 检查volumes挂载数据
以./app/dfs/hadoop102:/app/hdfs
为例,数据正常挂载
3.3.8 Docker容器与Hadoop集群补充说明
- 因为有volumes挂载,数据应该不会丢失;
- 容器停止hadoop集群就“不存在”了,
stop
容器前,养成良好习惯,stop
前建议执行如下流程操作:- xshell
bigdata用户
登录hadoop102
(备注:没别的原因,只是单纯习惯在hadoop102操作,理论上哪台节点都可以) myhadoop.sh stop
- xshell
4 结语
基于Docker搭建的Hadoop集群环境是一个非常“简陋”的环境,仅供学习、测试使用,“环境”本身有很多优化的地方,动手能力强的小伙伴也可以持续集成增加“自动化程度”,如将更多容器内的操作转换成Docker指令...不啰嗦了,有时间的话看要不要发布公开镜像...总之,欢迎开启大数据的精彩大门,任何问题欢迎交流~