Hadoop入门
1. Hadoop概述
1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构
2)主要解决,海量数据的存储和海量数据的分析计算问题。
3)广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈
Google是hadoop的思想之源(Google在大数据方面的三篇论文)
GFS —>HDFS
Map-Reduce —>MR
BigTable —>Hbase
1.1 Hadoop的优点
扩容能力(Scalable)
Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计个节点中
成本低(Economical)
Hadoop 服务器集群来分发以及处理数据,以至于成本很低
高效率(Efficient)
通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快
可靠性(Rellable)
能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖
1.2 Hadoop的组成
- Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
- Hadoop MapReduce:一个分布式的离线并行计算框架。
- Hadoop YARN:作业调度与集群资源管理的框架。
- Hadoop Common:支持其他模块的工具模块。
2. HDFS概述
2.1 HDFS起源
HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。
分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
HDFS起源于Google的GFS论文(GFS,Mapreduce,BigTable为google的旧的三驾马车)
2.2 HDFS优点
- 高容错性
数据自动保存多个副本。它通过增加副本的形式,提高容错性;
某一个副本丢失以后,它可以自动恢复。
- 适合大数据处理
数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;
文件规模:能够处理百万规模以上的文件数量,数量相当之大。
- 可构建在廉价机器上,通过多副本机制,提高可靠性。
2.3 HDFS缺点
- 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
- 无法高效的对大量小文件进行存储。
存储大量小文件的话,它会占用NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;
小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
- 无法并发写入、文件随机修改。
一个文件只能有一个写,不允许多个线程同时写;
仅支持数据append(追加),不支持文件的随机修改。
3. HDFS架构
1、文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block
2、与NameNode交互,获取文件的位置信息;
3、与DataNode交互,读取或者写入数据;
4、Client提供一些命令来管理HDFS,比如启动或者关闭HDFS;
5、Client可以通过一些命令来访问HDFS;
3.1 HDFS-NameNode
a、 NameNode 是 HDFS 的核心。
b、 NameNode 也称为 Master。
c、 NameNode 仅存储 HDFS 的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件。
d、 NameNode 不存储实际数据或数据集。数据本身实际存储在 DataNodes 中。
e、 NameNode 知道 HDFS 中任何给定文件的块列表及其位置。使用此信息
NameNode 知道如何从块中构建文件。
f、 NameNode 并不持久化存储每个文件中各个块所在的 DataNode 的位置信息,这些信息会在系统启动时从数据节点重建。
g、 NameNode 对于 HDFS 至关重要,当 NameNode 关闭时,HDFS / Hadoop 集群无法访问。
h、 NameNode 是 Hadoop 集群中的单点故障。
i、NameNode 所在机器通常会配置有大量内存(RAM)
元数据
元数据,是数据的描述信息,比如这个文件的路径,这个文件的副本数,每个副本保存在哪个DataNode上,就相当于真真正正的一个人,他有一些信息:身高、体重、姓名、性别等,通过这些信息就可以描述这个人,那描述HDFS上真实数据的信息,就称为元数据。元数据是保存在NameNode上的。
3.2 HDFS-DataNode
a、 DataNode 负责将实际数据存储在 HDFS 中。
b、 DataNode 也称为 Slave。
c、 NameNode 和 DataNode 会保持不断通信。
d、 DataNode 启动时,它将自己发布到 NameNode 并汇报自己负责持有的块列表。
e、 当某个 DataNode 关闭时,它不会影响数据或群集的可用性。NameNode 将安排由其他 DataNode 管理的块进行副本复制。
f、 DataNode 所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode 中。
g、 DataNode 会定期(dfs.heartbeat.interval 配置项配置,默认是 3 秒)向NameNode 发送心跳,如果 NameNode 长时间没有接受到 DataNode 发送的心跳, NameNode 就会认为该 DataNode 失效。
块与副本集
所有的文件都是以block块的方式存放在HDFS文件系统当中,在hadoop1当中,文件的block块默认大小是64M,hadoop2和hadoop3中,文件的block块大小默认是128M,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定。
为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后变。
3.3 SecondaryNameNode
我们知道NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gi9NEIQH-1615533835920)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\1586429093397.png)]
上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:
fsimage - 它是在NameNode启动时对整个文件系统的快照
edit logs - 它是在NameNode启动后,对文件系统的改动序列
只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在产品集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。在这种情况下就会出现下面一些问题:
- edit logs文件会变的很大,怎么去管理这个文件是一个挑战。
- NameNode的重启会花费很长时间,因为在edit log中有很多改动要合并到fsimage文件上。如果NameNode挂掉了,那我们就需要大量时间将edit log与fsimage进行合并。[会将还在内存中但是没有写到edit logs的这部分。]
因此为了克服这个问题,我们需要一个易于管理的机制来帮助我们减小edit logs文件的大小和得到一个最新的fsimage文件,这样也会减小在NameNode上的压力。
Secondary NameNode就是来帮助解决上述问题的,它的职责是合并NameNode的edit logs到fsimage文件中。
上面的图片展示了Secondary NameNode是怎么工作的。
- 它定时到NameNode去获取edit logs,并更新到自己的fsimage上。
- 一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
- NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
Secondary NameNode的整个目的是在HDFS中提供一个检查点。它只是NameNode的一个助手节点。这也是它在社区内被认为是检查点节点的原因。
现在,我们明白了Secondary NameNode所做的不过是在文件系统中设置一个检查点来帮助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的备份。所以从现在起,让我们养成一个习惯,称呼它为检查点节点吧。
4. HDFS的写入读取
写入流程
读取流程
5. Hadoop常用命令
-ls
功能:显示文件、目录信息。
示例:hadoop fs -ls /user
-mkdir
使用方法:**hadoop fs -mkdir [-p] **
功能:在 hdfs 上创建目录,-p 表示会创建路径中的各级父目录。
示例:
hadoop fs -mkdir–p /user/hadoop/dir1
hadoop fs -mkdir hdfs://192.168.9.230:9000/test
-touch
功能:创建新文件
示例:
hadoop fs -touch /user/hadoop/aa
-put
使用方法:hadoop fs -put [-f] [ -| … ].
功能:将单个 src 或多个 srcs 从本地文件系统复制到目标文件系统。
-f:覆盖目的地(如果已经存在)
示例:
hadoop fs -put /usr/local/data/a.txt /test2
hadoop fs -put -f D:\data\test1.txt D:\data\test2.txt /user/hadoop/dir1
-get
功能:将文件复制到本地文件系统。
示例:
hadoop fs -get hdfs://127.0.0.1:9000/user/hadoop/dir1/test1.txt D:\data\test3.txt
-copyFromLocal
功能:从本地文件系统中拷贝文件到 hdfs 路径去
示例:hadoop fs -copyFromLocal D:\data\test1.txt /user/hadoop
-copyToLocal
功能:从 hdfs 拷贝到本地
示例:hadoop fs -copyToLocal /user/hadoop/test1.txt D:\data\test11.txt
-cp
功能:从 hdfs 的一个路径拷贝 hdfs 的另一个路径
示例: hadoop fs -cp /user/hadoop/dir1/test1.txt /user/hadoop/dir1/test1
-mv
功能:在 hdfs 目录中移动文件
示例: hadoop fs -mv /user/hadoop/dir1/test1.txt /user/hadoop/dir1/test2
-rm
功能:删除指定的文件。只删除非空目录和文件。-r 递归删除。
示例:hadoop fs -rm -r /test2
-help:
功能:查看帮助
示例:hadoop fs -help rm
-cat
功能:显示文件内容到 stdout
示例:
hadoop fs -cat /user/hadoop/dir1/test1.txt
-chmod
功能:改变文件的权限。使用-R 将使改变在目录结构下递归进行。
示例:hadoop fs -chmod 777 /test2/ee
-chown
功能:改变文件的拥有者。使用-R 将使改变在目录结构下递归进行。
示例:hadoop fs -chown user /test2/ee
**参考:**https://blog.youkuaiyun.com/xh16319/article/details/31375197