zoukankan      html  css  js  c++  java
  • 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目录(压缩包)分发到集群节点

    欢迎补充

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/zfwwdz/p/13183268.html
Copyright © 2011-2022 走看看