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

embedded/2024/9/23 20:21:30/

桂电人工智能学院大数据实验,使用 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 换源或者开不可描述的软件的 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.ppmy.cn/embedded/48892.html

相关文章

高等数学与初等数学的分水岭是什么?

高等数学与初等数学的分水岭是什么? 高等数学与初等数学的一个重要分水岭可以认为是极限的概念。 在初等数学中,主要涉及常量的运算和一些简单的函数关系等。而当引入极限概念后,数学的研究范围和方法发生了很大变化。高等数学围绕极限展开了…

安全测试框架 二

使用安全测试框架进行测试,可以遵循以下步骤进行,以确保测试的全面性和系统性: 一、明确测试目标和需求 确定测试的范围和重点,明确要测试的系统或应用的安全性方面的关键点和重要性。根据业务需求和安全标准,制定详…

【three.js】旋转、缩放、平移几何体

目录 一、缩放 二、平移 三、旋转 四、居中 附源码 BufferGeometry通过.scale()、.translate()、.rotateX()、.rotateY()等方法可以对几何体本身进行缩放、平移、旋转,这些方法本质上都是改变几何体的顶点数据。 我们先创建一个平面物体,样子是这样的。 一、缩放 // 几何…

探索档案未来,尽在ARCHE-2024

2024年第三届上海国际智慧档案展览会暨高峰论坛(ARCHE-2024)将于2024年6月19日至21日在上海跨国采购会展中心隆重举行。深圳市铨顺宏科技有限公司应邀参展,将以全新形象盛装亮相,展示其在档案管理领域的最新技术和解决方案。 ARC…

深入分析 Android BroadcastReceiver (三)

文章目录 深入分析 Android BroadcastReceiver (三)1. 广播消息的优缺点及使用场景1.1 优点1.2 缺点 2. 广播的使用场景及代码示例2.1. 系统广播示例:监听网络状态变化 2.2. 自定义广播示例:发送自定义广播 2.3. 有序广播示例:有序广播 2.4. …

521. 最长特殊序列 Ⅰ(Rust单百解法-脑筋急转弯)

题目 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在,则返回 -1 。 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长 子序列 (即不能是其他字符串的子序列) 。 字符串 s …

[数据集][目标检测]减速带检测数据集VOC+YOLO格式5400张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5400 标注数量(xml文件个数):5400 标注数量(txt文件个数):5400 标注…

web前端培训生:深入探索与技能进阶之路

web前端培训生:深入探索与技能进阶之路 作为web前端培训生,你正站在一个充满挑战与机遇的起点。在这个日新月异的行业中,掌握扎实的前端技能和不断学习的态度将是你脱颖而出的关键。本文将分四个方面、五个方面、六个方面和七个方面&#xf…