简单讲讲在一台机器上用docker部署hadoop HDFS

2023-09-13 21:31:12

为什么写这篇文章?

老东西叫我用vmvare部署hadoop,我觉得这简直蠢毙了,让我们用docker和docker-compose来快速的过一遍如何使用docker-compose来部署简单的hadoop集群范例

写在前面,一定要看我!!!

还有注意!Hadoop中的主机名不能带-或者_

注意了!一定注意存储空间大小,确保机器至少有10G左右的空余,不然跑不起来的

  • 如果出现如下问题,请调整docker-compose文件中分给容器的容量,然后删除并重建容器:

  • $ hdfs namenode
    WARNING: /export/server/hadoop/logs does not exist. Creating.
    mkdir: cannot create directory '/export/server/hadoop/logs': No space left on device
    ERROR: Unable to create /export/server/hadoop/logs. Aborting.

Hadoop HDFS 简摘

Hadoop HDFS需要三个角色:

  1. NameNode,主节点管理者
  2. DateNode,从节点工作者
  3. SecondaryNameNode,主节点辅助

我们需要三个容器:

暂且称之为

masternode,slavenode1,slavenode2

这三个容器扮演的角色分别是

  1. masternode:NameNode,DateNode,SecondaryNameNode
  2. slavenode1:DateNode
  3. slavenode2: DateNode

使用脚本跳过所有的前置工作(假设你已经对Hadoop有了解)

   注意!建立在你会的基础上,不会的话看着脚本敲命令

   克隆项目后确保目录如:

git clone https://github.com/rn-consider/Hadoop_docker.git

然后确保使用docker-compose up -d 创建的容器也可以运行

给所有sh脚本附加执行权限,然后运行./一键式部署请确保已经下载了hadoop压缩包.sh,然后等待脚本执行完成像是:

,完成后直接跳转到运行hadoop章节

 前置工作

我们需要三个docker容器来实现masternode,slavenode1,slavenode2,它们需要一些基本的配置,比如说固定的Ip,ssh的安装,jdk8的安装等,所幸我们可以使用docker-compose来大大简化这些基本的配置工作,新建一目录假设命名为hadoop_t,然后按照以下命令,(注意!因为我们使用的是docker所以只需要按照我的步骤来且docker,docker-compose版本号满足要求,那么环境配置必然会成功)

  1. git clone https://github.com/rn-consider/Hadoop_docker.git
  2.  项目结构应该如,其中hadoop压缩包也可从官方获得,或者使用RumMeFirst下载在项目结构如下时在往下阅读:
  3. 确保机器上docker版本大于等于20.10.25,docker-compose版本大于等于2.20.3,不清楚docker-compose二进制安装方式可以看
  4. 为Linux安装软件包时后面标注的arm,aarch到底是什么玩意儿以二进制安装docker-compose为例_生生世世是所说的的博客-CSDN博客
  5. 运行docker-compose up -d 后运行docker ps可以看到:
  6. 接下来我们所有的环境设置都将在这三个容器中进行

环境配置

     基本配置

         主机名以及IP地址映射

          docker-compose会自动创建docker网络和dns映射让各个容器可以通过容器的服务名来访问各自的容器,我们可以愉快的跳过这个配置

         防火墙关闭

       Docker 使用官方的 Ubuntu 镜像默认情况下不会启动防火墙,因为容器通常被设计成相对独立的环境。这意味着容器内的网络通信通常是不受防火墙限制的。

所以这一步我们也可以愉快的跳过.

SSH免密登录-注意是Hadoop用户间的免密登录

   传统方式下我们进入每一台虚拟机并使用ssh-copy-id node1,node2...类似的方式,在docker下我们可以编写一个简单的shell脚本解决这个问题,只需要执行项目中的脚本就行:

         时区同步设置

    简单的执行shell脚本即可,我们使用ntpdate 来同步阿里云的ntp服务器

      JDK以及HADOOP安装

我们的Dockerfile构建的镜像已经自动的安装了JDK8并将本地目录下的HADOOP压缩包复制解压到了容器中的/etc/export/hadoop下,我们也可以愉快的跳过这一步

     masternode环境配置

   也可直接运行脚本,直接拷贝放置在fileconfig目录下的配置文件:

   

  1. 我们可以看下HADOOP的文件夹结构:

      我们要配置的文件在/etc/hadoop文件夹下,配置HDFS集群,我们主要涉及到以下文件的修改:

  •    workers:    配置从节点(DateNode)有哪些
  •    hadoop-env.sh: 配置Hadoop相关的环境变量
  •    core-site.xml:   Hadoop核心配置文件
  •    hdfs-site.xml  :  HDFS核心配置文件

          这些文件均存在于$HADOOP_HOME/etc/hadoop文件夹中.

ps:$HADOOP_HOME我们将在后续设置它,其指代Hadoop安装文件夹即/export/server/hadoop

  •  workers文件的修改

  1. 根据我们上面为三个容器分配的角色,我们在workers文件中填入:
  •  hadoop-env.sh文件配置

  • 如果使用我的项目,那么我们的配置都应该如,不用动脑复制粘贴即可:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 # where we use apt download
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
  • 配置core-site.xml文件
  • 在configures中填入:

  • <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://masternode:8020</value>
            </property>
            <property>
                    <name>io.file.buffer.size</name>
                    <value>131072</value>
            </property>
    </configuration>
    
  • hdfs://masternode:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(HADOOP内置协议)
  • 表明DataNode将与masternode的8020端口通讯,masternode是NameNode所在机器
  • 此配置固定了masternode必须启动NameNode进程

        hdfs-site.xml配置 

<configuration>

	<property>

		<name>dfs.datanode.data.dir.perm</name>

		<value>700</value>

	</property>

	<property>

		<name>dfs.namenode.name.dir</name>

		<value>/data/nn</value>

	</property>

	<property>

		<name>dfs.namenode.hosts</name>

		<value>masternode,slavenode1,slavenode2</value>

	</property>
	<property>

		<name>dfs.blocksize</name>

		<value>268435456</value>

	</property>

	<property>

		<name>dfs.namenode.handler.count</name>

		<value>100</value>

	</property>

	<property>

		<name>dfs.datanode.data.dir</name>

		<value>/data/dn</value>

	</property>

</configuration>
  •  masternode配置结束,恭喜

准备数据目录

  • 在masternode节点:
  • mkdir -p /data/nn
  • mkdir /data/dn
  • 在剩余两个节点:
  • mkdir -p /data/dn

脚本运行 

分发Hadoop文件夹

  • 使用vmvare这个步骤将会耗费很长时间,但使用docker的情况下我们使用一个简单的shell脚本解决问题

配置环境变量

  • 为了方便操作HADOOP可以将HADOOP的一些脚本和程序配置到PATH中,方便后续使用
  • 此处直接运行脚本,注意!由于docker容器的特性,你需要在进入容器终端时手动source以激活环境变量:

授权HADOOP用户-用户密码是123456

  • 在Dockerfile中我们已经加上了创建Hadoop用户的代码
  • 让我们来对Hadoop用户进行授权
  • 依次进入每个容器并执行,并等待命令执行完成
  • chown -R hadoop:hadoop /data
    
    chown -R hadoop:hadoop /export
    
    chown -R hadoop:hadoop /home
  • 或者使用,这个脚本需要比较长的等待时间

运行HADOOP

    所有前期准备全部完成,现在对整个文件系统执行初始化

    进入masternode

别忘了source一下

  

  •     格式化namenode
  •     
    su - hadoop
    
    hdfs namenode -format
  • 出现这个对话框,输入Y
  •  成功
  • 启动hadoop
  • start-dfs.sh 启动
  • 可以在/data/nn/current目录下看到数据这就说明hadoop启动成功
  • 可以用JPS看到当前的进程
  • 可以看下slavenode1,成功
  • stop-dfs.sh 停止

使用docker inspect可以看到docker容器的ip地址:

docker-compose文件定义了桥接网络到宿主机,直接在宿主机访问172.21.0.2:9870(就是masternode被分配的子网地址)就能看到HDFS WEBUI:

在ubuntu上获取hadoop压缩包

获取压缩包

wget -b https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

 查看进度

cat wget-log

更多推荐

SpaceX预计到2022年Starlink用户将达到2000万,但最终达到了100万

SpaceX的Starlink部门还没有接近实现客户和收入的预测,该公司在建立卫星网络之前与投资者分享了这一点华尔街日报报道今天出版。据报道,2015年的一份题为“SpaceX用来从投资者那里筹集资金”的报告预计,到2022年,Starlink的订户将达到2000万人,并产生近120亿美元的收入和70亿美元的营业利润。

【LLM】金融大模型场景和大模型Lora微调实战

文章目录一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、基于mt0-large进行Lora微调实战七、对chatglm2进行lora微调Reference一、金融大模型背景金融行业需要垂直领域LLM,因为存在金融安全和数据大多数存储在本地,在风控、精度、实时性

基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用CSDN平台,自主完成项目设计升级,提升自身的硬实力。专栏订阅:项目大全提升自身的硬实力[专栏详细介绍:项目设计

malloc与free

目录前提须知:malloc:大意:头文件:申请空间:判断是否申请成功:使用空间:结果:整体代码:malloc申请的空间怎么回收呢?注意事项:free:前提须知:为什么要有动态内存分配?我们已经掌握的内存开辟⽅式有:intval=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节

postgresql-索引与优化

postgresql-索引与优化索引简介索引类型B-树索引哈希索引GiST索引SP-GiST索引GIN索引BRIN索引创建索引唯一索引多列索引函数索引部分索引覆盖索引查看索引维护索引删除索引索引简介索引(Index)可以用于提高数据库的查询性能;但是索引也需要进行读写,同时还会占用更多的存储空间;因此了解并适当利用索引

Web 3.0 发展到什么水平了?

最初,有互联网:电线和服务器的物理基础设施,让计算机和它们前面的人相互交谈。美国政府的阿帕网在1969年发出了第一条消息,但我们今天所知道的网络直到1991年才出现,当时HTML和URL使用户可以在静态页面之间导航。将此视为只读Web或Web1。在2000年代初期,情况开始发生变化。首先,互联网的互动性越来越强;这是一

金融投资公司如何实现创新, 盛创汇凭借人工智能站上硬科技C位

作为硬科技产业的重要组成部分,近年人工智能受到了国家政策的高度重视。在《“十四五”规划和2035年远景目标纲要》中,人工智能被摆放在科技前沿领域攻关方面的首要位置,先后八次被提及。《规划》指出,对新一代人工智能,要在前沿基础理论突破,专用芯片研发,深度学习框架等开源算法平台构建,学习推理与决策、图像图形、语音视频、自然

深入思考redis面经

1redission分布式锁1.1为了保证数据一致性,引入了redission的锁,你是为了抗住高并发而去为了引入这个锁还是说为了保证数据一致性去引入的答:主要是为了抗住高并发问题,解决redis的缓存击穿问题,但是也能解决一定的数据一致性问题。是的,当我们谈到“击穿”问题时,通常指的是缓存击穿,即当某个热点缓存失效时

C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件

第一章命令编译链接文件C++有什么呢?C++源代码文件后缀运行C++过程可执行代码:编译语法:makeMakefile基础语法编写完make只要和将要编译的文件放一起就行然后在该目录使用make命令,就将自动运行;基础的Makefile版本现在的缺点也大\^-\^更加健全的Makefile但还是有不小的缺点常用版本C+

C++设计模式_04_Strategy 策略模式

接上篇,本篇将会介绍C++设计模式中的Strategy策略模式,和上篇模板方法TemplateMethod一样,仍属于“组件协作”模式,它与TemplateMethod有着异曲同工之妙。文章目录1.动机(Motivation)2.代码演示Strategy策略模式2.1传统方法处理2.2怎么用扩展的方式来支持未来的变化呢

PROB: Probabilistic Objectness for Open World Object Detection(论文解析)

PROB:ProbabilisticObjectnessforOpenWorldObjectDetection摘要2相关工作摘要开放世界目标检测(OWOD)是一个新的、具有挑战性的计算机视觉任务,它弥合了传统的目标检测(OD)基准和现实世界中的目标检测之间的差距。除了检测和分类已知/标记的对象外,OWOD算法还应该能够

热文推荐