HADOOP KMS使用介绍及性能测试
简介
HDFS 在kms之上实现了透明的端到端加密
常用操作
创建key
查看key
使用key创建加密区
查看加密区
设置kms acl
kms使用场景验证
验证一: 加密区文件在hdfs上是否真的加密
验证二: 一个用户创建加密区,另一个用户是否可以写文件进去
验证三: 使用kms,设置加密区之后性能影响多大
方式一: 使用hadoop benchmark的TestDFSIO测试kms对hdfs读写的影响
测试方式
读性能
写性能
结论
性能测试-java代码
测试思路
使用只有4个字符的小文件测试
整体测试结论
简介
KMS 的全称是:Hadoop Key Management Server 密钥管理服务器
kms只提供加密、解密算法以及key管理服务,并不提供帮忙去加、解密。用户自己获取到秘钥之后自己去做加、解密操作。
Kms 有一个加密区 这个特殊的区域 对于能够进行操作他的用户 提供有写入和读取的权限。
当加密区被创建的时候,每个加密区有唯一的秘钥, data encryption key (DEK), 秘钥dek不由hdfs直接控制,但是hdfs控制encrypted data encryption key (EDEK),被加密的秘钥;由客户端解密EDEK;
kms server kms 服务器
kms client kms 客户端
kms zone kms 加密区
HDFS 在kms之上实现了透明的端到端加密
hdfs的客户端进行了封装。用户通过命令或者代码设置hdfs中某个目录为加密区(如: /data),并且加加密区秘钥赋权给对应用户之后
用户向/data中写文件时,client除了向namenode获取文件位置等信息以外,还会向kms申请数据文件的秘钥,客户端使用秘钥对数据文件进行加密。
用户从/data中读文件时,client除了向namenode获取文件位置等信息以外,还会向kms申请数据文件的秘钥,客户端使用秘钥对数据文件进行解密。
整个过程对用户是透明的。
常用操作
hdfs在kms做完封装之后,用户只要做如下几种类型的操作:
key管理(管理员操作:创建、删除)
加密区管理(管理员操作:创建、删除)
key赋权 (管理员操作:给需要读取加密区的用户赋予key权限)
创建key
# hadoop key create key1
查看key
# hadoop key list
使用key创建加密区
# hdfs dfs -mkdir /testkms
# hdfs crypto -createZone -keyName key1 -path /testkms
查看加密区
[admin@dp0652 ~]$ hdfs crypto -listZones
/testkms key1
设置kms acl
<property>
<name>key.acl.key1.DECRYPT_EEK</name>
<value>xx.zhu</value>
<description> ACL for decryptEncryptedKey operations. </description>
</property>
修改之后点,“操作”-“刷新key manage server”即可生效
kms使用场景验证
验证一: 加密区文件在hdfs上是否真的加密
测试方式:
在hdfs上创建2个目录/testkms 和 /test/testkms 前者设置成加密区,后者不设置。
[admin@dp0652 ~]$ hdfs crypto -listZones
/testkms key1
在两个目录各自上传一个warnMsg.log文件:
查看加密区文件在datanode目录里是否加密
hadoop fsck /testkms/warnMsg.log -files -locations -blocks
执行结果:
0. BP-291552141-10.57.17.125-1495075521710:blk_1076543087_2807119 len=616 Live_repl=2 [DatanodeInfoWithStorage[10.57.17.88:1004,DS-72479767-055b-410b-9bc1-586ae7f36569,DISK], DatanodeInfoWithStorage[10.57.17.125:1004,DS-ff64c32e-dbe5-4faf-a5e9-428ee530519b,DISK]]
到对应datanode的dn目录下查找相应块:
[root@dp125 ~]# find /dfs/dn -name blk_1076543087*
/dfs/dn/current/BP-291552141-10.57.17.125-1495075521710/current/finalized/subdir42/subdir190/blk_1076543087
/dfs/dn/current/BP-291552141-10.57.17.125-1495075521710/current/finalized/subdir42/subdir190/blk_1076543087_2807119.meta
查看加密区对应数据块:
[root@dp125 ~]# cat /dfs/dn/current/BP-291552141-10.57.17.125-1495075521710/current/finalized/subdir42/subdir190/blk_1076543087
???f??????b???\??v??N{ɚaa?OAs??#?T??????j?x???B???_?V;ԑ?6/_\b??Zm??|???=7?
zO??d?'??X??(??.?d???w?j?<(ъ@?h
可以看到结果是加密过的。
查看非加密区对应数据块(数据块位置查找同上):
[root@dp88 subdir158]# cat /dfs/dn/current/BP-291552141-10.57.17.125-1495075521710/current/finalized/subdir42/subdir225/blk_1076552171
[2018-03-19 09:33:25.927] [INFO] - sendWarnMsg:84 - new hermes addr:http://10.57.17.143
[2018-03-19 11:21:39.525] [INFO] - sendWarnMsg:84 - new hermes addr:http://10.57.17.143
。。。
可以看到数据未加密
验证二: 一个用户创建加密区,另一个用户是否可以写文件进去
使用管理用户admin操作加密区
上传文件到加密区
hdfs dfs -copyFromLocal /home/admin/logs/warnMsg.log /testkms/
从加密区下载文件
hdfs dfs -copyToLocal /testkms/ /home/admin/
都可以成功
使用普通用户xx.tang操作加密区
用xx.tang用户在加密区上上传或者下载或者查看均失败,提示没有权限
从加密区下载
[admin@dp233 ~]$ hdfs dfs -copyToLocal /testkms/warnMsg.log /home/admin/
copyToLocal: User [xx.tang] is not authorized to perform [DECRYPT_EEK] on key with ACL name [key1]!!
对加密区文件执行cat
[admin@dp233 ~]$ hdfs dfs -cat /testkms/warnMsg.log
cat: User [xx.tang] is not authorized to perform [DECRYPT_EEK] on key with ACL name [key1]!!
由于xx.tang用户没有key1的acl权限,获取不到key1,因此无法对加密区进行读、写操作。
验证三: 使用kms,设置加密区之后性能影响多大
下列测试均执行过多次取平均值。
方式一: 使用hadoop benchmark的TestDFSIO测试kms对hdfs读写的影响
测试方式
使用hadoop benchmark的TestDFSIO测试kms对hdfs读写的影响。
读、写100个文件,每个文件1M
测试命令:
写测试:
hadoop jar /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/jars/hadoop-test-2.6.0-mr1-cdh5.15.0.jar TestDFSIO -write -nrFiles 100 -fileSize 1
读测试:
hadoop jar /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/jars/hadoop-test-2.6.0-mr1-cdh5.15.0.jar TestDFSIO -read -nrFiles 100 -fileSize 1
读性能
未开启加密
19/01/28 18:47:51 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read
19/01/28 18:47:51 INFO fs.TestDFSIO: Date & time: Mon Jan 28 18:47:51 CST 2019
19/01/28 18:47:51 INFO fs.TestDFSIO: Number of files: 100
19/01/28 18:47:51 INFO fs.TestDFSIO: Total MBytes processed: 100.0
19/01/28 18:47:51 INFO fs.TestDFSIO: Throughput mb/sec: 56.46527385657821
19/01/28 18:47:51 INFO fs.TestDFSIO: Average IO rate mb/sec: 81.93286895751953
19/01/28 18:47:51 INFO fs.TestDFSIO: IO rate std deviation: 58.727498217529515
19/01/28 18:47:51 INFO fs.TestDFSIO: Test exec time sec: 64.299
开启加密
19/01/28 18:41:29 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read
19/01/28 18:41:29 INFO fs.TestDFSIO: Date & time: Mon Jan 28 18:41:29 CST 2019
19/01/28 18:41:29 INFO fs.TestDFSIO: Number of files: 100
19/01/28 18:41:29 INFO fs.TestDFSIO: Total MBytes processed: 100.0
19/01/28 18:41:29 INFO fs.TestDFSIO: Throughput mb/sec: 23.234200743494423
19/01/28 18:41:29 INFO fs.TestDFSIO: Average IO rate mb/sec: 47.325496673583984
19/01/28 18:41:29 INFO fs.TestDFSIO: IO rate std deviation: 30.17507105918255
19/01/28 18:41:29 INFO fs.TestDFSIO: Test exec time sec: 69.903
写性能
未开启加密
19/01/28 18:45:31 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write
19/01/28 18:45:31 INFO fs.TestDFSIO: Date & time: Mon Jan 28 18:45:31 CST 2019
19/01/28 18:45:31 INFO fs.TestDFSIO: Number of files: 100
19/01/28 18:45:31 INFO fs.TestDFSIO: Total MBytes processed: 100.0
19/01/28 18:45:31 INFO fs.TestDFSIO: Throughput mb/sec: 4.015741707493374
19/01/28 18:45:31 INFO fs.TestDFSIO: Average IO rate mb/sec: 4.63060188293457
19/01/28 18:45:31 INFO fs.TestDFSIO: IO rate std deviation: 1.9163955096086411
19/01/28 18:45:31 INFO fs.TestDFSIO: Test exec time sec: 68.438
开启加密
19/01/28 18:36:33 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write
19/01/28 18:36:33 INFO fs.TestDFSIO: Date & time: Mon Jan 28 18:36:33 CST 2019
19/01/28 18:36:33 INFO fs.TestDFSIO: Number of files: 100
19/01/28 18:36:33 INFO fs.TestDFSIO: Total MBytes processed: 100.0
19/01/28 18:36:33 INFO fs.TestDFSIO: Throughput mb/sec: 2.3070711731456917
19/01/28 18:36:33 INFO fs.TestDFSIO: Average IO rate mb/sec: 3.0367138385772705
19/01/28 18:36:33 INFO fs.TestDFSIO: IO rate std deviation: 1.7698150119390728
19/01/28 18:36:33 INFO fs.TestDFSIO: Test exec time sec: 78.297
结论
开启kms之后,读性能变差8.7%左右,写性能变差14.4%左右。
性能测试-java代码
测试思路
单个task的时间 = 读取block时间+kms解密时间+数据读取后逻辑处理时间+结果输出时间
由于kms只是读、写数据块时多了一步加、解密动作,benchmark跑mr任务,各个task是并行,因此一次跑任务过程当中相当于只有一次加密或者解密。而mr任务跑的时候本身也有一定的时间上下浮动,因此感觉此方式对比不太准。
因此自己写了java方式测试,每次测试进行串行的10次读、写4个字符的小文件以及1.4G大文件,通过对比感知不同场景下开启kms后的性能损耗。
每次测试读、写 10次小文件(文件中只有4个字符)
使用只有4个字符的小文件测试
读性能
未开启加密
最后一行为平均耗时:2101.8毫秒
开启加密
最后一行为平均耗时:2400毫秒
写性能
未开启加密
最后一行为平均耗时:2448.4毫秒
开启加密
最后一行为平均耗时:2853.4毫秒
结论
打成的jar包放到服务器上使用java -jar命令进行测试。
单次测试串行进行10次文件读、写。测5次取平均值。
开启加密区之后,写性能衰减14.4%左右, 读性能衰减14.2%左右
使用1.4G的大文件测试
读性能
未开启加密
最后一行为平均耗时:142110.8毫秒
开启加密
最后一行为平均耗时:145439.8毫秒
写性能
未开启加密
最后一行为平均耗时:140712毫秒
开启加密
最后一行为平均耗时:146468毫秒
结论
打成的jar包放到服务器上使用java -jar命令进行测试。
单次测试串行进行10次文件读、写。测5次取平均值。
开启加密区之后,写性能衰减4%左右, 读性能衰减2.3%左右
整体测试结论
当读取只有几个字符小文件时,开启kms后读写性能衰减百分之十几。读取大文件(1.4G,11个block,平均block大小128M)时,性能衰减只有2%-4%,整体衰减很小。
由于hadoop的kms是端到端加密且粒度到block,因此读、写文件时的总时间=向namenode申请数据块地址时间(时间很短,可以忽略不计)+数据块传输+数据块加、解密+数据块内容读取时间。
因此当读写超小文件时,数据传输+数据块内容读写的时间就很短,因此加解密消耗的一点点时间所占总时间的比重就高一些。
当读取大文件时,数据传输+数据块内容读写的时间相对较长,因此加解密消耗的时间所占总时间的比重就明显降低。
因此,在集群小文件问题不是特别严重的情况下,使用kms后的性能衰减应该在10%以内。
HADOOP KMS使用介绍及性能测试相关推荐
- Apache Hadoop KMS 部署
名词解释 DEK: data encryption key EDEKs: encrypted data encryption keys EEK: encrypted encryption keys 介 ...
- Hadoop KMS环境安装
环境介绍: Soft Verison Hadoop hadoop-3.3.4 Hadoop HDFS 环境安装 Java环境准备: wget https://repo.huaweicloud.com/ ...
- 学习笔记Hadoop(八)—— Hadoop集群的安装与部署(5)—— Hadoop配置参数介绍、Hadoop集群启动与监控
五.Hadoop配置参数介绍 Hadoop集群配置文件主要有: 它们的默认参数配置可以看: core-default.xml :https://hadoop.apache.org/docs/stabl ...
- 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)
1. HADOOP背景介绍 1. 1.1 什么是HADOOP 1. HADOOP是apache旗下的一套开源软件平台 2. HADOOP提供的功能:利用服务器集群,根据用户 ...
- Hadoop入门扫盲:hadoop发行版介绍与选择
一.hadoop发行版介绍 目前Hadoop发行版非常多,有Intel发行版,华为发行版.Cloudera发行版(CDH).Hortonworks版本等,所有这些发行版均是基于Apache Hadoo ...
- Hadoop常用命令介绍
下面分享一篇 常用的Hadoop命令介绍,希望对Hadoop初学者的朋友有所帮助~ Hadoop常用命令介绍
- Hadoop之MapReduce介绍整理
Hadoop之MapReduce介绍整理 什么是批处理 在了解MapReduce之前,需要了解批处理的概念,批处理模式是一种最早进行大规模数据处理的模式.批处理主要操作大规模静态数据集,并在整体数 ...
- 简单介绍.Net性能测试框架Crank的使用方法
这篇文章介绍了.Net性能测试框架Crank的使用方法.对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 Crank 是微软新出的一个性能测试框架,集成了多种基准测 ...
- oracle Router,Oracle官方轻量级中间件MySQL Router介绍与性能测试
话说去年11月去参加OOW大会,听了一场关于MySQL Router的分享.因为我以为这货没这么快会GA,但是没想到的是在OOW大会前MySQL Router就同MySQL 5.7一起GA了.回来之后 ...
最新文章
- 第十五届全国大学生智能汽车竞赛 人工智能创意组总决赛
- matlab画扇区,NFCDemo NFC读写测试 ,自动读取每个扇区 块的值 matlab 238万源代码下载- www.pudn.com...
- visual studio 2005没有chart空间_彭啸专访:2005年的国少跳级生 天赋+汗水造就成功...
- hive 自定义元数据表_[一起学Hive]之十四-Hive的元数据表结构详解
- python excel库 linux_用python写一个简单的excel表格获取当时的linux系统信息
- ajax 示例_通过示例了解挥发
- [Docker]Docker拉取,上传镜像到Harbor仓库
- 项目开发过程中接口的风险和管控
- android 来电拒接_[系统漏洞]模拟耳机广播实现来电自动接听和拒接
- GIST特征描述符使用
- 国际象棋八皇后问题----解决办法
- 服务器能不能用普通硬盘,服务器硬盘是什么 与普通硬盘区别
- Android控件绑定menu键
- F. Clear the String (区间DP)
- 2.数据的结构 (学校考试必考概念)-数据结构入门(c语言实现)
- 啊,CET6 2021年
- 伊隆 马斯克经典语录英文_我写关于伊隆·麝香的信时叫我出去
- 包头事业单位计算机考试试题,内蒙古包头市事业单位考试题库及答案(事业编笔试题库)...
- HNOI2018 摸鱼记
- Mac电脑移动硬盘文件呈灰色,无法打开怎么办?