桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

news2024/11/25 4:25:06

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

第一步

安装 Docker, Windows 上可以使用 Docker Desktop

下载地址:https://www.docker.com/products/docker-desktop/

安装过程自行谷歌

安装好的标志:打开终端

image-20240616025430157

运行docker ps,显示下面内容即安装成功

image-20240616025530004

第二步

创建一个文件夹,名字随意,在文件夹下面新建docker-compose.yml

这是什么?

docker-compose.yml 是一个用来定义和管理多容器 Docker 应用的配置文件。通过 docker-compose.yml 文件,你可以定义多个服务(容器),以及它们之间的关系、依赖和配置。这个文件使用 YAML(YAML Ain’t Markup Language)格式编写,非常易读。

编写 docker-compose.yml

version: "3"
networks:
   hadoop-net:
      driver: bridge
services:
   # Namenode服务:HDFS的主节点,管理文件系统命名空间,控制客户端对文件的访问,维护所有文件和目录的元数据。
   namenode:
      image: apache/hadoop:3
      hostname: namenode
      command: ["hdfs", "namenode"]
      user: "root:root"
      ports:
        - 19000:9000 # HDFS Namenode服务端口
        - 9870:9870  # Namenode Web UI端口
        - 8020:8020  # HDFS Namenode RPC端口
      volumes:
        - namenode:/tmp/hadoop-root/dfs
      env_file:
        - ./config.env
      privileged: true
      environment:
          ENSURE_NAMENODE_DIR: "/tmp/hadoop-root/dfs/name" # 确保Namenode目录存在
      networks:
        - hadoop-net

   # Datanode服务:HDFS的工作节点,存储实际的数据块,处理客户端的读写请求,根据Namenode的指示执行数据块的创建、删除和复制操作。
   datanode:
      image: apache/hadoop:3
      hostname: datanode
      command: ["hdfs", "datanode"]
      user: "root:root"
      env_file:
        - ./config.env
      privileged: true
      volumes:
        - datanode:/tmp/hadoop-root/dfs # 存储数据块的路径
      networks:
        - hadoop-net

   # Datanode2服务:另一个Datanode实例,用于增加集群的存储容量和数据冗余。
   datanode2:
      image: apache/hadoop:3
      hostname: datanode2
      command: ["hdfs", "datanode"]
      user: "root:root"
      env_file:
        - ./config.env
      privileged: true
      volumes:
        - datanode2:/tmp/hadoop-root/dfs # 存储数据块的路径
      networks:
        - hadoop-net

   # Datanode3服务:又一个Datanode实例,用于进一步增加集群的存储容量和数据冗余。
   datanode3:
      image: apache/hadoop:3
      hostname: datanode3
      command: ["hdfs", "datanode"]
      user: "root:root"
      env_file:
        - ./config.env
      privileged: true
      volumes:
        - datanode3:/tmp/hadoop-root/dfs # 存储数据块的路径
      networks:
        - hadoop-net

   # ResourceManager服务:YARN中的主节点,负责资源的管理和分配,调度作业在集群中运行。
   resourcemanager:
      image: apache/hadoop:3
      hostname: resourcemanager
      command: ["yarn", "resourcemanager"]
      user: "root:root"
      ports:
         - 8088:8088 # ResourceManager Web UI端口
         - 8030:8030 # ResourceManager RPC端口
         - 8031:8031 # ResourceManager端口
         - 8032:8032 # ResourceManager端口
         - 8033:8033 # ResourceManager端口
      env_file:
        - ./config.env
      volumes:
        - ./test.sh:/opt/test.sh # 挂载测试脚本
      networks:
        - hadoop-net

   # NodeManager服务:YARN中的工作节点,负责单个节点上的资源管理和任务执行。
   nodemanager:
      image: apache/hadoop:3
      command: ["yarn", "nodemanager"]
      user: "root:root"
      env_file:
        - ./config.env
      ports:
         - 8042:8042 # NodeManager Web UI端口
      networks:
        - hadoop-net


   # 用于在宿主机设置 socks5 代理以使用容器内 hadoop-net 网络,不然使用 hadoop 的 webui 不能上传文件
   socks5:
      image: serjs/go-socks5-proxy
      container_name: socks5
      ports:
         - 10802:1080
      restart: always 
      networks:
        - hadoop-net

   # Jupyter服务:用于在Jupyter Notebook中进行PySpark实验。
   jupyter:
      image: jupyter/pyspark-notebook
      user: root
      restart: always
      volumes:
        - ./notebooks:/home/jupyternb
      environment:
        - NB_USER=jupyternb
        - NB_UID=1000
        - NB_GID=100
        - CHOWN_HOME=yes
        - JUPYTER_TOKEN=123456
      command: start.sh jupyter notebook --NotebookApp.token=${JUPYTER_TOKEN}
      working_dir: /home/jupyternb
      ports:
        - '8888:8888'
      networks:
        - hadoop-net

volumes:
  namenode:
  datanode:
  datanode2:
  datanode3:

还需要编写一个 hadoop 配置文件 config.env

# CORE-SITE.XML配置
# 设置默认的文件系统名称为HDFS,并指定namenode
CORE-SITE.XML_fs.default.name=hdfs://namenode
CORE-SITE.XML_fs.defaultFS=hdfs://namenode

# 设置静态用户为root
CORE-SITE.XML_hadoop.http.staticuser.user=root

# 指定Hadoop临时目录
CORE-SITE.XML_hadoop.tmp.dir=/tmp/hadoop-root

# HDFS-SITE.XML配置
# 设置namenode的RPC地址
HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:8020

# 设置数据块的副本数量
HDFS-SITE.XML_dfs.replication=3

# MAPRED-SITE.XML配置
# 使用YARN作为MapReduce框架
MAPRED-SITE.XML_mapreduce.framework.name=yarn

# 配置MapReduce的环境变量
MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}
MAPRED-SITE.XML_mapreduce.map.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}
MAPRED-SITE.XML_mapreduce.reduce.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}

# 设置MapReduce JobHistory的地址
MAPRED-SITE.XML_mapreduce.jobhistory.address=0.0.0.0:10020
MAPRED-SITE.XML_mapreduce.jobhistory.webapp.address=0.0.0.0:19888

# YARN-SITE.XML配置
# 设置ResourceManager的主机名
YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager

# 启用NodeManager的物理内存检查
YARN-SITE.XML_yarn.nodemanager.pmem-check-enabled=true

# 设置NodeManager删除调试信息的延迟时间(秒)
YARN-SITE.XML_yarn.nodemanager.delete.debug-delay-sec=600

# 启用NodeManager的虚拟内存检查
YARN-SITE.XML_yarn.nodemanager.vmem-check-enabled=true

# 启用MapReduce Shuffle服务
YARN-SITE.XML_yarn.nodemanager.aux-services=mapreduce_shuffle

# 设置NodeManager的CPU核数
YARN-SITE.XML_yarn.nodemanager.resource.cpu-vcores=4

# 设置YARN应用程序的类路径
YARN-SITE.XML_yarn.application.classpath=opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/mapreduce/*:/opt/hadoop/share/hadoop/yarn:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*

# CAPACITY-SCHEDULER.XML配置
# 设置容量调度器的最大应用数量
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-applications=10000

# 设置容量调度器最大AM资源百分比
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-am-resource-percent=0.1

# 设置资源计算器
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator

# 配置默认队列
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.queues=default
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.user-limit-factor=1
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.maximum-capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.state=RUNNING
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_submit_applications=*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_administer_queue=*

# 设置节点本地延迟
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.node-locality-delay=40

# 配置队列映射
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings=
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings-override.enable=false

这是文件夹下的两个文件

image-20240616030523851

然后运行 docker-compose -p project1 up -d

第一次运行需要拉取大概2个G的镜像,如果网络失败请自行搜索如何给 Docker Desktop 换源或者开不可描述的软件的 TUN 模式

等到出现下图则运行成功

image-20240616031105397

运行docker ps即可看到运行中的容器,如果缺少哪个容器了应该是端口号冲突导致,可以运行docker-compose logs查看日志并修改docker-compose.yml中的端口映射

image-20240616030943468

第三步

浏览器打开127.0.0.1:8888,即可看到 Jupyter Web UI

image-20240616031535520

image-20240616031611379

第四步

打开 http://127.0.0.1:9870/ 即可看到 Hadoop 的 Namenode Web UI

image-20240616032851248

image-20240616032740054

image-20240616032932730

注意:如果想从这里上传文件,需要将浏览器的网络代理到刚刚创建的 socks5 代理容器里面,下面是 Edge 浏览器设置代理教程

image-20240616032140056

搜索SwitchyOmega并获取

image-20240616032235262

配置代理,协议为socks5,地址为本机127.0.0.1,端口为docker-compose.yml里面socks5服务映射的10802端口

image-20240616032406547

记得选择代理然后刷新网页

image-20240616033113083

image-20240616033441148

后续

在 Jupyter 中需要修改 HDFS 的 URL

hdfs://namenode/data/train.tsv,其中/data/train.tsv为 HDFS 里面的文件路径

from pyspark import SparkConf, SparkContext
from py4j.java_gateway import java_import

# 检查是否已经存在SparkContext实例
if 'sc' in globals():
    sc.stop()

# 创建新的SparkContext实例
conf = SparkConf().setAppName("HDFSExample").setMaster("local")
sc = SparkContext(conf=conf)

# 导入必要的Java类
java_import(sc._gateway.jvm, "org.apache.hadoop.conf.Configuration")
java_import(sc._gateway.jvm, "org.apache.hadoop.fs.FileSystem")
java_import(sc._gateway.jvm, "org.apache.hadoop.fs.Path")

# 创建Hadoop配置对象
hadoop_conf = sc._gateway.jvm.Configuration()
hadoop_conf.set("fs.defaultFS", "hdfs://namenode")
hdfs = sc._gateway.jvm.FileSystem.get(hadoop_conf)

# 设置文件路径
file_path = "hdfs://namenode/data/train.tsv"

# 获取文件状态并读取文件大小
path = sc._gateway.jvm.Path(file_path)
file_status = hdfs.getFileStatus(path)
file_size = file_status.getLen()

print(f"File path: {file_path}")
print(f"File size: {file_size} bytes")

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

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

相关文章

产品人生(13):从“产品的RFM分析”看如何探索“职业方向”

我们在做产品分析时,经常会用到一种方法“产品的RFM分析”,它是一种客户细分和价值评估的常用方法,广泛应用于电子商务、零售和其他众多行业,它可以帮助企业和产品团队更好地理解用户行为,优化营销策略,提升…

基于协同过滤算法的电影推荐

基于协同过滤算法的电影推荐 电影推荐系统使用了基于**协同过滤(Collaborative Filtering)的算法来生成推荐。具体来说,使用了基于用户的协同过滤(User-Based Collaborative Filtering)**算法,步骤如下&am…

国外视频搬运素材去哪里找?可搬运下载国外的素材网站库分享

如果你正在寻找高质量的国外视频素材来提升你的视频制作水平,不用担心,今天我将为大家推荐几个知名的视频素材网站,让你轻松找到理想的素材资源。 蛙学府 首先推荐的是国内非常受欢迎的“蛙学府”。蛙学府是一个综合性网站,专门提…

通过Navicat Premium进行sql文件互转db文件

目录 一、获取原来数据sql文件 二、通过sql文件转换db文件 三、db文件转换成功 一、获取原来数据sql文件 原数据main右键》转储SQL文件》结构和数据》main.sql 二、通过sql文件转换db文件 新建db文件》Navicta》新建SQLite(SQ)》导入db文件》 main右键》运行SQL文件》 mai…

【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】

调试笔记-系列文章目录 调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 文章目录 调试笔记-系列文章目录调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调…

计算机专业:黄金时代是否依旧?

计算机专业:黄金时代是否依旧? 随着2024年高考落幕,数百万高三学生将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去的几十年里,计算机科…

Adobe设计替代软件精选列表

Adobe软件的替代列表,最初由 XdanielArt 收集,并由社区改进。您可以随意打开问题或拉出请求,或从数据中创建图像(以便于共享)。列表总是按照免费和开源选项的顺序排列,但根据您的用例,它可能不是最佳选择 替代因素 &am…

【Qt】QT textBrowser 设置字体颜色和大小

1. 效果 2. 代码 {ui->methodText->append("<font size9 colorgreen> dddddddddd </font>");ui->methodText->append("<font size9 colorred> vvvvvvvvvv </font>"); }

测试 halcon算子 derivate_gauss 高斯一阶导数卷积

参上了 matlab fileexchange 有人上传了高斯 dx,dy一阶导卷积代码 卷积核的计算我修改成了核元素绝对值求做分母 归一化 和halcon的 derivate_gauss算子的计算结果对别如下 还是不知道怎么做到两者结果一致. 测试图像: 我的: halcon的: 获取两份图像的灰度值到数组并做对应位…

利用机器学习重构视频中的人脸

引言 中国与英国的研究团队携手合作&#xff0c;开创了一种创新的视频面孔重塑技术。这项技术能够以极高的一致性对视频中的面部结构进行逼真的放大和缩小&#xff0c;且避免了常见伪影的产生。 从研究人员选取的YouTube视频样例中可见&#xff0c;经过处理后&#xff0c;女演…

nvm 管理多版本node

因有多个前端项目&#xff0c;不同项目使用的node版本不一样&#xff0c;所以在本地使用nvm管理不同的node版本。 一、安装nvm 1&#xff09;nvm理解 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff…

经销商的生意好坏很大程度上跟这群人有关

可以说经销商企业的营收几乎都是靠业务员跑出来的&#xff0c;无论在什么时期、无论在什么区域、无论什么市场情况、无论销售哪些商品&#xff0c;业务员都是企业销售工作的基础&#xff0c;一方面企业需要通过各种手段去提升业务员工作效率&#xff0c;让他们有能力去获得更多…

《C语言》动态内存管理

文章目录 一、动态内存分配二、关于动态内存开辟的函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误1、对NULL指针的解引用操作2、对动态开辟空间的越界访问3、对非动态开辟内存使用free释放4、释放free释放一块动态开辟的内存的一部分5、对同一块动态内存多…

牛客小白月赛96 解题报告 | 珂学家

前言 题解 A. 最少胜利题数 签到 n1 len(set(input())) n2 len(set(input()))if n1 < n2:n1, n2 n2, n1print (-1 if n1 6 else n1 - n2 1)B. 最少操作次数 思路: 分类讨论 只有-1,0,1,2这四种结果 特判 01, 10 n int(input()) s input()# 枚举 from collectio…

Nginx配置文件详解指令示咧Nginx配置文件深入详解与实战

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

线上教育培训办公系统系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;教师管理&#xff0c;学生管理&#xff0c;运营事件管理 教师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;作业管理&#xff0c;电…

了解统计学中不同类型的分布

目录 一、说明 二、均匀分布&#xff1a; 三、机器学习和数据科学中的均匀分布示例&#xff1a; 3.1 对数正态分布&#xff1a; 3.2 机器学习和数据科学中的对数正态分布示例&#xff1a; 四、 帕累托分布 4.1 什么是幂律&#xff1f; 4.2 机器学习和数据科学中的帕累托分布示例…

atmega8 上传程序

使用icsp 烧写时先关闭串口程序&#xff0c;与串口uart连接相关的电路勿于电脑连接 接触不良 1.使用icsp 上传 1&#xff09;可以直接上传程序 如官方示例blink 或是 serial示例 2&#xff09;可以先烧录bootload 方便下次使用串口上传程序代码 A)使用专门的icsp 上传器上传…

慧天卓特:2024年春夏之季山东旱情干旱监测分析

2024年开春以来&#xff0c;山东省平均降水量较常年同期偏少92.8%&#xff0c;同时受高温天气影响&#xff0c;山东出现了阶段性气象旱情。截至6月10日&#xff0c;山东省农作物受旱面积121.5万亩&#xff0c;农田缺墒面积262.4万亩。为全力抗旱保夏种&#xff0c;山东自5月29日…

datax的安装及使用入门

1 下载解压Datax tar包 下载到自己指定的安装目录 #wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 进行解压 tar -zxvf datax.tar.gz 2 Datax验证 #修改datax/bin目录下datax.py的权限 chmod 777 datax/bin/datax.py 2.1运行官方给定的任务…