Hadoop_Kerberos配置过程记录

  1. 在KDC上创建kerberos实例

    ① 以root用户,输入kadmin.local进入kerberos命令行,在kerberos数据库中生成实例

    addprinc -randkey hadoop/[email protected]
    addprinc -randkey hadoop/[email protected]
    addprinc -randkey hadoop/[email protected]
    
    addprinc -randkey HTTP/[email protected]
    addprinc -randkey HTTP/[email protected]
    addprinc -randkey HTTP/[email protected]
    

    ②退出kerberos命令行,以root用户,为各实例生成密钥

    kadmin.local -q "xst -k hadoop.keytab hadoop/[email protected]"
    kadmin.local -q "xst -k hadoop.keytab hadoop/[email protected]"
    kadmin.local -q "xst -k hadoop.keytab hadoop/[email protected]"
    
    kadmin.local -q "xst -k HTTP.keytab HTTP/[email protected]"
    kadmin.local -q "xst -k HTTP.keytab HTTP/[email protected]"
    kadmin.local -q "xst -k HTTP.keytab HTTP/[email protected]"
    
    此时,生成的keytab都在root根目录下。
    

    ③在root命令行,合并hadoop.keytab和HTTP.keytab为hdfs.keytab。

     ktutil
     rkt hadoop.keytab
     rkt HTTP.keytab
     wkt hdfs.keytab
    

    将hdfs.keytab文件复制到/home/hadoop/目录。并向hadoop各节点分发。

    ④注意

    a. 主机名一定要小写,通过kinit申请TGT票据时kerberos会将无论大小写都视为小写,生成票据。而实例中如果是大写主机名,则会使得kerberos库中对应的实例无法产生票据。

    b. hadoop/namenode,其中的namenode只是作为一个标志,代表这个hadoop用户与另一个hadoop用户属于不同的主机而已。所有,如果hostname为大写,那么此处仍必须以小写作为输入。

  2. hdfs集成kerberos。(先停止集群)

    ①修改core_site.xml

      
        hadoop.security.authentication  
         kerberos 
      
    
      
         hadoop.security.authorization 
         true 
     
    

    以上配置,表示开启安全认证功能并且采用kerberos认证。

    ②修改hdfs-site.xml

       
          dfs.block.access.token.enable 
          true 
       
    
       
          dfs.https.enable 
          true 
       
    
       
          dfs.https.policy 
          HTTPS_ONLY 
       
    
        
          dfs.namenode.https-address.pin-cluster1.namenode 
          namenode:50470 
       
    
       
          dfs.https.port 
          50470 
      
    
       
          dfs.namenode.keytab.file 
          /home/hadoop/hdfs.keytab 
       
    
       
          dfs.namenode.kerberos.principal 
          hadoop/[email protected] 
       
    
       
          dfs.namenode.kerberos.internal.spnego.principal 
          HTTP/[email protected] 
       
    
       
          dfs.datanode.data.dir.perm 
          700 
       
    
       
          dfs.datanode.address 
          0.0.0.0:1004 
       
    
       
          dfs.datanode.http.address 
          0.0.0.0:1006 
       
    
       
          dfs.datanode.keytab.file 
          /home/hadoop/hdfs.keytab 
       
    
       
          dfs.datanode.kerberos.principal 
          hadoop/[email protected] 
       
    
       
          dfs.journalnode.keytab.file 
          /home/hadoop/hdfs.keytab 
       
    
       
          dfs.journalnode.kerberos.principal 
          hadoop/[email protected] 
       
    
       
          dfs.journalnode.kerberos.internal.spnego.principal 
          HTTP/[email protected] 
       
    
       
          dfs.web.authentication.kerberos.principal 
          HTTP/[email protected] 
       
    
       
          dfs.web.authentication.kerberos.keytab 
          /home/hadoop/hdfs.keytab 
      
    

    以上主要配置了kerberos实例,以及keytab的存放位置。

    ③修改yarn-site.xml

      
          yarn.resourcemanager.keytab
          /home/hadoop/hdfs.keytab
      
    
      
          yarn.resourcemanager.principal
          hadoop/[email protected]
      
    
      
          yarn.nodemanager.keytab
          /home/hadoop/hdfs.keytab
      
    
      
          yarn.nodemanager.principal
          hadoop/[email protected]
      
    
      
          yarn.nodemanager.container-executor.class
          org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor
      
    
      
          yarn.nodemanager.linux-container-executor.group
          hadoop
      
    
      
          yarn.https.policy
          HTTPS_ONLY
    

    ④修改mapred-site.xml

      
          mapreduce.jobhistory.keytab
          /home/hadoop/hdfs.keytab
      
    
      
          mapreduce.jobhistory.principal
          hadoop/[email protected]
      
    
      
          mapreduce.jobhistory.http.policy
          HTTPS_ONLY
      
    

    ⑤在zookeeper的zoo.cfg文件中加入:

       authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    
       jaasLoginRenew=3600000
    

    同时在zoo.cfg所在的文件目录下创建一个jaas.conf文件,加入:

       Server {
       com.sun.security.auth.module.Krb5LoginModulerequired
       useKeyTab=true
       keyTab="/home/hadoop/hdfs.keytab"
       storeKey=true
       useTicketCache=false
       principal="hadoop/[email protected]";
       };
    

    同时在zoo.cfg所在的文件目录下创建一个java.env文件,加入:

       exportJVMFLAGS="-Djava.security.auth.login.config=$ZOOKEEPER_HOME/conf/jaas.conf"
    

    注意:

    a. 此zookeeper需要使用外部zookeeper,而不是hbase自带的。

    b. jaas.conf中的principal应根据不同的主机进行相应的更改。

    c. 以上所有文件的修改均需要同步到集群所有节点

    ⑥修改hadoop-env.sh

    export HADOOP_SECURE_DN_USER=hadoop 
    export HADOOP_SECURE_DN_PID_DIR=/home/hadoop/pids 
    export HADOOP_SECURE_DN_LOG_DIR=/home/hadoop/logs 
    export JSVC_HOME=/home/hadoop/commons-daemon-1.0.15-src/src/native/unix/
    

    注意:jsvc需要另外安装,安装步骤如下:

    a.下载commons-daemon-1.0.15-src.tar.gz

    b. 解压后进入commons-daemon-1.0.15-src/src/native/unix

    c. 在hadoop命令行输入:

       sh support/buildconf.sh
       ./configure   (这一步的执行需要配置好JAVA_HOME)
       make
    

    命令行输入:

         ./jsvc -help,测试是否编译成功
    

    d. 编译成功后当前目录下将出现一个jsvc文件,将此文件路径配置到hadoop-env.sh中

    ⑦修改container-executor.cfg

     yarn.nodemanager.local-dirs=/home/hadoop/etc/hadoop/data
     yarn.nodemanager.log-dirs=/home/hadoop/etc/hadoop/logs,
     allowed.system.users=root,silence,hadoop  
     yarn.nodemanager.linux-container-executor.group=hadoop
     # banned.users=hadoop
     min.user.id=1
    

    注意:

    yarn-nodemanager.local-dirs和yarn.nodemanager.log-dirs要和yarn-site.xml中配置一致。min.user.id也要注意,这里设定的是可以使用提交任务用户id的最小值,通过:id 用户名,可以查看用户id。默认是1000如果不配置的话,这样如果用户id小于1000,则提交任务报错。所以这里设定成了1.原本1000是为了防止其它的超级用户使用集群的。

    ⑧编译源码

    因为container-executor(在 HADOOP_HOME/bin下)要求container-executor.cfg这个文件及其所有父目录都属于root用户,否则启动nodemanager会报错。配置文件container-executor.cfg默认的路径在HADOOP_HOME/etc/hadoop/container-executor.cfg。如果,按照默认的路径修改所有父目录都属于root,显然不可能。于是,把路径编译到/etc/container-executor.cfg中。

    a. 下载hadoop-2,7,2-src源码包解压,进入src目录下,执行

    mvn package -Pdist,native -DskipTests -Dtar -Dcontainer-executor.conf.dir=/etc 
    

    b. 进入hadoop-2.7.2/src/hadoop-dist/target下,用新生成的container-executor替换所有节点原来的container-executor,并且所有节点上均要将HADOOP_HOME/etc/hadoop下的container-executor.cfg文件复制到/etc 下,且设置权限为root:root。在bin文件夹下执行strings container-executor | grep etc如果结果是/etc而非../etc,则表示操作成功了。另外最重要的是将bin下的container-executor文件权限设定为root:hadoop和4750,如果权限不是4750,则启动nodemanager时会报错,报错是不能提供合理的container-executor.cfg文件。

    ⑨启动集群:

     bin/zkServcer.sh start
     sbin/start-dfs.sh
     sbin/start-secure-dns.sh  (以root执行)
     sbin/start-yarn.sh
     bin/start-hbase.sh
    

    ⑩验证kerberos服务

    a. 尝试执行:

    hadoop dfs -ls
    

    b. hadoop用户下执行:

    kinit -k -e /home/hadoop/hdfs.keytab hadoop/[email protected]
    此时hadoop用户将向KDC申请一张票据
    

    c. 启动kerberos服务:

    sudo krb5kdc
    sudo kerberos
    

    d. 再次执行:

    hadoop dfs -ls
    
  3. HBase集成kerberos

    ①zookeeper配置

    a. 修改jaas.conf文件

       Server {
           com.sun.security.auth.module.Krb5LoginModulerequired
           useKeyTab=true
           keyTab="/home/hadoop/hdfs.keytab"
           storeKey=true
           useTicketCache=false
           principal="hadoop/[email protected]";
       };
    

    b. 修改java.env文件

       exportJVMFLAGS="-Djava.security.auth.login.config
                                     =$ZOOKEEPER_HOME/conf/jaas.conf"
       export JAVA_HOME="/home/hadoop/jdk8"
    

    c. 修改zoo.cfg文件

       tickTime=2000
       initLimit=10
       syncLimit=5
       clientPort=2181
       dataDir=/home/hadoop/zookeeper-3.4.6/data
       server.3 =namenode:2888:3888
       server.1 =datanode1:2888:3888
       server.2 =datanode2:2888:3888
       skipACL=yes  
       dataLogDir=/home/hadoop/zookeeper-3.4.6/logs
       authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
       jaasLoginRenew=3600000
    

    ②HBase配置(先停止HBase集群)

    a. 修改hbase-env.sh文件

    export JAVA_HOME=/home/hadoop/jdk8
    export HBASE_OPTS="-XX:+UseConcMarkSweepGC -Djava.security.auth.login.config
                                   =/home/hadoop/hbase/conf/zk-jaas.conf"
    export HBASE_MANAGES_ZK=false
    

    b. 修改HBase-site.xml文件

        
            hbase.rootdir
            hdfs://192.168.6.186:9000/hbase
        
    
        
            hbase.zookeeper.quorum
            namenode,datanode1,datanode2
        
    
        
            hbase.master
            namenode:60000
        
    
        
            hbase.zookeeper.property.clientPort
            2181
        
    
        
            dfs.support.append
            true
        
    
        
            zookeeper.znode.parent
            /hbase
        
    
        
            hbase.zookeeper.property.dataDir
            /home/hadoop/hbase/zookeeper
        
    
        
            hbase.tmp.dir
            /tmp/hbase
        
    
        
            hbase.zookeeper.property.maxClientCnxns
            0
        
    
        
            zookeeper.session.timeout
            1200000
        
    
        
            hbase.rest.port
            60050
        
    
        
            hbase.replication
            1
        
    
        
            hbase.security.authorization
            true
        
    
        
            hbase.coprocessor.master.classes
            org.apache.hadoop.hbase.security.access.AccessController
        
    
        
        hbase.coprocessor.region.classes               
        org.apache.hadoop.hbase.security.token.TokenProvider,
                org.apache.hadoop.hbase.security.access.AccessController
        
    
        
            hbase.security.authentication
            kerberos
        
    
        
            hbase.rpc.engine
            org.apache.hadoop.hbase.ipc.SecureRpcEngine
        
    
        
            hbase.regionserver.kerberos.principal
            hadoop/[email protected]
        
    
        
            hbase.regionserver.keytab.file
            /home/hadoop/hdfs.keytab
        
    
        
            hbase.master.kerberos.principal
            hadoop/[email protected]
        
    
        
            hbase.master.keytab.file
            /home/hadoop/hdfs.keytab
        
    
        
            hbase.master.maxclockskew
            1800000
            Time difference of regionserver from master
        
    

    c. 修改hbase/conf下的jaas.conf文件

    Client {
        com.sun.security.auth.module.Krb5LoginModule required
        useKeyTab=true
        keyTab="/home/hadoop/hdfs.keytab"
        storeKey=true
        useTicketCache=false
        principal="hadoop/[email protected]";
    };
    

    d. 启动HBase

  4. Hive集成kerberos

你可能感兴趣的:(Hadoop)