• Hadoop&HDFS知识点整理


    创作之初

    最近抽时间看了下Hadoop权威指南一书,对原理有了更深刻的理解,顺便整理了一些重要的知识点,工作或面试中能用得上,需要的请收藏点赞。

    知识点整理

    1.尽量在计算节点上存储数据,以实现数据的本地快速访问,数据本地化特性是hadoop数据处理的核心。

    2.hadoop为每个分片构建一个map任务,小文件会导致大量的map任务。一个合理的分片大小趋向于HDFS的一个块的大小,默认是128MB。

    3.map任务将其输出写入本地硬盘,而非HDFS。因为map输出是中间结果,中间结果由reduce任务处理后才产生最终结果,一旦作业完成,map的输出结果就可以删除。

    4.reduce任务输入来自于所有mapper的输出,不具备数据本地化的优势,输出存储在HDFS上,需要占用网络带宽,任务数不是由输入数据的大小决定,是独立的。

    5.combiner函数能帮助减少mapper和reducer之间的数据船数量,通过Reducer类来定义。

    6.大量的小文件:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode内存容量。每个文件、目录和数据块的存储信息大约占150字节。

    7.HDFS中文件的写入只支持单个写入者,写操作总是以只添加的方式在文件末尾写数据,不支持多个写入者的操作,也不支持在文件的任意位置进行修改。

    8.HDFS的块默认128MB,比磁盘块大,目的是为了最小化寻址开销。

    9.列出文件系统中各个文件由哪些块构成:hdfs fsck / -files -blocks

    10.namenode管理文件系统的命名空间,维护文件系统树以及整棵树所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。

    11.datanode是文件系统的工作节点,存储并检索数据块,定期向namenode发送他们所存储的块的列表。

    12.namenode容错:(1)将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS) (2)运行一个辅助namenode,定期合并编辑日志与命名空间镜像,以防止编辑日志过大。存储在NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行。

    13.namenode HA:
    namenode 之间需要通过高可用共享存储实现编辑日志的共享。当备用 namenode 接管工作之后,它将通读共享编辑日志直至末尾,以实现与活动 namenode 的状态同步,井继续读取由活动 namenode 写人的新条目 。
    datanode 需要同时向两个 namenode 发送数据块处理报 告,因为数据块的映射信息存储在 namenode 的内存中,而非磁盘。
    客户端需要使用特定的机制来处理 namenode 的失效问题,这一机制对 用户是透明的。
    辅助 namenode 的角色被备用 namenode 所包含,备用 namenode 为 活动 的 namenode 命名空间设置周期性检查点。

    14.从本地文件系统中将一个文件复制到HDFS:hdfs dfs -copyFromLocal input/docs/test.txt /user/tom/test.txt (-copyToLocal 把文件复制回本地文件系统)

    15.复制大文件或目录: hadoop distcp file1 file2 同步修改: hadoop distcp -update dir1 dir2

    16.CodecPool 压缩解压缩池,支持反复使用压缩和解压缩,分摊创建这些对象的开销.

    17.gzip不支持文件切分,bzip2文件支持切分.

    18.Avro、Parquet文件格式支持压缩和切分,与快压工具Snappy、LZO,LZ4联合使用。

    19.合理选择数据块的大小、确保压缩后数据块的大小近似于HDFS块的大小.

    20.文件格式
    (1)Avro: .avsc是文件扩展名,数据文件,紧凑且可切分,可移植,可跨越不同的编程语言,二进制格式,面向行,连续存储,适合同时处理一行中很多列的情况,实现了高效的二进制比较,不需要将二进制对象反序列化为对象即可实现比较,因为它可以直接对字节流进行操作。
    面向列的存储不适合流的写操作,如果write处理失败,当前的文件无法恢复,Flume使用面向行的存储形式。
    (2)Parquet面向列的存储,查询性能优秀,存储更少占用空间,节省时间并提升I/O操作效率。

    21.Configuration从资源中读取属性值。

    22.小文件处理:CombineFilelnputFormat把多个文件打包到一个分片中以便每个mapper可以处理更多的数据,避免输入文件切分(1.增加最小分片的大小,设置long.MAX_VALUE 2.使用 FileinputFormat 具体子类,并且 重写 isSplitable()方法@把返回值设置为 false)。

    23.Flume收集数据减少小文件数可以使用多层代理的方式,通过第二层代理汇聚来自第一层的事件。

    24.sqoop的import工具会运行一个MR作业,默认情况下,该作业会并行使用4个map任务,可以通过参数调整(-m ),可以指定分隔符、文件格式、压缩方式。应该使用 Sqoop的 SequenceFile格式、的ro格式或 Parquet 文件。

    25.sqoop,当导人的大对象数据大于阔值 16 M 时(通过 sqoop. inline.lob.length.max 设置,以字节为单位), Sqoop 将导入的大对 象数据存 储在 LobFile 格式的单独文件中。 LobFile 格式能够存储非常大的单条记录(使 用了 64 位的地址空间),每条记录保存一个大对象。 LobFile 格式允许客 户端持 有对记录的引用,而不访问记录内容,对记录的访问是通过 java.io.InputStream(用于二进制对象)或 java.io.Reader(用于字符对象)来实 现的。

    26.控制map数据:(1)通过压缩文件,一个压缩文件一个map (2)修改对应参数 (3)修改block参数

    27.namenode查找数据位置:
    (1)文件名 (path)—》blockid
    (2)blockid -》 datanode

    28.crc32,签名, hdfs数据校验 client -> datanode 默认512字节创建一个校验码,修复命令DN接收NN发送的一个block修复指令,datanode -> client,同样也需要签名校验

    29.zkfc 是zk集群的客户端,监控NN的状态信息

    30.同步问题,需要依赖JournalNodes 守护进程,完成元数据的一致性,JN数量大于等于3个。

    31.为什么用QJM来实现HA:
    (1)不需要配置额外的共享存储
    (2)消除单点问题
    (3)可配置
    (4)JN不会因为其中一台的延迟而影响整体的延迟,也不会因为JN的数量增多而影响

    32.Hadoop 2.4.0开始,使用hdfs acl做权限控制。

    33.Container是Yarn中最基本的处理单元,通常建议:一块磁盘和一个cpu,配置2个Container会达到集群利用率的最佳平衡

    34.文件分发命令:
    (1)-file:把本地文件分发到集群节点
    (2)-cacheFile:把hdfs文件分发到集群节点
    (3)-cacheArchive:把hdfs目录(压缩包)分发到集群节点

    欢迎补充

  • 相关阅读:
    python入门第十七天_生成器 迭代器
    python入门第十六天__列表生成式
    装饰器补充知识点_ @functools.wraps(func)
    函数练习题2
    函数编程练习题1
    迭代器
    生成器的send方法
    函数写生成器
    斐波那契数列
    生成器
  • 原文地址:https://www.cnblogs.com/zfwwdz/p/13183268.html
Copyright © 2020-2023  润新知