docker搭建hadoop hdfs完全分布式集群

2023-11-20

1  制作hadoop镜像
参见 https://www.cnblogs.com/rmxd/p/12051866.html
该博客中只参考制作镜像部分,固定IP及启动集群的部分应该跳过。
这里注意,在做好的镜像里,要安装 which 工具,否则在执行 hdfs 命令时会报命令不存在异常。

yum install which -y

2 启动容器

docker run --name hmaster --hostname hmaster --network hadoop -d -P \
-p 50070:50070 \
-p 50010:50010 \
-p 9000:9000 \
-p 8088:8088 \
-p 50090:50090 \
taiga/hadoop:v1.1

docker run --name hslave1 --hostname hslave1 --network hadoop -d -P \
-p 51070:51070 \
-p 51010:51010 \
-p 9100:9100 \
-p 8188:8188 \
-p 51090:51090 \
taiga/hadoop:v1.1

docker run --name hslave2 --hostname hslave2 --network hadoop -d -P \
-p 52070:52070 \
-p 52010:52010 \
-p 9200:9200 \
-p 8288:8288 \
-p 52090:52090 \
taiga/hadoop:v1.1


可以看到,我的镜像名称是  taiga/hadoop:v1.1
这里启动了三个容器,一个master,两个slave。注意要向外映射 51010 52010 端口,这两个端口用作 datanode 的控制端口,用于远程上传文件时,可以将datanode在端口映射给宿主机。

3 master免密登陆slave
进行 hmaster 容器,执行以下命令

ssh-keygen
# 剩下的一路回车即可

ssh-copy-id hmaster
# master也是免下密,根据提示输入yes以及主机密码
ssh-copy-id hslave1
ssh-copy-id hslave2

4 配置
hmaster core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hmaster:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/local/hadoop/tmp</value>
        </property>
         <property>
                 <name>fs.trash.interval</name>
                 <value>1440</value>
        </property>
</configuration>

hmaster hdfs-site.xml
 

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/var/bigdata/hadoop/full/dfs/name</value>
     </property>
     <property>
          <name>dfs.datanode.data.dir</name>
          <value>/var/bigdata/hadoop/full/dfs/data</value>
      </property>
      <property>
           <name>dfs.namenode.secondary.http-address</name>
           <!-- 这里是启动 hslave1 时映射的端口-->
           <value>hslave1:51090</value>
       </property>
       <property>
            <name>dfs.namenode.checkpoint.dir</name>
            <value>/var/bigdata/hadoop/full/dfs/secondary</value>
        </property>
</configuration>

hmaster hadoop-env.sh
在hadoop-env.sh里添加JAVA_HOME,这是必须要做的,因为当master节点ssh到slave节点上时,是获取不到slave节点的环境变量的,因此也拿不到  slave  节点的 $JAVA_HOME ,所以在hadoop-env.sh 里必须配置为绝对路径。

export JAVA_HOME=/usr/local/jdk1.8

hmaster slaves
在该文件里配置上slave节点的域名。因为在启动容器时已经将master和slave放在了同一个network里,所以直接使用域名即可相通通信,这也是不需要参照刚才那个博主中“固定IP”这一步骤的原因了。

hslave1
hslave2

将hmaster节点的配置分发到hslave  hslave2中

cd /usr/local/hadoop/etc
scp ./hadoop hslave1:`pwd`
scp ./hadoop hslave2:`pwd`

配置slave节点
配置hslave1和hslave2的 hdfs-site.xml。为了将datanode的控制端口映射到宿主机,我们分别将 hslave1 和 hslave2的控制端口改成了 51010 和 52010, 所以要配置hslave1和hslave2的 hdfs-site.xml。

在hslave1中添加,是添加,其它的配置不动

    <property>
        <name>dfs.datanode.address</name>
        <value>hslave1:51010</value>
    </property>

在hslave2中添加,是添加,其它的配置不动

    <property>
        <name>dfs.datanode.address</name>
        <value>hslave2:52010</value>
    </property>

到这里所有的配置都完毕了。

5 启动
回到hmaster节点,执行

hdfs namenode -format
/usr/local/hadoop/sbin/start-dfs.sh

6 验证
OKAY ,集群搭建完毕。下面进行验证
浏览器访问 http://x.x.x.x:50070/dfshealth.html#tab-overview 。访问前首先保证虚拟机 50070 端口开放,或是虚拟机关闭防火墙。出现以下页面表示搭建成功:

来看一下datanode
 
这里的两个端口就是在 hslave1 和 hslave2里配置的

7 上传文件
在容器里上传文件肯定是会成功的了,就不验证了,下面验证一下通过 java 客户端上传个文件。
首先在电脑的 hosts 文件里加两行配置

x.x.x.x hslave1
x.x.x.x hslave1


x.x.x.x就是你虚拟机的ip

上传文件代码示例

package cn.hgd11.hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;

public class HdfsTest {
    private Configuration configuration;
    private long start;
    private long end;
    private FileSystem fs;

    @Before
    public void before () throws URISyntaxException, IOException, InterruptedException {
        start = System.currentTimeMillis();

        configuration = new Configuration(true);
        // 这行代码一定要有,表示从namenode拉回的datanode信息是域名,而不是ip,因为docker里的容器ip在本机是访问不到的
        configuration.set("dfs.client.use.datanode.hostname", "true");
        URI uri = new URI("hdfs://node128:9000/");
        fs = FileSystem.get(uri, configuration, "root");
    }

    @Test
    public void upload () throws IOException {
        try {
            String pathStr = "D:\\java\\mash\\资料\\hbase-book-master\\ch07\\test-data.txt";

            Path src = new Path(pathStr);
            Path dst = new Path("/hbase-book-code/ch07/test-data.txt");
            fs.copyFromLocalFile(src, dst);

            System.out.println("上传完成");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @After
    public void after () throws IOException {
        if (fs != null) {
            fs.close();
        }

        System.out.println("程序耗时:" + (System.currentTimeMillis() - start));
    }

}

上传成功后的效果
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker搭建hadoop hdfs完全分布式集群 的相关文章

随机推荐

  • Flutter 碰到的各种坑 持续更新

    Android转flutter 也有1年多了 在新公司将一个产品用flutter从零开始开发 感觉flutter 还是不太稳定 各种问题还是比较多 总之这次体验还是比较差 Error on line 21 column 5 of pubsp
  • Kafka——Mac搭建kafka环境

    1 下载Kafka安装包 下载地址 将压缩包移动到 usr local mv kafka 2 12 3 1 0 tgz usr local 解压 tar zxvf kafka 2 12 3 1 0 tgz 2 启动 启动zookeeper
  • WEB安全测试手册

    概述 目的 适用读者 适用范围 注意事项 测试级别说明 测试过程示意图 1 服务器信息收集 1 1 运行帐号权限测试 1 2 Web服务器端口扫描 1 3 HTTP方法测试 1 4 HTTP PUT方法测试 1 5 HTTP DELETE方
  • 前端例程20211213:网页去色(以灰度形式显示)

    文章目录 前言 实现与演示 前言 在每年的一些特殊的日子 比如公祭日等 很多网站会将页面整体去色以灰度形式显示 以示哀悼 这里将对网页中实现该功能进行简单说明 实现与演示 使用CSS的 filter grayscale 属性可以给元素添加灰
  • 主进程退出后子进程还会存在吗?_深度好文

    干了这碗鸡汤 我急切地盼望着可以经历一场放纵的快乐 纵使巨大的悲哀将接踵而至 我也在所不惜 太宰治 人间失格 大家好 这里是周日凌晨4点 仍在笔耕不辍的程序喵大人 下面隆重推出我呕心沥血 耗时半个月完成的精心力作 01 什么是进程 标准定义
  • Element Plus 配置自动按需引入后,手动引入组件,组件样式丢失

    起因 最近在尝试使用 Element Plus 写一些简单的页面 跟着官方文档走配置了自动按需引入 npm install D unplugin vue components unplugin auto import vite config
  • IDEA全局搜索框打不开,全局搜索不全,全局搜索不到解决办法

    IDEA默认全局搜索快捷键是Ctrl Shift F 当我在使用IDEA的全局搜索时 发现IDEA的全局搜索快捷键不起作用 无法弹出全局搜索框 此时想到了应该是快捷键被占用了 首先想到的就是搜狗输入法 打开搜狗输入法设置 高级 把这个简繁切
  • Python 基于BP神经网络的鸢尾花分类

    本文用Python实现了BP神经网络分类算法 根据鸢尾花的4个特征 实现3种鸢尾花的分类 算法参考文章 纯Python实现鸢尾属植物数据集神经网络模型 2020 07 21更新 增加了分类结果可视化result visualization
  • Elasticsearch 索引模板:优化大数据搜索与分析

    Elasticsearch 是一个强大的分布式搜索和分析引擎 广泛应用于处理大数据量的搜索和分析任务 为了提高搜索效率和数据组织结构的一致性 Elasticsearch 提供了索引模板 template 的功能 索引模板允许我们在创建索引时
  • 《python语言程序设计》第5章 第23题 贷款计算

    LOAN AMOUNT 10000 number years 5 NUMBER OF YEAR number years 12 interest rate 5 month rate interest rate 1200 print f Lo
  • springboot跳转页面

    SpringBoot里面只有src目录 在src main resources下面有两个文件夹 static 和 templates springboot默认static中放静态页面 而templates中放动态页面 themleaf和fr
  • Egret游戏通用开发框架

    地址 https github com yicaoyimuys EgretGameEngine 简介 现在这套代码已经有几个项目都在使用了 主要用于各项目组间统一开发规范 便于开发人员调整 以及新手快速熟悉项目 支持Egret2 0 x和2
  • C#写的34401A串口232数据读取程序

    首先呢 请先设置惠普表为Talk only模式 也就是31 还不明白的自己查手册去 另外 各个表设置不一样 比如我这里2块表就不一样 一块是7位数据位 even校验 另一块是8位数据位 none校验 具体的可以看看表里的i o那里的设置 数
  • GPIO的两种引脚规则:BCM与BOARD

    树莓派 raspberry 针脚在python中BCM与BOARD模式的区别 在python程序中定义的GPI针脚有两种模式 BCM模式 BOARD模式 BCM模式 例如 GPIO setmode GPIO BCM 测试结果如下 物理针脚1
  • pycharm注释快捷键Ctrl+/

    行注释 取消行注释 Ctrl 块注释 Ctrl Shift
  • ArcGIS部分问题解决办法

    ArcGIS部分常见问题解决办法 最近在学习ArcGIS过程中 进行某些操作选项总是会会发生错误 不仅仅我自己一个人是这样 周围好多同学也是经常在操作的过程中报错 所以就很突发奇想把这段时间遇到的问题统一写下来 也是为了自己以后忘掉可以直接
  • 系统调用:用户级函数如何通过INT 80中断进入操作系统内核

    以printf 打印内核中的一段字符串为例 printf 是用户函数无法进入内核 因此需要进行系统调用 进入内核的方式是使用int 0x80中断 printf 函数想要进入系统内核是通过系统调用write 实现 位置 linux lib w
  • Usbkey原理介绍

    不好意思 百度来的 大家一起学习吧 文库中竟然收费5个币 Usbkey原理介绍 一 usbkey实现身份认证原理 采用冲击响应的认证方法 登录时在服务器端和客户端同时进行计算 客户端计算前要先验证USER PIN 通过后在硬件中使用HMAC
  • OD华为机试 23

    篮球比赛 描述 篮球 5V5 比赛中 每个球员拥有一个战斗力 每个队伍的所有球员战斗力之和为该队伍的总体战斗力 现有10个球员准备分为两队进行训练赛 教练希望2个队伍的战斗力差值能够尽可能的小 以达到最佳训练效果 给出10个球员的战斗力 如
  • docker搭建hadoop hdfs完全分布式集群

    1 制作hadoop镜像 参见 https www cnblogs com rmxd p 12051866 html 该博客中只参考制作镜像部分 固定IP及启动集群的部分应该跳过 这里注意 在做好的镜像里 要安装 which 工具 否则在执