3.6 HDFS的高级功能

    3.6.1 安全模式

    安全模式(Safemode)是HDFS所处的一种特殊状态。处于这种状态时,HDFS只接受读数据请求,不能对文件进行写、删除等操作。安全模式是保证一个系统保密性、完整性及可使用性的一种机制,一定程度上可以防止系统里的资源遭到破坏、更改和泄露,安全模式可以使整个系统持续可靠地正常运行。若没有安全模式,则Hadoop将处在不受保护的状态,可能存在Hadoop服务将不验证用户或其他服务,攻击者可以伪装成Hadoop服务,DataNode节点不会对节点上数据块的访问实施任何访问控制。

    Hadoop开发者设定了一个安全模式,以满足如下需求:

    用户只能访问有权限访问的HDFS目录或文件。

    用户只能访问或修改自身的MapReduce任务。

    用户对Hadoop集群的相关服务要进行身份验证,以防未经授权的NameNode、DataNode、jobtracker或tasktracker服务。

    服务与服务之间也需要相互认证,以防未经授权的服务。

    Kerberos凭证的获取和使用对用户和应用程序是透明的,前提是操作系统在登录时为用户获取了Kerberos票证授予票证(TGT)。Kerberos是一种计算机网络授权协议,使用在非安全网络中,对个人通信以安全的手段进行身份认证。

    当启动Hadoop集群时,首先会进入安全模式,主要是为了检查系统中DataNode节点上的数据块数量和有效性。在Linux系统上启动Hadoop集群,启动完成后可以在本机的浏览器输入“http://Hadoop102:9870”网址,查看HDFS的监控服务。

    Summary模块下将提示安全模式信息,默认情况下刚开启集群时将自动开启安全模式,显示“Safe mode is ON”的信息,说明安全模式已启动。

    衔接的信息为“The reported blocks 0 needs additional 1376 blocks to reach the threshold 0.9990 of total blocks 1378. The minimum number of live datanodes is not required. Safe mode will be turned off automatically once the thresholds have been reached.”,这说明报告的数据块数是0块,如果要达到总数据块1378中的0.9990 (即阈值)还需要额外的1376个数据块。不需要活动数据节点的最小数目,一旦达到阈值,即使用的数据块个数达到总数据块数量的99.9%,安全模式将自动关闭。

    在NameNode主节点启动时,HDFS首先进入安全模式,DataNode会向NameNode上传它们数据块的列表,让NameNode得到数据块的位置信息,并对每个文件对应的数据块副本进行统计。当最小副本条件满足时,集数据块都达到最小副本数,HDFS自动离开安全模式。

    假如设置的副本数(即参数dfs.replication)是5,那么在DataNode上就应该有5个副本存在,若只有3个副本,那么比例就是3/5=0.6。默认的最小副本率是0.999。当前副本率0.6明显小于0.999,因此系统会自动地复制副本到其他的DataNode,使得副本率不小于0.999。

    除了在web端查看安全模式情况外,还可以在Linux终端使用命令查看安全模式情况,安全模式的相关命令如下:

    查看当前状态:
    1. hdfs dfsadmin -safemode get
    2. 1
    进入安全模式:
    1. hdfs dfsadmin -safemode enter
    2. 1
    强制离开安全模式:

    hdfs dfsadmin -safemode leave