Hadoop实例笔记详解(一)

Hadoop实例笔记(一):Hadoop组成之Common&HDFS概述

文章目录

  • Hadoop实例笔记(一):Hadoop组成之Common&HDFS概述
  • 前言
  • 一、Hadoop简述
  • 二、Hadoop的组成
    • 1.Common
    • 2.HDFS
      • 1,NameNode(nn)
      • 2,DataNode(dn)
      • 3,Secongary NameNode(2nn)
  • 总结


前言

本文是在学习了一段时间的Hadoop后,以实例的形式将部分知识点予以聚合并分析的体会总结。从实例的角度出发不需要将大量宏观的知识点一次性的注入大脑的“数据池”中,而是随着实例的开发,将众多的结构性知识串联起来形成一个完整的Hadoop生态环境(可扩展性)。 具体的实例会在完成概述后创建。

本文引用的主要资源:
官方文献:http://hadoop.apache.org/
B站的尚硅谷大数据:https://www.bilibili.com/video/BV1Qp4y1n7EN

一、Hadoop简述

引自官方的描述: The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

一句话:Hadoop是一个通过集群对大数据进行处理的分布式框架。

优缺点描述:
优点:
1,高容错性:在集群中自动增加多个副本以降低数据损失的风险,依据策略在某个副本丢失后自动恢复。
2,分布式和流数据:分布式使多个服务同时运行,快速的处理以GB甚至TB为单位的数据;流数据则将大数据依策略分割为一定数量的块,即使丢失一部分也不影响整体的传输。
3,低成本:集群对底层服务器并没有严格的性能限制,数据可以大量的部署在低廉的设备上。
缺点:
1,不适合时效性(比如毫秒级)高的数据访问。
2,不适合大量碎片化的小文件的存储。
3,不支持随机修改,不支持并发写入。

一般大数据是指对大量数据的收集,存储和分析处理的过程。Hadoop主要功能体现在存储和分析处理方面。如果考虑到Hadoop实际上已经通过可扩展性形成了完整的大数据Hadoop生态圈,从广义上说,Hadoop已经覆盖了整个大数据的生命周期。
Hadoop主要的处理能力受到硬盘性能的限制,所以一般应用于时效性不很严格的场景。

二、Hadoop的组成

Hadoop包含了Common,HDFS,MapReduce,在2.x版本后将MapReduce拆分成了MapReduce和YARN两部分以降低耦合度。

1.Common

一句话:Common是一个辅助模块,内含了Hadoop的内部类和工具类

org.apache.hadoop.conf:Hadoop配置类
org.apache.hadoop.fs :Hadoop文件系统
org.apache.hadoop.io:Hadoop I/O类
org.apache.hadoop.ipc:Hadoop远程调用类
org.apache.hadoop.log:Hadoop日志类
org.apache.hadoop.metrics:Hadoop量度类
org.apache.hadoop.net:Hadoop网络相关类
org.apache.hadoop.record:Hadoop记录类
org.apache.hadoop.security:Hadoop安全相关类
org.apache.hadoop.util:公共方法类

Common在Hadoop中提供了很多的辅助功能,也是实现其他功能模块的基础。

2.HDFS

一句话:HDFS(Hadoop Distributed File System),是一种分布式文件系统。

在实例中用于管理集群的文件系统,通过目录树定位存储的文件。在集群中管理众多的服务联合实现不同的功能(和微服务的共性)。
HDFS主要包含了:

1,NameNode(nn)

一般认为NameNode是一个Master,处理读写请求,配置副本策略,储存文件元数据,如文件名,文件属性等;还存储每个文件的块目录和其所在的DataNode。

NameNode由fsimage和edits组成:
edits:记录元数据的操作日志,即文件系统进行各种操作的实时记录。NameNode如何存放元数据?就是修改内存中的元数据,然后把修改的信息追加(append)到一个edits的文件上。
fsimage:元数据镜像文件,即文件系统的目录树。为了避免edits过于巨大,fsimage会生成内存快照,这样恢复数据只需要fsimage+部分edits即可。

2,DataNode(dn)

在本地文件系统存储文件块数据和块数据的校验和,实际数据块的读写也由其执行。文献中一般称其为NameNode的slave。与NameNode不同之处在于,NameNode管理数据存储位置也就是DataNode,而DataNode则管理数据具体存储地址。

3,Secongary NameNode(2nn)

是监控HDFS状态的辅助后台程序,通过设置策略每隔一段时间获取HDFS元数据的快照(是NameNode的冷备份,存储块的关键信息,减少宕机后的损失),由于资源消耗的原因,多用于测试&调试阶段,生产环境中有更好的替代品。
Secongary NameNode的主要解决的是何时生成快照fsimage,恢复时使用哪个edits的问题。通常是通过定时任务策略,通过结合fsimage和edits新生成一个fsimage并替换掉旧的fsimage,以保证每次重启后都是最新的fsimage。
注:冷备份无法恢复NameNode也失去响应时的数据。热备份则是在集群中给NameNode加了副本—从NameNode。这一般由zookeeper完成。

从以上描述可以看出HDFS多应用于为一次存储,N次读取的场景。简单来说,以GB甚至TB为基本单位的不需要经常更改的数据通过HDFS存储在集群中,通过MapReduce和YARN(Hadoop2.x后)进行排序分析比较,最终输出期望值。由HDFS管理的数据不能随机修改,那会耗费大量的时间进行重新分配并更新目录树,同时重新排序分析比较,因此只支持在末尾继续添加数据。

共同学习的shell(引自Hadoop官方网站):
cat
使用方法:hadoop fs -cat URI [URI …]
将路径指定文件的内容输出到stdout。
chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI …] Change group association of files. With -R, make the change recursively through the directory structure. The user must be the owner of files, or else a super-user. Additional information is in the Permissions User Guide. -->
改变文件所属的组。使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。更多的信息请参见HDFS权限用户指南。
chmod
使用方法:hadoop fs -chmod [-R] URI [URI …]
改变文件的权限。使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。更多的信息请参见HDFS权限用户指南。
chown
使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须是超级用户。更多的信息请参见HDFS权限用户指南。
copyFromLocal
使用方法:hadoop fs -copyFromLocal URI
除了限定源路径是一个本地文件外,和put命令相似。
copyToLocal
使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI
除了限定目标路径是一个本地文件外,和get命令类似。
cp
使用方法:hadoop fs -cp URI [URI …]
将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
du
使用方法:hadoop fs -du URI [URI …]
显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。
dus
使用方法:hadoop fs -dus
显示文件的大小。
expunge
使用方法:hadoop fs -expunge
清空回收站。请参考HDFS设计文档以获取更多关于回收站特性的信息。
get
使用方法:hadoop fs -get [-ignorecrc] [-crc]
复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
getmerge
使用方法:hadoop fs -getmerge [addnl]
接受一个源目录和一个目标文件作为输入,并且将源目录中所有的文件连接成本地目标文件。addnl是可选的,用于指定在每个文件结尾添加一个换行符。
ls
使用方法:hadoop fs -ls
如果是文件,则按照如下格式返回文件信息:
文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID
如果是目录,则返回它直接子文件的一个列表,就像在Unix中一样。目录返回列表的信息如下:
目录名 “<”dir“>”修改日期 修改时间 权限 用户ID 组ID
lsr
使用方法:hadoop fs -lsr
ls命令的递归版本。类似于Unix中的ls -R。
mkdir
使用方法:hadoop fs -mkdir
接受路径指定的uri作为参数,创建这些目录。其行为类似于Unix的mkdir -p,它会创建路径中的各级父目录。
movefromLocal
使用方法:dfs -moveFromLocal
输出一个”not implemented“信息。
mv
使用方法:hadoop fs -mv URI [URI …]
将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。不允许在不同的文件系统间移动文件。
put
使用方法:hadoop fs -put …
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
rm
使用方法:hadoop fs -rm URI [URI …]
删除指定的文件。只删除非空目录和文件。请参考rmr命令了解递归删除。
rmr
使用方法:hadoop fs -rmr URI [URI …]
delete的递归版本。
setrep
使用方法:hadoop fs -setrep [-R]
改变一个文件的副本系数。-R选项用于递归改变目录下所有文件的副本系数。
stat
使用方法:hadoop fs -stat URI [URI …]
返回指定路径的统计信息。
tail
使用方法:hadoop fs -tail [-f] URI
将文件尾部1K字节的内容输出到stdout。支持-f选项,行为和Unix中一致。
test
使用方法:hadoop fs -test -[ezd] URI
选项:
-e 检查文件是否存在。如果存在则返回0。
-z 检查文件是否是0字节。如果是则返回0。
-d 如果路径是个目录,则返回1,否则返回0。
touchz
使用方法:hadoop fs -touchz URI [URI …]
创建一个0字节的空文件。

总结

本章主要描述了Hadoop的组成部分Common&HDFS,理解了HDFS会更加深入的体会到分布式框架的魅力!HDFS的具体部署以及应用会在后续章节写到。

本文引用的主要资源:
官方文献:http://hadoop.apache.org/
B站的尚硅谷大数据:https://www.bilibili.com/video/BV1Qp4y1n7EN

你可能感兴趣的:(Hadoop概述,hadoop,hdfs,大数据)