分布式数据存储基础与HDFS操作实践(副本)

ops/2025/1/17 21:22:02/

以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。

一、实验目的

1、理解分布式文件系统的基本概念和工作原理。

2、掌握Hadoop分布式文件系统(HDFS)的基本操作。

3、学习如何在HDFS上进行文件的上传、下载、查看和管理。

二、实验环境准备

1、JAVA环境准备:确保Java Development Kit (JDK) 已安装并配置好环境变量。

2、Hadoop环境准备:安装并配置Hadoop环境,确保Hadoop的各个组件可以在伪分布式模式下运行。

三、实验教材参考

《大数据存储》,谭旭,人民邮电出版社,2022,ISBN 978-7-115-59414-3。

四、实验内容与步骤

1、 Hadoop的安装与配置

1. 根据教材《大数据存储》中的指导,完成Hadoop的安装。

2. 配置Hadoop以运行在伪分布式模式。

2.1 记录节点1的IP地址

节点1的IP地址为10.185.34.80

2.2 记录节点2的IP地址

节点2的IP地址为10.185.34.81

2.3 记录节点3的IP地址

节点3的IP地址为10.185.34.82

2.4 配置主机名称

主机1 名称配置

主机2名称配置

主机3名称配置

配置完名称后,重启主机。

2.5 节点1主机名与IP地址映射文件配置

检测配置是否成功

配置成功。

主机2和主机3的步骤相同,此处省略。

2.6 配置SSH免密码登录

2.6.1 节点秘钥配置及分发

使用下面代码生成使用rsa加密方式的秘钥

echo -e "\n"|ssh-keygen -t rsa -N "" >/dev/null 2>&1

查看秘钥

通过下面的命令将公钥文件发送到本机,创建root免密钥通道

ssh-copy-id -i /root/.ssh/id_rsa.pub root@realtime-1

将公钥文件发送到其他两个节点。其他两个节点进行相同的操作。此处省略。

2.6.2 登录测试

2.7 配置JDK

2.7.1 创建工作路径

2.7.2 解压安装包

2.7.3 配置环境变量

在.bashrc文件中写入下列内容:

把环境变量配置文件分发到其他两个节点。

2.7.4 更新环境变量

2.7.5 验证JDK是否配置成功

2.8 NTP服务配置

2.8.1 NTP服务配置

主机1中NTP服务配置。

主机2中NTP服务配置。

主机3中NTP服务配置。

2.8.2 启动NTP服务

在主机1中启动NTP服务。

在主机2中启动NTP服务。

在主机3中启动NTP服务。

2.8.3 NTP服务状态查看

2.9 SElinux安全配置

关闭节点的SElinux的安全设置。

2.10 安装配置ZooKeeper集群

2.10.1 解压安装包

查看解压后的文件内容

2.10.2 数据存储目录创建

创建数据存储目录data和日志存储目录logs

2.10.3 主机myid编号文件创建

2.10.4 zookeeper 配置文件编辑

 通过命令vi /usr/cx/zookeeper-3.4.6/conf/zoo.cfg 创建并打开zoo.cfg配置文件,并在文件中写入下列内容

2.10.5 文件分发

通过下面命令将节点1的zookeeper文件包分发到节点2中。

scp -r /usr/cx/zookeeper-3.4.6 root@realtime-2:/usr/cx/

通过下面命令将节点1的zookeeper文件包分发到节点3中

scp -r /usr/cx/zookeeper-3.4.6 root@realtime-3:/usr/cx/

2.10.6 环境变量配置

通过命令 vi ~/.bashrc 使用vi编辑器打开 ~/.bashrc文件,将文件编辑为下图内容

通过命令将环境变量配置文件分发到其他节点

2.10.7 更新环境变量

2.10.8 验证环境变量是否配置成功

三个节点上的zookeeper环境变量均配置成功

2.11 zookeeper启动及状态查看

2.11.1 zookeeper启动

三个节点上的zookeeper启动成功

2.11.2 zookeeper运行状态查看

由结果得出,节点2是作为leader角色运行,其他两个节点是作为follower角色运行。

2.12 配置hadoop集群

2.12.1 数据存储目录创建

创建Hadoop元数据存储目录namenode,Hadoop数据存储目录datanode,创建JournalNode数据存储目录journalnode,创建任务调度的日志存储目录hadoop-yarn。

2.12.2 解压安装文件

使用tar -zxvf /usr/software/hadoop-2.7.1.tar.gz -C /usr/cx命令解压Hadoop安装文件。

2.12.3 编辑hadoop配置文件

使用vi /usr/cx/hadoop-2.7.1/etc/hadoop/hadoop-env.sh命令对配置文件进行编辑。

将此处修改为jdk的安装路径。

使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/hdfs-site.xml 配置hdfs-site.xml 文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:

/*配置DataNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.datanode.data.dir</name>
<value>/hdfs/datanode</value>
</property>
/*配置数据块大小为256M*/
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
/*自定义的HDFS服务名,在高可用集群中,无法配置单一HDFS服务器入口,以需要指定一个逻辑上的服务名,当访问服务名时,会自动选择NameNode节点进行访问*/
<property>
<name>dfs.nameservices</name>
<value>HDFScluster</value>
</property>
/*配置NameNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.namenode.name.dir</name>
<value>/hdfs/namenode</value>
</property>
/*定义HDFS服务名所指向的NameNode主机名称*/
<property>
<name>dfs.ha.namenodes.HDFScluster</name>
<value>realtime-1,realtime-2</value>
</property>
/*设置NameNode的完整监听地址*/
<property>
<name>dfs.namenode.rpc-address.HDFScluster.realtime-1</name>
<value>realtime-1:8020</value>
</property>
/*设置NameNode的完整监听地址*/
<property>
<name>dfs.namenode.rpc-address.HDFScluster.realtime-2</name>
<value>realtime-2:8020</value>
</property>
/*设置NameNode的HTTP访问地址*/
<property>
<name>dfs.namenode.http-address.HDFScluster.realtime-1</name>
<value>realtime-1:50070</value>
</property>
/*设置NameNode的HTTP访问地址*/
<property>
<name>dfs.namenode.http-address.HDFScluster.realtime-2</name>
<value>realtime-2:50070</value>
</property>
/*设置主从NameNode元数据同步地址,官方推荐将nameservice作为最后的journal ID*/
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://realtime-1:8485;realtime-2:8485;realtime-3:8485/HDFScluster</value>
</property>
/*设置HDFS客户端用来连接集群中活动状态NameNode节点的Java类*/
<property>
<name>dfs.client.failover.proxy.provider.HDFScluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
/*设置SSH登录的私钥文件地址*/
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
/*启动fence过程,确保集群高可用性*/
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
/*配置JournalNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hdfs/journalnode</value>
</property>
/*设置自动切换活跃节点,保证集群高可用性*/
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
/*配置数据块副本数*/
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
/*将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LIST FILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode保存的*/
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

编辑完成后保存文件并退出vi编辑器。

使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/core-site.xml 配置core-site.xml 文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:

/*设置默认的HDFS访问路径,需要与hdfs-site.xml中的HDFS服务名相一致*/
<property>
<name>fs.defaultFS</name>
<value>hdfs://HDFScluster</value>
</property>
/*临时文件夹路径设置*/
<property> 
<name>hadoop.tmp.dir</name> 
<value>/usr/tmp</value> 
</property> 
/*配置ZooKeeper服务集群,用于活跃NameNode节点的选举*/
<property>
<name>ha.zookeeper.quorum</name>
<value>realtime-1:2181,realtime-2:2181,realtime-3:2181</value>
</property>
/*设置数据压缩算法*/
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
/*设置使用hduser用户可以代理所有主机用户进行任务提交*/
<property>
<name>hadoop.proxyuser.hduser.host</name>
<value>*</value>
</property>
/*设置使用hduser用户可以代理所有组用户进行任务提交*/
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
编辑完成后保存文件并退出vi编辑器。
使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/yarn-site.xml文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:
/*设置NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序*/
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
/*设置任务日志存储目录*/
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:///var/log/hadoop-yarn </value>
</property>
/*设置Hadoop依赖包地址*/
<property>
<name>yarn.application.classpath</name>
<value>
$HADOOP_HOME/share/hadoop/common/*,$HADOOP_HOME/share/hadoop/common/lib/*,
HADOOP_HOME/share/hadoop/hdfs/*,$HADOOP_HOME/share/hadoop/hdfs/lib/*,
$HADOOP_HOE/share/hadoop/mapreduce/*,$HADOOP_HOME/share/hadoop/mapreduce/lib/*,
$HADOOP_HOME/share/hadoop/yarn/*,$HADOOP_HOME/share/hadoop/yarn/lib/*
</value>
</property>
/*开启resourcemanager 的高可用性功能*/
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
/*标识集群中的resourcemanager,如果设置选项,需要确保所有的resourcemanager节点在配置中都有自己的逻辑id*/
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>YARNcluster</value>
</property>
/*设置resourcemanager节点的逻辑id*/
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
/*为每个逻辑id绑定实际的主机名称*/
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>realtime-1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>realtime-2</value>
</property>
/*指定ZooKeeper服务地址*/
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>realtime-1:2181,realtime-2:2181,realtime-3:2181</value>
</property>
/*指定resourcemanager的WEB访问地址*/
<property> 
<name>yarn.resourcemanager.webapp.address.rm1</name> 
<value>realtime-1:8089</value> 
</property>
<property> 
<name>yarn.resourcemanager.webapp.address.rm2</name> 
<value>realtime-2:8089</value> 
</property>
/*设定虚拟内存与实际内存的比例,比例值越高,则可用虚拟内存就越多*/
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>3</value>
</property>
/*设定单个容器可以申领到的最小内存资源*/
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>32</value>
</property>
/*设置当任务运行结束后,日志文件被转移到的HDFS目录*/
<property> 
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://HDFScluster/var/log/hadoop-yarn/apps</value>
</property>
/*设定资调度策略,目前可用的有FIFO、Capacity Scheduler和Fair Scheduler*/
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yan.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
/*设定每个任务能够申领到的最大虚拟CPU数目*/
<property> 
<name>yarn.scheduler.maximum-allocation-vcores</name> 
<value>8</value>
</property>
/*设置任务完成指定时间(秒)之后,删除任务的本地化文件和日志目录*/
<property>
<name>yarn.nodemanager.delete.debug-delay-sec</name>
<value>600</value>
</property>
/*设置志在HDFS上保存多长时间(秒)*/
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>86400</value>
</property>
/*设定物理节点有2G内存加入资源池*/
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>

编辑完成后保存文件并退出。

使用 cp /usr/cx/hadoop-2.7.1/etc/hadoop/mapred-site.xml.template /usr/cx/hadoop-2.7.1/etc/hadoop/mapred-site.xml 命令复制mapred-site.xml.template文件并重命名为mapred-site.xml。使用 vi 命令打开mapred-site.xml文件进行配置,在文件 <configuration>和</configuration>之间增加下列内容:

/*Hadoop对MapReduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"*/
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

使用 vi /usr/cx/hadoop-2.7.1/etc/hadoop/slaves 命令打开slaves文件进行配置。将文件中的内容更改为图中内容:

编辑完成后保存文件并退出。

2.12.4 文件分发

通过命令 scp -r /usr/cx/hadoop-2.7.1 root@realtime-n:/usr/cx/ 将节点1 的Hadoop文件包分到其他节点中。

2.12.5 配置Hadoop环境变量

通过命令 vi  ~/.bashrc 使用vi编辑器编辑~/.bashrc文件,在文件中加入图中内容,编辑完成后保存并退出。

通过scp分发命令将节点1的环境变量文件分发到其他两个节点。

2.12.6 更新环境变量

执行图中命令,更新三个节点中的环境变量。

2.12.7 格式化HDFS

执行命令 hadoop namenode -format 格式化HDFS文件系统。

2.12.8 格式化zkfc元数据

执行命令 hdfs zkfc -formatZK 格式化zkfc元数据,在一个节点中进行处理即可。

2.19 Hadoop集群启用运行

2.19.1 启动HDFS相关服务

执行命令 start-dfs.sh 启动HDFS相关服务。

执行命令 jps 查看节点1中对应的相关服务。

执行命令 ssh realtime-2 "hadoop namenode -bootstrapStandby" 格式化Standby节点。

格式化Standby节点后,执行命令 ssh realtime-2 "hadoop-daemon.sh start namenode" 启动Standby节点的NameNode进程。

2.13.2 启动yarn相关服务

执行命令 start-yarn.sh 启动yarn相关服务。

执行命令 ssh realtime-2 "yarn-daemon.sh start resourcemanager" 在节点2中启动ResourceManager进程。

2、启动Hadoop HDFS

1. 启动HDFS。

2. 验证HDFS是否成功启动,可以使用jps命令查看Java进程,确认NameNode和DataNode等进程是否运行。

出现以上内容表示启动成功。

3、HDFS基本操作实践

1. 目录操作:使用hdfs dfs -mkdir命令创建新的目录。

2. 文件上传:使用hdfs dfs -put命令上传本地文件到HDFS。

3. 文件下载:使用hdfs dfs -get命令下载HDFS上的文件到本地。

4. 文件查看:使用hdfs dfs -cat命令查看HDFS上的文件内容。

5. 文件删除:使用hdfs dfs -rm命令删除HDFS上的文件。


http://www.ppmy.cn/ops/150922.html

相关文章

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名&#xff0c;介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…

什么是IDE,新手如何选择IDE?

IDE 是 Integrated Development Environment&#xff08;集成开发环境&#xff09;的缩写&#xff0c;它是一种软件应用程序&#xff0c;为程序员提供了一站式的开发环境&#xff0c;整合了多种工具和服务&#xff0c;以便高效地创建、修改、编译、调试和运行软件程序。IDE 集成…

Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法

报错信息&#xff1a; android.database.sqlite.SQLiteException: too many SQL variables (code 1 SQLITE_ERROR): while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句…

Go语言封装加解密包(AES/DES/RSA)

Go语言封装加解密包&#xff08;AES/DES/RSA&#xff09; 1. Base64编码与解码2. AES加解密3. DES加解密4. RSA加解密5. SHA256哈希6. 单元测试1. AES加解密单元测试2. DES加解密单元测试3. RSA加解密单元测试4. SHA256哈希单元测试测试用例说明 总结 在现代软件开发中&#xf…

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

图像识别opencv翻转

运行界面 以下是代码&#xff1a; import cv2 import numpy #读取图像 img cv2.imread("../image/cat.jpg") #1,0,-1代表不一样的翻转效果 flipped cv2.flip(img, 1) #显示结果 cv2.imshow("Flip", flipped) cv2.imshow("original", img) cv2…

山石防火墙命令行配置示例

现网1台山石SG6000防火墙&#xff0c;配置都可以通过GUI实现。 但有一些配置在命令行下配置效率更高&#xff0c;比如在1个已有策略中添加1个host或端口。 下面的双引号可以不加 1 创建服务 1.1 单个端口 service "tcp-901"tcp dst-port 901 1.2 端口范围 servi…

2025-1-15-十大经典排序算法 C++与python

文章目录 十大经典排序算法比较排序1. 冒泡排序2. 选择排序3. 插入排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序 非比较排序8. 计数排序9. 桶排序10. 基数排序 十大经典排序算法 十大经典排序算法可以分为比较排序和非比较排序: 前者包括冒泡排序、选择排序、插入排序、希…