非 root用户 kerbos启动Hadoop集群

文章目录
  1. 1. 非 root用户 kerbos启动Hadoop集群
    1. 1.1. oge用户环境变量修改
    2. 1.2. kerbos 认证
      1. 1.2.1. master 节点
      2. 1.2.2. slave1 节点
    3. 1.3. slave2 节点
    4. 1.4. hadoop,spark 所有者修改(每个节点执行)
      1. 1.4.1. hdfs-site.xml
      2. 1.4.2. hadoop log权限和所有者(每个节点)
      3. 1.4.3. yarn-site.xml
    5. 1.5. livy配置修改
    6. 1.6. start-dfs,sh
      1. 1.6.0.1. 文件权限和目录所有权注意事项

非 root用户 kerbos启动Hadoop集群

首先停止 hadoop 集群

使用 hasdop 下 stop-all.sh可能存在杀不死的情况需要手动 ps -ef|grep data,我是后面发觉有些 datanode 还是 root启动

下面配置都需要同步到其他节点

oge用户环境变量修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# jdk
export JAVA_HOME=/data/server/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
# scala
export SCALA_HOME=/data/server/scala/
export PATH=$PATH:$SCALA_HOME/bin
# hadoop
export HADOOP_HOME=/data/server/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_LOG_DIR=/data/server/hadoop-2.7.3/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export HADOOP_PREFIX=/data/server/hadoop-2.7.3/
# spark
export SPARK_HOME=/data/server/spark-3.0.0
export PATH=$PATH:$SPARK_HOME/bin
# livy
export LIVY_HOME=/data/server/livy
export PATH=$PATH:$LIVY_HOME/bin

# kerberos
export KRB5CCNAME=FILE:/tmp/krb5cc_$(id -u)

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
2
3
4
5
6
7
8
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/data/hadoop_data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/data/hadoop_data/dfs/data</value>
</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
2
3
4
<property>
<name>yarn.nodemanager.keytab</name>
<value>kdc/keytabs/hdfs.keytab</value>
</property>

修改对应路径的权限

livy配置修改

也是修改登录人用的 keytable 文件和和账号

start-dfs,sh

这个时候由于 hdfs启动,有用用户

hdfs put 文件显示 name node is in safe mode 需要怎么解决

常见的配置 权限

文件权限和目录所有权注意事项

Hadoop 目录需归属于运行服务的用户(这里为 oge),权限过松可能导致 Kerberos 认证失败或安全漏洞。以下是标准推荐的本地文件系统和 HDFS 路径权限(基于 Hadoop 文档)。使用 chown -R oge:hadoop 和 chmod 调整。如果原本是 root,所有权需递归切换。

路径类型 示例路径 所有者 (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/)。