Hadoop 基础入门

2018-10-10 18:58 更新

启动:

格式化节点:bin/hdfs namenode -format

全部启动:sbin/start-dfs:datanode、namenode

sbin/start-yarn:nodemanager、resourcemanager

访问:http://localhost:50070 查看管理

查看文件目录:bin/hdfs.cmd dfs -ls /

创建文件夹:bin/hdfs dfs -mkdir -p /test

复制文件:bin/hdfs dfs -put etc/hadoop hdfs://localhost:9000/test

查看文件:bin/hdfs dfs -cat /test/hadoop/*.xml

删除文件:bin/hdfs dfs -rm -r /test/*.xml

节点列表:bin/hdfs dfsadmin -report

节点恢复:bin/hdfs namenode -recover

节点检查:bin/hdfs fsck /test

snapshot文件夹:bin/hdfs lsSnapshottableDir

配置获取: PS D:\hadoop-2.9.0> .\bin\hdfs getconf -namenodes localhost PS D:\hadoop-2.9.0> .\bin\hdfs getconf -secondaryNameNodes account.jetbrains.com PS D:\hadoop-2.9.0> .\bin\hdfs getconf -backupNodes account.jetbrains.com PS D:\hadoop-2.9.0> .\bin\hdfs getconf -includeFile Configuration dfs.hosts is missing. PS D:\hadoop-2.9.0> .\bin\hdfs getconf -nnRpcAddresses localhost:9000 PS D:\hadoop-2.9.0> .\bin\hdfs classpath D:\hadoop-2.9.0\etc\hadoop;D:\hadoop-2.9.0\share\hadoop\common\lib*;D:\hadoop-2.9.0\share\hadoop\common\ .0\share\hadoop\hdfs;D:\hadoop-2.9.0\share\hadoop\hdfs\lib*;D:\hadoop-2.9.0\share\hadoop\hdfs*;D:\hadoo...

hdfs 拥有主从结构,hdfs集群包含一个单一的NameNode,称之为主服务器,负责管理文件系统命名空间及客户端对文件的访问权限。hdfs集群包含多个数据节点。hdfs暴露文件命名空间用以用户以文件形式存储数据。文件被分割为多个块儿,存储在一个或多个数据节点上。NameNode负责文件系统操作,包括打开,关闭,重命名文件和文件夹,决定数据块到数据节点的映射。数据节点负责系统客户端的读写请求,及数据块的创建,删除和根据NameNode的指导进行复制。

单个NameNode简化了hdfs架构,负责存储hdfs元数据,不存储用户数据。

hdfs支持传统的层级文件结构,用户或者系统客户端可以创建文件夹及在其下存储文件。支持文件数量级权限限制。不支持软,硬连接,但不妨碍其它对此的实现。

NameNode负责维护文件系统命名空间,记录所有变更。应用可以配置文件的备份数,即备份因子。

数据复制:默认三份

hdfs用来在集群间,跨机器存储文件。文件以一连串的数据块形式存储,数据块存在多个备份以提供容错能力,块儿大小及备份数可以根据每一个文件进行配置。

除了最后一个数据块,其它数据块大小均相同,

复制因子,可以在文件创建时配置,后续可以更改,hdfs中的文件是一次性写入的,并且严格限制一个操作者。

NameNode决定数据块的复制事宜。间隔的接收数据节点的心跳(数据几点是否工作正常)及数据块报告(数据节点所包含的所有数据块)

数据块备份的存放关系着hdfs的可靠性及性能。优化备份存储是hdfs区别于其它分布式文件系统的重要一点。rack aware机制是为了提高hdfs数据可靠性,可用性,网络带宽使用。

大规模的hdfs实例通常运行在跨不同机器不同平台架构的机器上,不同平台的节点之间通信需要经过交换机,同平台之间的带宽通常大于异构平台之间的带宽。

副本选择:

为了减少总体的带宽消耗和读延迟,hdfs尝试通过距离用户最近的副本来提供读服务。同架构节点优先提供服务,本地节点有限提供服务。

安全模式:

NameNode启动时,处于安全模式,此时数据节点不执行数据块复制,NameNode接收心跳及数据块报告,每一个数据块包含过个副本,当数据块副本数量匹配配置的复制因子,则NameNode认定数据块安全,当特定比例数据块被认定安 全后,NameNode离开安全模式,并检查还不满足复制因子的数据块,并进行复制操作。

系统元数据的持久化:

hdfs命名空间存储在NameNode。NameNode使用事务日志(Editlog)持续的记录系统元数据发生的所有变更,每次变更增加一条记录,Editlog存储在本地系统文件。全部的系统命名空间元数据,包括数据块到文件的映射及系统属性存储在文本地系统件FsImage中。

NameNode在内存中保存着一份系统命名空间及数据块映射镜像,当NameNode启动时,或者检测点触发,NameNode读取磁盘Fsimage及Editlog文件,将Editlog文件中的事务应用于内存中的Fsimage镜像,并将应用后的FsImage固化到磁盘生成新的FsImage文件。旧的Editlog即可被删除,这个过程称之为检测点,目的是通过系统元数据快照及固化FsImage来保持hdfs的一致性。FsImage的读取效率很高,但是修改效率低,为了避免FsImage的修改操作,NameNode将变更记录到Editlog,等到检测点触发,Editlog变更被应用固化到FsImage文件。

检测点( checkpoint )配置: dfs.namenode.checkpoint.period s间隔, dfs.namenode.checkpoint.txns 变更数间隔

数据节点将数据块存储在本地系统,数据节点无法识别hdfs文件,存储可能不同文件的不同数据块。数据节点避免将所有的文件数据块存储在同一文件目录下(本地文件系统限制),采用启发式算法来决定文件夹的创建及数据块的存放。

数据节点启动时,扫描本地文件系统产生一系列数据块到本地文件映射(blockreport),发送到NameNode。

通信协议

hdfs通信协议基于TCP/IP,客户端使用客户端协议于NameNode建立连接,数据节点使用数据节点协议(宝库奥客户端协议及数据节点协议)同NameNode建立连接,NameNode不主动发起连接,只回复客户端及数据节点的rpc连接请求。

健壮性:NameNode,数据节点,网络分区

数据节点保持着和NameNode之前的心跳,网络分区因素可能引起数据节点的失联。NameNode通过检测心跳信息识别失联数据节点,并标识节点失效,不再转发IO请求。失效节点存储的数据块将不再为hdfs使用,将会引起特定数据节点的复制因此不再满足,NameNode不间断的检测不满足复制因子的数据块,并在特定条件下(数据节点不可用,副本崩溃,硬盘损坏,文件复制因子变更)的时候启动复制。

数据节点失效判定超时配置:

数据一致性:

hdfs客户端文件实现了hdfs文件校验机制,客户端创建hdfs文件时,同时计算每个数据块校验和(CRC32算法),并将校验和存储在同一个hdfs命名空间的一个独立的隐藏文件中。当客户端接收到hdfs文件内容时,同时计算校验和和相关的校验和文件进行匹配。当某一个数据块不匹配,则执行从其它数据节点请求此数据块备份。

FsImage Editlog磁盘失效会引起hdfs无法工作,因此hdfs支持配置FsImage Editlog备份,备份间异步更新,可能引起吞吐量降低。NameNode重启时,选择最新的FsImage Editlog。

数据组织:

大数据文件,一次写入,多次读取,流式读取,标准大小数据块128m,一个文件会被分割为多个数据块,并尽可能的分配到不同的数据节点上。

当客户端向hdfs写入文件时,NameNode使用相应的目标选择算法获取特定复制因子数量的数据节点。客户端首先将数据写入第一个节点,第一个节点接收数据,写入本地存储,并传输给后续的数据节点,后续节点相应的执行。数据在数据节点间管道式流动复制。

备份因此修改后,只有等到下一次心跳,信息才会传送至数据节点,然后数据节点执行相应的数据块操作,存在操作时间差。

客户端请求NameNode获取文件元数据及修改信息,同数据节点执行实际的数据IO请求。

Secondary NameNode:

FsImage:最新的checkpoint文件。

主节点只在启动时执行FsImage及Editlog相关操作,二级节点运行期间定时管理FsImage及Editlog,控制FsImge在一定的大小范围。二级节点通常运行在不同的节点上。二级节点上最新的checkpoint和主节点上的checkpoint存储在相同的位置。以便可以让主节点使用。

定时与主节点同步(定期合并),并将最新FsImage传递给NameNode,清空Editlog,NameNode失效后,需要手动设置为主机。

checkpoint节点:

checkpoint节点不间断的创建命名空间的checkpoint文件。从活跃NameNode下载FsImage及Editlog,应用Editlog到FsImge,并将最新的FsImage到主NameNode。checkpoint运行在独立的服务器上。

配置地址: dfs.namenode.backup.address dfs.namenode.backup.http-address

配置启动: dfs.namenode.checkpoint.period 默认1h,执行checkpoint间隔; dfs.namenode.checkpoint.txns 间隔任务数

checkpoint节点存储最新checkpoint文件位置和主节点相同。

备份节点:

执行checkpoint节点相同的功能,同时保持一份内存镜像,实时和主节点异步更新,日常流式从主节点接收系统变更,固化到硬盘,同时应用到内存中的镜像。

备份节点不需要从主节点下载FsImage Editlog,因为内存中保存着最新的镜像备份。

配置备份节点可以不配置checkpoint节点。

暂时只支持一个本分节点,

bin/hdfs namenode -backup

配置:dfs.namenode.backup.address and dfs.namenode.backup.http-address

使用本分节点可以配置无持久化存储hdfs存储。

导入checkpoint:

  • dfs.namenode.name.dir 配置空文件夹;
  • dfs.namenode.checkpoint.dir配置chckepoint文件位置;
  • 启动主NameNode -importCheckpoint option.

    NameNode上传dfs.namenode.checkpoint.dir文件夹下checkpoint文件,保存到dfs.namenode.name.dir(确保空),。。。

  • olicy to keep one of the replicas of a block on the same node as the node that is writing the block.
  • Need to spread different replicas of a block across the racks so that cluster can survive loss of whole rack.
  • One of the replicas is usually placed on the same rack as the node writing to the file so that cross-rack network I/O is reduced.
  • Spread HDFS data uniformly across the DataNodes in the cluster.

    数据节点存储热切换:

  • If there are new storage directories, the user should format them and mount them appropriately.
  • The user updates the DataNode configuration dfs.datanode.data.dir to reflect the data volume directories that will be actively in use.
  • The user runs dfsadmin -reconfig datanode HOST:PORT start to start the reconfiguration process. The user can use dfsadmin -reconfig datanode HOST:PORT status to query the running status of the reconfiguration task.
  • Once the reconfiguration task has completed, the user can safely umount the removed data volume directories and physically remove the disks.

    HDFS两层架构:

    命名空间(namespace):

    文件夹、文件及数据块的一致性;支持所有和命名空间相关的文件系统操作(创建、删除、修改和文件及文件夹列表)

    数据块存储服务:

    数据块管理(NameNode)

    维护数据节点关系(提供注册,心跳)

    处理数据块报告及维护数据块存储位置

    支持数据块相关的操作,创建,删除,修改及位置获取

    管理数据块复制,复制不满足复制因子( under replicated)的数据块,删除超过复制因子 (over replicated)的数据块备份。

    数据块存储(数据节点):

    本地存储数据块,提供读写访问。

整个HDFS可存储的文件数受限于NameNode的内存大小

一个block在NameNode中对应一条记录,map task数量由splits决定,mapreduce处理大量小文件时,会产生大量map task,线程管理开销增加作业时间,建议处理大文件。

数据节点:

保存具体的block数据

负责数据的读写

定时向NameNode报告数据块信息,及更新信息

数据节点之前的通信,block复制,保证数据的冗余性。

读取:

配置:

core-site.xml:配置公共属性

hdfs-site.xml: 配置HDFS

yarn-site.xml: 配置YARN

mapred-site.xml: 配置MapReduce

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号