Hadoop 基础入门
启动:
格式化节点: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
更多建议: