基于Docker搭建hdfs分布式实验环境
- 理论知识
- Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。
Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,开发者可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1.快速,一致地交付应用程序。Docker 允许开发人员使用应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
2.响应式部署和扩展。Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
3.在同一硬件上运行更多工作负载。Docker 轻巧快速,它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案。
- HDFS
HDFS(Hadoop Distributed File System),作为Google File System(GFS)的实现,是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
HDFS是一个主/从(Mater/Slave)体系结构,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS特点:高容错性、可构建在廉价机器上;适合批处理;适合大数据处理;流式文件访问。
HDFS局限:不支持低延迟访问;不适合小文件存储;不支持并发写入;不支持修改。
HDFS结构图
- 实验目的与环境要求
- 实验目的
1.熟悉常用的Linux命令
2.熟悉Docker的安装和操作(对镜像的操作、对容器的操作、dockerfile文件简单使用)
3. 掌握HDFS的安装,基于Docker创建一主三从4个节点的HDFS集群。
- 环境要求
Windows10专业版,Docker Desktop 4.5.1,CentOS7,Hadoop2.7.1
- 实验过程
- 安装Docker Desktop
Docker 官方网站https://www.docker.com下载Docker Desktop for windows。安装过程与普通windows软件没有区别。
安装好后,出现如下界面
本实验中,可以不开启Hyper-V,可以不配置国内镜像。
- 创建四台centos虚拟机
导入2个image文件: Centos7-hadoop2.tar和spark_dave.tar. 导入命令 docker load -i 文件名 注意:文件名和路径中不可以中文。导入成功后,源tar文件可以删除。
顺序运行如下指令,创建4个Centos虚拟机,作为下一步HDFS的节点主机。
#创建master
docker run -d -it --privileged -P -p 50070:50070 -p 8888:8088 -p 8900:8080 --name master -h master --add-host slave01:172.17.0.3 --add-host slave02:172.17.0.4 --add-host slave03:172.17.0.5 centos7-hadoop2 /usr/sbin/init
#创建slave01
docker run -it -d -P --privileged --name slave01 -h slave01 --add-host master:172.17.0.2 --add-host slave02:172.17.0.4 --add-host slave03:172.17.0.5 centos7-hadoop2 /usr/sbin/init
#创建slave02
docker run -it -d -P --privileged --name slave02 -h slave02 --add-host slave01:172.17.0.3 --add-host master:172.17.0.2 --add-host slave03:172.17.0.5 centos7-hadoop2 /usr/sbin/init
#创建slave03
docker run -it -d -P --privileged --name slave03 -h slave03 --add-host slave01:172.17.0.3 --add-host slave02:172.17.0.4 --add-host master:172.17.0.2 centos7-hadoop2 /usr/sbin/init
创建成功后,Docker界面中出现4个虚拟机。如下图所示。
- 配置四台centos虚拟机SSH登录设置
配置ssh的目的是:方便在master上统一对集群进行Hadoop部署。配置公钥和私钥的目的是:让集群主机之间的ssh登录不需要密码,否则每次都要输入密码。
#先打开四个终端窗口,分别执行以下命令,连接到四台机器
docker exec -it master /bin/bash
docker exec -it slave01 /bin/bash
docker exec -it slave02 /bin/bash
docker exec -it slave03 /bin/bash
# 在master上执行
su hdfs #切换到hdfs账号
ssh-keygen -t rsa #生成hdfs账号的key,
# 在master上执行,将master的公钥文件拷贝到slave节点和本机
ssh-copy-id master
ssh-copy-id slave01
ssh-copy-id slave02
ssh-copy-id slave03
- 分发HDFS配置文件
向四台centos虚拟机分发HDFS配置文件。
docker exec master mv /usr/local/hadoop-2.7.1 /usr/local/hadoop
docker exec master chown -R hdfs:hdfs /usr/local/hadoop
docker exec master mv /usr/local/spark2.2.1 /usr/local/spark
docker exec master chown -R hdfs:hdfs /usr/local/spark
docker exec slave01 mv /usr/local/hadoop-2.7.1 /usr/local/hadoop
docker exec slave01 chown -R hdfs:hdfs /usr/local/hadoop
docker exec slave01 mv /usr/local/spark2.2.1 /usr/local/spark
docker exec slave01 chown -R hdfs:hdfs /usr/local/spark
docker exec slave02 mv /usr/local/hadoop-2.7.1 /usr/local/hadoop
docker exec slave02 chown -R hdfs:hdfs /usr/local/hadoop
docker exec slave02 mv /usr/local/spark2.2.1 /usr/local/spark
docker exec slave02 chown -R hdfs:hdfs /usr/local/spark
docker exec slave03 mv /usr/local/hadoop-2.7.1 /usr/local/hadoop
docker exec slave03 chown -R hdfs:hdfs /usr/local/hadoop
docker exec slave03 mv /usr/local/spark2.2.1 /usr/local/spark
docker exec slave03 chown -R hdfs:hdfs /usr/local/spark
# 在master上执行,将做好的配置文件(在/usr/local/dave_etc/目录下)拷贝到master和其他slave机器
cd /usr/local/dave_etc/
scp -r * master:/usr/local/hadoop/etc/hadoop
scp -r * slave01:/usr/local/hadoop/etc/hadoop
scp -r * slave02:/usr/local/hadoop/etc/hadoop
scp -r * slave03:/usr/local/hadoop/etc/hadoop
- 启动HDFS服务
#切换用户
su hdfs
/usr/local/hadoop/bin/hdfs namenode -format
/usr/local/hadoop/sbin/start-dfs.sh # 会自动启动一主三从的相应服务
- 向HDFS上传大文件
tar -zcvf /usr/local/hadoop/spark.tar.gz /usr/local/spark/ # 产生一个大文件
/usr/local/hadoop/bin/hdfs dfs -ls /
/usr/local/hadoop/bin/hdfs dfs -mkdir /test # 创建test目录
/usr/local/hadoop/bin/hdfs dfs -put /usr/local/hadoop/spark.tar.gz /test # 将刚压缩的文件上传到/test目录上
/usr/local/hadoop/bin/hdfs dfs -ls /test # 查看文件是否上传成功
访问访问http://localhost:50070主页,查看文件的存储细节
- 小结
基于Docker搭建hdfs分布式实验环境相关推荐
- 基于docker搭建cephfs分布式文件
目的 在一台机器上, 利用多块硬盘, 搭建一个cephfs文件系统. 具体来说就是1个mon, 1个mds, 1个mgr, 3个osd 注意 a. 使用vmware会很方便 b. 安装过程中会遇到很多 ...
- nvidia docker容器不支持中文的解决办法_用docker搭建深度学习实验环境
tensorflow和pytorch官方都维护了不同版本的docker镜像.借助docker我们可以方便的搭建起深度学习实验环境. 但是想要在同一个容器内同时拥有tensorflow.pytorch. ...
- 使用 docker 搭建自己的实验环境——解决很多小伙伴论文复现环境搭建难题
1. 问题描述 对于论文复现,大多数小伙伴都会遇到很多很多各种各样的问题.尽管我已经尽力回答所有人的留言,甚至为一些小伙伴免费提供了我自己购买的云服务器,但是依然很难解决 "如何让这些代码在 ...
- selenium===使用docker搭建selenium分布式测试环境
准备: #请在此之前务必先了解,selenium grid :参考:selenium-grid ,下载地址, win-本地部署过程 >>>环境准备: Linux操作系统 >&g ...
- Linux系统Centos7 基于Docker搭建ELK分布式日志系统
ELK 基本概述 ELK是Elasticsearch.Logstash.Kibana的简称,常常用于部署分布式系统日志服务. Elasticsearch:全球实时全文搜索和分析引擎,提供搜集.分析.存 ...
- 基于 Docker 搭建 Hadoop 平台
基于 Docker 搭建完全分布式 Hadoop 平台 前言 环境 遇到的坑 折腾实录 一.构建镜像 1. 准备JDK和Hadoop 2. 构建centos-hadoop镜像 二.启动容器 三.集群搭 ...
- Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
本文给大家分享的是作者基于Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress的详细过程,非常的全面,有需要的小伙伴可以参考下 Docker基于LXC实现了把软件封装到一个完 ...
- 基于Docker搭建分布式消息队列Kafka
本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...
- 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
深度学习在哪里? 我们已然生活在数字时代,一天24小时我们被数字包围.我们生活中的方方面面都在使用数字来表达.传递.存储.我们无时无刻不在接收数字信息,而又无时无刻不在生产数字信息. 在数字世界中,可 ...
最新文章
- 2015最火十大Android开源项目,是个程序员你就该看看!
- ubuntu16.04修改xfce下的gedit的背景颜色
- oracle数据库函数手册,Oracle分析函数参考手册(转)
- Java-环境搭建(Mac版)
- 数据标准化处理方法_机器学习系列-数据预处理-数据标准化(归一化)-理论
- 从2018百度前端技术学院看代码究竟应该怎么写(2)
- Java Keytool 命令行工具
- 基于模板的通用代码生成器LKGenerator(三)-模板示例
- isnull pivot server sql_使用SQL Server中的“Pivot”将行转换为列
- Android API中文文档(111) —— MailTo
- LeetCode—2.堆排序算法
- SAP EWM 根据物料号获得包装规格
- 二种方法js实现轮播图自动切换
- 机器学习读书笔记: 概率图模型
- FTRL之FM和LR实战(使用稀疏数据进行实战)
- 2022年按摩椅行业现状分析
- 微软ime日文输入法在假名输入模式下怎么快速输入英文
- SCCM更新卡住恢复处理方法
- 群晖(docker图形化界面)使用 SpeedTest 测速
- 《活出最乐观的自己》