搭建开启Kerberos认证的Hadoop Yarn集群

发送反馈


SuperMap iServer 分布式分析支持Hadoop Yarn集群,您可以参照以下流程自行搭建。本章主要介绍如何搭建使用开启Kerberos认证的Hadoop Yarn集群。

软件要求

搭建 开启Kerberos认证的Hadoop Yarn集群环境需要配置 Java 环境(JDK 下载地址http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk,建议使用 JDK 8及以上版本)、配置SSH以及 hadoop。

本例使用的软件为:

Hadoop安装包:hadoop-2.7.3.tar.gz 存放路径:/home/iserver

JDK安装包:jdk-8u131-linux-x64.tar.gz

Jsvc安装包:commons-daemon-1.0.15-src.tar.gz

Kerberos客户端安装包(windows):kfw-4.1-amd64.msi

搭建流程

本例主要是在两台centos7虚拟机(内存均为12g)上搭建1master1workerHadoop Yarn集群

  1. 配置Hadoop

器名           ip                                       内存              进程

master          192.168.112.162                10G             namenode、resourcemanager、kerberos server

worker          192.168.112.163                10G             datanode、nodemanager             

注意以下两点:

    1. hostname小写,要不然集成kerberos时会出错
    2. 关闭master及各worker防火墙

  1. 在master与各个节点分别创建以下用户组和用户
    1. 新建用户组,命令如下:

groupadd hadoop

    1. 建用户hdfs、yarn,其中需设定userID<1000,命令如下:

useradd -u 501 hdfs -g hadoop

useradd -u 502 yarn -g hadoop

      并使用passwd命令为新建用户设置密码

passwd hdfs 输入新密码

passwd yarn 输入新密码

    1. 用户建好后,用id user命令查看用户信息如下图所示

    1. 配置DNS和网关。如果是虚拟机的话,DNS和网关需与实体机相同
    1. Master节点对应的ip加到DNS服务中,并设置域名。如master162.ispeco.com
  1. 各节点间root、hdfs、yarn用户配置免密登录
    1. 以hdfs用户为例配置免密登录:

id_rsa     私钥文件

id_rsa.pub  公钥文件

ssh-copy-id -i /home/hdfs/.ssh/id_rsa.pub ip

中,如果在master上执行,则写worker节点对应的ip

ssh-copy-id -i /home/hdfs/.ssh/id_rsa.pub ip

    1. root、yarn用户配置免密登录同上相同的操作。
  1. 安装jdk
    1. 将jdk-8u131-linux-x64.tar.gz解压,并将其路径设置到环境变量中。
  2. 安装jsvc
    1.  解压文件commons-daemon-1.0.15-src.tar.gz
    2. 在commons-daemon-1.0.15-src/src/native/unix目录下
    3. 始编译,成功后可在commons-daemon-1.0.15-src/src/native/unix目录下看到jsvc文件,并将其复制到【hadoop-2.7.3安装包】/libexec目录下

注意:如果commons-daemon-1.0.15-src.tar.gz中已自带jsvc,则无需执行a、b,直接执行c即可。

  1. Kerberos服务安装与配置
    1. Master节点安装krb的客户端及服务、Worker仅安装krb 的客户端即可。

yum install krb5-server (服务)

yum install krb5-workstation krb5-libs krb5-auth-dialog(客户端)

    1. 配置Kerberos服务相关文件。
      1. etc/krb5.conf。修改其中的realm,把默认的EXAMPLE.COM修改为自己要定义的值,如:SUPERMP.COM。其中,以下参数需要修改:
        • default_realm:默认的realm。设置为realm。如SUERMAP.COM
        • kdc:代表要kdc的位置。添加格式是 机器名
        • admin_server:代表admin的位置。格式是机器名
        • default_domain:代表默认的域名。(设置master主机所对应的域名,如master162.ispeco.com)

注意:/etc/krb5.conf (Master、Worker节点都得放,而且文件内容必须相同)

修改后的文件如下图所示:

      1. vi /var/kerberos/krb5kdc/kdc.conf (Master节点配置即可。如果没有,需自建):

      1. 配置vi /var/kerberos/krb5kdc/kadm5.acl (Master节点配置即可。如果没有,需自建)

    1. 配置Kerberos服务相关文件。

创建Kerberos数据库,需要设置管理员密码,创建成功后会在/var/Kerberos/krb5kdc/下生成一系列文件,如果重新创建的话,需要先删除/var/kerberos/krb5kdc下面principal相关文件。

需在Master节点的root用户下执行以下命令:

kdb5_util create -s -r SUPERMAP.COM

执行成功后如下图所示:

注意:数据库创建成功后,需重启krb5服务

krb5kdc restart

    1. 创建 kerberos的管理员。

在Master节点的root用户下分别执行以下命令:

kadmin.local

addprinc admin/admin@SUPERMAP1.COM

如下图所示:

    1. 创建 kerberos的普通用户及密钥文件,为配置<!--YARN kerberos security-->时,各节点可以相互访问用。
      1. 在Master节点的root用户下分别执行以下命令:

kadmin.local

#创建用户

addprinc -randkey yarn/master162.ispeco.com@SUPERMAP.COM

addprinc -randkey yarn/worker163@SUPERMAP.COM

addprinc -randkey hdfs/master162.ispeco.com@SUPERMAP.COM

addprinc -randkey hdfs/worker163@SUPERMAP.COM

#生成密钥文件(生成到当前路径下)

xst  -k yarn.keytab  yarn/master162.ispeco.com@SUPERMAP.COM

xst  -k yarn.keytab  yarn/worker163@SUPERMAP.COM

xst  -k hdfs.keytab  hdfs/master162.ispeco.com@SUPERMAP.COM

xst  -k hdfs.keytab  hdfs/worker163@SUPERMAP.COM

      1. 将yarn.keytab (yarn:hadoop 400)和 hdfs.keytab (hdfs:hadoop 400)文件到Master和worker节点的/var/kerberos/krb5kdc/ 目录,并设置相应的组,并将权限为400.如下图所示:

 

  1. 修改hadoop集群配置文件
    1.  {HADOOP_HOME}/etc/hadoop目录下
      1. core-site.xml文件内容如下:

<configuration>

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://192.168.112.162:9000</value>

 </property>

 <property>

  <name>hadoop.tmp.dir</name>

  <value>file:/home/iserver/hadoop-2.7.3/tmp</value>

  <description>Abasefor other temporary directories.</description>

 </property>

 <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.security.auth_to_local</name>

  <value>DEFAULT</value>

 </property>

</configuration>

      1. yarn-site.xml文件内容如下:

<configuration>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

 </property>

 <property>

  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

  <value>org.apache.hadoop.mapred.ShuffleHandler</value>

 </property>

<property>

   <name>yarn.resourcemanager.address</name>

   <value>192.168.112.162:8032</value>

</property>

<property>

   <name>yarn.resourcemanager.scheduler.address</name>

   <value>192.168.112.162:8030</value>

</property>

<property>

   <name>yarn.resourcemanager.resource-tracker.address</name>

   <value>192.168.112.162:8031</value>

</property>

<property>

   <name>yarn.resourcemanager.admin.address</name>

   <value>192.168.112.162:8033</value>

</property>

<property>

   <name>yarn.resourcemanager.webapp.address</name>

   <value>192.168.112.162:8088</value>

</property>

<!--YARN kerberos security-->

 <property>

  <name>yarn.resourcemanager.keytab</name>

  <value>/var/kerberos/krb5kdc/yarn.keytab</value>

 </property>

  <property>

  <name>yarn.resourcemanager.principal</name>

  <value>yarn/master162.ispeco.com@SUPERMAP.COM</value>

 </property>

  <property>

  <name>yarn.nodemanager.keytab</name>

  <value>/var/kerberos/krb5kdc/yarn.keytab</value>

 </property>

<property>

  <name>yarn.nodemanager.principal</name>

  <value>yarn/master162.ispeco.com@SUPERMAP.COM</value>

 </property>

  <property>

    <name>yarn.nodemanager.container-executor.class</name>

    <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>

  </property>

    <property>

    <name>yarn.nodemanager.linux-container-executor.group</name>

    <value>hadoop</value>

  </property>

  <property>

   <name>yarn.nodemanager.local-dirs</name>

   <value>/home/iserver/hadoop-2.7.3/local</value>

 </property>

 <property>

   <name>yarn.nodemanager.log-dirs</name>

   <value>/home/iserver/hadoop-2.7.3/log</value>

 </property>

</configuration>

      1. Hdfs-site.xml文件内容如下:

<configuration>

<property>

   <name>dfs.https.enable</name>

   <value>false</value>

 </property>

<property>

   <name>dfs.namenode.http-address</name>

   <value>192.168.112.162:50070</value>

 </property>

 <property>

   <name>dfs.https.port</name>

   <value>504700</value>

 </property>

<property>

  <name>dfs.namenode.secondary.http-address</name>

  <value>192.168.112.162:9001</value>

 </property>

  <property>

   <name>dfs.namenode.name.dir</name>

   <value>file:/home/iserver/hdfs/name</value>

 </property>

 <property>

  <name>dfs.datanode.data.dir</name>

  <value>file:/home/iserver/hdfs/data</value>

  </property>

 <property>

  <name>dfs.replication</name>

  <value>2</value>

 </property>

 <property>

  <name>dfs.webhdfs.enabled</name>

  <value>true</value>

 </property>

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

<property>

 <name>dfs.encrypt.data.transfer</name>

 <value>true</value>

</property>

<property>

 <name>dfs.block.access.token.enable</name>

 <value>true</value>

</property>

<property>

 <name>dfs.namenode.kerberos.principal</name>

 <value>hdfs/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.namenode.keytab.file</name>

 <value>/var/kerberos/krb5kdc/hdfs.keytab</value>

</property>

<property>

 <name>dfs.namenode.kerberos.internal.spnego.principal</name>

 <value>HTTP/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.web.authentication.kerberos.keytab</name>

 <value>/var/kerberos/krb5kdc/hdfs.keytab</value>

</property>

<property>

 <name>dfs.web.authentication.kerberos.principal</name>

 <value>http/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.namenode.kerberos.https.principal</name>

 <value>host/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.namenode.secondary.http-address</name>

 <value>192.168.112.162:50090</value>

</property>

<property>

 <name>dfs.secondary.namenode.keytab.file</name>

 <value>/var/kerberos/krb5kdc/hdfs.keytab</value>

</property>

<property>

 <name>dfs.secondary.namenode.kerberos.principal</name>

 <value>hdfs/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>

 <value>HTTP/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.datanode.kerberos.principal</name>

 <value>hdfs/master162.ispeco.com@SUPERMAP.COM</value>

</property>

<property>

 <name>dfs.datanode.keytab.file</name>

 <value>/var/kerberos/krb5kdc/hdfs.keytab</value>

</property>

<property>

 <name>dfs.encrypt.data.transfer</name>

 <value>false</value>

</property>

<property>

 <name>dfs.datanode.data.dir.perm</name>

 <value>700</value>

</property>

<property>

 <name>dfs.datanode.address</name>

 <value>192.168.112.163:1004</value>

</property>

<property>

 <name>dfs.datanode.http.address</name>

 <value>192.168.112.163:1006</value>

</property>

<property>

 <name>dfs.datanode.https.address</name>

 <value>192.168.112.163:50470</value>

</property>

</configuration>

      1. container-executor.cfg文件内容如下:

yarn.nodemanager.linux-container-executor.group=hadoop

#configured value of yarn.nodemanager.linux-container-executor.group

banned.users=hdfs

#comma separated list of users who can not run applications

min.user.id=0

#Prevent other super-users

allowed.system.users=root,yarn,hdfs,mapred,nobody

##comma separated list of system users who CAN run applications

 

      1. hadoop-env.sh文件添加:

export JAVA_HOME=/home/supermap/java/jdk1.8.0_131

export JSVC_HOME=/home/supermap/hadoop/hadoop-2.7.3/libexec

如果需要调试,则添加:

export HADOOP_OPTS="$HADOOP_OPTS -Dsun.security.krb5.debug=true"

      1. yarn-env.sh文件添加:

export JAVA_HOME=/home/supermap/java/jdk1.8.0_131

      1. masters文件添加:

master(Master所在主机名)

      1. slaves文件添加:

worker(Worker所在主机名)

      1. 将已配置好的hadoop安装包复制到Worker节点一份,需放于与Master节点相同路径下。
      1. 权限设置(Master、Worker节点都需设置)

Hadoop安装包放于所属root并且是权限是755的目录下

以下文件需要单独配置相应的权限与用户组:

对应的参数/文件 所属文件

需设置成用户:组

权限

dfs.namenode.name.dir

hdfs-site.xml

hdfs-site.xml

drwx------ (700)

dfs.datanode.data.dir

hdfs-site.xml

hdfs-site.xml

drwx------ (700)

$HADOOP_LOG_DIR

hadoop_env.sh

hdfs:hadoop

drwxrwxr-x(775)

$HADOOP_YARN_HOME/logs

yarn-env.sh

hdfs:hadoop

drwxrwxr-x(775)

yarn.nodemanager.local-dirs

yarn-site.xml

yarn:hadoop

drwxr-xr-x(775)

yarn.nodemanager.log-dirs

yarn-site.xml

yarn:hadoop

drwxr-xr-x(755)

container-executor

hadoop安装目录/bin/

root:hadoop

--Sr-s--*(6050)

container-executor.cfg

hadoop安装目录/etc/haddop/

root:hadoop

r-------*(400)

tmp

hadoop安装目录/

hdfs:hadoop

-

start-dfs.sh

hadoop安装目录/sbin

hdfs:master

-

start-secure-dns.sh

root:maste

start-yarn.sh

yarn:master

 

  1. 启动开启krb认证的yarn集群和开启krb认证的hadoop集群

在Master节点下的HADOOP安装目录下执行以下命令:

    1. 启动Kerberos服务(root用户)

krb5kdc start

    1. 在用户hdfs下的格式化集群(仅第一次安装时或者修改了hadoop相关设置后需要执行该步)

[hdfs@master bin]$ ./hadoop namenode –format

    1. 启动集群

[hdfs@master sbin]$ ./start-dfs.sh

[root@master sbin]# ./start-secure-dns.sh

[yarn@master sbin]$ ./start-yarn.sh

    1. 如需停止集群

[yarn@master sbin]$ ./stop-yarn.sh

[root@master sbin]# ./stop-secure-dns.sh

[hdfs@master sbin]$ ./stop-dfs.sh

  1. 验证yarn集群和hadoop集群是否成功启动

yarn集群:访问master节点IP:8088

hadoop集群: 访问master节点IP:50070

  1. 在Hadoop Yarn集群的各个子节点下需要配置UGO。具体配置可参见ugo配置