资讯详情

Apache Hive+Kerberos安装配置及 Kettle(Pentaho)访问带 Kerberos 认证的 Hive的集成

目录

  • 1 连接
  • 2 KDC 安装
    • 2.1 安装 Kerberos 服务
    • 2.2 配置 /var/kerberos/krb5kdc/kdc.conf
    • 2.3 配置 /var/kerberos/krb5kdc/kadm5.acl
    • 2.4 配置 /etc/krb5.conf
    • 2.5 创建 Kerberos 数据库
    • 2.6 创建 Kerberos 管理员账号
    • 2.7 将 Kerberos 添加到自启动服务并启动krb5kdc和kadmin服务
    • 2.8 查看认证信息
  • 3 Application Server
    • 3.1 Kerberos 安装
    • 3.2 创建应用服务节点 Principals 和 keytab
    • 3.3 Apache Hadoop 安装部署
      • 3.3.1 解压与配置
      • 3.3.2 配置 core-site.xml
      • 3.3.3 配置 hdfs-site.xml
      • 3.3.4 配置 ssl
        • (1) 生成所需的认证文件
        • (2) 配置 ssl-client.xml
        • (3) 配置 ssl-server.xml
      • 3.3.5 配置 mapred-site.xml
      • 3.3.6 配置 yarn-site.xml
      • 3.3.7 初始化 Hadoop 及启停
      • 3.3.8 测试和常用命令
    • 3.4 Apache Hive 安装部署
      • 3.4.1 配置前
      • 3.4.2 修改hive-env.sh
      • 3.4.3 修改hive-site.xml
      • 3.4.4 初始化 Hive及启动
      • 3.4.5 中文注释乱码
      • 3.4.6 小例子
  • 4 Client
    • 4.1 Windows 环境Kerberos 环境
    • 4.2 Linux 环境Kerberos 环境
    • 4.3 DBeaver
      • 4.3.1 下载及解压
      • 4.3.2 修改 dbeaver.ini
      • 4.3.3 获取 hive 驱动 - 通过 Maven 项目导出Hive JDBC 驱动包
      • 4.3.4 获取 hive 驱动 - 下载通用Hive驱动包
      • 4.3.5 Clock skew too great(37) - PROCESS_TGS
    • 4.4 Kettle
      • 4.1.1 版本说明
      • 4.4.2 下载及其大数据插件配置
      • 4.4.3 修改Kettle 启动脚本
      • 4.4.4 连接 Hive


1 连接

  • 我的 blog Kerberos集成和使用简介、安装和其他服务
  • Kerberos 快速入手指南官方文档翻译 A guided tour of Kerberos: Tutorial
  • Hadoop and Kerberos: The Madness beyond the Gate
  • Hadoop in Secure Mode

以下安装主要以此图为总领分类部署 Kerberos 请求过程图

2 KDC 安装

系统依赖部分

yum install -y libss # 在安装 krb5-server 报 libverto-module-base is needed by krb5-server-1.15.1-46.el7.x86_64 时安装 yum install -y libverto-libevent yum install -y logrotate 

2.1 安装 Kerberos 服务

# 1 检查环境是否已安装 Kerberos rpm -qa | grep -E "krb5|libkadm5" # 删除时需要格外注意,为了版本统一一致,最好进行升级安装, # Kerberos 和 SSH 有些库是共用的,删除后可能会导致 SSH 不能使用,确实有些库文件 # 如果是 Docker 宿主机的文件可以通过下面的命令复制到容器中,并根据提示找到缺失的文件 # docker cp /usr/lib64/libss.so.2.0 dev_mysql_v1:/usr/lib64/libss.so.2.0 # rpm -e --nodeps xxx  # 2 安装 Kerberos 依赖的包 ## 检查环境是否存在 words,若无安装 ## 因为有些应用程序或数据库会用这个来检查单词的拼写,或者密码检查员会用这个来检查错误的密码。 rpm -qa | grep words ## 安装 words wget http://mirror.centos.org/centos/7/os/x86_64/Packages/words-3.0-22.el7.noarch.rpm ## 成功安装后会有 /usr/share/dict/words 有一个词文件。 rpm -ivh words-3.0-22.el7.noarch.rpm    # 2 下载所需包 # CentOS 7.8.2003 默认版本为 krb5-libs-1.15.1-46 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-libs-1.15.1-46.el7.x86_64.rpm wget http://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-server-1.15.1-46.el7.x86_64.rpm wgethttp://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-workstation-1.15.1-46.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libkadm5-1.15.1-46.el7.x86_64.rpm

# 3 安装
rpm -iUh krb5-libs-1.15.1-46.el7.x86_64.rpm
rpm -ivh libkadm5-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-workstation-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-server-1.15.1-46.el7.x86_64.rpm

2.2 配置 /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
  YORE.COM = { 
        
   # JDK 8 (至少在 jdk 1.8 _152 之前的)可能不支持,如果使用中发现异常:java.security.InvalidKeyException: Illegal key size,
   # 方法1,可以将 aes256-cts 去点,保留 aes128-cts
   # 方法2,或者下载官方提供的 jce_policy-8.zip 包,解压后将 local_policy.jar 和 US_export_policy.jar 覆盖JDK安装目录下的 jre\lib\security 下的两个文件
   # 每个版本的路径可能稍微有差别,只要找到 unlimited 下的
   # 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
   # https://www.oracle.com/java/technologies/javase-jce-all-downloads.html
   #master_key_type = aes256-cts
   acl_file = /var/kerberos/krb5kdc/kadm5.acl
   dict_file = /usr/share/dict/words
   admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
   max_renewable_life = 7d 0h 0m 0s
   #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
   supported_enctypes = 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
 }

2.3 配置 /var/kerberos/krb5kdc/kadm5.acl

Realme 改为上面配置的名字 YORE.COM。这样名称匹配 */admin@YORE.COM 的都会认为 ,权限是 *,代表全部权限。

*/admin@YORE.COM *

2.4 配置 /etc/krb5.conf

其中 kdc.yore.com 为 KDC 服务的主机名,端口缺省时默认为 88,admin_server 端口缺省时默认为 749。

# 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 = YORE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 #rdns = false
 #pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 #default_ccache_name = KEYRING:persistent:%{uid}
 udp_preference_limit = 1
 kdc_timeout = 3000
 
[realms]
 YORE.COM = { 
        
  kdc = yore.bigdata03.com:88
  admin_server = yore.bigdata03.com:749
  default_domain = YORE.COM
 }

[domain_realm]
.yore.bigdata03.com = YORE.COM
yore.bigdata03.com = YORE.COM

2.5 创建 Kerberos 数据库

# 1 创建/初始化 Kerberos database
# 当遇到问题,可能需要执行: /usr/sbin/kdb5_util -r CDH.COM -m destory -f。 
# 删除 /var/kerberos/krb5kdc/principal*
# 
# 期间会要求输入密码。kdc123
/usr/sbin/kdb5_util create -s -r YORE.COM

# 2 查看生成的文件
# 前两个是我们前两步设置的,后面的 principal* 就是本次生成的
[root@kdc download]# ll /var/kerberos/krb5kdc/
total 24
-rw-r--r-- 1 root root   19 Mar 25 21:41 kadm5.acl
-rw-r--r-- 1 root root  488 Mar 25 21:42 kdc.conf
-rw------- 1 root root 8192 Mar 25 21:40 principal
-rw------- 1 root root 8192 Mar 25 21:40 principal.kadm5
-rw------- 1 root root    0 Mar 25 21:40 principal.kadm5.lock
-rw------- 1 root root    0 Mar 25 21:40 principal.ok

2.6 创建 Kerberos 管理员账号

# 这里会提示时输入管理员的密码(kdc123),再次确认,未报错则创建成功。
[root@kdc download]# /usr/sbin/kadmin.local -q "addprinc admin/admin@YORE.COM"
Authenticating as principal root/admin@YORE.COM with password.
WARNING: no policy specified for admin/admin@YORE.COM; defaulting to no policy
Enter password for principal "admin/admin@YORE.COM":
Re-enter password for principal "admin/admin@YORE.COM":
Principal "admin/admin@YORE.COM" created.

2.7 将 Kerberos 添加到自启动服务,并启动krb5kdc和kadmin服务

# 自启
systemctl enable krb5kdc
systemctl enable kadmin

# 启动
systemctl start krb5kdc
systemctl start kadmin

# 状态
systemctl status krb5kdc
systemctl status kadmin

2.8 查看认证信息

# 1 提示输入密码时,输入 admin 的密码(Kerberos 管理员账号的密码: kdc123)
[root@kdc download]# kinit admin/admin@YORE.COM
Password for admin/admin@YORE.COM:

# 2 查看所有的 Principal
/usr/sbin/kadmin.local -q "listprincs"

# klist
[root@kdc download]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@YORE.COM
Valid starting       Expires              Service principal
2020-07-04T11:18:24  2020-07-05T11:18:24  krbtgt/YORE.COM@YORE.COM
        renew until 2020-07-11T11:18:24

3 Application Server

应用服务这里可以指代开启了 Kerberos 认证的大数据平台或者开启了 Kerberos 认证的大数据集群环境,这里主要介绍搭建一个带有 Kerberos 认证的 Apache Hadoop 和 Apache Hive ,因此这里的应用服务主要表示 Hadoop 和 Hive 所在的服务节点环境。

3.1 Kerberos 安装

# 1 资源
scp -P 30021 -r krb5-libs-1.15.1-46.el7.x86_64.rpm krb5-workstation-1.15.1-46.el7.x86_64.rpm \
libkadm5-1.15.1-46.el7.x86_64.rpm root@cdh3:/opt/download/

# 安装
rpm -iUh krb5-libs-1.15.1-46.el7.x86_64.rpm
rpm -ivh libkadm5-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-workstation-1.15.1-46.el7.x86_64.rpm

# 将 KDC 的 /etc/krb5.conf 拷贝到应用服务节点 /etc/ 下
scp /etc/krb5.conf root@bigdata01:

3.2 为应用服务节点创建 Principals 和 keytab

【说明】:这里为了简化,Hadoop 所有服务和 Hive 的服务都统一使用一个principal 主体和 一个 keytab 文件,真实生产环境最好每个服务对应一个principal,安装配置流程基本类似。

# 1 KDC 服务节点生成一个 hadoop 主体(kdc123)
/usr/sbin/kadmin.local -q "addprinc hadoop/bigdata01@YORE.COM"

# 2 导入 keytab 文件
/usr/sbin/kadmin.local -q "xst -k ./hadoop.keytab hadoop/bigdata01@YORE.COM"

# 3 将 hadoop.keytab 发送到 Hadoop 节点(这一步下调到下一步解压 Hadoop 后执行)
scp -P 22 hadoop.keytab root@bigdata01:/opt/installed/hadoop-3.0.3/etc/hadoop/

# 4 查看导入的 keytab 文件(注意文件权限)
/usr/bin/klist -ket /opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab

# 5 创建一个 Hadoop 应用用户,例如 hdfs 用户。下面均以此用户操作
useradd -s /bin/bash hdfs
# 设置密码
passwd hdfs

# 5 在 Hadoop 各节点获取缓存票据。那个用户操作 hadoop,那个用户执行认证
kinit -kt /opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab hadoop/bigdata01@YORE.COM

# 6 查看票据
klist 

3.3 Apache Hadoop 安装部署

3.3.1 解压与配置

# 1 下载
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

# 2 解压
tar -zxf hadoop-3.0.3.tar.gz -C /opt/installed
# 为了节省空间,当不查看 Hadoop 文档是,可以删除掉
rm -rf /opt/installed/hadoop-3.0.3/share/doc

# 3 SSH
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@bigdata01

# 4 配置环境变量(可以配置到用户环境变量下: vim ~/.bash_profile)
# set hadoop environment
export HADOOP_HOME=/opt/installed/hadoop-3.0.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 5 创建所需文件夹
# root 用户创建,在将 /u01/hadoop 属组改为 hdfs
mkdir -p /u01/hadoop/dfs/dn
mkdir -p /u01/hadoop/dfs/nn
mkdir -p /u01/hadoop/dfs/snn
#mkdir -p /u01/hadoop/yarn/container-logs
#mkdir -p /u01/hadoop/yarn/container-executor
#mkdir -p /u01/hadoop/app/tmp/nm-local-dir
chown -R hdfs:hdfs /u01/hadoop

# 6 配置 hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
### 添加如下配置 ####
export JAVA_HOME=/usr/local/jdk1.8.0_231
export HADOOP_HOME=/opt/installed/hadoop-3.0.3
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
## 配置用户信息,如果是 root 用户启动,需要配置为 root;
#export HDFS_NAMENODE_USER=root
#export HDFS_DATANODE_USER=root
#export HDFS_SECONDARYNAMENODE_USER=root
#export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

3.3.2 配置 core-site.xml

vim $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration> 
  <property> 
    <name>fs.defaultFS</name>  
    <value>hdfs://bigdata01:8020</value> 
  </property>  
  <!-- 设置垃圾回收的时间,0为禁止,单位分钟数 -->  
  <property> 
    <name>fs.trash.interval</name>  
    <value>60</value> 
  </property>  
  <property> 
    <name>fs.trash.checkpoint.interval</name>  
    <value>0</value> 
  </property>  
  <property> 
    <name>hadoop.proxyuser.root.groups</name>  
    <value>*</value> 
  </property>  
  <property> 
    <name>hadoop.proxyuser.root.hosts</name>  
    <value>*</value> 
  </property>
  <property> 
    <name>hadoop.proxyuser.hdfs.groups</name>  
    <value>*</value> 
  </property>  
  <property> 
    <name>hadoop.proxyuser.hdfs.hosts</name>  
    <value>*</value> 
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/tmp/hadoop-${user.name}</value>
  </property>
  
  <!-- 开启 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.security.auth_to_local</name> <value>DEFAULT</value> <description>Maps kerberos principals to local user names</description> </property>-->
  <property> 
    <name>hadoop.security.auth_to_local</name>  
    <value>
      RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/hdfs/ 
      RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/yarn/ 
      RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/mapred/ 
      DEFAULT
    </value> 
  </property>

</configuration>

3.3.3 配置 hdfs-site.xml

# 1 这里需要注意的是 Centos 7 非 root 用户无法使用 1024 一下的端口
## 方式一:修改为 1024 以上的端口
## 方式二:端口重定向
yum install iptables-services
# 查看现有的iptables 规则
iptables -L -n
# 可以关闭防火强,或者可以开启端口
# 将端口 x 重定向到 xx
iptables -t nat -A PREROUTING -p tcp --dport x -j REDIRECT --to-port xx
# 保存
iptables-save > /etc/sysconfig/iptables


vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration> 
  <property> 
    <name>dfs.namenode.name.dir</name>  
    <value>file:///u01/hadoop/dfs/nn</value> 
  </property>  
  <property> 
    <name>dfs.datanode.data.dir</name>  
    <value>file:///u01/hadoop/dfs/dn</value> 
  </property>  
  <property> 
    <name>dfs.namenode.checkpoint.dir</name>  
    <value>file:///u01/hadoop/dfs/snn</value> 
  </property>  
  <!--block的副本数,默认为3-->  
  <property> 
    <name>dfs.replication</name>  
    <value>1</value> 
  </property>  
  <property> 
    <name>dfs.permissions</name>  
    <value>false</value> 
  </property> 
  
  <!-- Kerberos -->  
  <!-- 1 SSL -->  
  <property> 
    <name>dfs.http.policy</name>  
    <value>HTTPS_ONLY</value> 
  </property>  
  <property> 
    <name>dfs.namenode.https-address</name>  
    <value>bigdata01:9871</value> 
  </property>  
  <!--<property> <name>dfs.https.enable</name> <value>true</value> </property>-->
  <!-- 2 NameNode -->  
  <property> 
    <name>dfs.namenode.http-address</name>  
    <value>bigdata01:50070</value> 
  </property>  
  <property> 
    <name>dfs.block.access.token.enable</name>  
    <value>true</value> 
  </property>  
  <property> 
    <name>dfs.namenode.kerberos.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <property> 
    <name>dfs.namenode.keytab.file</name>  
    <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> 
  </property>  
  <property> 
    <name>dfs.namenode.kerberos.internal.spnego.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <!-- 3 Secondary NameNode -->  
  <property> 
    <name>dfs.namenode.secondary.http-address</name>  
    <value>bigdata01:9868</value> 
  </property>  
  <property> 
    <name>dfs.secondary.https.address</name>  
    <value>bigdata01:9869</value> 
  </property>  
  <property> 
    <name>dfs.secondary.namenode.keytab.file</name>  
    <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> 
  </property>  
  <property> 
    <name>dfs.secondary.namenode.kerberos.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <property> 
    <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <!-- 4 JournalNode -->  
  <!--<property> <name>dfs.journalnode.kerberos.principal</name> <value>hadoop/_HOST@YORE.COM</value> </property> <property> <name>dfs.journalnode.keytab.file</name> <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> </property> <property> <name>dfs.journalnode.kerberos.internal.spnego.principal</name> <value>hadoop/_HOST@YORE.COM</value> </property> <property> <name>dfs.journalnode.https-address</name> <value>bigdata01:8481</value> </property>-->  
  <!-- 5 DataNode -->  
  <property> 
    <name>dfs.datanode.data.dir.perm</name>  
    <value>700</value> 
  </property>  
  <property> 
    <name>dfs.datanode.address</name>  
    <!--<value>0.0.0.0:1004</value>-->
    <value>0.0.0.0:1104</value> 
  </property>  
  <property> 
    <name>dfs.datanode.http.address</name>  
    <!--<value>0.0.0.0:1006</value>-->
    <value>0.0.0.0:1106</value> 
  </property>
  <!-- 支持 SASL -->
  <property> 
    <name>dfs.data.transfer.protection</name>  
    <value>integrity</value> 
  </property>  
  <!--<property> <name>dfs.datanode.https.address</name> <value>0.0.0.0:9865</value> </property>-->
  <property> 
    <name>dfs.datanode.kerberos.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <property> 
    <name>dfs.datanode.keytab.file</name>  
    <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> 
  </property>  
  <property> 
    <name>dfs.encrypt.data.transfer</name>  
    <value>false</value> 
  </property>  
  <!-- 6 WebHDFS -->  
  <property> 
    <name>dfs.web.authentication.kerberos.principal</name>  
    <value>hadoop/_HOST@YORE.COM</value> 
  </property>  
  <property> 
    <name>dfs.web.authentication.kerberos.keytab</name>  
    <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> 
  </property> 
</configuration>

3.3.4 配置 ssl

(1) 生成所需认证文件

mkdir /etc/https
cd /etc/https
# 生成ca。会提示输入密码,输入一个大于 6 位的密码(bigdata)
op

标签: ket连接器st710290

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台