桂电人工智能学院大数据实验,使用 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.rhkb.cn/news/356645.html

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

相关文章

JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇

JetBrains PyCharm 2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。 JetBrains PyCharm 20…

Nuxt快速学习开发 - Nuxt3静态资源Assets

Nuxt 使用两个目录来处理样式表、字体或图像等资产。 public/目录内容按原样在服务器根目录中提供。 assets/目录包含您希望构建工具(Vite 或 webpack)处理的所有资产。 public/目录 public目录用作静态资产的公共服务器,可在您的应用程序定…

PDF标准详解(三)—— PDF坐标系统和坐标变换

之前我们了解了PDF文档的基本结构,并且展示了一个简单的hello world。这个hello world 虽然只在页面中显示一个hello world 文字,但是包含的内容却是不少。这次我们仍然以它为切入点,来了解PDF的坐标系统以及坐标变换的相关知识 图形学中二维…

colima配置docker镜像源

只在 colima ssh 环境下修改 docker 配置文件是无效的,我们需要修改 colima 配置文件才能使 docker 镜像源生效。 此时你需要进入到~/.colima/default目录下编辑colima.yaml文件。该文件是 colima 的配置文件。内容如下图所示,我这里配置了许多家的镜像源…

换电脑后导入git本地仓库记录

导入本地仓库tig记录 换了新电脑,将旧电脑的数据盘查到新的笔记本之后发现,使用pycharm 读取不到本地的git提交记录了,我没有将本地git上传到远程仓库的习惯,这可抓马了,硬盘插回去的话也太麻烦了。试了 vscode 提示设…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代,电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而,有时我们可能会不小心删除了一些重要文件,或者因为某种原因导致数据丢失。这时候,恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

国企:2024年6月中国移动相关招聘信息

中国移动研究院: AI中心-大模型数据工程师 工作地点:北京市、西安市2 发布时间 :2024-06-18 学历要求:硕士研究生及以上 招聘人数:招聘若干人 专业要求 计算机、人工智能、软件工程、数学等相关专业 工作职责 1、负责处理和清洗大规模、多来源的数据集,保证数…

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三) PHP代码审计简介 PHP代码审计是指对PHP程序进行安全审计,以发现潜在的安全漏洞和风险。PHP是一种流行的服务器端脚本语言,广泛用于开发网站和Web应用程序。由…

解决 执行 jar 命令 控制台乱码

Springboot项目,编码为utf8 打包后,为了在控制台运行时不乱码,需要在控制台中依次执行以下命令: 第一步: chcp 65001第二步: java -jar -Dfile.encodingutf-8 你的.jar

Stable Diffusion 3 大模型文生图实践

windows教程2024年最新Stable Diffusion本地化部署详细攻略,手把手教程(建议收藏!!)_stable diffusion 本地部署-CSDN博客 linux本地安装教程 1.前期准备工作 1)创建conda环境 conda create --name stable3 python3.10 2)下…

如何在不同的操作系统中查看路由器的IP地址?这里有详细步骤

如果你曾经需要访问路由器的设置页面来进行一些配置更改,你知道你需要路由器的IP地址才能访问。如果你忘记了这个IP地址是什么,下面是如何在几乎所有平台上找到它的。 为什么路由器的IP很有用 在网络世界中,默认网关是一个IP地址,当流量被发送到当前网络之外的目的地时,…

分行业二氧化碳排放数据

分行业二氧化碳排放量 资源名称:分行业二氧化碳排放量 数据来源:中国能源统计年鉴 时间范围:1995-2018年指标:八类能源和总量:煤炭、焦炭、原油、汽油、煤油、柴油、燃料油、天然气

windows设置开机启动项

将文件放到下面路径即可实现每次开机启动 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

《珊瑚岛》是一款什么类型的游戏 苹果电脑如何玩到《珊瑚岛》

在众多电子游戏中,有些游戏因其独特的游戏体验和丰富的内容而脱颖而出,《珊瑚岛》便是其中之一。在游戏中你将离开宝京前往珊瑚岛,种植农作物、饲养动物、和岛民成为朋友。您不仅可以振兴该岛小镇,还可以保护和修复周围的珊瑚礁。…

FL论文专栏|设备异构、异步联邦

论文:Asynchronous Federated Optimization(12th Annual Workshop on Optimization for Machine Learning) 链接 实现Server的异步更新。每次Server广播全局Model的时候附带一个时间戳,Client跑完之后上传将时间戳和Model同时带回…

在 Equinix 上使用 MinIO 控制云数据成本

公有云改变了公司构建、部署和管理应用程序的方式,主要是向好的方向发展。在您刚开始使用时,公有云会提供基础架构、服务、支持和维护,以便快速启动和运行。它以几乎无限的方式提供最终的可伸缩性,无论应用程序的负载如何&#xf…

基于AT89C52单片机的温度报警系统

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89456321?spm=1001.2014.3001.5503 仿真构造:AT89C52+DS18B20温度模块+三按键+蜂鸣器+四位数码管显示+电源模块。 压缩包构造:源码+仿真图+设计文档+原理图+开题文档+元件…

程序猿成长之路之数据挖掘篇——决策树分类算法(1)——信息熵和信息增益

决策树不仅在人工智能领域发挥着他的作用,而且在数据挖掘中也在分类领域中独占鳌头。了解决策树的思想是学习数据挖掘中的分类算法的关键,也是学习分类算法的基础。 什么是决策树 用术语来说,决策树(Decision Tree)是…

Springboot拓展之整合邮件 JavaMail的使用与实操

邮件 电子邮件仍然是我们企业间交往的一种非常常见的方式 发送简单邮件 第一步首先导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.6.13</version&…

Docker 拉取镜像失败处理 配置使用代理拉取

解决方案 1、在 /etc/systemd/system/docker.service.d/http-proxy.conf 配置文件中添加代理信息 2、重启docker服务 具体操作如下&#xff1a; 创建 dockerd 相关的 systemd 目录&#xff0c;这个目录下的配置将覆盖 dockerd 的默认配置 代码语言&#xff1a;javascript 复…