深入浅出Hadoop(part 3)(深入浅出ddr)
mhr18 2024-10-02 17:04 19 浏览 0 评论
Hadoop CDH集群管理概述:
优点:
1、基于稳定版Apache Hadoop,并修复bug
2、文档简单详细
3、支持Yum包、Tar包、PRM包、cloudera manager四种安装方式
Hue入门:
Hue是开源的Apache Hadoop UI系统,通过web界面,管理大数据相关框架。
功能:
1、提供SQL接口,在web界面操作Hive、Impala、MySQL、PostGres、Sqlite、Oracle
2、提供Solr动态查询面板,在web页面动态查询Solr数据,并且提供报表支持。
3、提供spark编辑器
4、提供浏览界面:可以查看YARN日志数据,HDFS数据,Hive表元数据,HBASE表,zookeeper等
5、提供Sqoop2编辑器,
6、提供Hadoop数据加载向导
Hadoop各个压缩算法特点:
多文件,是指能否同时压缩多个文件。
通过LZO压缩后的文件最大,压缩和解压缩速度都最快;bzip2压缩后的文件最小,压缩和解压缩的速度最慢。
Gzip压缩优点:
1、压缩率比较高,也就是压缩后的数据比较小。
2、压缩/解压缩的速度相对比较快,但是比不上LZO。
3、Hadoop本身支持,可以不用安装就可以使用。
4、大部分Linux系统自带gzip命令,使用方便。
Gzip缺点:
1、不支持split,不支持分隔文件
Gzip应用场景:
1、当每个文件压缩后在1个块大小内,128M,可以使用gzip压缩格式。如果超过该大小,则不建议使用。
2、把一段时间内的数据压缩为一个gzip文件,可以提高存储效率。
LZO压缩优点:
1、压缩/解压缩速度最快,压缩率比较高,但不如gzip
2、支持split,所以处理数据效率非常高。是Hadoop中最流行的压缩格式。
3、支持Hadoop本地库。
4、可以在Linux系统中安装lzop命令。
LZO缺点:
1、压缩率比gzip低,意味着占用存储空间大。
2、Hadoop本身不支持,需要安装
3、为了支持split需要建索引,还需要指定inputformat为lzo格式。
LZO应用场景:很大的文本文件,压缩之后还大于200M时可以考虑LZO压缩。单个文件越大,LZO优点越明显。
Snappy压缩优点:
1、高速压缩速度和合理的压缩率
2、支持Hadoop本地库
Snappy缺点:
1、不支持split
2、压缩率比gzip低
3、Hadoop本身不支持,需要安装
4、Linux系统没有对应的命令
Snappy应用场景:当MR作业的map输出的数据比较大时,可以作为map到reduce的中间数据的压缩格式。或者是两个MR任务,它们之间数据传输的压缩格式。
Bzip2压缩优点:
1、支持split。有很高的的压缩率,比其他压缩算法都高。
2、Hadoop本身支持,但是不支持native。
3、在Linux系统下自带bzip2命令
Bzip2缺点:
1、压缩/解压缩速度慢,因为压缩率很高。
2、不支持本地库native
Bzip2应用场景:
1、对速度要求不高,但需要较高的压缩率
2、数据经过处理之后还是比较大,且处理之后使用的情况比较少
HDFS底层架构:
1、基于物理层存储的分布式,也就是说,存储的数据,是在两个节点以上的机器,而不是单台的服务器;而且数据存储是独立的,不会相互影响。
2、基于客户端/服务器模式。通常一个分布式文件系统,提供多个供用户访问的服务器。
3、通常情况下,HDFS会提供备份和容错的功能。默认情况下,HDFS会备份三份数据,可以通过更新配置文件更新备份数。如果备份数据中,有一份丢失,HDFS会通过剩下的备份数据来恢复它。
4、通常情况下,HDFS都是基于操作系统的本地文件系统。比如常见的ext3,ext4,NTFS
分布式文件系统的优点:
1、传统文件系统,容量和吞吐量有限制。分布式文件系统可以动态增加服务器来存储数据;分布式文件系统可以通过多个服务器并行处理数据,增加吞吐量。
2、多用户多应用并行读写。
3、扩充存储空间的成本低。
4、可提供冗余备份。
5、为分布式计算提供基础服务,也就是Hadoop中的MR计算任务。
HDFS基本概念:
1、HDFS是一个分布式文件系统。
2、HDFS是一个Java实现的,分布式的(多台服务器),可横向扩展(可动态增加节点和卸载节点)的文件系统。
3、HDFS是Hadoop的核心组件(核心组件有三个,另外两个是MapReduce,用于计算和分析海量数据;YARN,用于调用集群的资源,管理集群的CPU、内存等),用于存储海量数据。
4、基于*NIX,比如Linux、Unix
5、HDFS具有很高的容错性(集群中的节点如果一台故障,HDFS还是可以正常提供服务,后期也可以动态将宕机节点启动)、提供高吞吐量的数据访问(因为可以并发读写)。
6、HDFS适用于一次写入多次读取的情况,HDFS没有修改数据的概念;不支持并发写情况(是指写同一个文件);小文件不合适,因为存储的每一个文件,都会在NameNode中存储一份元数据,NameNode内存有限制,小文件过多会导致NameNode内存不足,导致集群不可用。
HDFS前提和设计目标:
1、硬件错误是常态。错误检测和快速、自动的恢复是HDFS最核心的架构目标。
2、适用于存储超大文件,可以达到PB、EP级。单个文件一般在百M以上。
3、可处理流数据,HDFS适用于批处理,不适合随机定位访问。
简单一致性模型:
1、HDFS应用程序需要对文件实行一次写、多次读的访问模式。如果想要修改,则需要删除之后重新上传。
2、程序采用“数据就近”原则分配节点执行。因为移动计算比移动数据的代价低,也就是通过程序分析出要访问的数据存储在哪台服务器,然后直接访问最近的服务器,这种效率高。
3、运行在普通廉价的服务器上,可以用普通的PC机用作服务器。即便发生硬件故障,也可以通过容错策略实现高可用。
HDFS局限性:
1、不适合低延迟的数据访问。高吞吐量代价是高延迟。Spark可以在内存中读取数据,可以解决高延迟。HBASE也可以弥补不足。
2、无法高效存储大量小文件。因为受限于NameNode的内存。
3、不支持多用户写入及修改文件。
HDFS基本概念——块:
1、HDFS基本存储单位是块,传统的块是存储在介质中,块也是读写的最小数据单位。
2、Hadoop2.X版本默认一块64M,2.X版本默认128M。块的大小可以在hdfs-site.xml中配置,1.X修改 dfs.block.size,2.X修改 dfs.blocksize,默认单位是比特。每个块有自己的全局ID。
3、HDFS会将一个文件分为一个或多个块来存储。每个块是独立的存储单位,是存储在集群中。
块的好处:
1、一个文件的大小,可以大于网络中任意一个磁盘的容量。可以把大文件分隔成很多块,分开存储。
2、简化了存储子系统的设计,简化了存储管理,消除了对元数据的顾虑。
3、块适用于数据备份,如果一个块故障,可以通过备份的块恢复,提供了容错能力和可用性。
块的冗余备份:
1、每个块在集群中都会存储多分数据,默认三份。
2、简化了存储子系统的设计,简化了存储管理,消除了对元数据的顾虑。
3、块适用于数据备份,提供了容错能力和可用性。
Rack1 和 Rack2 可以理解成两个服务器。
HDFS元数据:
1、文件系统目录树信息,包括文件名、目录名;文件和目录的从属关系;文件和目录的大小,创建时间,最后访问时间;文件和目录的权限。
2、文件和块的对应关系,包括文件由哪些块组成。
NameNode职责详解:
1、管理文件系统的命名空间,类似于D盘,E盘等。
2、记录每个块在DataNode的位置关系,和副本关系。
3、协调客户端对文件的访问,客户端如果要下载数据,首先通过NameNode获得下载数据的地址,然后通过地址下载数据。
4、记录文件的改动,如命名空间内的改动和空间本身属性的改动。
5、NameNode可以使用事务日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间,包括文件映射和属性。
6、通过检查点(checkpoint)更新影像文件。
DataNode职责详情:
1、负责所在物理节点的存储管理,主要用来存储数据块。
2、一次写入,多次读取,不支持修改
3、文件由数据块组成,典型块大小为64M和128M
4、数据块会尽量散布在各个节点,增加读取效率
HDFS读文件流程:
首先客户端打开分布式文件系统,通过NameNode获取元数据块,得到块的信息(存储在哪个DataNode中),通过信息读取数据,读取完成后,关闭连接。
通过客户端访问,创建分布式文件系统的连接,通知NameNode需要创建数据,NameNode处理请求,客户端写入数据,写入完成后关闭连接。
HDFS可靠性:
1、冗余副本策略,所有数据块都有备份。DataNode启动时,会遍历本地文件系统,会产出一份HDFS数据块与本地文件的对应关系列表,并汇报给NameNode。
2、机架策略,集群一般放在不同的机架上,机架间的带宽要比机架内的带宽小。默认一个机架存储两份数据,另一个机架存储一份数据,可以防止机架故障时数据丢失,也可以提高带宽的利用率。
心跳机制:
1、NameNode周期性从DataNode接受心跳信号和块报告,用于监控集群,如果出现错误,会自动修复。
2、NameNode根据块报告验证元数据。如果DataNode没有按时发送心跳信号,NameNode会标记为宕机,不再发送I/O请求。
3、如果DataNode宕机,则副本数量下降,并且低于预设的阈值,NameNode会检测出这些数据块,并在合适的时机复制备份进行恢复。
4、重新复制数据块原因很多,包括数据副本损坏,磁盘错误,复制因子增大等。
安全模式:
1、启动NameNode会经过一个安全模式,用来保证数据安全。
2、在安全模式中,只能读取数据,不能写。
3、在安全模式中,NameNode会进行验证,收集DataNode的报告,当数据块达到最小副本数量以上时,会认为是安全的,并退出安全模式,可以进行数据写操作。
4、当检测数据块不足最小副本数时,HDFS会自动复制这个数据块,直到达标。
校验和:
1、HDFS客户端会对HDFS文件内容进行检测
2、在文件常见时,会校验每个文件的校验和(checksum),存储在一个隐藏文件中,最终会存储在命名空间中。可以通过这个校验和,检验数据块是否损坏。
3、如果正在读取的数据块损坏,可以读它的副本。
回收站:
1、删除文件时,先放入回收站trash中。
2、回收站中的数据可以快速恢复。可以设置一个时间阈值,如果回收站存放数据超过时间阈值,则永久删除,并释放占用的数据块。
3、默认情况回收站是关闭的,可以通过修改 core-site.xml 中添加 fs.trash.interval 打开并配置时间阈值,时间单位是分钟。
元数据保护:
1、映像文件和事务日志是NameNode存储的核心数据,可以配置多个副本。
2、副本会降低处理速度,但会增加安全性。
3、Hadoop1.X版本中,NameNode是单节点,如果发生故障需要手工切换。Hadoop2.X版本可以配置NameNode HA解决该问题。
相关推荐
- 如何检查 Linux 服务器是物理服务器还是虚拟服务器?
-
在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...
- 第四节 Windows 系统 Docker 安装全指南
-
一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...
- C++ std:shared_ptr自定义allocator引入内存池
-
当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...
- Activiti 8.0.0 发布,业务流程管理与工作流系统
-
Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...
- MyBatis动态SQL的5种高级玩法,90%的人只用过3种
-
MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...
- Springboot数据访问(整合Mybatis Plus)
-
Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...
- 盘点金州勇士在奥克兰13年的13大球星 满满的全是...
-
见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...
- Mybatis入门看这一篇就够了(mybatis快速入门)
-
什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...
- Springboot数据访问(整合druid数据源)
-
Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...
- Linux 中的 "/etc/profile.d" 目录有什么作用 ?
-
什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...
- 企业数据库安全管理规范(企业数据库安全管理规范最新版)
-
1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...
- Oracle 伪列!这些隐藏用法你都知道吗?
-
在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...
- Oracle 高效处理数据的隐藏神器:临时表妙用
-
各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...
- Oracle 数据库查询:多表查询(oracle多表关联查询)
-
一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...
- 一文掌握怎么利用Shell+Python实现多数据源的异地备份程序
-
简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 如何检查 Linux 服务器是物理服务器还是虚拟服务器?
- 第四节 Windows 系统 Docker 安装全指南
- C++ std:shared_ptr自定义allocator引入内存池
- Activiti 8.0.0 发布,业务流程管理与工作流系统
- MyBatis动态SQL的5种高级玩法,90%的人只用过3种
- Springboot数据访问(整合Mybatis Plus)
- 盘点金州勇士在奥克兰13年的13大球星 满满的全是...
- Mybatis入门看这一篇就够了(mybatis快速入门)
- Springboot数据访问(整合druid数据源)
- Linux 中的 "/etc/profile.d" 目录有什么作用 ?
- 标签列表
-
- oracle位图索引 (74)
- oracle基目录 (50)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (53)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)