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

桂电人工智能学院大数据实验,使用 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:3hostname: namenodecommand: ["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/dfsenv_file:- ./config.envprivileged: trueenvironment:ENSURE_NAMENODE_DIR: "/tmp/hadoop-root/dfs/name" # 确保Namenode目录存在networks:- hadoop-net# Datanode服务:HDFS的工作节点,存储实际的数据块,处理客户端的读写请求,根据Namenode的指示执行数据块的创建、删除和复制操作。datanode:image: apache/hadoop:3hostname: datanodecommand: ["hdfs", "datanode"]user: "root:root"env_file:- ./config.envprivileged: truevolumes:- datanode:/tmp/hadoop-root/dfs # 存储数据块的路径networks:- hadoop-net# Datanode2服务:另一个Datanode实例,用于增加集群的存储容量和数据冗余。datanode2:image: apache/hadoop:3hostname: datanode2command: ["hdfs", "datanode"]user: "root:root"env_file:- ./config.envprivileged: truevolumes:- datanode2:/tmp/hadoop-root/dfs # 存储数据块的路径networks:- hadoop-net# Datanode3服务:又一个Datanode实例,用于进一步增加集群的存储容量和数据冗余。datanode3:image: apache/hadoop:3hostname: datanode3command: ["hdfs", "datanode"]user: "root:root"env_file:- ./config.envprivileged: truevolumes:- datanode3:/tmp/hadoop-root/dfs # 存储数据块的路径networks:- hadoop-net# ResourceManager服务:YARN中的主节点,负责资源的管理和分配,调度作业在集群中运行。resourcemanager:image: apache/hadoop:3hostname: resourcemanagercommand: ["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.envvolumes:- ./test.sh:/opt/test.sh # 挂载测试脚本networks:- hadoop-net# NodeManager服务:YARN中的工作节点,负责单个节点上的资源管理和任务执行。nodemanager:image: apache/hadoop:3command: ["yarn", "nodemanager"]user: "root:root"env_file:- ./config.envports:- 8042:8042 # NodeManager Web UI端口networks:- hadoop-net# 用于在宿主机设置 socks5 代理以使用容器内 hadoop-net 网络,不然使用 hadoop 的 webui 不能上传文件socks5:image: serjs/go-socks5-proxycontainer_name: socks5ports:- 10802:1080restart: always networks:- hadoop-net# Jupyter服务:用于在Jupyter Notebook中进行PySpark实验。jupyter:image: jupyter/pyspark-notebookuser: rootrestart: alwaysvolumes:- ./notebooks:/home/jupyternbenvironment:- NB_USER=jupyternb- NB_UID=1000- NB_GID=100- CHOWN_HOME=yes- JUPYTER_TOKEN=123456command: start.sh jupyter notebook --NotebookApp.token=${JUPYTER_TOKEN}working_dir: /home/jupyternbports:- '8888:8888'networks:- hadoop-netvolumes: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 换源或者开不可描述的软件(推荐),由于某些原因,国内大部分镜像源于 2024.6.6 日后大部分关闭,因此请自行查找最新可用的镜像源,截至 2024.6.16 ,可用的有

{ "registry-mirrors" : [ "https://docker.m.daocloud.io", "https://docker.jianmuhub.com","https://huecker.io","https://dockerhub.timeweb.cloud","https://dockerhub1.beget.com","https://noohub.ru"] 
}

等到出现下图则运行成功

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

建议

为了和PPT里面的代码一致,建议创一个 data 目录,然后把两个文件上传到 data 下面

image-20240616033441148

后续

在 Jupyter 中需要修改 HDFS 的 URL

hdfs://namenode/data/train.tsv,主机名改成 namenode,其中/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)# 设置文件路径
Path = "hdfs://namenode/" # 这是目录路径,文件路径 hdfs://namenode/data/train.tsv

效果如图

image-20240616160234928

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

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

相关文章

矩阵补全学习笔记

目录 矩阵补全概念原理 ICLR 2020 | 超越传统,基于图神经网络的归纳矩阵补全 因果面板数据模型的矩阵补全方法 矩阵补全概念原理 【综述】矩阵补全问题-CSDN博客 GitHub - XLearning-SCU/2022-CVPR-AirNet: PyTorch implementation for All-In-One Image Restor…

windows11子系统Ubuntu 22.04.4子安装图形化界面

1、windows11家庭版本设置 打开虚拟机安装许可 2、Microsoft Store下载安装ubuntu 我使用的是22.04.4 LTS版本 3、 打开ubuntu 命令窗口 1、打开win11的命令行,在下拉三角下标,打开,可以看到有Ubuntu 的选项,点击即可进入linux命…

pdb restore flashback recover 的三个办法 + CDB 级还原 注意数据库实际时间

Recover可以drop掉PDB,另外两个不行!! 除非CDB级还原 千万要注意好数据库时间 RMAN> recover pluggable database pdb until time "to_date(16-JUN-2024 19:00:00,DD-MON-YYYY HH24:MI:SS)" auxiliary destination data1; S…

鸿蒙应用开发

学习视频: 00.课程介绍_哔哩哔哩_bilibili 官网:开发者文档中心 | 华为开发者联盟 (huawei.com) 开发工具 :DevEcoStudio , 类似Jetbrains 全家桶 ArkTS开发语言 :(基于TS,集成了前端语言&#xf…

wifiphisher详细安装教程

仅用于学习: 1、先进入root权限; 2、下载roguehostpad文件; git clone https://github.com/wifiphisher/roguehostapd.git3、进入roguehostpad文件夹; cd roguehostapd4、检查roguehostpad文件夹内的setup.py颜色是否变绿&#…

MySQL日志(二):MySQL抖动

一条SQL语句, 正常执行的时候特别快, 但是有时也不知道怎么回事, 它就会变得特别慢, 并且这样的场景很难复现, 它不只随机, 而且持续时间还很短。 看上去, 这就像是数据库“抖”了一下。 今天&…

c++编程(18)——deque的模拟实现(2)容器篇

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 deque的数据结构deque的构造默认构造填充构造 deque的其他操作deque的插入、删除push_back和push_frontpop_back和pop_frontclear、erase和insert操作 传送门 在上一篇中,我们已经实现了deque最核…

springboot整合redis以及使用

在Spring Boot中整合Redis,并使用Redis作为缓存或数据存储,是非常常见和有用的场景。Redis作为一种高性能的键值存储系统,可以用来加速数据访问、会话管理、消息队列等多种用途。下面是整合和使用Redis的基本步骤: 1. 添加Redis依…

数学中常用希腊字母发音读法

序号大写小写英文注音国际音标注音中文注音1Ααalphaa:lf阿尔法2Ββbetabet贝塔3Γγgammaga:m伽马4Δδdeltadelt德尔塔5Εεepsilonepsilon伊普西龙6Ζζzetazat截塔7Ηηetaeit艾塔8Θθthetθit西塔9Ιιiotaiot约塔10Κκkappakap卡帕11∧λlambdalambd兰布达12Μμmumj…

数据仓库和数据库有什么区别?

一、什么是数据仓库二、什么是数据库三、数据仓库和数据库有什么区别 一、什么是数据仓库 数据仓库(Data Warehouse)是一种专门用于存储和管理大量结构化数据的信息系统。它通过整合来自不同来源的数据,为企业提供统一、一致的数据视图&…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素,类似slot占位符。 简而言之:就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

测试基础(一)

测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础测试基础…

Outlook 邮箱使用技巧大全

前言 Microsoft Outlook 不仅是一个电子邮件客户端,还是一个强大的时间管理工具。无论你是个人用户还是企业用户,了解如何高效使用Outlook都可以帮助你提升工作效率。下面,我将为你介绍几个实用的Outlook邮箱使用技巧。 技巧汇总 1. 邮件分…

论文阅读:RAM++ | Open-Set Image Tagging with Multi-Grained Text Supervision

发表时间:2023年11月16 论文地址:https://arxiv.org/pdf/2310.15200 项目地址:https://github.com/xinyu1205/recognize-anything Recognize Anything Plus Model(RAM),这是一种有效利用多粒度文本监督的开…

博通加速向Nvidia发起进攻 为何连iPhone 15都不能用“苹果智能”?

博通加速向Nvidia发起进攻 博通强调的一项优势是其 XPU 的能效。其功耗不到 600 瓦,是业内功耗最低的 AI 加速器之一。 Nvidia 的许多竞争对手都想抢占其市场主导地位。其中一个不断出现的名字是 Broadcom。仔细观察就会知道原因。其 XPU 功耗不到 600 瓦&#xff…

GPT-4并非世界模型,LeCun双手赞同!ACL力证LLM无法模拟真实世界

一直以来,支持LLM的观点之一是模型可以集成海量事实知识,作为通往「世界模拟器」的基础。虽然也有不少反对意见,但缺乏实证依据。那么,LLM能否作为世界模拟器? 最近,亚利桑那大学、微软、霍普金斯大学等机构…

飞腾银河麒麟V10安装Todesk

下载安装包 下载地址 https://www.todesk.com/linux.html 安装 yum makecache yum install libappindicator-gtk3-devel.aarch64 rpm -ivh 下载的安装包文件后台启动 service todeskd start修改配置 编辑 /opt/todesk/config/config.ini 移除自动更新临时密码 passupda…

代码随想录算法训练营第七天| 454.四数相加II |383. 赎金信 |15. 三数之和 |18. 四数之和

454.四数相加II 文档讲解:代码随想录 视频讲解:学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili 1. 暴力算法。 2. 先两个循环将和放到map中,再两个循环求和查询map,计算…

英伟达发布Nemotron-4 340B通用模型:专为生成合成数据设计的突破性AI

引言 2023年6月14日,英伟达发布了Nemotron-4 340B通用模型,专为生成训练大语言模型的合成数据而设计。这一模型可能彻底改变训练大模型时合成数据的生成方式,标志着AI行业的一个重要里程碑。本文将详细介绍Nemotron-4 340B的各个方面&#x…

java enum 详解

前言 提示:使用enum 作为常量引发的一些思考和总结: 提示:以下是本篇文章正文内容,下面案例可供参考 一、enum (枚举)是什么? enum 的本质其实也是class,和普通的类一样,它继承自java.lang抽象类Enum,而抽…