Hadoop组件学习(二)——属性与安全性

1、Hadoop的部分属性

2、Hadoop的安全性

Hadoop的部分属性

    1、委任和解除节点

    Hadoop集群的管理员经常需要向集群中添加节点或从集群中移除节点。例如,为了扩大存储容量,需要委任节点;相反的,如果想要缩小集群规模或节点表现反常,例如故障率过高或者性能过低,则需要解除该节点。

    委任新节点

    include文件说明:允许连接到namenode的所有datanode放在一个文件中,文件名称有dfs.hosts属性指定。该文件放在namenode的本地文件系统中,每行对应一个datanode的网络地址,如果需要为一个datanode指定多个网络地址,可将多个网络地址放在一行,由空格隔开;类似的,连接到资源管理器的各个节点管理器也在同一个文件中指定,该文件的名称由yarn.resourcemanager.nodes.include-path属性指定。通常情况下,由于集群中的节点同时运行datanode和节点管理器守护进程,dfs.hosts和yarn.resourcemanager.nodes.include-path会同时指向一个文件,即include文件。

    向集群添加新节点的步骤如下:

        (1) 将新节点的网络地址添加到include文件中

        (2) 运行 %hdfs dfsadmin -refreshNodes 指令,将审核过的一系列datanode集合更新至namenode信息

        (3) 运行 %yarn rmadmin -refreshNodes 指令,将审核过的一系列节点管理器信息更新至资源管理器

        (4) 将新节点更新slaves文件中,这样的话,Hadoop控制脚本会将新节点包括在文件操作之中

        (5) 启动新的datanode和节点管理器

        (6) 检查新的datanode和节点管理器是否都出现在网页界面中

    同时,HDFS不会自动将块从旧的datanode移到新的datanode以平衡集群,用户需要自行运行均衡器。

    解除旧节点

    解除节点的过程由exclude文件控制,对于HDFS来说,文件由dfs.hosts.exclude属性设置;对于YARN来说,文件由yarn.resourcemanager.nodes.exclude-path属性设置。这些文件列出若干未被允许连接到集群的节点,通常,这两个属性指向同一个文件。

    从集群中移除节点的步骤如下:

        (1) 将待解除节点的网络地址添加到exclude文件中,不更新include文件

        (2) 运行 %hdfs dfsadmin -refreshNodes 指令,将审核过的一系列datanode集合更新至namenode信息

        (3) 运行 %yarn rmadmin -refreshNodes 指令,将审核过的一系列节点管理器信息更新至资源管理器

        (4) 转到网页界面,查看待解除datanode的管理状态是否已经变为“正在解除”(Decommission In Progress),因为此时相关的datanode正在被解除过程之中。这些datanode会把它们的块复制到其他的datanode中

        (5) 当所有datanode的状态变为“解除完毕”(Decommissioned)时,表明所有块都已经复制完毕。关闭已经解除的节点

        (6) 从include文件中移除这些节点,并运行以下命令:%hdfs dfsadmin -refreshNodes;%yarn rmadmin -refreshNodes

        (7) 从slaves文件中移除节点

    2、缓冲区大小

    Hadoop使用一个4kb的缓冲区辅助I/O操作,而增大缓冲区容量会显著提高性能,可以通过core-site.xml文件中的io.file.buffer.size属性来设置缓冲区大小(以字节为单位)

    3、HDFS块大小

    在默认情况下,HDFS块大小是128MB,而提高块大小可以降低namenode的内存压力,并向mapper传输更多数据。可以通过hdfs-site.xml文件中的dfs.blocksize属性设置块大小(以字节为单位)

    4、保留的存储空间

    默认情况下,datanode能够使用存储目录上的所有闲置空间,如果计划将部分空间留给其他应用程序,则需要设置dfs.datanode.du.reserved属性来指定待保留的空间大小(以字节为单位)

    5、回收站

    Hadoop文件系统也有回收站设施,被删除的文件未被真正删除,仅只转移到回收站(一个特定文件夹中)。回收站中的文件在被永久删除之前仍会至少保留一段时间,该信息由core-site.xml文件中的fs.trash.interval属性(以分钟为单位)设置。默认情况下,该属性的值是0,表示回收站特性无效。当回收站被启用时,每个用户都有独立的回收站目录,即home目录下的.Trash目录,恢复文件也很简易:在.Trash的子目录中找到文件,并将其移出.Trash目录。

    6、作业调度

    在针对多用户的设置中,可以考虑升级作业调度器队列配置,以反映在组织方面的需求。Yarn中有三种调度器可供使用:FIFO调度器(FIFO Scheduler),容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)。

                                   Hadoop组件学习(二)——属性与安全性_第1张图片

     上图描述了三种调度器之间的差异性,由图中所知,当使用FIFO调度器时,小作业一直被阻塞,直到大作业完成;使用容量调度器时,一个独立的专门队列保证小作业一提交就可以启动,由于队列容量是为那个队列有所保留的,因此这种策略是以整个集群的利用率为代价的;使用公平调度器,不需要预留一定量的资源,因为调度器会在所有运行的作业之间动态平衡资源。第一个作业启动时,它是唯一的作业,因而获得集群中的所有资源;当第二个作业启动时,它被分配到集群的一半资源,这样每个作业都能公平共享资源。

    FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群。大的应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己执行;在一个共享集群中,更适合使用的是容量调度器和公平调度器。

    7、慢启动reduce

    在默认情况下,调度器将会一直等待,直到该作业的5%的map任务已经结束才会调度reduce任务。对于大型作业来说,这可能会降低集群的利用率,因为在等待map任务执行完毕的过程中,占用了reduce容器;可以将mapreduce.job.reduce.slowstart.completedmaps的值设的更大,例如0.8(80%),能够提升吞吐率。

    8、短回路本地读

    当从HDFS读取文件时,客户端联系datanode,然后数据通过TCP连接发送给客户端。如果正在读取的数据块和客户端在同一节点上,那么客户端绕过网络从磁盘上直接读取数据效率会更高,这又称作“短回路本地读”,这种方式能够让应用程序如Hbase执行效率更高。将属性dfs.client.read.shortcircuit设置为true,即可启用短回路本地读。该读操作基于Unix域套接字实现,在客户端和datanode之间的通信中使用了一个本地路径;该路径使用属性dfs.domain.socker.path进行设置,且必须是一条仅有datanode用户或root用户能够创建的路径,例如/var/run/hadoop-hdfs/dn_socket。

Hadoop的安全性

    1、Kerberos和Hadoop

     使用Kerberos时,一个客户端要经过三个步骤才可以获得服务,在各个步骤,客户端需要和一个服务器交换报文,整个过程如下图所示

                      Hadoop组件学习(二)——属性与安全性_第2张图片

        1、认证;客户端向认证服务器发送一条报文,并获取一个含时间戳的票据授予票据(Ticket-Granting Ticket,TGT)

        2、授权;客户端使用TGT向票据授予服务器(Ticket-Granting Server,TGS)请求一个服务票据

        3、服务请求;客户端向服务端出示服务票据,以证实自己的合法性。该服务器提供客户端所需服务,在Hadoop应用中,服务请可以是namenode或者资源管理器

    授权和服务请求步骤并非用户级别的行为:客户端系统会代替用户来执行这些步骤;但是认证步骤通常需要由用户调用kinit命令来执行,该过程会提示用户输入密码;并不是每次运行一个作业或访问HDFS的时候都需要输入密码,TGT具备一定的有效期,默认值是10个小时;或者采用自动认证,在登录操作系统时自动执行认证操作,从而只需单次登录Hadoop。如果用户不希望被提示输入密码,则可以使用ktutil命令创建一个Kerberos的keytab文件,该文件保存了用户密码并且可以通过-t选项应用于kinit命令。 

    2、委托令牌

    用户在执行kinit命令登录后,Hadoop使用委托令牌来支持后续访问,避免多个访问KDC;委托令牌由服务器(指代namenode)创建,可以视为客户端和服务器之间共享的一个密文。当客户端首次通过RPC访问namenode时,客户端并没有委托令牌,因而需要利用Kerberos进行人认证后,客户端从namenode取得一个委托令牌,在后续的RPC调用中,客户端只需出示委托令牌,namenode就能验证委托令牌的真伪,并因此向服务器认证客户端的身份。

    客户端需要使用一种特殊类型的委托令牌来执行HDFS块操作,称为“块访问令牌”(block access token);当客户端向namenode发出元数据请求时,namenode创建相应的块访问令牌并发送回客户端。客户端使用块访问令牌向datanode认证自己的访问权限。由于namenode会和datanode分享创建块访问令牌时用的密钥(通过心跳信息传送),datanode也能验证这些块访问令牌;仅当客户端已经从namenode获取了针对某一个HDFS块的块访问令牌,才可以访问该块。

    在MapReduce中,application master 共享HDFS中的作业资源和元数据(例如JAR文件,输入分片,配置文件),在作业运行过程中,通过使用委托令牌访问HDFS;作业结束,委托令牌失效。

    默认的HDFS实例会自动获得委托令牌,但若一个作业试图访问其他HDFS集群,则用户必须将mapreduce.job.hdfs-servers作业属性设置为一个由逗号隔开的HDFS URI列表,才能获取相应的委托令牌。

    3、其他安全性

  • 任务可以由提交作业的用户以操作系统账号启动运行,而不一定要由运行节点管理器的用户启动。这意味着,在这种情况下,可以借助操作系统来隔离正在运行的任务,使它们之间无法相互传送指令(例如中止其他用户任务);这样的话,诸如任务数据等本地信息的隐私即可以通过本地文件系统的安全性来得到保护;要启动这项特性,需要将yarn.nodemanager.containerexecutor.class设为org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor;此外,管理员还需确保各用户在集群的每个节点上都已经分配账号。
  • 当任务由提交作业的用户启动运行时,分布式缓存是安全的,把所有用户均可读的文件放到共享缓存中(默认非安全模式),把其他文件放在私有缓存中,仅限拥有者读取。
  • 用户只能查看和修改自己的作业,无法操控他人的作业。为了启动该特性,需要将mapreduce.cluster.acls.enabled属性项设为true。另外,maoreduce.job.acl-view-job和mapreduce.job.acl-modify-job属性分别对应一个逗号分隔的用户列表,描述能够查看或修改指定作业的所有用户。
  • shuffle是安全的,可以阻止恶意用户请求获取其他用户的map输出
  • 正确配置之后,可以阻止恶意的辅助namenode、datanode和节点管理器加入集群,从而破坏集群中的数据。这可以通过要求master节点对试图与之连接的守护进程进行认证来实现。为了启用该特性,需要使用先前由ktutil命令创建的keytab文件来配置Hadoop。以datanode为例,首先,把dfs.datanode.keytab.file属性设置为keytab文件名称;其次,把dfs.datanode.kerberos.principal属性设置为要用的datanode用户名称;最后,把hadoop-policy.xml文件中的security.datanode.protocol.acl属性设置为datanode的用户名称,以设置DataNodeProtocol的ACL;DatanodeProtocol是datanode用于和namenode通信的协议类。
  • datanode最好运行在特权端口(端口号小于1024),使客户端确信它是安全启动的
  • 任务只与其父application master通信,从而阻止攻击者经由其他用户的作业获取MapReduce数据
  • Hadoop的多个不同部件都提供了配置属性以支持网络数据加密,包括RPC(hadoop.rpc.protection),HDFS块传输(dfs.encrypt.data.transfer)、MapReduce shuffle(mapreduce.shuffle.ssl.enabled) 和 UI(hadokop.ssl.enabled)。并且,在数据休息期间对数据的加密也是持续进行的;例如,通过这种方式,HDFS块能够以加密方式进行存储。

 

                                                                      Hadoop组件学习(二)——属性与安全性_第3张图片

                                                    分享大数据学习历程,坚持一周一篇原创,欢迎一起关注学习

                                                                           我现在坚持一定会有收获
 

你可能感兴趣的:(hadoop)