zoukankan      html  css  js  c++  java
  • Hadoop安全

    kerberos-hadoop配置常见问题汇总

    注意事项

    常见问题如下(其中前面两点最多):

    • 各目录属主组属性修改.

    对于hadoop,需要改为yarn:hadoop/mapred:hdoop/hdfs:hadoop,其他组件如spark直接为spark:spark即可.

    • 组件本地log属主组修改以及权限修改.

    主要对/var/log/cluster001, /var/run/cluste001以及/data/cluster001目录下进行修改.

    • webHDFS enable=true时,报错 configureation principal问题.

    相关配置为添加,追加相关配置到hdfs-site.xml文件中.
    参考:
    +http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9+

    • 设置安全的datanode

    当设置了安全的datanode时,启动datanode需要root权限,需要修改hadoop-env.sh文件.且需要安装jsvc,同时重新下载编译包commons-daemon-1.0.15.jar,并把$HADOOP_HOME/share/hadoop/hdfs/lib下替换掉.
    否则报错Cannot start secure DataNode without configuring either privileged resources
    参考:
    http://blog.csdn.net/lalaguozhe/article/details/11570009
    +http://blog.csdn.net/wulantian/article/details/42173095+

    • dfs.datanode.data.dir.perm权限的设置

    /tmp/dfs/data权限改成755,否则报错.directory is not readable.是因为hdfs-site.xml文件中dfs.datanode.data.dir.perm权限的设置.由于datanode.dir没有设置,所以存放在默认位置/tmp.

    • container-executor.cfg must be owned by root, but is owned by 500.

    cmake src -DHADOOP_CONF_DIR=/etc/hadoop
    下载源码重新编译
    同时服务器得安装g++/cmake
    yum install gcc-c++
    yum install cmake
    参考:
    +http://blog.csdn.net/lipeng_bigdata/article/details/52687821+

    • Hbase master进程启动不了.


    原因:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.
    解决方法:
    copy core-site.xml and hdfs-site.xml to hbase_dir/conf
    参考:
    http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication
    虽然我们的系统中有这两个配置文件,但是加入了kerberos之后这两个文件的更新没有同步过来.

    • 没有获取票据

    用户访问某个服务,得先申请票据,然后通过该票据再去访问某一服务.否则,会报如下错误. 
    No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt 

    kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab hdfs/node1@HADOOP.COM
    参考:
    +http://www.cnblogs.com/morvenhuang/p/4607790.html+

    • java.io.IOException: All specified directories are failed to load

    原因:格式化时导致datanode和namenode的clusterID不一致
    解决办法:
    方法1.进入tmp/dfs,修改VERSION文件即可,将datanode里version文件夹里面的内容修改成和namenode一致的.
    方法2.直接删除tmp/dfs,然后格式化hdfs即可(./hdfs namenode -format)重新在tmp目录下生成一个dfs文件. 

    • hadoop监控页面显示node unhealthy

    原因:目录下文件损坏或者权限不满足要求
    验证: hdfs fsck /tmp/hadoop-hduser/nm-local-dir
    解决办法:
    看log发现是属主权限问题,然后重启resourcemanager和nodemanager进程.

    • Reduce阶段无法获取map阶段产生的中间结果

    原因:不详
    解决办法:重启了相关进程后解决了.

    • Keystore报错

    原因:配置了ssl/tls,但是相关组件没有配置
    解决办法:相关配置注释.这部分属于Configuring Encryption.

    • Datanode可以不使用root用户启动

    原因:采用secure datanode,由于datanode 数据传输协议没有采用Hadoop RPC,因此datanode需要认证自己

    解决方案:

    1.使用安全的端口,依赖jsvc,采用root用户启动进程绑定该安全端口. hdfs脚本中可以看到

    2.通过sasl认证自己.从版本2.6.0开始, SASL can be used to authenticate the data transfer protocol.

    这样就不必依赖jsvc,也不需要重新编译依赖包生成新的jsvc.之前参考的资料过时了.

    参考资料:

    http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

    • nodemanager也可以不使用root用户启动

    现象:YarnRuntimeException: Failed to initialize container executor error=13,权限不够. nodemanager一直没法启动

    临时解决方案:container-executor为setuid权限()6050),属于hadoop组,一直没有找到原因和实际的解决方案,就用root用户启动了.

    原因:机器selinux没有关闭,selinux开启的时候,ssh免密码登录会不起作用,仍然需要手动输入密码,之前没有生效没有在意

    • nodemanager启动失败

    现象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

    定位问题方法:直接运行./container-executor 会报错误 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

    原因:是由于container-executor.cfg 配置不对,其中属性值不能为空,我这边是因为"banned.users="

    • namenode启动正常,日志信息中很多 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

    现象:启动namenode,namenode虽然起来了,但是namenode日志信息中很多 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

    原因:很多依赖hdfs的服务,但是没有开启安全认证,而hdfs开启了.把依赖hdfs的服务关闭,则日志信息中不再flush该信息

    • Hadoop 2.5.2 的 Secure Mode 下, 必须用 root 通过 jsvc 启动 DataNode, 运维不方便.同时得重新下载common-daemon的包,并替换jsvc

    解决方案:Hadoop2.6解决了该问题,但是需要额外配置多个参数,同时得开启https(即设置HTTPS_ONLY),可以通过hadoop用户启动datanode了

    参考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

    • /home/hadoop/.keystore file not found

    现象:由于使用hadoop2.6的secure mode新特性,默认需要开启https,所以需要证书问题,而之前没有配置

    原因:没有生成证书信息

    解决方案:采用openssl+keytool生成keystore/truststore文件,同时修改ssl-client.xml和ssl-server.xml文件[繁琐]

    常见问题如下(其中前面两点最多):

    1)        各目录属主组属性修改.

    对于hadoop,需要改为yarn:hadoop/mapred:hdoop/hdfs:hadoop,其他组件如spark直接为spark:spark即可.

    2)        组件本地log属主组修改以及权限修改.

    主要对/var/log/cluster001, /var/run/cluste001以及/data/cluster001目录下进行修改.

    3)        webHDFS enable=true时,报错 configureation principal问题.

    相关配置为添加,追加相关配置到hdfs-site.xml文件中.

    参考:

    http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9

    4)        设置安全的datanode

    当设置了安全的datanode时,启动datanode需要root权限,需要修改hadoop-env.sh文件.且需要安装jsvc,同时重新下载编译包commons-daemon-1.0.15.jar,并把$HADOOP_HOME/share/hadoop/hdfs/lib下替换掉.

    否则报错Cannot start secure DataNode without configuring either privileged resources

    参考:

    http://blog.csdn.net/lalaguozhe/article/details/11570009

    http://blog.csdn.net/wulantian/article/details/42173095

    5)         dfs.datanode.data.dir.perm权限的设置

    /tmp/dfs/data权限改成755,否则报错.directory is not readable.是因为hdfs-site.xml文件中dfs.datanode.data.dir.perm权限的设置.由于datanode.dir没有设置,所以存放在默认位置/tmp.

    6)        container-executor.cfg must be owned by root, but is owned by 500.

    cmake src -DHADOOP_CONF_DIR=/etc/hadoop

    下载源码重新编译

    同时服务器得安装g++/cmake

    yum install gcc-c++

    yum install cmake

    参考:

    http://blog.csdn.net/lipeng_bigdata/article/details/52687821

    7)        Hbase master进程启动不了.

    原因:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.

    解决方法:

    copy core-site.xml and hdfs-site.xml to hbase_dir/conf

    参考:

    http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication

    虽然我们的系统中有这两个配置文件,但是加入了kerberos之后这两个文件的更新没有同步过来.

    8)        没有获取票据

    用户访问某个服务,得先申请票据,然后通过该票据再去访问某一服务.否则,会报如下错误.

    No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt

     

    kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab  hdfs/node1@HADOOP.COM

    参考:

    http://www.cnblogs.com/morvenhuang/p/4607790.html

    9)        java.io.IOException: All specified directories are failed to load

    原因:格式化时导致datanode和namenode的clusterID不一致

    解决办法:

    方法1.进入tmp/dfs,修改VERSION文件即可,将datanode里version文件夹里面的内容修改成和namenode一致的.

    方法2.直接删除tmp/dfs,然后格式化hdfs即可(./hdfs namenode -format)重新在tmp目录下生成一个dfs文件.

     

    10)     hadoop监控页面显示node unhealthy

    原因:目录下文件损坏或者权限不满足要求

    验证: hdfs fsck /tmp/hadoop-hduser/nm-local-dir

    解决办法:

    看log发现是属主权限问题,然后重启resourcemanager和nodemanager进程.

    11)    Reduce阶段无法获取map阶段产生的中间结果

    原因:不详

    解决办法:重启了相关进程后解决了.

    12)    Keystore报错

    原因:配置了ssl/tls,但是相关组件没有配置

    解决办法:相关配置注释.这部分属于Configuring Encryption.

    13)  Datanode可以不使用root用户启动

    原因:采用secure datanode,由于datanode 数据传输协议没有采用Hadoop RPC,因此datanode需要认证自己

    解决方案:

    1.使用安全的端口,依赖jsvc,采用root用户启动进程绑定该安全端口. hdfs脚本中可以看到

    2.通过sasl认证自己.从版本2.6.0开始, SASL can be used to authenticate the data transfer protocol.

    这样就不必依赖jsvc,也不需要重新编译依赖包生成新的jsvc.之前参考的资料过时了.

    参考资料:

    http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

    14)  nodemanager也可以不使用root用户启动

    现象:YarnRuntimeException: Failed to initialize container executor error=13,权限不够. nodemanager一直没法启动

    临时解决方案:container-executor为setuid权限()6050),属于hadoop组,一直没有找到原因和实际的解决方案,就用root用户启动了.

    原因:机器selinux没有关闭,selinux开启的时候,ssh免密码登录会不起作用,仍然需要手动输入密码,之前没有生效没有在意

    15)  nodemanager启动失败

    现象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

    定位问题方法:直接运行./container-executor 会报错误 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

    原因:是由于container-executor.cfg 配置不对,其中属性值不能为空,我这边是因为"banned.users="

    16)  namenode启动正常,日志信息中很多 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

    现象:启动namenode,namenode虽然起来了,但是namenode日志信息中很多 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

    原因:很多依赖hdfs的服务,但是没有开启安全认证,而hdfs开启了.把依赖hdfs的服务关闭,则日志信息中不再flush该信息

    17)  Hadoop 2.5.2 的 Secure Mode 下, 必须用 root 通过 jsvc 启动 DataNod

    运维不方便.同时得重新下载common-daemon的包,并替换jsvc

    解决方案:Hadoop2.6解决了该问题,但是需要额外配置多个参数,同时得开启https(即设置HTTPS_ONLY),可以通过hadoop用户启动datanode了

    参考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

    18)  /home/hadoop/.keystore file not found

    现象:由于使用hadoop2.6的secure mode新特性,默认需要开启https,所以需要证书问题,而之前没有配置

    原因:没有生成证书信息

    解决方案:采用openssl+keytool生成keystore/truststore文件,同时修改ssl-client.xml和ssl-server.xml文件

    19)    配置authorization中hadoop-policy文件修改让其生效

    操作: 更新namenode相关属性, bin/hdfs dfsadmin -refreshServiceAcl

           错误提示:

         

    原因:无法更新或者hadoop-policy文件或security.refresh.policy.protocol.acl配置中没有该用户.

    解决办法:重启namenode/datanode进程或者切换正确配置的用户.

    20)    用户没有对hdfs操作的权限

    错误提示:

    解决办法: security.client.protocol.acl配置中加入该用户

    21)    Namenode认证超时,启动失败

        启动hadoop某一角色失败,从日志中可以看出是time out问题,说明是连接服务器失败,这里是连接kerberos server失败.接下来往下继续定位是服务没有起来还是客户端端口号弄错了.

    22)    kerberos客户端连接不上kdc server

    修改/etc/krb5.conf中的kdc和admin_server对应的主机,操作即可.有时还需要登录kerberos server对应节点,节点重启krb5kdc和kadmind进程,使其生效.

    23)     没有kdc操作权限

         kerberos server可以通过sbin/kadmin.local(local单词可知表示通过本机器登录)直接操作,如listprincs,而通过bin/kadmin相当于远程登录,都直接报错,表示没有操作权限.

    此时如果远程登录也需要具有该权限,只需要在kerberos server节点增加kadm5.acl该文件(文件存放路径在kdc.conf中指定),然后重启krb5kdc和kadmind进程.

    文件内容如下:

    */admin@HADOOP.COM *

    24)    Webhdfs配置认证后,需要输入user.name(也取消webhdfs认证)

    配置webhdfs的simple模式认证,访问得加入user.name

    http://10.1.24.228:50070?user.name=hadoop

  • 相关阅读:
    文件上传
    gitee 提交项目
    SSM分页查询功能
    SSM 管理员删除功能
    SSM整合 管理员登录功能(密码加密功能)
    SSM整合项目 MD5加密工具类
    SSM Ajax发送复杂对象
    SSM环境中 Ajax 发送简单数组的三种方法
    ssm 增删改查
    ssm 登录功能
  • 原文地址:https://www.cnblogs.com/warmingsun/p/6738730.html
Copyright © 2011-2022 走看看