hadoop之kerberos权限配置(ranger基础上)(三)

news2024/11/16 9:33:50

文章目录

    • 一、kerberos服务端
    • 二、kerberos客户端
    • 三、hadoop集群安装HTTPS服务
    • 四、kerberos整合zk
    • 五、kerberos整合ranger
    • 六、kerberos整合hdfs
    • 七、kerberos整合yarn
    • 八、kerberos整合hive
    • 九、kerberos整合hbase
    • 十、遇到的问题

一、kerberos服务端

  1. 上传kerberos安装包到/opt/rpm

  2. 安装:rpm -Uvh --force --nodeps *.rpm

     yum -y install krb5-libs krb5-workstation krb5-server
    
  3. 修改配置:vi /var/kerberos/krb5kdc/kdc.conf

    [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
     
    [realms]
     HADOOP.COM = {  
      acl_file = /var/kerberos/krb5kdc/kadm5.acl
      dict_file = /usr/share/dict/words
      max_life = 24h 0m 0s
      max_renewable_life = 7d
      max_life = 1d
      admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
      supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
     }
    
    [kdcdefaults]
     kdc_ports = 88		#KDC监听的UDP端口
     kdc_tcp_ports = 88		#KDC监听TCP端口
     
    [realms]		#使用该KDC的所有域,一个KDC可以支持多个域	
     HADOOP.COM = {  
      acl_file = /var/kerberos/krb5kdc/kadm5.acl		#具有管理服务的用户其访问权限控制文件的位置,默认文件名:kadm5.acl
      dict_file = /usr/share/dict/words			#列举了不允许用做密码的单词,这些单词拥有被破解或猜测
      max_life = 1d		#票据默认的有效期,默认值是1d
      max_renewable_life = 7d	#票据默认的最大可再生时间,默认是0
      admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab	#KDC进行校验的keytab。
      supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal	#KDC支持的加密类型
     }
    
  4. 修改配置:vi /etc/krb5.conf

    # Configuration snippets may be placed in this directory as well
    includedir /etc/krb5.conf.d/
    
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = HADOOP.COM
     dns_lookup_realm = false
     ticket_lifetime = 24h
     renew_lifetime = 7d
     forwardable = true
     rdns = false
     pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
     udp_preference_limit = 1
    # default_realm = EXAMPLE.COM
    # default_ccache_name = KEYRING:persistent:%{uid}
    
    [realms]
     HADOOP.COM = {
      kdc = 192.168.248.12
      admin_server = 192.168.248.12
     }
    
    [domain_realm]
     .hadoop.com = HADOOP.COM
     hadoop.com = HADOOP.COM
    
    # Configuration snippets may be placed in this directory as well
    includedir /etc/krb5.conf.d/
    
    [logging]						#日志配置
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = HADOOP.COM		#默认域,必须跟要配置的realm的名称一致。
     dns_lookup_realm = false		#表明是否通过DNS SRV记录定位KDC和realm,通常设置为false
     ticket_lifetime = 24h		#票据生效时限,通常为24小时
     renew_lifetime = 7d		#票据最长延期时限,通常为一周,当票据过期后,对安全认证的服务的访问将失效
     forwardable = true
     rdns = false 				#kerberos使用88端口只为tcp,不为udp(默认随机切换,一般开防火墙需要考虑这个配置)
     udp_preference_limit = 1
     pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
     default_ccache_name = KEYRING:persistent:%{uid}   #kdc票据缓存路径修改
    
    [realms]
     HADOOP.COM = {						#由EXAMPLE.COM改为HADOOP.COM,和default_realm相对应
      kdc = 192.168.248.12				#此处填KDC主机名,密钥分发中心
      admin_server = 192.168.248.12		#admin server位置,仍是填写主机名
     }
    
    [domain_realm]
     .hadoop.com = HADOOP.COM	# hadoop.com域名下的所有主机映射到HADOOP.COM
     hadoop.com = HADOOP.COM	# hadoop.com域名本身映射到HADOOP.COM
    
  5. 初始化数据库:/usr/sbin/kdb5_util create -s -r HADOOP.COM。密码设为:ffcsict1234!#%&

  6. 查看生成文件:cd /var/kerberos/krb5kdc --> ls
    在这里插入图片描述

  7. 创建数据库管理员:/usr/sbin/kadmin.local -q “addprinc admin/admin”,密码为ffcsict1234!#%&

  8. 管理员设置ACL权限:vi /var/kerberos/krb5kdc/kadm5.acl

    */admin@HADOOP.COM      *
    
  9. 设置启动和开机自启动:systemctl enable kadmin -->systemctl start kadmin --> systemctl status kadmin

  10. 设置启动和开机自启动:systemctl enable krb5kdc -->systemctl start krb5kdc --> systemctl status krb5kdc

  11. 登录管理员:kadmin.local

    ps:如果在非服务器上登录管理员,则需要kinit admin/admin -->kadmin

  12. 管理员操作

    ps1-登录:kinit admin/admin --> kadmin。注:如果是在服务端登录,可以直接输入 kadmin.local进入,客户端则如前面。

    ps2-查看:listprincs

    ps3-创建用户:addprinc 用户名。注:如果需要添加管理员帐户密码。,只需要配置用户名以“/admin”结尾即可,如第7点。

    ps4-修改密码:kpasswd 用户名,先输入旧密码,在输入新密码。注:忘记密码,可用kadmin.local登录,change_password 用户名,直接输入新密码。

    ps5-删除用户:delprinc 用户名

    ps6-查看用户信息:getprinc 用户名

    ps7-查看所有命令:?

  13. 管理员创建kafka用户凭据

    在创建用户凭据前 ,需要了解客户端登录的机制有两种。第一种就是使用凭证登录,第二种就是使用账号密码登录。

    13.1 使用凭据登录

    ​ ps1-创建用户:addprinc -randkey kafka

    ​ ps2-创建导出凭据:ktadd -k /root/kerberos/kafka.keytab kafka 或者 xst -k /root/kerberos/kafka.keytab kafka

    ​ ps3-查看凭据信息:klist -ket /root/kerberos/kafka.keytab

    ​ ps4:将生成的“kafka.keytab”凭据给客户端,客户端可凭借该凭据登录。

    13.2 使用账号密码登录

    ​ ps1-创建用户:addprinc kafka ,然后输入账号密码即可

    ​ ps2:将账号密码给客户端,客户端可以凭借账号密码登录。

    ​ ps3-创建凭据:这种方法创建的用户也可以凭借导出凭据登录,但是需要注意的是,在导出凭据的时候需要加上“-randkey ”关键字,否则每次导出密码会变动。这种情况下,只能在服务端的kadmin.local登录环境在操作。 如:ktadd -k /root/kerberos/kafka.keytab -norandkey kafka

  14. 导出联合凭据:xst -norandkey -k /root/kerberos/kafka.keytab-all kafka kadmin/admin (仅支持服务端的kadmin.local登录环境)

  15. 将用户信息全部导出: kdb5_util dump ./slava_data,将会生成slava_data 、slava_data.dump_ok两个文件,信息都存在slava_data 里。

二、kerberos客户端

  1. 下载:yum install -y krb5-lib krb5-workstation krb5-devel krb5-auth-dialog

  2. 将服务端的/etc/krb5.conf复制到其他节点的/etc底下

  3. 账号密码登录:kinit admin/admin–>klist
    在这里插入图片描述

  4. 删除当前认证用户的缓存:kdestroy --> klist
    在这里插入图片描述

  5. 凭据登录:kinit -kt /home/hadoop/kerberos/admin.keytab admin/admin --> klist
    在这里插入图片描述

三、hadoop集群安装HTTPS服务

安装说明:生成CA证书hdfs_ca_key和hdfs_ca_cert只需要在任意一台节点上完成即可,其他每个节点包括生成证书的节点都需要执行第四步以后的操作,且必须使用root用户执行以下操作

  1. 在node10节点生成CA证书,需要输入两次密码,其中CN:中国简称;ST:省份;L:城市;O和OU:公司或个人域名;ha01是生成CA证书主机名

    openssl req -new -x509 -keyout hdfs_ca_key -out hdfs_ca_cert -days 9999 -subj /C=CN/ST=shanxi/L=xian/O=hlk/OU=hlk/CN=ha01
    ffcsict123
    
  2. 将node10节点上生成的CA证书hdfs_ca_key、hdfs_ca_cert分发到每个节点上的/tmp目录下

    ps:因为我是使用winscp直接拷贝的,如果使用scp指令,建议root用户也配置ssh免登录

    scp /opt/https/hdfs_ca_cert  root@0001.novalocal:/tmp
    scp /opt/https/hdfs_ca_key	root@0001.novalocal:/tmp
    
  3. 发送完成后删除node10节点上CA证书

  4. 在每一台机器上生成keystore和trustores(注意:集群中每个节点都需要执行以下命令)

    1)cd /tmp

    2)生成keystore,这里的keytool需要java环境,否则command not found

    name="CN=$HOSTNAME, OU=hlk, O=hlk, L=xian, ST=shanxi, C=CN"
    #需要输入第一步输入的密码四次
    keytool -keystore keystore -alias localhost -validity 9999 -genkey -keyalg RSA -keysize 2048 -dname "$name"
    ffcsict123
    

    3) 添加CA到truststore,同样需要输入密码:keytool -keystore truststore -alias CARoot -import -file hdfs_ca_cert

    4)从keystore中导出cert:keytool -certreq -alias localhost -keystore keystore -file cert

    5)用CA对cert签名:openssl x509 -req -CA hdfs_ca_cert -CAkey hdfs_ca_key -in cert -out cert_signed -days 9999 -CAcreateserial

    6)将CA的cert和用CA签名之后的cert导入keystore

     keytool -keystore keystore -alias CARoot -import -file hdfs_ca_cert
     keytool -keystore keystore -alias localhost -import -file cert_signed
    

    7)将最终keystore,trustores放入合适的目录,并加上后缀jks

    mkdir -p /etc/security/https && chmod 755 /etc/security/https
     cp keystore /etc/security/https/keystore.jks
     cp truststore /etc/security/https/truststore.jks
    

    8) 删除/tmp目录下产生的垃圾数据文件:rm -f keystore truststore hdfs_ca_key hdfs_ca_cert.srl hdfs_ca_cert cert_signed cert

  5. 配置$HADOOP_HOME/etc/hadoop/ssl-server.xml和ssl-client.xml文件

    注:这两个配置文件在一台节点配好,发送到其他节点对应位置下!

    1) :vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/ssl-client.xml文件

    <configuration>
        <property>
          <name>ssl.client.truststore.location</name>
          <value>/etc/security/https/truststore.jks</value>
          <description>Truststore to be used by clients like distcp. Must be specified.</description>
        </property>
        
        <property>
          <name>ssl.client.truststore.password</name>
          <value>ffcsict123</value>
          <description>Optional. Default value is "".</description>
        </property>
     
        <property>
          <name>ssl.client.truststore.type</name>
          <value>jks</value>
          <description>Optional. The keystore file format, default value is "jks".</description>
        </property>
     
        <property>
          <name>ssl.client.truststore.reload.interval</name>
          <value>10000</value>
          <description>Truststore reload check interval, in milliseconds.Default value is 10000 (10 seconds).</description>
        </property>
     
        <property>
          <name>ssl.client.keystore.location</name>
          <value>/etc/security/https/keystore.jks</value>
          <description>Keystore to be used by clients like distcp. Must be specified.</description>
        </property>
     
        <property>
          <name>ssl.client.keystore.password</name>
          <value>ffcsict123</value>
          <description>Optional. Default value is "".</description>
        </property>
     
        <property>
          <name>ssl.client.keystore.keypassword</name>
          <value>ffcsict123</value>
          <description>Optional. Default value is "".</description>
        </property>
     
        <property>
          <name>ssl.client.keystore.type</name>
          <value>jks</value>
          <description>Optional. The keystore file format, default value is "jks".</description>
        </property>
    </configuration>
    

    2)配置:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/ssl-server.xml文件

    <configuration>
     <property>
       <name>ssl.server.truststore.location</name>
       <value>/etc/security/https/truststore.jks</value>
       <description>Truststore to be used by NN and DN. Must be specified.
       </description>
     </property>
     
     <property>
       <name>ssl.server.truststore.password</name>
       <value>ffcsict123</value>
       <description>Optional. Default value is "".
       </description>
     </property>
     
     <property>
       <name>ssl.server.truststore.type</name>
       <value>jks</value>
       <description>Optional. The keystore file format, default value is "jks".
       </description>
     </property>
     
     <property>
       <name>ssl.server.truststore.reload.interval</name>
       <value>10000</value>
       <description>Truststore reload check interval, in milliseconds.
       Default value is 10000 (10 seconds).
       </description>
     </property>
     
     <property>
       <name>ssl.server.keystore.location</name>
       <value>/etc/security/https/keystore.jks</value>
       <description>Keystore to be used by NN and DN. Must be specified.
       </description>
     </property>
     
     <property>
       <name>ssl.server.keystore.password</name>
       <value>ffcsict123</value>
       <description>Must be specified.
       </description>
     </property>
     
     <property>
       <name>ssl.server.keystore.keypassword</name>
       <value>ffcsict123</value>
       <description>Must be specified.</description>
     </property>
     
     <property>
       <name>ssl.server.keystore.type</name>
       <value>jks</value>
       <description>Optional. The keystore file format, default value is "jks".</description>
     </property>
    </configuration>
    
  6. 分发

    xsync /home/hadoop/module/hadoop-3.2.2/etc/hadoop/ssl-server.xml
    xsync /home/hadoop/module/hadoop-3.2.2/etc/hadoop/ssl-client.xml
    
  7. 赋权:chown -R hadoop:hadoop /home/hadoop

四、kerberos整合zk

  1. 创建文件夹:mkdir /home/hadoop/kerberos

  2. 创建zk的principal,多建一些用户用于后面测试

    密码设置:ffcsict123
    kadmin.local
    addprinc -randkey  zookeeper/node10
    addprinc -randkey  zookeeper/node11
    addprinc -randkey  zookeeper/node12
    addprinc -randkey  zookeeper/node13
        
    addprinc   hadoop/node10
    addprinc   hadoop/node11
    addprinc   hadoop/node12
    addprinc   hadoop/node13 
        
       
    addprinc -randkey  HTTP/node10
    addprinc -randkey  HTTP/node11
    addprinc -randkey  HTTP/node12
    addprinc -randkey  HTTP/node13 
      
    addprinc -randkey  root/node10
    addprinc -randkey  root/node11
    addprinc -randkey  root/node12
    addprinc -randkey  root/node13 
        
    addprinc -randkey  zhanzhk/node10
    addprinc -randkey  zhanzhk/node11
    addprinc -randkey  zhanzhk/node12
    addprinc -randkey  zhanzhk/node13 
        
    addprinc -randkey  hadoop
    
        
    每个节点操作
    xst -k  /home/hadoop/kerberos/hadoop.keytab   -norandkey   zookeeper/node10 zookeeper/node11 zookeeper/node12 zookeeper/node13 hadoop/node10 hadoop/node11 hadoop/node12 hadoop/node13 http/node10 http/node11 http/node12 http/node13 HTTP/node10 HTTP/node11 HTTP/node12 HTTP/node13 root/node10 root/node11 root/node12 root/node13 zhanzhk/node10 zhanzhk/node11 zhanzhk/node12 zhanzhk/node13  rangeradmin/node12 rangerlookup/node12  hadoop
    
  3. 拷贝keytab到所有的节点

  4. 修改所有节点zk的zoo.cfg配置文件:vi /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/conf/zoo.cfg

    kerberos.removeHostFromPrincipal=true
    kerberos.removeRealmFromPrincipal=true
    authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    jaasLoginRenew=3600000
    
  5. 生成jaas.conf文件:vi /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/conf/jaas.conf

    Server {
      com.sun.security.auth.module.Krb5LoginModule required
      useKeyTab=true
      keyTab="/home/hadoop/kerberos/hadoop.keytab"
      storeKey=true
      useTicketCache=false
      principal="zookeeper/node10@HADOOP.COM";
    };
     
    Client {
      com.sun.security.auth.module.Krb5LoginModule required
      useKeyTab=true
      keyTab="/home/hadoop/kerberos/hadoop.keytab"
      storeKey=true
      useTicketCache=false
      principal="hadoop/node10@HADOOP.COM";
    };
    
    
  6. 分发到其他节点,需要修改principal

  7. 配置java.env文件:vi /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/conf/java.env

    export JVMFLAGS="-Djava.security.auth.login.config=/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/conf/jaas.conf"
    
  8. 赋权:chown -R hadoop /home/hadoop

  9. 启动zk

  10. 连接zk:cd /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/ --》 ./zkCli.sh -server node10:2181

五、kerberos整合ranger

  1. 创建principal

    kadmin.local
    addprinc -randkey rangadmin/node12
    ktadd -norandkey -kt /home/hadoop/kerberos/rangadmin.keytab HTTP/node12  rangadmin/node12
    
  2. 修改配置文件:vi /opt/RangerAdmin/ranger-2.2.0-admin/install.properties

    添加

    spnego_principal=HTTP/node12@HADOOP.COM
    spnego_keytab=/home/hadoop/kerberos/rangadmin.keytab
     
    admin_principal=rangadmin/node12@HADOOP.COM
    admin_keytab=/home/hadoop/kerberos/rangadmin.keytab
        
    lookup_principal=rangadmin/node12@HADOOP.COM
    lookup_keytab=/home/hadoop/kerberos/rangadmin.keytab
    
  3. 初始化ranger-admin脚本

    cd /opt/RangerAdmin/ranger-2.2.0-admin
    ./setup.sh
    
  4. 启动:ranger-admin start

六、kerberos整合hdfs

ps1:如果怕ranger影响安装测试,可以考虑先移除ranger配置,kerberos测试通过后再重新加上ranger配置。可以使用插件自带的脚本disable-hdfs-plugin.sh

ps2:所有节点都要操作

  1. 修改所有节点core-site.xml配置:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/core-site.xml

    <!-- 配置kerberos认证 -->
    <property>
    	<name>hadoop.security.authentication</name>
    	<value>kerberos</value>
    </property>
     
    <property>
    	<name>hadoop.security.authorization</name>
    	<value>true</value>
    </property>
    <property>
    	<name>hadoop.rpc.protection</name>
    	<value>authentication</value>
    </property>
    <property>
    	<name>hadoop.http.authentication.type</name>
    	<value>kerberos</value>
    </property>
    
    
  2. 修改所有节点hdfs-site.xml配置:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/hdfs-site.xml

    新增

     <!-- 配置集群namenode的kerberos认证 -->
    	<property>
    		<name>dfs.block.access.token.enable</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>dfs.namenode.keytab.file</name>
    		<value>/home/hadoop/kerberos/hadoop.keytab</value>
    	</property>
    	<property>
    		<name>dfs.namenode.kerberos.principal</name>
    		<value>hadoop/_HOST@HADOOP.COM</value>
    	</property>
    	<property>
    		<name>dfs.web.authentication.kerberos.principal</name>
    		<value>HTTP/_HOST@HADOOP.COM</value>
    	</property>
    	<property>
    		<name>dfs.web.authentication.kerberos.keytab</name>
    		<value>/home/hadoop/kerberos/hadoop.keytab</value>
    	</property>
    	
    	<!-- 配置对NameNode Web UISSL访问 -->
    	<property>
    		<name>dfs.webhdfs.enabled</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>dfs.http.policy</name>
    		<value>HTTPS_ONLY</value>
    	</property>
    	<property>
    		<name>dfs.namenode.https-address</name>
    		<value>0.0.0.0:50070</value>
    	</property>
    	<property>
    		<name>dfs.permissions.supergroup</name>
    		<value>hadoop</value>
    		<description>The name of the group of super-users.</description>
    	</property>
    	
    	<!-- 配置集群datanode的kerberos认证 -->
    	<property>
    		<name>dfs.datanode.keytab.file</name>
    		<value>/home/hadoop/kerberos/hadoop.keytab</value>
    	</property>
    	
    	<property>
    		<name>dfs.datanode.kerberos.principal</name>
    		<value>hadoop/_HOST@HADOOP.COM</value>
    	</property>
    	
    	<!-- 配置datanode SASL配置 -->
    	<property>  
    		<name>dfs.datanode.data.dir.perm</name>  
    		<value>700</value>  
    	</property>
    	
    	<property>
    		<name>dfs.datanode.address</name>
    		<value>0.0.0.0:50010</value>
    	</property>
    	
    	<property>
    		<name>dfs.datanode.http.address</name>
    		<value>0.0.0.0:50075</value>
    	</property>
    	
    	<property>
    		<name>dfs.data.transfer.protection</name>
    		<value>integrity</value>
    	</property>
    	
    	<!-- 配置集群journalnode的kerberos认证 -->
    	<property>
    		<name>dfs.journalnode.keytab.file</name>
    		<value>/home/hadoop/kerberos/hadoop.keytab</value>
    	</property>
     
    	<property>
    		<name>dfs.journalnode.kerberos.principal</name>
    		<value>hadoop/_HOST@HADOOP.COM</value>
    	</property>
     
    	<property>
    		<name>dfs.journalnode.kerberos.internal.spnego.principal</name>
    		<value>HTTP/_HOST@HADOOP.COM</value>
    	</property>
    	
    	<property>
            <name>dfs.journalnode.http-address</name>
            <value>0.0.0.0:8480</value>
        </property>
    
    <property>
      <name>dfs.https.port</name>
      <value>50470</value>
    </property>
    <property>
      <name>dfs.https.address</name>
      <value>0.0.0.0:50470</value>
    </property>
     <property>
      <name>dfs.namenode.kerberos.https.principal</name>
      <value>HTTP/_HOST@HADOOP.COM</value>
    </property>
    <property>
        <name>dfs.namenode.kerberos.internal.spnego.principal</name>
        <value>HTTP/_HOST@HADOOP.COM</value>
    </property>
    

    修改

      <!-- http通信地址 web端访问地址 --> 
        <property>                
                <name>dfs.namenode.https-address.mycluster.nn1</name>        
                <value>node10:50070</value> 
        </property> 
        <!-- http通信地址 web 端访问地址 --> 
        <property>                
                <name>dfs.namenode.https-address.mycluster.nn2</name>      
                <value>node11:50070</value>   
         </property>  
    
  3. 启动hdfs:/home/hadoop/module/hadoop-3.2.2/sbin/start-dfs.sh

  4. 配置ranger服务
    在这里插入图片描述
    在这里插入图片描述

  5. 新增、并且在ranger web端,配置rangadmin用户所有目录权限

  6. 验证:首先分发各配置文件

    1)票据初始化(每个节点都执行):kinit -kt /home/hadoop/kerberos/hadoop.keytab hadoop/node10

    2)使用 klist 命令查看当前是否生成票据,出现有效及过期时间即表示生成票据成功
    3)测试:hadoop fs -ls /

    4)创建zhanzhk用户进行测试(无权限):hadoop fs -ls /

    5)hdfs配置zhanzhk权限(看前面文章),再次测试,成功!

七、kerberos整合yarn

ps1:如果怕ranger影响安装测试,可以考虑先移除ranger配置,kerberos测试通过后再重新加上ranger配置。可以使用插件自带的脚本disable-yarn-plugin.sh

ps2:所有节点都要操作

  1. 配置yarn:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/yarn-site.xml

    <!-- 配置yarn的web ui 访问https -->
    <property>
    	<name>yarn.http.policy</name>
    	<value>HTTPS_ONLY</value>
    </property>
    <!-- RM1 HTTP访问地址,查看集群信息 -->
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm1</name>
        <value>node10:8088</value>
    </property>
    <!-- RM2 HTTP访问地址,查看集群信息 -->
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm2</name>
        <value>node11:8088</value>
    </property>
    <!-- 配置yarn提交的app程序在hdfs上的日志存储路径 -->
    <property>
    	<description>Where to aggregate logs to.</description>
    	<name>yarn.nodemanager.remote-app-log-dir</name>
    	<value>/home/hadoop/module/hadoop-3.2.2/logs</value>
    </property>
    <!--YARN kerberos security-->
    <property>
    	<name>yarn.resourcemanager.keytab</name>
    	<value>/home/hadoop/kerberos/hadoop.keytab</value>
    </property>
        <property>
    	<name>yarn.resourcemanager.principal</name>
    	<value>hadoop/_HOST@HADOOP.COM</value>
    </property>
    <property>
    	<name>yarn.nodemanager.keytab</name>
    	<value>/home/hadoop/kerberos/hadoop.keytab</value>
    </property>
    <property>
    	<name>yarn.nodemanager.principal</name>
    	<value>hadoop/_HOST@HADOOP.COM</value>
    </property>
    <property>
        <name>yarn.nodemanager.container-executor.class</name>
        <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
    </property>
    <!--此处的group为nodemanager用户所属组-->
    <property>
        <name>yarn.nodemanager.linux-container-executor.group</name>
        <value>hadoop</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.path</name>
        <value>/hdp/bin/container-executor</value>
    </property>
       
    
  2. 配置yarn:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/mapred-site.xml

    <!--mapred kerberos security-->
    <property>
    	 <name>mapreduce.jobhistory.keytab</name>
    	 <value>/home/hadoop/kerberos/hadoop.keytab</value>
    </property>
    <property>
    	 <name>mapreduce.jobhistory.principal</name>
    	 <value>hadoop/_HOST@HADOOP.COM</value>
    </property>
    <property>
      <name>mapreduce.jobhistory.http.policy</name>
      <value>HTTPS_ONLY</value>
    </property>
    <property>
      <name>mapreduce.jobhistory.webapp.https.address</name>
      <value>node10:19888</value>
    </property>
    <property>
      <name>mapreduce.ssl.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>mapreduce.shuffle.ssl.enabled</name>
      <value>true</value>
    </property>
    
  3. 分发修改的配置文件至各节点

  4. 配置container-executor:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/container-executor.cfg

    ps:注意:该container-executor.cfg文件内不允许有空格或空行,否则会报错!

    #configured value of yarn.nodemanager.linux-container-executor.group
    yarn.nodemanager.linux-container-executor.group=hadoop
    #comma separated list of users who can not run applications
    banned.users=mysql
    #Prevent other super-users
    min.user.id=500
    #comma separated list of system users who CAN run applications
    allowed.system.users=root
    
  5. 配置Yarn使用LinuxContainerExecutor(各节点都需要操作)

    1)创建文件夹:mkdir -p /hdp/bin、mkdir -p /hdp/etc/hadoop

    2)拷贝文件:

    cp /home/hadoop/module/hadoop-3.2.2/bin/container-executor /hdp/bin/container-executor
    cp /home/hadoop/module/hadoop-3.2.2/etc/hadoop/container-executor.cfg /hdp/etc/hadoop/container-executor.cfg
    

    3)修改权限:

    chown -R root:hadoop /hdp/bin/container-executor
    chown -R root:hadoop /hdp/etc/hadoop/container-executor.cfg
    chown -R root:hadoop /hdp/bin
    chown -R root:hadoop /hdp/etc/hadoop
    chown -R root:hadoop /hdp/etc
    chown -R root:hadoop /hdp
    chmod 6050  /hdp/bin/container-executor
    
  6. 测试:hadoop checknative
    在这里插入图片描述

  7. /hdp/bin/container-executor --checksetup,没输出东西说明正常

  8. 拷贝密钥:cp /home/hadoop/kerberos/hadoop.keytab /home/hadoop/hadoop.keytab

  9. 启动start-yarn.sh(root用户):/home/hadoop/module/hadoop-3.2.2/sbin/start-yarn.sh

  10. 验证(无权限):

    1. kinit -kt /home/hadoop/kerberos/hadoop.keytab  zhanzhk/node10
    2. hadoop jar /home/hadoop/module/hadoop-3.2.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar  pi -Dmapred.job.queue.name=default 2 2
    
  11. 修改rangeryarn服务

    ps:此时点击连接测试会报错,忽略即可

    Unable to retrieve any files using given parameters, You can still save the repository and start creating policies, but you would not be able to use autocomplete for resource names. Check ranger_admin.log for more info.
    
    org.apache.ranger.plugin.client.HadoopException: Unable to get a valid response for expected mime type : [application/json] URL : https://node10:8088,https://node11:8088.
    Unable to get a valid response for expected mime type : [application/json] URL : https://node10:8088,https://node11:8088 - got null response..    ```
    

在这里插入图片描述

  1. 配置添加zhanzhk账户策略即可!
    在这里插入图片描述

  2. 重新测试,成功!

八、kerberos整合hive

ps1:如果怕ranger影响安装测试,可以考虑先移除ranger配置,kerberos测试通过后再重新加上ranger配置。可以使用插件自带的脚本disable-hive-plugin.sh

同时需要移除/home/hadoop/module/hive/conf/hiveserver2-site.xml配置文件。

  1. 配置hive-site.xml:vi /home/hadoop/module/hive/conf/hive-site.xml

    <property>
           <name>hive.server2.enable.doAs</name>
           <value>true</value>
     </property>
     <property>
           <name>hive.server2.authentication</name>
           <value>KERBEROS</value>
     </property>
     <property>
           <name>hive.server2.authentication.kerberos.principal</name>
           <value>hadoop/_HOST@HADOOP.COM</value>
     </property>
     <property>
           <name>hive.server2.authentication.kerberos.keytab</name>
           <value>/home/hadoop/kerberos/hadoop.keytab</value>
     </property>
     <property>
           <name>hive.server2.authentication.spnego.keytab</name>
           <value>/home/hadoop/kerberos/hadoop.keytab</value>
     </property>
     <property>
           <name>hive.server2.authentication.spnego.principal</name>
           <value>hadoop/_HOST@HADOOP.COM</value>
     </property>
     <property>
           <name>hive.metastore.sasl.enabled</name>
           <value>true</value>
     </property>
     <property>
           <name>hive.metastore.kerberos.keytab.file</name>
           <value>/home/hadoop/kerberos/hadoop.keytab</value>
     </property>
     <property>
           <name>hive.metastore.kerberos.principal</name>
           <value>hadoop/_HOST@HADOOP.COM</value>
     </property>
        
        
    <!--配置hiveserver2高可用-->
    <property>
        <name>hive.server2.support.dynamic.service.discovery</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.server2.zookeeper.namespace</name>
        <value>hiveserver2_zk</value>
    </property>
    <property>
        <name>hive.zookeeper.quorum</name>
        <value> node10:2181,node11:2181,node12:2181</value>
    </property>
    <property>
        <name>hive.zookeeper.client.port</name>
        <value>2181</value>
    </property>
    
  2. 修改core-site.xml配置文件:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/core-site.xml

    <property>
      <name>hadoop.proxyuser.hive.users</name>
      <value>*</value>
    </property>
    <property>
      <name>hadoop.proxyuser.hive.hosts</name>
      <value>*</value>
    </property>
    
  3. 赋权:chown hadoop:hadoop /home/hadoop

  4. 启动hive客户端:cd /home/hadoop/module/hive —》 nohup ./bin/hiveserver2>> hiveserver2.log 2>&1 &

  5. 连接测试:

    ps:beeline连接必须使用配置文件配置的Hadoop连接,如下。如果想要区分用户,需要根据kinit用户进行区分

    kinit -kt /home/hadoop/kerberos/hadoop.keytab  zhanzhk/node10
    beeline -u "jdbc:hive2://node10:10000/default;principal=hadoop/node10@HADOOP.COM"
    create table zk(id int,name String);
    insert into zk values('4', 'abc222');
    show tables;
    

    报错无权限:Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [zhanzhk] does not have [USE] privilege on [default] (state=42000,code=40000)

  6. 重新配置hive的service
    在这里插入图片描述

  7. 设置用户策略
    在这里插入图片描述

  8. 保存,然后回到service点击test,显示成功即可
    在这里插入图片描述

  9. 重新连接测试:成功!

    kinit -kt /home/hadoop/kerberos/hadoop.keytab  zhanzhk/node10
    beeline -u "jdbc:hive2://node10:10000/default;principal=hadoop/node10@HADOOP.COM"
    create table zk(id int,name String);
    insert into zk values(13,'小红');
    show tables;
    
    beeline -u "jdbc:hive2://0003.novalocal:10000/default;principal=hadoop/node10@HADOOP.COM"
    bin/beeline -u jdbc:hive2://0003.novalocal:10000/default -n root -p ffcsict123
    
    
    create table sqoop_test(id int,name String,age int,address String,phone String);
    insert into sqoop_test values(13,'小红',18,'连花村','18854523654');
    

九、kerberos整合hbase

ps1:如果怕ranger影响安装测试,可以考虑先移除ranger配置,kerberos测试通过后再重新加上ranger配置。可以使用插件自带的脚本disable-hbase-plugin.sh

  1. 修改hbase-site.xml配置:vi /home/hadoop/hbase/hbase-2.1.0/conf/hbase-site.xml

    <!-- hbase配置kerberos安全认证 -->
    <property>
    	<name>hbase.security.authentication</name>
    	<value>kerberos</value>
    </property>
    <!-- 配置hbase rpc安全通信 -->
    <property>
        <name>hbase.rpc.engine</name>
        <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
    </property>
    <property>
        <name>hbase.coprocessor.region.classes</name>
        <value>org.apache.hadoop.hbase.security.token.TokenProvider</value>
    </property>
    <!-- hmaster配置kerberos安全凭据认证 -->
    <property>
    	<name>hbase.master.kerberos.principal</name>
    	<value>hadoop/_HOST@HADOOP.COM</value>
    </property>
    <!-- hmaster配置kerberos安全证书keytab文件位置 -->
    <property>
    	<name>hbase.master.keytab.file</name>
    	<value>/home/hadoop/kerberos/hadoop.keytab</value>
    </property>
    <!-- regionserver配置kerberos安全凭据认证 -->
    <property>
    	<name>hbase.regionserver.kerberos.principal</name>
    	<value>hadoop/_HOST@HADOOP.COM</value>
    </property>
    <!-- regionserver配置kerberos安全证书keytab文件位置 -->
    <property>
    	<name>hbase.regionserver.keytab.file</name>
    	<value>/home/hadoop/kerberos/hadoop.keytab</value>
    </property>
    
  2. 创建文件:vi /home/hadoop/hbase/hbase-2.1.0/conf/zk-jaas.conf

    Client {
      com.sun.security.auth.module.Krb5LoginModule required
      useKeyTab=true
      keyTab="/home/hadoop/kerberos/hadoop.keytab"
      useTicketCache=false
      principal="hadoop/node10@HADOOP.COM";
    };
    
  3. 修改hbase-site.xml配置:vi /home/hadoop/hbase/hbase-2.1.0/conf/hbase-env.sh

    #修改HBASE_OPTS属性为该内容
    export HBASE_OPTS="-XX:+UseConcMarkSweepGC -Djava.security.auth.login.config=/home/hadoop/hbase/hbase-2.1.0/conf/zk-jaas.conf"
    
  4. 赋权:chown hadoop:hadoop /home/hadoop

  5. 重启

  6. 测试(无权限):

    kinit -kt /home/hadoop/kerberos/hadoop.keytab  zhanzhk/node10
    cd /home/hadoop/hbase/hbase-2.1.0/bin
    ./hbase shell
    
    hive测试指令:
    1. create 'B_TEST_STU','cf'   
    2. 插入数据:put 'B_TEST_STU','001','cf:age','17'
    3. 查看表数据: scan 'B_TEST_STU'  
    
  7. 重新配置hbase的service
    在这里插入图片描述
    在这里插入图片描述

  8. 测试连接
    在这里插入图片描述

  9. 重新测试创建表

    kinit -kt /home/hadoop/kerberos/hadoop.keytab  zhanzhk/node10
    cd /home/hadoop/hbase/hbase-2.1.0/bin
    ./hbase shell
    
    hbase测试指令:
    1. create 'B_TEST_STU','cf'   
    2. 插入数据:put 'B_TEST_STU','001','cf:age','17'
    3. 查看表数据: scan 'B_TEST_STU'  
    
  10. 成功!
    在这里插入图片描述

十、遇到的问题

  1. 用户找不到

    问题:main : requested yarn user is zhanzhk,User zhanzhk not found。且kdc服务器已经创建了zhanzhk用户

    解决:在所有节点创建zhanzhk用户,useradd zhanzhk

  2. KeeperErrorCode = AuthFailed fo XXXXX

    解决:zookeeper整合kerberos即可

  3. RM could not transition to Active

    删除tmp底下的yarn相关文件夹即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库,计算机网络、操作系统刷题笔记22

数据库&#xff0c;计算机网络、操作系统刷题笔记22 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

最值得推荐的3个免费PDF 转换器

当您需要将 PDF 转换为另一种格式&#xff08;如 Microsoft Word、图像&#xff08;如 JPG&#xff09;、Excel、电子书、PowerPoint 等&#xff0c;反之亦然&#xff09;时&#xff0c;最好的 PDF 转换器非常重要。 但是找到一个可靠的 PDF 转换软件来使用是具有挑战性的。因…

JAVA设计模式--行为型模式--策略模式

1.策略模式&#xff08;Strategy Pattern&#xff09; 1.1介绍 一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中&#xff0c;我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对…

【C++】网络编程(TCPUDP)

网络编程是C API操作中很重要的一部分&#xff0c;包含TCP和UDP。 网络传输模型可以抽象为7个层&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 但在使用TCP/IP协议时&#xff0c;可以简化为这4层&#xff1a;网络接口、网络层、传输层、应用层。…

物理层基本概念

目录物理层的基本概念物理层传输方式串行传输并行传输同步传输异步传输单向通信&#xff08;单工&#xff09;双向交替通信&#xff08;半双工&#xff09;双向同时通信&#xff08;全双工&#xff09;编码与调制常用编码基本调制方法信道极限容量物理层的基本概念 物理层考虑的…

路由 OSPF常见4种网络类型MA、P2P、NBMA、P2MP、OSPF报头字段信息简介。

4.2.1 路由 OSPF&#xff08;OSPF常见4种网络类型、OSPF报头信息&#xff09; 目录OSPF常见的4种网络类型广播类型&#xff08;Broadcast 或 MA&#xff09;P2PNBMAP2MPOSPF报文发送形式对于不同OSPF网络类型的组网OSPF报头信息实际抓包分析OSPF常见的4种网络类型 OSPF应用于不…

Kali最强渗透工具- metasploit

数据来源 本文仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 metasploit是什么&#xff1f; msf是一款开源安全漏洞利用和测试工具&#xff0c;集成了…

C++GUI之wxWidgets(9)-编写应用涉及的类和方法(4)-事件处理(3)

目录动态事件处理如何处理事件事件如何向上传播事件处理程序链动态事件处理 void MyFrameHandler::OnFrameExit(wxCommandEvent&) {// Do something useful. }MyFrameHandler myFrameHandler;MyFrame::MyFrame() {Bind(wxEVT_MENU, &MyFrameHandler::OnFrameExit,&…

Java数组的定义与使用

Java数组的定义与使用 文章目录Java数组的定义与使用数组的基本概念什么是数组数组的创建数组的初始化数组的使用数组中元素访问遍历数组数组是引用类型初始JVM的内存分布基本类型变量与引用类型变量的区别引用变量几道例题认识null数组的应用场景保存数据作为函数的参数参数传…

TypeScript中的泛型

泛型&#xff08;Generics&#xff09;是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性。 通常用T来指代任意输入的类型&#xff0c;除了T之外&#xff0c;以下是常见泛型变量代表的意思&#xff1a; K(Key…

信息安全技术 可信计算规范 可信平台控制模块 学习笔记(一)

声明 本文是学习信息安全技术 可信计算规范 可信平台控制模块. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 可信计算规范 缩略语 下列缩略语适用于本文件。 I/O&#xff1a;输入输出&#xff08;Input/Output&#xff09; IP&#xff1…

第三十八章 贪心算法——区间问题及证明(上)

第三十八章 贪心策略——区间相关问题一、什么贪心策略&#xff1f;二、区间问题合集1、思路&#xff1a;2、问题1&#xff1a; 区间选点&#xff08;1&#xff09;问题&#xff08;2&#xff09;思路和证明a.思路b.证明&#xff08;3&#xff09;代码3、问题2&#xff1a;&…

java:文件分片上传

代码下载地址&#xff1a;https://download.csdn.net/download/u013938578/87358484 1 文件上传、断点续传服务端 1.1 新建maven项目 文件结构如下&#xff1a; 1.2 引入百度开源上传组件webuploader 1.3 前端页面upload.html <!DOCTYPE html> <html lang"en&…

Java个人家乡博客源码

概述 个人博客相册家乡主题&#xff0c;用户注册后可以发布关于家乡的特色文章介绍&#xff0c;可以发布照片&#xff0c;相册管理&#xff0c;留言&#xff0c;评论&#xff0c;回复&#xff0c;收藏&#xff0c;关注 演示视频 https://www.bilibili.com/video/BV1iy4y1x7w6…

SSM框架-注解开发

11 注解开发 11.1 注解开发定义Bean 代码 接口BookDao public interface BookDao {void save(); }实现类BookDaoImpl【更改之处】 在最上面Component(“bookDao”) Component("bookDao") //或者Repository("bookDao") public class BookDaoImpl impl…

【C++】-- 哈希(上万字详细配图配代码从执行一步步讲解)

目录 哈希 常见哈希函数 除留余数法 哈希冲突 哈希冲突解决 闭散列 a、线性探测 插入 查找 删除 线性探测的实现代码 b、二次探测 二次探测的实现 开散列 开散列实现 插入 查找 删除 析构函数 代码汇总 哈希 常见哈希函数 直接定址法 -- (常用)-- 不存在哈…

2022 年博客总结

时间过的飞快&#xff0c;孩子也快4岁了&#xff0c;1号带孩子去玩雪&#xff0c;发生了一件有趣的事&#xff0c;发个视频。 带孩子玩雪我拉着闺女&#xff0c;闺女拉着儿子&#xff0c;忽略了力的作用&#xff0c;我以为只有我在使劲&#xff0c;实际上闺女需要需要更大的力拉…

java8新特性——函数式编程

文章目录1.函数式编程思想1.1概念1.2函数式编程的思想2.Lambda表达式2.1概述2.2核心原则2.3基本格式2.4Lambda表达式练习2.5省略规则3.Stream流3.1概述3.2案例准备3.3Steam流操作案例3.3.1需求3.3.2实现3.4Stream常用操作3.4.1创建stream流方式3.4.2中间操作3.4.2.1filter3.4.2…

SpringMVC 底层机制的简易实现

SpringMVC 底层机制的简易实现项目基础配置 xml 文件开发指南开发步骤1.初始化数据2.中央控制器 - 分发请求3.开发者角度4.视图解析器开发总结项目基础 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId&g…

【Python基础】常用数据结构及处理

1. KeyValue dict.clear() 删除字典内所有元素dict.copy()返回一个字典的浅复制[dict.fromkeys(seq, val])创建一个新字典&#xff0c;以序列 seq 中元素做字典的键&#xff0c;val 为字典所有键对应的初始值 dict.get(key, defaultNone) 返回指定键的值&#xff0c;如果值不在…