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

news2024/11/30 12:51:18

为什么写这篇文章?

老东西叫我用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1007780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uboot 顶层Makefile-make xxx_deconfig过程说明三

一. uboot 的 make xxx_deconfig配置 本文接上一篇文章的内容。地址如下&#xff1a;uboot 顶层Makefile-make xxx_deconfig过程说明二_凌肖战的博客-CSDN博客 本文继续来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中&#xff0c;顶层 Makefile有关的执行思路。 …

SpringBoot临时属性简单说明

1.修改工程的端口 说明&#xff1a;将工程的端口修改成8080端口 java -jar .\springboot_09_ssmp-0.0.1-SNAPSHOT.jar --server.port8080 修改前 修改后 2.修改连接数据库密码 说明&#xff1a;修改的是application.yml中password的值 java -jar .\springboot_09_ssmp-0.0…

就业这么难,十个软件测试项目帮你简历优化!

简历中项目经验太苍白&#xff0c;面试官一眼假&#xff0c;没有面试邀约&#xff0c;倒在海投第一步&#xff0c;看看这十个项目&#xff0c;总有一个你需要的&#xff01; 1.selenium定位web元素(12306抢票实战项目) 项目测试目的 学会Selenium定位web元素的方法熟练浏览器…

【基础知识】一网络不通问题处理记录

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 在项目现场数据采集过程中&#xff0c;经常会遇到网络问题&#xff0c;最近又遇到一个网络问题。 下面记录处理过程&#xff0c;方便遇到类似问题时能快速处理。 一、问题描述 现场有5个西门子S71200/1500PLC系统&am…

导数的应用、单调性、极值、最大最小值

函数的单调性 函数的单调性是一个重要的性质&#xff0c;它描述了函数在某个区间上的变化趋势。如果函数在某个区间上单调递增&#xff0c;那么在这个区间上&#xff0c;随着自变量的增大&#xff0c;函数值也会增大&#xff1b;反之&#xff0c;如果函数在某个区间上单调递减&…

事件循环机制-Event-Loop

一&#xff1a;什么是浏览器的事件循环机制&#xff1f; 浏览器的事件循环是指在Web浏览器中对事件的处理机制。它是基于异步编程模型&#xff0c;运行在JS的引擎之中 二&#xff1a;浏览器的进程和线程 首先要了解我们所编写的JJS代码最终是怎么在浏览器中执行的 浏览器是一…

【牛客面试必刷TOP101】Day4.BM15删除有序链表中重复的元素-I和BM17二分查找-I

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

IDEA双击无效打不开

IDEA双击无效&#xff0c;打不开 一、表象&#xff1a; 1、页面快捷键双击无效&#xff0c;打不开idea 2、bin目录下的idea64.exe点击也无效 二、排查 1、idea/bin目录下有个format.bat文件&#xff0c;将文件重命名为format.txt&#xff0c;然后编辑&#xff0c;在最后一…

浅谈C++|STL之map篇

一.map 1.1map概念 简介: map中所有元素都是pairpair中第一个元素为key(键值)&#xff0c;起到索引作用&#xff0c;第二个元素为value(实值)所有元素都会根据元素的键值自动排序 本质: . map/multimap属于关联式容器&#xff0c;底层结构是用二叉树实现。 优点: 可以根…

富斯I6刷10通道固件

使用USB转串口模块刷写10通道固件 一、下载固件 1. 十通道英文固件 下载地址: https://github.com/benb0jangles/FlySky-i6-Mod-/tree/master 选择 FlySky-i6-Mod–master \ 10ch Mod i6 Updater \ 10ch_MOD_i6_Programmer_V1 路径下的文件,亲测可用。 2. 原版六通道中…

[Linux]进程间通信--管道

[Linux]进程间通信–管道 文章目录 [Linux]进程间通信--管道进程间通信的目的实现进程间通信的原理匿名管道匿名管道的通信原理系统接口管道特性管道的协同场景管道的大小 命名管道使用指令创建命名管道使用系统调用创建命名管道 进程间通信的目的 数据传输&#xff1a;一个进…

JL-A/41 JL-A/42 JL-A/43 集成电路电流继电器 过负荷或短路 JOSEF约瑟

JL-A、B集成电路电流继电器 JL-A/11 JL-A/31 JL-A/12 JL-A/32 JL-A/13 JL-A/33 JL-A/21 JL-A/22 JL-A/23 JL-A/34 JL-A/35 JL-B/41 JL-A/42 JL-B/43 JL-B/11 JL-B/31 JL-B/12 JL-B/32 JL-B/13 JL-B/33 JL-B/21 JL-B/22 JL-B/23 JL-B/34 JL-B/35 JL-B/41 JL-B/42 …

Android性能优化之应用瘦身(APK瘦身)

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览2.1 apk组成 三、优化方向3.1 源代码3.1.1 代码混…

bootstrap-datepicker实现只能选择每一年的某一个月份

1、问题描述 最近碰到一个需求&#xff0c;要求日期控件选择的时候&#xff0c;只能选择某一年的1月份。 2、解决方法 使用setStartDate()和setEndDate()函数对日期选择框进行范围限制。 3、我的代码 【免费】bootstrap-datepicker实现只能选择每一年的某一个月份资源-CSDN文库…

JavaWeb_LeadNews_Day12-jenkins

JavaWeb_LeadNews_Day12-jenkins 后端项目部署多环境配置切换服务集成docker配置父工程项目构建构建微服务部署服务到远程服务器整体思路安装私有仓库jenkins插件部署服务准备工作部署服务 jenkins触发器来源Gitee 后端项目部署 多环境配置切换 在微服务中的bootstrap.yml中新…

Dajngo06_Template模板

Dajngo06_Template模板 6.1 Template模板概述 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术 静态网页&#xff1a;页面上的数据都是写死的&#xff0c;万年不变 动态网页&#xff1a;页面上的数据是从后端动态获取的&#xff08;后端获取数据库…

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树&#xff0c;是一种特殊的树&#xff0c;特点是树的度小于等于2&#xff08;树的度是整个树的结点的度的最大值&#xff09;&#xff0c;由于该特性&#xff0c;构建二叉树的结点只有三个成员&#xff0c;结点的值和指向结点左、右子树的指针。 typedef int DateType; t…

长亭雷池社区版本安装与使用

0x01 雷池介绍 一款足够简单、足够好用、足够强的免费 WAF。基于业界领先的语义引擎检测技术&#xff0c;作为反向代理接入&#xff0c;保护你的网站不受黑客攻击。核心检测能力由智能语义分析算法驱动&#xff0c;专为社区而生&#xff0c;不让黑客越雷池半步。 官方网址&…

第一类曲线积分与二重积分在极坐标系下表示的区别

1.第一类曲线积分与二重积分在极坐标系下表示的区别 区别主要来源于一是曲线积分的积分区域为边界&#xff0c;而二重积分的积分区域为内部边界&#xff0c;二是极点位置选取的不同&#xff0c;二者共同造成在积分区域在极坐标下表示的不同&#xff0c;即 ρ \rho ρ是常量还是…

解决谷歌浏览器会http网站自动变成https的问题

不知道是不是升级的缘故&#xff0c;最近打开公司一个http网站&#xff0c;会自动跳去https&#xff0c;用了网上说的这个方案&#xff0c;如下&#xff1a; 但发现还不行&#xff0c;这时我尝试用点击地址栏左边那锁的那个图标&#xff0c;图如下&#xff1a; 然后点击网站设…