当前位置: 代码网 > 科技>人工智能>数据分析 > [数据存储]HDFS的简介、初始化配置与运行

[数据存储]HDFS的简介、初始化配置与运行

2024年08月04日 数据分析 我要评论
HDFS(Hadoop Distributed File System)Hadoop分布式文件系统,是Hadoop项目中关于数据存储的组件,是Hadoop项目的一部分。

hdfs简介

hdfs(hadoop distributed file system)hadoop分布式文件系统,是hadoop项目中关于数据存储的组件,是hadoop项目的一部分。

hdfs数据存储访问方式

hdfs采用主从模式的分布式存储方式存储文件。对于超大的数据而言,单个服务器无法承担对改数据的存储和读取工作。所以采用分布式的架构对文件进行存储。hdfs将大数据分割成不同的小部分数据,将分割后的数据存储在不同的服务器上,环境了服务器的存储压力。且在对数据进行传输的过程中,单服务器存储数据只能利用自己本身的网络传输,而在分布式的存储中,可以充分利用到多台主机进行网络传输,更好的利用到了网络带宽。hdfs会冗余性的为数据创建副本,保证了数据的安全性,避免因为硬件或软件的损坏导致数据的丢失。且hdfs将副本分布在多台主机中,当需要读取数据时,hdfs会自动根据请求地址,所以传输效率最高的副本进行网络传输。

hdfs节点

在hdfs中,节点按照功能和类型可以划分为namenode(主节点)、secondarynamenode(辅助节点)、datanode(从节点)

  • namenode(主节点):
    • hdfs系统的主节点
    • 管理整个文件系统
    • 管理datanode从节点
# 在 ${hadoop_conf_dir}/core-site.xml文件中对主节点的通讯路径进行配置
# 在节点间通过hdfs协议进行数据通讯
<property>
	<name>fs.defaultfs</name>
	<value>hdfs://node1:9001</value>
</property>
  • secondarynamenode(辅助节点):
    • namenode的辅助节点
    • 主要帮助namenode完成对元数据的处理工作
    • 在调用start-dfs.sh脚本的主机中自动启动secondarynamenode进程
  • datanode(从节点):
    • 主要负责数据的存储与管理
# 在 ${hadoop_conf_dir}/hdfs-site.xml文件中对datanode进行配置
<property>
	<name>dfs.namenode.hosts</name>
	<value>node1, node2, node3</value>
</property>

hdfs的数据存储原理

  • hdfs将文件分割成多个部分进行分布式存储,在进行存储时,为更好的对文件进行统一管理,hdfs以block块结构统一文件的大小,方便管理
# 在 ${hadoop_conf_dir}/hdfs-site.xml文件中对block大小进行配置
<property>
	<name>dfs.blocksize</name>
	<value>268435456</value>
</property>
  • 为防止因为丢失block块或块损坏而造成的文件不完整,hdfs在存储时采用多个副本的方式对数据进行备份操作
# 在 ${hadoop_conf_dir}/hdfs-site.xml文件中对副本数量进行配置
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

hdfs元数据(block块管理)

在hdfs中,由namenode主节点来对block块进行管理。namenode通过edits和fsimage在完成对整个文件系统的管理和维护

  • edits文件:
    • edits文件记录hdfs文件系统的每一次操作,以及操作影响到的block块结构
    • 随着记录的增加,edits会越来越大,影响对数据的检索效果,edits当文件到一定大小时会创建新的edits文件,多个edits文件确保系统的检索性能
  • fsimage文件:
    • 在进行检索时,需要从多个edits文件中从头到尾进行检索
    • 为解决需要全部检索的问题,hdfs定期或事务数达到一定值的时候对edits进行合并,生成最终的结果,确保文件的检索效率
# 在 ${hadoop_conf_dir}/hdfs-site.xml文件中设置edits文件合并时间
<property>
	<name>dfs.namenode.checkpoint.period</name>
	<value>3600</value>
</property>
# 在 ${hadoop_conf_dir}/hdfs-site.xml文件中设置edits文件合并事务数
<property>
	<name>dfs.namenode.checkpoint.txns</name>
	<value>1000000</value>
</property>
  • 以上两个条件满足一个即进行文件的合并操作
  • 文件的合并操作主要由secondarynamenode节点执行

hdfs的数据读写流程

hdfs数据写入流程

  • 客户端向namenode发起写入请求
    • namenode节点只负责元数据的记录和权限审批,不经手数据
  • namenode审核用户权限和节点的剩余空间
  • namenode告知客户端写入datanode的地址
    • 该datanode节点一般是和客户端网络距离最近的节点
  • 客户端向datanode发送数据,写入datanode
  • 由datanode写入数据,并将数据发送给其他节点,完成数据的备份
    • 数据备份操作由datanode节点之间自行完成
  • 写入完成后,客户端发送namenode写入完成通知
  • namenode记录写入的元数据

hdfs数据读取流程

  • 客户端向namenode申请访问请求
  • namenode判断客户端权限
  • namenode告知客户端block列表
    • namenode根据网络距离返回block列表
  • datanode根据block列表读取数据

启动hdfs

hdfs初始化配置

根据前文配置好hadoop的环境变量

${hadoop_conf_dir}/hdfs-site.xml

hdfs-site.xml文件主要为hdfs组件的核心配置。

# hdfs web ui界面
<property>
	<name>dfs.namenode.http-address</name>
	<value>node1:9000</value>
</property>
# hdfs文件系统默认创建的文件权限
<property>
	<name>dfs.datanode.data.dir.perm</name>
	<value>700</value>
</property>
# namenode元数据存储位置
<property>
	<name>dfs.namenode.name.dir</name>
	<value>${hadoop_data_home}/nn/</value>
</property>
# 允许加入namenode的datanode
<property>
	<name>dfs.namenode.hosts</name>
	<value>${namenodehosts}</value>
</property>
# hdfs block块大小
<property>
	<name>dfs.blocksize</name>
	<value>268435456</value>
</property>
# namenode处理的并发线程数
<property>
	<name>dfs.namenode.handler.count</name>
	<value>100</value>
</property>
# datanode的数据存储目录
<property>
	<name>dfs.datanode.data.dir</name>
	<value>${hadoop_data_home}/dn/</value>
</property>

文件系统格式化

在存储namenode时,需要对文件系统进行格式化。

hadoop namenode -format

启动hdfs

执行完以上操作和配置后,即可调用hadoop的hdfs启动脚本启动hdfs

# 启动hdfs组件
start-hdfs.sh
# 关闭hdfs组件
stop-hdfs.sj

xxx-hdfs.sh脚本存放在hadoop的sbin路径下,配置好环境变量后直接执行即可。

查看启动状态

hadoop通过jps命令查看当前主机中部署的节点

$ jps
272 namenode
448 jps
408 datanode

也可以通过配置的hdfs的web ui界面查看节点运行状态
hdfs web ui

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com