前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于cos的hadoop KMS HA部署

基于cos的hadoop KMS HA部署

原创
作者头像
王旭平
发布2023-05-09 11:22:51
6391
发布2023-05-09 11:22:51
举报
文章被收录于专栏:大数据生态大数据生态

hadoop 的 kms的元数据是保存在本地的,比如加密的请求打到A,元数据保存在A机器上,如果解密的请求打到B机器上,就会失败。为了解决这个问题,使用cos作为共享目录(将cos挂载到本地目录中),来实现 kms的元数据的共享。

说明,kms 相关的操作key的相关操作时候,只能在一台KMS服务上操作,另一台必须要关闭,待修改完成后在启动。

注,本文中使用的产品均为腾讯云的相关产品,本次使用到的产品为腾讯云EMR(EMR-V3.5.0 版本),和腾讯云对象COS。

一、集群环境

产品版本 :EMR-V3.5.0 部署组件: hdfs-3.2.2,yarn-3.2.2,zookeeper-3.6.3,openldap-2.4.44,knox-1.6.1,krb5-1.15.1

集群信息:

master节点(2台)

core节点(3台)

common节点(3台)

172.16.48.98(内) 172.16.48.63(内)

172.16.48.113(内) 172.16.48.30(内) 172.16.48.22(内)

172.16.48.81(内) 172.16.48.144(内) 172.16.48.129(内)

二、KMS环境部署(在2个master节点上操作)

1、挂载 cos 到cvm上

在2个master节点(172.16.48.98、172.16.48.63)上,使用root用户操作。

1.安装软件

代码语言:javascript
复制
# 安装依赖
yum install libxml2-devel libcurl-devel -y

#下载安装包(在有公网的节点上下载,或者本地下载后上传)
wget  https://github.com/tencentyun/cosfs/releases/download/v1.0.20/cosfs-1.0.20-centos7.0.x86_64.rpm

#安装软件
rpm -ivh  cosfs-1.0.20-centos7.0.x86_64.rpm  --force

2.修改配置文件

修改 /etc/passwd-cosfs 文件中

代码语言:javascript
复制
#将相关信息写入到/etc/passwd-cosfs
echo <BucketName-APPID>:<SecretId>:<SecretKey> > /etc/passwd-cosfs

#说明:
#<BucketName-APPID>为要挂载的桶名。
#<SecretId> 和 <SecretKey>为密钥信息。

#将密钥文件的权限值设置为640
chmod 640 /etc/passwd-cosfs

3.挂载磁盘

代码语言:javascript
复制
#使用cosfs命令将存储桶挂载到本地目录中
cosfs <BucketName-APPID> <MountPoint> -ourl=http://cos.<Region>.myqcloud.com -odbglevel=info -oallow_other

#说明
#<MountPoint> 为本地挂载目录。
#<Region> 为地域简称, 例如 ap-guangzhou 、 ap-beijing 等。
#-odbglevel 指定日志级别,默认为crit,可选值为crit、error、warn、info、debug。
#-oallow_other 允许非挂载用户访问挂载文件夹。

示例命令:
mkdir -p /mnt/cosfs
cosfs wangxp-xxx /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -onoxattr -oallow_other


#开机自动挂载
#在/etc/fstab 文件中添加相关的内容,根据挂载需要修改
cosfs#wangxp-xxx /mnt/cosfs fuse _netdev,allow_other,url=http://cos.ap-guangzhou.myqcloud.com,dbglevel=info

其他操作参考:对象存储 COSFS 工具 - 工具指南 - 文档中心 - 腾讯云 (tencent.com)

2、配置相关文件

在2个master节点(172.16.48.98、172.16.48.63)上,使用hadoop用户操作。

1、配置kms-site.xml

要修改的文件为  /usr/local/service/hadoop/etc/hadoop/kms-site.xml

本次测试为带Kerberos认证的,需要修改或添加的配置如下:

代码语言:javascript
复制
<configuration>
   <property>
	 <name>hadoop.kms.key.provider.uri</name>
	 <value>jceks://file@/mnt/cosfs/kms/kms.jks</value>
     <description>将kms.jks文件放置到挂载的cos路径上,使得2个kms共用一个</description>
   </property>
   <property>
	 <name>hadoop.security.keystore.java-keystore-provider.password-file</name>
	 <value>kms.keystore.password</value>
   </property>
   <property>
         <name>dfs.encryption.key.provider.uri</name>
         <value>kms://http@172.16.48.xx:16000/kms</value>
         <description>配置为本机ip</description>
   </property>
   <property>
     <name>hadoop.kms.authentication.type</name>
     <value>kerberos</value>
     <description>kms认证方式</description>
   </property>

   <property>
     <name>hadoop.kms.authentication.kerberos.keytab</name>
     <value>/var/krb5kdc/emr.keytab</value>
     <description>emr集群默认存放keytab文件的地方</description>
   </property>

   <property>
     <name>hadoop.kms.authentication.kerberos.principal</name>
     <value>HTTP/172.16.48.xx@EMR-KAJTWW2P</value>
     <description>配置为本机keytab文件中对应的值</description>
   </property>

   <property>
     <name>hadoop.kms.authentication.kerberos.name.rules</name>
     <value>DEFAULT</value>
   </property>
   <property>
    <name>hadoop.kms.proxyuser.hadoop.users</name>
    <value>*</value>
  </property>

  <property>
    <name>hadoop.kms.proxyuser.hadoop.groups</name>
    <value>*</value>
  </property>

  <property>
    <name>hadoop.kms.proxyuser.hadoop.hosts</name>
    <value>*</value>
  </property>

 <property>
    <name>hadoop.kms.authentication.zk-dt-secret-manager.enable</name>
    <value>true</value>
    <description>
      If true, Hadoop KMS uses ZKDelegationTokenSecretManager to persist TokenIdentifiers and DelegationKeys in ZooKeeper.
    </description>
  </property>
  <property>
    <name>hadoop.kms.authentication.zk-dt-secret-manager.zkConnectionString</name>
    <value>172.16.48.81:2181,172.16.48.144:2181,172.16.48.129:2181</value>
    <description>连接zk的地址,可以在hdfs-site.xml文件中ha.zookeeper.quorum 项对应的值拿到</description>
  </property>
  <property>
    <name>hadoop.kms.authentication.zk-dt-secret-manager.znodeWorkingPath</name>
    <value>hadoopkms</value>
    <description>
      The ZooKeeper znode path where the KMS instances will store and retrieve  the secret from. All the KMS instances that need to coordinate should point to the same path.
    </description>
  </property>
  <property>
    <name>hadoop.kms.authentication.zk-dt-secret-manager.zkAuthType</name>
    <value>none</value>
    <description>
      The ZooKeeper authentication type, 'none' (default) or 'sasl' (Kerberos).
    </description>
  </property>

</configuration>

2、配置kms-env.sh

要修改的文件为  /usr/local/service/hadoop/etc/hadoop/kms-env.sh

需要修改或添加的配置如下:

代码语言:javascript
复制
export KMS_HOME=/usr/local/service/hadoop
export KMS_HTTP_PORT=16000
export KMS_ADMIN_PORT=16001

export KMS_LOG=/data/emr/kms/logs
export KMS_TEMP=/data/emr/kms/temp

#用于覆盖hadoop.security.keystore.java-keystore-provider.password-file参数
export HADOOP_KEYSTORE_PASSWORD=isd@Cloud123

3、修改core-site.xml和hdfs-site.xml

在emr控制台中HDFS服务下的配置管理中修改

core-site.xml中添加 

代码语言:javascript
复制
hadoop.security.key.provider.path  kms://http@172.16.48.98;172.16.48.63:16000/kms

hdfs-site.xml中修改

代码语言:javascript
复制
dfs.encryption.key.provider.uri  kms://http@172.16.48.98;172.16.48.63:16000/kms

说明,对于ha配置相关配置为  kms://https@kms01.example.com;kms02.example.com:9600/kms,或者 kms://https@xx.xx.xx.xx;xx.xx.xx.xx:9600/kms

4、启动kms服务

如果是第一启动,需要提前创建相关目录

代码语言:javascript
复制
su root
mkdir -p  /mnt/cosfs/kms/
mkdir -p  /data/emr/kms/logs
mkdir -p  /data/emr/kms/temp

chown  hadoop.hadoop  /mnt/cosfs/kms
chown  hadoop.hadoop -R /data/emr/kms

启动命令

代码语言:javascript
复制
#使用hadoop用户操作
su hadoop

hadoop --daemon stop kms
hadoop --daemon start kms

5、重启namenode和datanode服务

在2个master节点上kms都启动成功后,在emr控制台上分别重启nn和dn服务

验证

关闭一台KMS服务,测试读取加密区的文件

测试准备

代码语言:javascript
复制
#1、创建key
 hadoop key create hadoop
 
 #2、创建加密区
 hdfs dfs -mkdir /kms1
 hdfs crypto -createZone -keyName hadoop -path /kms1
 
 #3、创建测试文件,上传到加密区
 echo helloitcast > helloWorld 
 hdfs dfs -put helloWorld /kms1

进行测试

代码语言:javascript
复制
#查看加密区的文件
[hadoop@172.16.48.63 /usr/local/service/hadoop/etc/hadoop]$ hadoop fs -cat  /kms1/helloWorld
helloitcast

#关闭172.16.48.63节点上的KMS服务
[hadoop@172.16.48.63 /usr/local/service/hadoop/etc/hadoop]$ hadoop --daemon stop kms
WARNING: KMS_LOG has been replaced by HADOOP_LOG_DIR. Using value of KMS_LOG.

#再查看加密区的文件
[hadoop@172.16.48.63 /usr/local/service/hadoop/etc/hadoop]$ hadoop fs -cat  /kms1/helloWorld
helloitcast

#再启动172.16.48.63节点上的KMS服务
[hadoop@172.16.48.63 /usr/local/service/hadoop/etc/hadoop]$  hadoop --daemon start kms
WARNING: KMS_LOG has been replaced by HADOOP_LOG_DIR. Using value of KMS_LOG.

#再查看加密区的文件
[hadoop@172.16.48.63 /usr/local/service/hadoop/etc/hadoop]$ hadoop fs -cat  /kms1/helloWorld
helloitcast

参考:

https://docs.oracle.com/cd/E76382_01/bigData.Doc/bdd_shell_onPrem/src/tbs_install_kms.html

https://hadoop.apache.org/docs/stable/hadoop-kms/index.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、集群环境
  • 二、KMS环境部署(在2个master节点上操作)
    • 1、挂载 cos 到cvm上
      • 2、配置相关文件
        • 1、配置kms-site.xml
        • 2、配置kms-env.sh
        • 3、修改core-site.xml和hdfs-site.xml
        • 4、启动kms服务
        • 5、重启namenode和datanode服务
    • 验证
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档