草庐IT

基于Docker搭建hdfs分布式实验环境

dejiedoor 2023-05-14 原文
    1. 理论知识
      1. Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。

Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,开发者可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1.快速,一致地交付应用程序。Docker 允许开发人员使用应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

2.响应式部署和扩展。Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

3.在同一硬件上运行更多工作负载。Docker 轻巧快速,它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案。

      1. 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. 实验目的环境要求
      1. 实验目的

1.熟悉常用的Linux命令

2.熟悉Docker的安装和操作(对镜像的操作、对容器的操作、dockerfile文件简单使用)

3. 掌握HDFS的安装,基于Docker创建一主三从4个节点的HDFS集群。

      1. 环境要求

Windows10专业版,Docker Desktop 4.5.1,CentOS7,Hadoop2.7.1

    1. 实验过程
      1. 安装Docker Desktop

Docker 官方网站https://www.docker.com下载Docker Desktop for windows。安装过程与普通windows软件没有区别。

安装好后,出现如下界面

本实验中,可以不开启Hyper-V,可以不配置国内镜像。

      1. 创建四台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个虚拟机。如下图所示。

  

      1. 配置四台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

      1. 分发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

      1. 启动HDFS服务

#切换用户

su hdfs

/usr/local/hadoop/bin/hdfs namenode -format    

/usr/local/hadoop/sbin/start-dfs.sh  # 会自动启动一主三从的相应服务

      1. 向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主页,查看文件的存储细节

    1. 小结

有关基于Docker搭建hdfs分布式实验环境的更多相关文章

  1. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  2. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  3. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  4. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  5. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. ruby-on-rails - ruby gem如何在rails环境下工作 - 2

    我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge

  9. ruby-on-rails - 我需要一个真正的 UNIX RoR 开发环境 - 2

    从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby

  10. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

随机推荐