非 root用户 kerbos启动Hadoop集群
首先停止 hadoop 集群
使用 hasdop 下 stop-all.sh可能存在杀不死的情况需要手动 ps -ef|grep data,我是后面发觉有些 datanode 还是 root启动
下面配置都需要同步到其他节点
oge用户环境变量修改
1 | # jdk |
kerbos 认证
kerbos登录用户需要申请 oge这个用户
docker exec krb5 kadmin.local -q “addprinc -randkey oge/spark-master.example.com@EXAMPLE.COM”
docker exec krb5 kadmin.local -q “addprinc -randkey oge/spark-slave1.example.com@EXAMPLE.COM”
docker exec krb5 kadmin.local -q “addprinc -randkey oge/spark-slave2.example.com@EXAMPLE.COM”
docker exec krb5 kadmin.local -q “ktadd -k /etc/security/keytabs/oge.keytab oge/spark-master.example.com@EXAMPLE.COM oge/spark-slave1.example.com@EXAMPLE.COM oge/spark-slave2.example.com@EXAMPLE.COM”
master 节点
kinit -kt kdc/keytabs/oge.keytab oge/spark-master.example.com@EXAMPLE.COM
slave1 节点
kinit -kt kdc/keytabs/oge.keytab oge/spark-slave1.example.com@EXAMPLE.COM
slave2 节点
kinit -kt kdc/keytabs/oge.keytab oge/spark-slave2.example.com@EXAMPLE.COM
切换oge用户后需要删除 /tmp/krb5cc_0 否则会出现
kinit: Failed to store credentials: Internal credentials cache error (filename: /tmp/krb5cc_0) while getting initial credentials
hadoop,spark 所有者修改(每个节点执行)
chown -R oge:oge ddd/Hadoop
chown -R oge:oge ddd/spark-3.0.0
hdfs-site.xml
修改原有hdfs认证登录的内容
下面的对应的目录需要修改
1 | <property> |
修改权限 chmod 700
namenode,Namenode每个节点存储数据
chown -R oge:oge /data/data/hadoop_data
chmod -R 700 /data/data/hadoop_data/dfs/name
chmod -R 700 /data/data/hadoop_data/dfs/data
hadoop log权限和所有者(每个节点)
chown -R oge:oge /data/server/hadoop-2.7.3/logs
chmod -R 755 /data/server/hadoop-2.7.3/logs
yarn-site.xml
修改原有hdfs认证登录的内容
1 | <property> |
修改对应路径的权限
livy配置修改
也是修改登录人用的 keytable 文件和和账号
start-dfs,sh
这个时候由于 hdfs启动,有用用户
hdfs put 文件显示 name node is in safe mode 需要怎么解决
常见的配置 权限
文件权限和目录所有权注意事项
Hadoop 目录需归属于运行服务的用户(这里为 oge),权限过松可能导致 Kerberos 认证失败或安全漏洞。以下是标准推荐的本地文件系统和 HDFS 路径权限(基于 Hadoop 文档)。使用 chown -R oge:hadoop
路径类型 | 示例路径 | 所有者 (owner:group) | 权**限** | 说明 |
---|---|---|---|---|
本地文件系统 (Local FS) | dfs.namenode.name.dir (e.g., /hadoop/hdfs/name) | oge:hadoop | drwx—— (700) | NameNode 元数据目录,需严格私有。 |
dfs.datanode.data.dir (e.g., /hadoop/hdfs/data) | oge:hadoop | drwx—— (700) | DataNode 数据块目录,防止未授权访问。 | |
$HADOOP_LOG_DIR (e.g., /var/log/hadoop) | oge:hadoop | drwxrwxr-x (775) | 日志目录,组内可写。 | |
$YARN_LOG_DIR (e.g., /var/log/hadoop-yarn) | oge:hadoop | drwxrwxr-x (775) | YARN 日志。 | |
yarn.nodemanager.local-dirs (e.g., /hadoop/yarn/local) | oge:hadoop | drwxr-xr-x (755) | YARN 临时文件。 | |
yarn.nodemanager.log-dirs (e.g., /hadoop/yarn/log) | oge:hadoop | drwxr-xr-x (755) | YARN 应用日志。 | |
container-executor 二进制文件 (e.g., /opt/hadoop/bin/container-executor) | root:hadoop | ● -Sr-s–* (4750 或类似) | YARN 容器执行器,需 root 拥有,但组为 hadoop(oge 需在组内)。 | |
conf/container-executor.cfg | root:hadoop | r——-* (400) | 配置需 root,只读。 | |
HDFS | / (根目录) | oge:hadoop | drwxr-xr-x (755) | HDFS 根,oge 作为 superuser。 |
/tmp | oge:hadoop | drwxrwxrwxt (1777) | 临时目录,sticky bit 防止删除他人文件。 | |
/user | oge:hadoop | drwxr-xr-x (755) | 用户目录父路径。 | |
/user/oge | oge:hadoop | drwxr-xr-x (755) | 为 oge 创建个人目录:hdfs dfs -mkdir /user/oge && hdfs dfs -chown oge:hadoop /user/oge。 | |
yarn.nodemanager.remote-app-log-dir (e.g., /tmp/logs) | oge:hadoop | drwxrwxrwxt (1777) | YARN 远程日志。 | |
mapreduce.jobhistory.intermediate-done-dir (e.g., /mr-history/tmp) | oge:hadoop | drwxrwxrwxt (1777) | MapReduce 中间结果。 | |
mapreduce.jobhistory.done-dir (e.g., /mr-history/done) | oge:hadoop | drwxr-x— (750) | 完成作业历史。 |
● 注意: 使用 chown -R 和 chmod -R 递归应用,但测试后避免过度权限(如 777)。
○ 如果集群有多个节点,需在所有节点同步目录所有权(使用 rsync 或脚本)。
○ Spark 相关目录(如 spark.local.dir)类似 YARN,设为 oge:hadoop,权限 755。
○ Kerberos 启用后,HDFS 权限由 Kerberos principal 映射到 OS 用户(通过 hadoop.security.auth_to_local 配置规则,默认规则如 RULE:2:$1@$0s/.*/oge/)。