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

这篇具有很好参考价值的文章主要介绍了[数据存储]HDFS的简介、初始化配置与运行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的简介、初始化配置与运行,大数据,hdfs,hadoop,大数据文章来源地址https://www.toymoban.com/news/detail-533249.html

到了这里,关于[数据存储]HDFS的简介、初始化配置与运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++11】简介、列表初始化、声明、范围for、STL中的一些变化

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 从C++0x到C++1

    2024年02月01日
    浏览(43)
  • LTPI协议的理解——4、LTPI链路初始化以及运行

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 整个LTPI协议实现过程中,我认为最复杂的也就是LTPI的链路建立的过程 以及异步信号(特别是IIC)的传输事务的控制和响应以及对IIC接口线的操作。我们前面已经大致提到了各个阶段的帧定义,那么接下

    2024年01月16日
    浏览(57)
  • C++结构体分别在:栈空间、堆空间、静态存储区中初始化

    1,指定每个成员的初始值 这种初始化方法的存储位置取决于定义变量的位置,如果定义在函数内,则存储在栈空间;如果定义在全局作用域,则存储在静态存储区。 2,只初始化部分成员 这种初始化方法的存储位置取决于定义变量的位置,如果定义在函数内,则存储在栈空

    2024年02月03日
    浏览(24)
  • 某60区块链安全之未初始化的存储指针实战一学习记录

    学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 Ubuntu18.04操作机 python3 在solidity语言中,像动态的数组、struct、mapping这样的复杂数据结构是不能直接在”栈”里面保存的,因为”栈”里只能保存单独的”字”,也就

    2024年02月03日
    浏览(26)
  • 某60区块链安全之未初始化的存储指针实战二学习记录

    学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 Ubuntu18.04操作机 python3 在solidity语言中,像动态的数组、struct、mapping这样的复杂数据结构是不能直接在”栈”里面保存的,因为”栈”里只能保存单独的”字”,也就

    2024年02月05日
    浏览(26)
  • 串口初始化配置详解

    简单理解就是一个电脑和单片机之间沟通的桥梁,从电脑角度考虑,我要发送信息给单片机,我需要什么,肯定是需要一个数据线对吧,将我要传给单片机的信息通过数据线发送过去,这就需要一个数据线端口,这个端口就是TXD, 那单片机要接受电脑传过来的值,那肯定需要

    2024年02月06日
    浏览(35)
  • 05_从0运行,重定位,初始化,中断再到定时器

    总结 这边简单讲讲,代码上电后从0开始发生了什么,为什么要重定位把代码复制到sdram, bin文件前面几条跳转函数都跳转去哪 中断产生后发生什么 重定位问题 1.为什么需要重定位 把程序从一个位置移到另一个位置 叫重定位 可以只重定位部分段的数据 也可以把所有的都重定位

    2024年02月02日
    浏览(39)
  • 路由器初始化配置、功能配置

    部门 主机数量 网络地址 子网掩码 网关 可用ip Vlan 市场部 38 192.168.131.0 255.255.255.0 192.168.131.1 2-254 11 研发部 53 192.168.132.0 255.255.255.0 192.168.132.1 2-254 12 财务部 9 192.168.133.0 255.255.255.0 192.168.133.1 2-254 13 综合 12 192.168.134.0 255.255.255.0 192.168.134.1 2-254 14 后勤 25 192.168.135.0 255.255.255.0 192

    2024年01月18日
    浏览(39)
  • 凝思系统安装及初始化配置

    我本次使用的是浪潮塔式服务器,配置如下: [浪潮塔式服务器][130101101200095X][NP5570系列|Intel至强银牌(8核16线2.1GHz)CPU 2|16GB内存 2|2TB硬盘 1|4GB独显 1|千百兆网口 4|500W电源 1|键盘鼠标 1|内置DVD 1] 浪潮服务器官网地址:https://www.inspur.com/eportal/ui?pageId=2317460type=2 官方镜像下载地址:

    2024年02月12日
    浏览(151)
  • 【JavaScript】JavaScript 变量 ① ( JavaScript 变量概念 | 变量声明 | 变量类型 | 变量初始化 | ES6 简介 )

    JavaScript 变量 是用于 存储数据 的 容器 , 通过 变量名称 , 可以 获取 / 修改 变量 中的数据 ; 变量 的 本质 是 存放数据 的 一块内存空间 ; 在 JavaScript 中, 使用 var / let / const 来声明变量 , 每个变量都有一个 变量名 和 一个 变量值 ; JavaScript 变量声明 : var : 使用

    2024年03月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包