Hadoop实战第2版笔记-001Hadoop简介

1.Hadoop简介

    Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS和MapReduce为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

    Hadoop的各个关联项目介绍:
1.Common:Common是为Hadoop其他子项目提供支持的常用工具,主要包括FileSystem,RPC和串行化库。为在廉价硬件上搭建云计算环境提供基本的服务,并且会为运行在该平台上的软件开发提供所需的API

2.Avro:是用于数据序列化的系统。听了丰富的数据结构类型,快速可压缩的二进制数据格式,存储持久性数据的文件集,远程调用RPC的功能和简单的动态语言集成功能。其中代码生成器既不需要读写文件数据,也不需要使用或实现RPC协议,它只是一个可选的对静态类型语言的实现。

3.MapReduce:MapReduce是一种编程模型,用于大规模数据集的并行运算。映射(Map),化简(Reduce)的概念和它们的主要思想都是从函数式编程语言中借鉴而来的。

4.HDFS:HDFS是一个分布式文件系统。因为HDFS具有高容错性的特点,所以可部署在低廉额硬件上。

5.Chuwa:Chukwa是开源的数据收集系统,用于监控和分析大型分布式系统的数据。Chukwa是在Hadoop的HDFS和MapReduce框架之上搭建的。

6.Hive:是最早由Fackbook设计的,是建立在Hadoop基础上的数据仓库,提供了一些用于对Hadoop文件中的数据集进行数据整理,特殊查询和分析存储的工具。

7.HBase:是一个分布式的,面向列的开源数据库。HBase不同于一般的关系数据库,其一,HBase是一个适合于非结构化数据存储的数据库;其二,HBase是基于列而不是基于行的模式。

8.Pig:Pig是一个对大型数据集进行分析,评估的平台。

9.ZooKeeper:ZooKeeper是一个为分布式应用所设计的开源协调服务。主要为用户提供同步,配置管理,分组和命名等服务,减轻分布式应用程序所承担的协调任务。

1.4.Hadoop与分布式开发

    Hadoop上并行应用程序的开发是基于MapReduce编程模型的。MapReduce编程模型的原理是:利用一个输入的key/value对集合来产生一个输出的key/value对集合。MapReduce库的用户用两个函数来表达这个计算:Map和Reduce

    用户自定义的Map函数接收一个输入的key/value对,然后产生一个中间key/value对的集合。MapReduce把所有具有相同key值得value集合在一起,然后传递给Reduce函数。

    用户自定义的Reduce函数接收key和相关的value集合。Reduce函数合并这些value值,形成一个较小的value集合。

1.5.Hadoop计算模型-MapReduce

    通常,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,既计算节点和存储节点在一起。这种配置允许框架在那些已经存在好数据的节点上高效地调度任务,这样可以使整个集群网络带宽得到非常高效地利用

1.6.Hadoop数据管理

1.6.1.HDFS的数据管理

    HDFS通过三个重要的角色来继续文件系统的管理:NameNode,DataNode和Client。
    
    NameNode使分布式文件系统中的管理者,主要负责管理文件系统的命名空间,集群配置信息和存储块的复制等。NameNode会将文件系统的Metadata存储在内存中,这些信息主要包括文件系统,每一个文件对应的文件块的信息和每一个文件块在DataNode中的信息等

    DataNode是文件存储的基本单元,将文件块存储在本地文件系统中,保存了所有BLock的Metadata,同时周期性的将所有存在的Block信息发送给NameNode

    作为分布式文件系统,HDFS在数据管理方面有几个值得学习的思路:
1.文件块的放置:一个Block会有三份备份,同时3个备份的放置位置既能保证存储的安全性,又能保证复制时的性能问题。

2.心跳检测:用心跳检测监控DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性

3.数据复制:使用Hadoop时可以用HDFS的balancer命令配置Threshold来平衡每一个DataNode的磁盘利用率。

4.数据校验:采用CRC32做数据校验。在写入文件块的时候,除了会写入数据外还会写入校验信息,在读取的时候则需要先校验后读入。

5.数据管道性的写入:当客户端要写入文件到DataNode上时,首先会读取一个Block,然后将其写到第一个DataNode上,接着由第一个DataNode将其传递到备份的DataNode上,直到所有需要写入这个Block的DataNode都成功写入后,客户端才会开始写一下个Block

6.安全模式:分布式文件系统启动时会进入安全模式,当处于安全模式时,文件系统的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了在系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略进行必要的复制或删除部分数据块。

1.6.2.HBase的数据管理

    HBase是一个类似Bigtable的分布式数据库,是一个稀疏的,长期存储的(存在硬盘上),多维度的排序映射表。这张表的索引是行关键字,列关键字和时间戳。
    表中的每个值是一个纯字符数组,数据都是字符串,没有类型。用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于是稀疏存储的,所有同一张表中的每一行数据都可以有截然不同的列。

    列的名字的格式是“<family>:<label>”,它是由字符串组成的,每一张表由一个family集合,这个集合是固定不变的,相当于表结构,只能通过改变表结构来改变表的family集合。label值相对于每行来说是可以修改的。

    HBase把同一个family中的数据存储在同一个目录下,而HBase的写操作是锁行的,每一行都是一个原子元素,都可以加锁。

    HBase在分布式集群上主要依靠由HRegion,HMaster,HClient组成的体系结构从整体上管理数据。有以下三大重要组成部分:
HBaseMaster:HBase主服务器
HRegionServer:HBase域服务器
HBaseClient:HBase客户端

1).HBaseMaster

    HBase只部署一台,其他为备用,由ZooKeeper通过领导选择法保证有一台主机可用。主要承担着初始化集群的任务,当主服务器第一次启动时,会试图从HDFS获取根或者根域目录,如果获取失败则创建根或者根域目录,以及第一个元目录。在下次启动时,主服务器就可以获取集群和集群中所有域的信息了。同时主服务器还负责集群中域的分配,域服务器运行状态的监视,表格的管理工作。

2).HRegionServer

    HBase域服务器的主要职责有服务器于主服务器分配的域,处理客户端的读写请求,本地缓冲区回写,本地数据压缩和分割域等功能。

    每个域只能由一台域服务器来提供服务,当它开始服务于某域时,会从HDFS文件系统中读取该域的日志和所有存储文件,同时还会管理操作HDFS文件的持久性存储工作。

3).HBaseClient

    HBase客户端负责查找用户域所在的域服务器地址。HBase客户端会与HBase主机交换信息以查找根域的位置。

    定位跟雨后,客户端连接根域所在的域服务器,并扫描根域获取元域信息。元域信息中包含所需用户域的域服务器地址。客户端在连接元域所在的域服务器,扫描元域以获取所需用户域所在的域服务器地址。定位用户域后,客户端连接用户域所在的域服务器并发出读写请求。


1.6.3.Hive的数据管理

    Hive是建立在Hadoop上的数据仓库基础架构。提供了一系列的工具,用来进行数据提取,转化,加载。是一种可以存储,查找和分析存储在Hadoop中的大规模数据的机制。

1).元数据存储

    Hive将元数据存储在RDBMS中,有三种模式可以连接到数据库:
Single User Mode:此模式连接到一个In-memory的数据库Derby,一般用户Unit Test
Multi User Mode:通过网络连接到一个数据库中
Remote User Mode:用于非Java客户端访问元数据库,在服务器启动一个MetaStoreServer,客户端通过Thrift协议通过MetaStoreServer来访问元数据库。

2).数据存储

    Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以自由的组织Hive中的表。Hive中所有的数据都存储在HDFS中,包含4中数据模型:Table,External Table,Partition和Bucket。

3).数据交换

1.用户接口:包括客户端,Web界面和数据库接口

2.元数据存储:通常存在在关系数据库中,如MySQL,Derby等

3.解释器,编译器,优化器,执行器:解释器,编译器,优化器完成HiveQL查询语句从词法分析,语法分析,编译,优化到查询计划的生成。生成的查询计划存储在HDFS中,并随后由MapReduce调用执行。

3.Hadoop:利用HDFS进行存储,利用MapR解释器,编译器,优化器educe进行计算,Hive的大部分查询由MapReduce完成,但是如果包含*的查询不回生成MapReduce任务。


1.7.Hadoop集群安全策略

    从Hadoop1.0.0版本后,引入了安全机制和授权机制(Simple和Kerberos)。下面从用户权限管理,HDFS安全策略和MapReduce安全策略三个方面简要介绍Hadoop的集群安全策略。

1.7.1.用户权限管理

    Hadoop上的用户权限管理主要涉及用户分组管理,为更高层的HDFS访问,服务访问,Job提交和配置Job等操作提供认证和控制基础

    Hadoop上的用户和用户组名均由yoghurt自己指定,如果用户没有指定,那么Hadoop会调用Linux的whoami命令获取当前Linux系统的用户名和用户组名作为当前用户的对应名,并将其保存在Job的user.name和group.name两个属性中。这样用户所提交Job的后续认证和授权以及集群服务的方位都讲基于此用户和用户组的权限及认证信息进行。

1.7.2.HDFS安全策略

    用户和HDFS服务之间的交互主要有两种情况:用户机和NameNode之间的RPC交互获取待通信的DataNode位置,客户机和DataNode交互传输数据块。

    RPC交互可以通过Kerberos或授权令牌来认证。在认证和NameNode的连接时,用户需要使用Kerberos证书来通过初试认证,获取授权令牌。

    授权令牌可以在后续用户Job与NameNode连接的认证中使用,而不必再次方位Kerberos Key Server。

    数据块的传输可以通过块访问令牌来认证,每一个块访问令牌都由NameNode生成,它们都是特定的。块访问令牌代表数据访问容量,一个块访问令牌保证用户可以访问指定的数据库。

    块访问令牌由NameNode签发被用在DataNode上,其传输过程就是将NameNode上的认证信息传输到DataNode上。块访问令牌是基于对称加密模式生成的,NameNode和DataNode共享了密钥。

    对于每个令牌,NameNode基于共享密钥计算一个消息认证码,接下来,这个消息认证码就会作为令牌验证器成为令牌的主要组成部分。当一个DataNode接收到一个令牌时,它会使用自己的共享密钥重新计算一个消息认证码,如果这个认证码同令牌中的认证码匹配,那么认证成功。


1.7.3.MapReduce安全策略

    MapReduce安全策略主要涉及Job提交,Task和Shuffle三个方面。

    对于Job提交,用户需要将Job配置,输入文件和输入文件的元数据等写入用户home文件夹下,这个文件夹只能由该用户读,写和执行。接下来用户将home文件夹位置和认证信息发送给JobTracker。

    在执行过程中,Job可能需要访问多个HDFS节点或其他服务,因此,Job的安全凭证将以<String key,binary value>形式保存在一个Map数据结构中,在物理存储介质上将保存在HDFS中JobTracker的系统目录下,并分发给每个TaskTracker。

    Job的授权令牌将NameNode的URL作为其关键信息,为了防止授权令牌过期,JobTracker会定期更新授权令牌。Job结束之后所有的令牌都会失效,为了获取保持在HDFS上的配置细腻,JobTracker需要使用用户的授权令牌访问HDFS,读取必须的配置信息。

转载于:https://my.oschina.net/u/3275937/blog/3002576

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值