• Hadoop Kerberos配置


    创建Hadoop系统用户

    为Hadoop开启Kerberos,
    1. 需为不同服务准备不同的用户。
    2. 启动服务时需要使用相应的用户。
    3. 须在所有节点创建以下用户和用户组。
     
    用户划分:
    User:       Group Daemons
    hdfs:       hadoop NameNode, Secondary NameNode, JournalNode, DataNode
    yarn:       hadoop ResourceManager, NodeManager
    mapred:  hadoop MapReduce JobHistory Server
     
     
    创建:
    #创建hadoop组
    groupadd hadoop   
    
    #创建各用户并设置密码
    useradd hdfs -g hadoop
    echo hdfs | passwd --stdin  hdfs
    
    useradd yarn -g hadoop
    echo yarn | passwd --stdin yarn
    
    useradd mapred -g hadoop
    echo mapred | passwd --stdin mapred
     
     

    为Hadoop各服务创建Kerberos主体(Principal)

    主体格式如下:ServiceName/HostName@REALM,例如: dn/hadoop01@HADOOP.COM

    1、各服务所需主体如下

    环境:主机名为hadoop01

    服务               所在主机    主体(Principal)
    NameNode          hadoop01   nn/hadoop01
    DataNode           hadoop01   dn/hadoop01
    SecondaryNameNode       hadoop01   sn/hadoop01
    ResourceManager        hadoop01       rm/hadoop01
    NodeManager                      hadoop01   nm/hadoop01
    JobHistory Server         hadoop01   jhs/hadoop01
    Web UI           hadoop01   HTTP/hadoop01



    2, 创建主体说明


    1)路径准备
    为服务创建的主体,需要通过密钥文件keytab文件进行认证,故需为各服务准备一个安全的路径用来存储keytab文件。
    mkdir /etc/security/keytab/
    chown -R root:hadoop /etc/security/keytab/
    chmod 770 /etc/security/keytab/
    2)管理员主体认证
    为执行创建主体的语句,需登录Kerberos 数据库客户端,登录之前需先使用Kerberos的管理员用户进行认证,执行以下命令并根据提示输入密码。
    kinit root/admin
    3)执行创建主体的语句
     
    格式:
    主体格式如下:ServiceName/HostName@REALM 
    例如: dn/hadoop01@HADOOP.COM
    kadmin: addprinc -randkey xx/hadoop01
    kadmin: xst -k /etc/security/keytab/nn.keytab xx/hadoop01

    # 说明:
    # (1)addprinc test/test:作用是新建主体
    # addprinc:增加主体
    # -randkey:密码随机,因hadoop各服务均通过keytab文件认证,故密码可随机生成
    # test/test:新增的主体
    # (2)xst -k /etc/security/keytab/test.keytab test/test:作用是将主体的密钥写入keytab文件
    # xst:将主体的密钥写入keytab文件
    # -k /etc/security/keytab/test.keytab:指明keytab文件路径和文件名
    # test/test:主体
    # (3)为方便创建主体,可使用如下命令
    # kadmin -proot/admin -wpassword -q"addprinc -randkey test/test"
    # kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/test.keytab test/test"
    # 说明:
    # -p:主体
    # -w:密码
    # -q:执行语句
    # (4)操作主体的其他命令,可参考官方文档,地址如下:http://web.mit.edu/kerberos/krb5-current/doc/admin/admin_commands/kadmin_local.html#commands
     
    执行:

    以下命令在hadoop01节点执行:

    #NameNode(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey nn/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/nn.service.keytab nn/hadoop01"
    
    #DataNode(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey dn/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop01"
    
    #Secondary NameNode(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey sn/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/sn.service.keytab sn/hadoop01"
    
    
    #ResourceManager(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey rm/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/rm.service.keytab rm/hadoop01"
    
    #NodeManager(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey nm/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop01"
    
    #JobHistory Server(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey jhs/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/jhs.service.keytab jhs/hadoop01"
    
    #Web UI(hadoop01)
    kadmin -proot/admin -wpassword -q"addprinc -randkey HTTP/hadoop01"
    kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop01"
     
    4).修改所有节点keytab文件的所有者和访问权限
    chown -R root:hadoop /etc/security/keytab/
    chmod 660 /etc/security/keytab/*

    3、修改Hadoop配置文件

    需要修改的内容如下,修改完毕需要分发所改文件。
    (1)、core-site.xml 增加以下内容:
    <!-- 启用Hadoop集群授权管理 -->
    <property>
      <name>hadoop.security.authorization</name>
      <value>true</value>
    </property>
    
    <!-- 启用Hadoop集群Kerberos安全认证 -->
    <property>
      <name>hadoop.security.authentication</name>
      <value>kerberos</value>
    </property>
    
    <!-- Hadoop集群间RPC通讯设为仅认证模式 -->
    <property>
      <name>hadoop.rpc.protection</name>
      <value>authentication</value>
    </property>
    
    <!-- Kerberos主体到Linux系统用户的映射机制 -->
    <property>
      <name>hadoop.security.auth_to_local.mechanism</name>
      <value>MIT</value>
    </property>
    
    <!-- Kerberos主体到系统用户的具体映射规则 -->
    <property>
      <name>hadoop.security.auth_to_local</name>
      <value>
        RULE:[2:$1/$2@$0]([ndj]n\/.*@HADOOP\.COM)s/.*/hdfs/
        RULE:[2:$1/$2@$0]([rn]m\/.*@HADOOP\.COM)s/.*/yarn/
        RULE:[2:$1/$2@$0](jhs\/.*@HADOOP\.COM)s/.*/mapred/
        DEFAULT
      </value>
    </property>
     
     (2)、hdfs-site.xml
     
    
    
      <!-- 访问DataNode数据块时需通过Kerberos认证 -->
    <property>
      <name>dfs.block.access.token.enable</name>
      <value>true</value>
    </property>
    
    <!-- NameNode服务的Kerberos主体,_HOST会自动解析为服务所在的主机名 -->
    <property>
      <name>dfs.namenode.kerberos.principal</name>
      <value>nn/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- NameNode服务的Kerberos密钥文件路径 -->
    <property>
      <name>dfs.namenode.keytab.file</name>
      <value>/etc/security/keytab/nn.service.keytab</value>
    </property>
    
    <!-- Secondary NameNode服务的Kerberos主体 -->
    <property>
      <name>dfs.secondary.namenode.keytab.file</name>
      <value>/etc/security/keytab/sn.service.keytab</value>
    </property>
    
    <!-- Secondary NameNode服务的Kerberos密钥文件路径 -->
    <property>
      <name>dfs.secondary.namenode.kerberos.principal</name>
      <value>sn/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- NameNode Web服务的Kerberos主体 -->
    <property>
      <name>dfs.namenode.kerberos.internal.spnego.principal</name>
      <value>HTTP/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- WebHDFS REST服务的Kerberos主体 -->
    <property>
      <name>dfs.web.authentication.kerberos.principal</name>
      <value>HTTP/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- Secondary NameNode Web UI服务的Kerberos主体 -->
    <property>
      <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
      <value>HTTP/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- Hadoop Web UI的Kerberos密钥文件路径 -->
    <property>
      <name>dfs.web.authentication.kerberos.keytab</name>
      <value>/etc/security/keytab/spnego.service.keytab</value>
    </property>
    
    <!-- DataNode服务的Kerberos主体 -->
    <property>
      <name>dfs.datanode.kerberos.principal</name>
      <value>dn/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- DataNode服务的Kerberos密钥文件路径 -->
    <property>
      <name>dfs.datanode.keytab.file</name>
      <value>/etc/security/keytab/dn.service.keytab</value>
    </property>
    
    <!-- 配置DataNode数据传输保护策略为仅认证模式 -->
    <property>
      <name>dfs.data.transfer.protection</name>
      <value>authentication</value>
    </property>
    
    <!-- 使用HTTPS协议 -->
    <property>
      <name>dfs.http.policy</name>
      <value>HTTPS_ONLY</value>
      <description>所有开启的web页面均使用https, 细节在ssl server 和client那个配置文件内配置</description>
    </property>
      (3)、yarn-site.xml
    增加以下内容:
    <!-- Resource Manager 服务的Kerberos主体 -->
    <property>
      <name>yarn.resourcemanager.principal</name>
      <value>rm/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- Resource Manager 服务的Kerberos密钥文件 -->
    <property>
      <name>yarn.resourcemanager.keytab</name>
      <value>/etc/security/keytab/rm.service.keytab</value>
    </property>
    
    <!-- Node Manager 服务的Kerberos主体 -->
    <property>
      <name>yarn.nodemanager.principal</name>
      <value>nm/_HOST@HADOOP.COM</value>
    </property>
    
    <!-- Node Manager 服务的Kerberos密钥文件 -->
    <property>
      <name>yarn.nodemanager.keytab</name>
      <value>/etc/security/keytab/nm.service.keytab</value>
    </property>
    (4)、mapred-site.xml
    vi etc/hadoop/mapred-site.xml
    增加以下内容:
    <!-- 历史服务器的Kerberos主体 -->
    <property>
    <name>mapreduce.jobhistory.keytab</name>
    <value>/etc/security/keytab/jhs.service.keytab</value>
    </property>
    
    <!-- 历史服务器的Kerberos密钥文件 -->
    <property>
    <name>mapreduce.jobhistory.principal</name>
    <value>jhs/_HOST@HADOOP.COM</value>
    </property>
     

    配置HDFS使用HTTPS安全传输协议

    1,生成密钥对
    Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
    -keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中)
    -genkey(或者-genkeypair) 生成密钥对
    -alias 为生成的密钥对指定别名,如果没有默认是mykey
    -keyalg 指定密钥的算法 RSA/DSA 默认是DSA

    (1)、生成 keystore的密码及相应信息的密钥库
    [root@hadoop01 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA


    (2)、修改keystore文件的所有者和访问权限

    [root@hadoop01 ~]# chown -R root:hadoop /etc/security/keytab/keystore
    [root@hadoop01 ~]# chmod 660 /etc/security/keytab/keystore

    (3)、将该证书分发到集群中的每台节点的相同路径

    scp

    (4)、修改hadoop配置文件ssl-server.xml.example

     mv ssl-server.xml.example ssl-server.xml 

    修改配置项:

    <!-- SSL密钥库路径 -->
    <property>
      <name>ssl.server.keystore.location</name>
      <value>/etc/security/keytab/keystore</value>
    </property>
    
    <!-- SSL密钥库密码 -->
    <property>
      <name>ssl.server.keystore.password</name>
      <value>password</value>
    </property>
    
    <!-- SSL可信任密钥库路径 -->
    <property>
      <name>ssl.server.truststore.location</name>
      <value>/etc/security/keytab/keystore</value>
    </property>
    
    <!-- SSL密钥库中密钥的密码 -->
    <property>
      <name>ssl.server.keystore.keypassword</name>
      <value>password</value>
    </property>
    
    <!-- SSL可信任密钥库密码 -->
    <property>
      <name>ssl.server.truststore.password</name>
      <value>password</value>
    </property>

    Linux-Container-executor

    Kerberos需要使用基于cgroup工作的一个名为Linux-container-executer的容器来运行YARN任务,这个容器需要我们自己编译源码来构建出来如果编译不出来可以在网络上找找, 编译步骤就不详细说明了.
     

    1)修改所有节点的container-executor所有者和权限:

    要求其所有者为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为6050。
    其默认路径为$HADOOP_HOME/bin
    chown root:hadoop $HADOOP_HOME/bin/container-executor
    chmod 6050 $HADOOP_HOME/bin/container-executor

    2)修改所有节点的 container-executor.cfg 文件 的所有者和权限:

    要求该文件及其所有的上级目录的所有者均为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为400。其默认路径为$HADOOP_HOME/etc/hadoop
    chmod 777 $HADOOP_HOME/etc/hadoop/container-executor.cfg
    chown root:hadoop $HADOOP_HOME/etc/hadoop/container-executor.cfg

    3)修改$HADOOP_HOME/etc/hadoop/container-executor.cfg

    vim $HADOOP_HOME/etc/hadoop/container-executor.cfg
    内容如下:
    #NM 的 Unix 用户组, 需要与 yarn-site.xml 里一致
    yarn.nodemanager.linux-container-executor.group=hadoop
    #禁止使用的用户,多个用户使用 ‘,’ 分隔:
    banned.users=hdfs,yarn,mapred
    #允许使用的用户的 uid 最小值,防止有其他超级用户:
    min.user.id=1
    #允许使用的系统用户,多个用户使用 ‘,’ 分隔,可以不设置,即允许所有用户:
    allowed.system.users=
    #
    feature.tc.enabled=false

    4)修改$HADOOP_HOME/etc/hadoop/yarn-site.xml文件

    <!-- 配置Node Manager使用LinuxContainerExecutor管理Container -->
    <property>
    <name>yarn.nodemanager.container-executor.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
    </property>
    
    <!-- 配置Node Manager的启动用户的所属组 -->
    <property>
    <name>yarn.nodemanager.linux-container-executor.group</name>
    <value>hadoop</value>
    </property>
    
    <!-- LinuxContainerExecutor脚本路径 -->
    <property>
    <name>yarn.nodemanager.linux-container-executor.path</name>
    <value>/data/software/hadoop-3.3.2/bin/container-executor</value>
    </property>

    参考:https://blog.csdn.net/weixin_45417821/article/details/122759955

    参考:https://blog.csdn.net/zhanglong_4444/article/details/115268262

     
     
     
     
  • 相关阅读:
    vs中nodejs代码 resharper 提示 ECMAScript2015 Feature. your Current language level is ECMAScript5的解决办法
    port: ${SERVER_PORT:9190} #首先取环境变量,如果环境变量中没有,就取 9190 这个固定值
    SpringbBoot之JPA批量更新
    Linq To Object多字段组合唯一校验
    LINQ获取两个List的交集
    Linq实现分组后取最大(小)值
    Maven:浅析依赖(dependency)关系中 scope 的含义
    Source roots (or source folders) Test source roots (or test source folders; shown as rootTest)Resource rootsTest resource roots
    Parameter 0 of method sqlSessionTemplate in org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration required a single bean, but 2 were found:
    sping boot/cloud配置文件 on 读取为true
  • 原文地址:https://www.cnblogs.com/muzhongjiang/p/16220036.html
Copyright © 2020-2023  润新知