大数据-HDFS(一)
目录
从本章节开始我们将进入对hadoop一个重要组件的学习,hdfs在hadoop集群中主要作用是负责数据的存取。本章节会从hdfs的基本概念、优缺点以及架构方面进行初步了解和学习。
每天进步一小点,加油鸭~
HDFS基本概念
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),其中一个重要的组件就是HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大规模数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop框架最核心的设计就是:HDFS和MapReduce。HDFS为海量数据提供存储,而MapReduce则为海量数据提供计算 。
HDFS的优缺点
优点
高容错性
- 数据自动保存多个副本,它通过增加副本的形式,提高容错性。
- 某一个副本丢失以后,可以自动恢复,由HDFS内部机制实现。
适合批处理
- 把数据位置暴露给计算框架。
- 通过移动计算而不是移动数据。
适合大数据处理
- 数据规模:能够处理数据规模达到GB、TB甚至PB级别。
- 文件规模:能够处理百万规模以上的文件数量。
- 节点规模:能够处理10K节点的规模。
流式数据访问
- 一次写入,多次读取,不能修改,只能追加。
- 它能够保证数据的一致性。
可构建在廉价机器上
- 它通过多副本机制,提高可靠性。
- 它提供了容错和恢复机制。比如某一副本丢失,可以通过其他副本来恢复。
缺点
不适合低延时数据访问
- 比如毫秒级以内的数据存储和读取是不行的。
- 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。
无法高效的对大量小文件进行存储
- 存储大量小文件的话,会占用NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存是有限的。
- 小文件存储的寻址时间会超过读取时间,违反了HDFS的设计原则。
并发写入、文件随机修改
- 一个文件只能有一个写操作,不允许多个线程同时写入。
- 仅支持数据append(追加),不支持文件的随机修改。
HDFS架构分析
HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
HDFS是一个主/从(Mater/Slave)体系结构,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS客户端:就是客户端。
- 提供一些命令来管理、访问 HDFS,比如启动或者关闭HDFS。
- 与 DataNode 交互,读取或者写入数据;读取时,要与 NameNode 交互,获取文件的位置信息;写入 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
NameNode:即Master。
- 管理 HDFS 的名称空间
- 管理数据块(Block)映射信息
- 配置副本策略
- 处理客户端读写请求
DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作。
- 存储实际的数据块
- 执行数据块的读/写操作
Secondary NameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。最主要作用是辅助NameNode管理元数据信息。
- 辅助 NameNode,分担其工作量
- 定期合并 fsimage和fsedits,并推送给NameNode
- 在紧急情况下,可辅助恢复 NameNode
HDFS命令操作
HDFS 命令有两种风格:
- hadoop fs 开头
- hdfs dfs 开头
两种命令均可使用,效果相同。
命令 | 说明 |
hdfs dfs -help ls hadoop fs -help ls | 查看 hdfs 或 hadoop 子命令的帮助信息 |
hdfs dfs -ls / hadoop fs -ls / hdfs dfs -ls -R / | 查看 hdfs 文件系统中指定目录的文件列表。对比 Linux 命令 ls |
hdfs dfs -touchz /edits.txt | 在hdfs文件系统中创建文件 |
hadoop fs -appendToFile edit1.xml /edits.txt | 向hdfs文件中追加内容 |
hdfs dfs -cat /edits.txt | 查看 hdfs 文件内容 |
hdfs dfs -put /linux本地文件 /hdfs文件 | 从本地路径上传文件至 hdfs |
hdfs dfs -get /hdfs路径 /本地路径 #和get命令的效果相同 hdfs dfs -copyToLocal /hdfs路劲 /本地路径 | 在hdfs文件系统中下载文件 |
hdfs dfs -mkdir /shell | 在hdfs文件系统中创建目录 |
hdfs dfs -rm /edits.txt hdfs dfs -rm -r /shell | 在hdfs文件系统中删除文件 |
hdfs dfs -mv /xcall.sh /call.sh hdfs dfs -mv /call.sh /shell | 在hdfs文件系统中修改文件名称(也可以用来移动文件到目录) |
hdfs dfs -cp /xrsync.sh /shell | 在 hdfs中拷贝文件到目录 |
hdfs dfs -rmr /shell | 递归删除目录 |
hdfs dfs -ls file:///home/hadoop/ | 列出本地文件的内容(默认是 hdfs 文件系统) |
#Linux find 命令 find . -name 'edit*' #hdfs find 命令 #在HDFS根目录中,查找part-r-00000文件 hadoop fs -find / -name part-r-00000 | 查找文件 |
hdfs 与 getconf 结合使用
命令 | 说明 |
hdfs getconf -namenodes | 获取NameNode的节点名称(可能有多个) |
#用相同命令可获取其他的属性值 hdfs getconf -confKey dfs.namenode.fs-limits.min-block-size | 获取hdfs最小块信息 |
hdfs getconf -nnRpcAddresses | 查找 hdfs 的 NameNode 的 RPC 地址 |
hdfs 与 dfsadmin结合使用
命令 | 说明 |
hdfs dfsadmin -help safemode | 助帮助信息 |
hdfs dfsadmin | 查看hdfs dfsadmin的子命令 |
hdfs dfsadmin -safemode get | 查看当前模式 |
#进入安全模式 hdfs dfsadmin -safemode enter #退出安全模式 hdfs dfsadmin -safemode leave | 进入/退出安全模式 |
hdfs 与 fsck 结合使用
命令 | 说明 |
hadoop checknative | 检查压缩库本地安装情况 |
hadoop namenode -format | 格式化名称节点 |
hadoop jar /hlbdx/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar pi 10 10 | 执行自定义jar包 |
HDFS安全模式
安全模式是 HDFS 所处的一种特俗状态,在这种状态下,文件系统只接受读数据请求,不接受删除、修改等变更请求。
在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向NameNode汇报可用的block状态,当整个系统达到安全标准时,HDFS 自动离开安全模式。如果HDFS处于安全模式下,则文件block不能进行任何的副本复制操作,因此达到最小的副本数的要求是基于DataNode启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求)。
HDFS集群刚启动的时候,默认30s的时间是处于安全期的,只有过了30s后,集群脱离了安全期,才可以对集群进行操作。
[hadoop@node01 hadoop]$ hdfs dfsadmin -safemode
Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]
此博文仅供学习参考,如有错误欢迎指正。
上一篇《大数据-基础环境搭建》
下一篇《大数据-HDFS(二)》
希望对大数据相关技术感兴趣的友友们关注一下,大家可以一起交流学习哦~