读书笔记《Hodoop》第一章 Hodoop简介

1.Hadoop项目及其结构:
  现在Hadoop已经发展成为包含很多项目的集合。虽然其核心内容是MapReduce和Hadoop分布式文件系统,但与Hadoop相关的Common、Avro、 Chukwa、Hive、 HBase 等项目也是不可或缺的。它们提供了互补***或在核心层,上提供了更高层的服务。 下面将对Hadoop的各个关联项目进行更详细的介绍。
 1) Common: Common 是为Hadoop其他子项目提供支持的常用工具,它主要包括FileSystem、RPC 和串行化库。它们为在廉价硬件上搭建云计算环境提供基本的服务,并且会为运行在该平台.上的软件开发提供所需的API。
  2) Avro: Avro 是用于数据序列化的系统。它提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC的功能和简单的动态语言集成功能。其中代码生成器既不需要读写文件数据,也不需要使用或实现RPC协议,它只是一个可选的对静态类型语言的实现。
  Avro系统依赖于模式(Schema),数据的读和写是在模式之下完成的。这样可以减少写入数据的开销,提高序列化的速度并缩减其大小;同时,也可以方便动态脚本语言的使用,因为数据连同其模式都是自描述的。
  在RPC中,Avro系统的客户端和服务端通过握手协议进行模式的交换,因此当客户端和服务端拥有彼此全部的模式时,不同模式下相同命名字段、丢失字段和附加字段等信息的一致性问题就得到了很好的解决。
  3) MapReduce : MapReduce 是一-种编程模型,用于大规模数据集(大于1TB)的并行运算。映射(Map)、化简(Reduce)的概念和它们的主要思想都是从函数式编程语言中借鉴而来的。它极大地方便了编程人员一即使在不 了解分布式并行编程的情况下,也可以将自己的程序运行在分布式系统上。MapReduce 在执行时先指定一个Map (映射)函数,把输入键值对映射成一组新的键值对,经过一定处理后交给Reduce,Reduce对相同key下的所有value进行处理后再输出键值对作为最终的结果。
4) HDFS : HDFS是一个分布式文件系统。因为HDFS具有高容错性( fault-tolerent)的特点,所以它可以设计部署在低廉(low-cost) 的硬件,上。它可以通过提供高吞吐率( highthroughput)来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了对可移植操作系统接口(POSIX, Portable Operating System Interface)的要求,这样可以实现以流的形式访问文件系统中的数据。HDFS原本是开源的Apache项目Nutch的基础结构,最后它却成为了Hadoop基础架构之一。
5)Chukwa:Chukwa是开源的数据收集系统,用于监控和分析大型分布式系统的数据。Chukwa是在Hadoop的HDFS和MapReduce框架之_上搭建的,它继承了Hadoop的可扩展性和健壮性。Chukwa通过HDFS来存储数据,并依赖MapReduce任务处理数据。Chukwa中也附带了灵活且强大的工具,用于显示、监视和分析数据结果,以便更好地利用所收集的数据。
  6)Hive:Hive最早是由Facebook设计的,是一一个建立在Hadoop基础之.上的数据仓库,它提供了一些用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储的工具。Hive提供的是一种结构化数据的机制,它支持类似于传统RDBMS中的SQL语言的查询语言,来帮助那些熟悉SQL的用户查询Hadoop中的数据,该查询语言称为HiveQL。与此同时,传统的MapReduce编程人员也可以在Mapper或Recducer中通过HiveQL查询数据。Hive编译器会把Hive QL编译成一组MapReduce任务,从而方便MapReduce编程人员进行Hadoop系统开发。
   7)HBase:HBase是一个分布式的、面向列的开源数据库,该技术来源于Google论文《Bigtable:一个结构化数据的分布式存储系统》。如同Bigtable利用了Google文件系统(Google File System)提供的分布式数据存储方式一样,HBase 在Hadoop之.上提供了类似于Bigtable的能力。HBase 不同于一般的关系数据库,原因有两个:其一,HBase是一一个适合于非结构化数据存储的数据库;其二,HBase 是基于列而不是基于行的模式。  HBase和Bigtable使用相同的数据模型。  用户将数据存储在一个表里,一个数据行拥有一个可选择的键和任意数量的列。由于HBase表是疏松的,用户可以为行定义各种不同的列。HBase主要用于需要随机访问、实时读写的大数据(Big Data)。具体介绍请参考第12章。
  8) Pig: Pig 是一个对大型数据集进行分析、评估的平台。Pig 最突出的优势是它的结构能够经受住高度并行化的检验,这个特性使得它能够处理大型的数据集。目前,Pig的底层 由一个编译器组成,它在运行的时候会产生一些MapReduce程序序列,Pig 的语言层由一种叫做Pig Latin的正文型语言组成。有关Pig的具体内容请参考第14章。
  9) ZooKeeper: ZooKeeper 是-一个为分布式应用所设计的开源协调服务。它主要为用户提供同步、  配置管理、分组和命名等服务,减轻分布式应用程序所承担的协调任务。ZooKeeper的文件系统使用了我们所熟悉的目录树结构。ZooKeeper 是使用Java编写的,但是它支持Java和C两种编程语言。有关ZooKeeper的具体内容请参考第15章。
2.Hadoop 集群安全策略
  众所周知,Hadoop的优势在于其能够将廉价的普通PC组织成能够高效稳定处理事务的大型集群,企业正是利用这一特点来构架Hadoop集群、获取海量数据的高效处理能力的。但是,Hadoop集群搭建起来后如何保证它安全稳定地运行呢?旧版本的Hadoop中没有完善的安全策略,导致Hadoop集群面临很多风险,例如,用户可以以任何身份访问HDFS或MapReduce集群,可以在Hadoop集群上运行自己的代码来冒充Hadoop集群的服务,任何未被授权的用户都可以访问DataNode节点的数据块等。经过Hadoop安全小组的努力,在Hadoop 1.0.0 版本中已经加入最新的安全机制和授权机制( Simple和Kerberos),使Hadoop集群更加安全和稳定。下面从用户权限管理、HDFS安全策略和MapReduce安全策略三个方面简要介绍Hadoop的集群安全策略。有关安全方面的基础知识如Kerberos认证等读者可自行查阅相关资料。 
  (1)用户权限管理
  Hadoop.上的用户权限管理主要涉及用户分组管理,为更高层的HDFS访问、服务访问、Job提交和配置Job等操作提供认证和控制基础。
  Hadoop.上的用户和用户组名均由用户自己指定,如果用户没有指定,那么Hadoop会调用Linux的“whoami”命令获取当前Linux系统的用户名和用户组名作为当前用户的对应名,并将其保存在Job的的user.name 
和group.name 两个属性中。这样用户所提交Job的后续认证和授权以及集群服务的访问都将基于此用户和用户组的权限及认证信息进行。例如,在用户提交Job到JobTracker时,JobTracker 会读取保存在Job路径下的用户信息并进行认证,在认证成功并获取令牌之后,JobTracker会根据用户和用户组的权限信息将Job提交到Job队列(具体细节参见本小节的HDFS安全策略和MapReduce安全策略)。
  Hadoop集群的管理员是创建和配置Hadoop集群的用户,它可以配置集群,  使用Kerberos机制进行认证和授权。同时管理员可以在集群的服务(集群的服务主要包括NameNode、DataNode、 JobTracker 和TaskTracker)授权列表中添加或更改某确定用户和用户组,  系统管理员同时负责Job队列和队列的访问控制矩阵的创建。 
   (2) HDFS安全策略
  用户和HDFS服务之间的交互主要有两种情况:用户机和NameNode之间的RPC交互获取待通信的DataNode位置,客户机和DataNode交互传输数据块。
  RPC交互可以通过Kerberos或授权令牌来认证。在认证与NameNode的连接时,用户需要使用Kerberos证书来通过初试认证,获取授权令牌。授权令牌可以在后续用户Job与NameNode连接的认证中使用,而不必再次访问KerberosKeyServer。授权令牌实际上是用户机与NameNode之间共享的密钥。授权令牌在不安全的网络,上传输时,  应给予足够的保护,  防止被其他用户恶意窃取,因为获取授权令牌的任何人都可以假扮成认证用户与NameNode进行不安全的交互。需要注意的是,每个用户只能通过Kerberos认证获取唯一一个新的授权令牌。用户从NameNode获取授权令牌之后,需要告诉NameNode:谁是指定的令牌更新者。指定的更新者在为用户更新令牌时应通过认证确定自己就是NameNode。更新令牌意味着延长令牌在NameNode上的有效期。为了使MapReduceJob使用一一个授权令牌,用户应将JobTracker指定为令牌更新者。这样同一个Job的所有Task都会使用同一一个令牌。JobTracker需要保证这一令牌在整个任务的执行过程中都是可用的,在任务结束之后,它可以选择取消令牌。 
(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,读取必需的配置信息。 任务(Task)的用户信息沿用生成Task的Job的用户信息,因为通过这个方式能保证一个用户的Job不会向TaskTracker或其他用户Job的Task发送系统信号。这种方式还保证了本地文件有权限高效地保存私有信息。在用户提交Job后,  TaskTracker会接收到JobTracker分发的Job安全凭证,并将其保存在本地仅对该用户可见的Job文件夹下。在与TaskTracker通信的时候,Task 会用到这个凭证。当一个Map任务完成时,它的输出被发送给管理此任务的TaskTracker.每一个Reduce将会与TaskTracker通信以获取自己的那部分输出,此时,就需要MapReduce框架保证其他用户不会获取这些Map的输出。Reduce任务会根据Job凭证计算请求的URL和当前时间戳的消息认证码。这个消息认证码会和请求一起 发到TaskTracker, 而TaskTracker 只会在消息认证码正确并且在封装时间戳的N分钟之内提供服务。在TaskTracker返回数据时,为了防止数据被木马替换,应答消息的头部将会封装根据请求中的消息认证码计算而来的新消息认证码和Job凭证,从而保证Reduce能够验证应答消息是由正确的TaskTracker发送而来。

答消息是由正确的TaskTracker发送而来。
#读书笔记##笔记#
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务