本文共 1540 字,大约阅读时间需要 5 分钟。
某客户专有云v3环境现场,TableStore(OTS)数据迁移,需要进行数据校验工作,由于迁移工具并未有校验的api接口或者独有的校验工具,所以考虑使用在MaxCompute的上边创建OTS的外部表的方式来进行验证;
方式1:
MaxCompute计算服务要访问TableStore数据需要有一个安全的授权通道。MaxCompute可以通过阿里云的访问控制服务(RAM)和令牌服务(STS)来实现对数据的安全访问;执行方式:RAM控制台,创建角色AliyunODPSDefaultRole,并将策略内容设置为如下:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1"}
然后编辑该角色的授权策略,将权限AliyunODPSRolePolicy授权给该角色。
方式2:通过LOCATION参数设置用户的ak,sk的方式来进行访问;执行方式如下配置:LOCATION 'tablestore://<*your AK id*>:<*your AK secret key*>@odps-ots-dev.cn-hangzhou.ots.aliyuncs.com';
PS:本案例采用了最开始的一种方案,也是错误的一种方式并参考了公共云的文档进行的配置导致出现问题报错现象的发生;
如下为错误操作过程:专有云控制台--ram管理当中创建AliyunODPSDefaultRole角色并设置将权限AliyunODPSRolePolicy授权给该角色如下图所示:然后在dataworks数据开发平台进行OTS外部表的创建操作报错;
但是执行报错没有权限进行外部表的创建操作;所以考虑使用ak,sk的方式进行创建测试,但是依然报错缺少using参数;ps:图片内的原因,文章后边会给出解释;参考的是公共云的创建操作步骤:参考链接:但是如果在操作命令后加上using ""参数,也可以创建成功;但是查询会报如下 failed 2的无脑报错:检查fronted和odpsworker的docker中的相关log日志没有有效的报错信息出现;
这个时候,就需要考虑了.......................................建表语句没有问题,ram role权限没有问题,ak,sk也没有问题;但是创建就出现了两个问题:1、使用ram role权限配置odps.properties.rolearn参数建表报错无权限?2、在location中设置ak,sk方式建表也报错,缺少using?由于添加using ""参数以后建表成功产生的误导,导致后续一直在排查为什么会报错fail 2的错误发生;
其实应该追本溯源,最应该考虑的是是否公共云和专有云在创建OTS外部表的创建语句是否有什么不同之处?所以查看对应版本专有云关于MaxCompute创建OTS外部表的创建语句命令如下:恍然大悟!!!然后按照专有云文档的描述,重新进行了语句的创建操作如下:建表成功,问题解决!
总结:
1、对于公共云和专有云一定要区分清楚,可以参考,但不能完全模仿使用;
2、对于实现方式一定要提前确认好,比如sts的ram role访问还是ak,sk的访问;参考链接:
转载地址:http://wcosl.baihongyu.com/