MaxCompute如何实现跨项目授权

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 实际的企业使用场景里,可能需要把不同项目里的数据、函数、计算资源等一起使用。那如何实现这种跨项目的使用呢,本文用实际例子来说明下。

实际的企业使用场景里,可能需要把不同项目里的数据、函数、计算资源等一起使用。那如何实现这种跨项目的使用呢,本文用实际例子来说明下。

准备

  • 项目空间:grant_from,需要授权的数据、函数、资源都在这个项目里
  • 项目空间:grant_to,被授权的用户需要在这个项目里执行计算。
  • 用户:aliyun$xxxx@aliyun.com,grant_from项目的project owner,后续的授权操作是这个账号执行的。
  • 用户:ram$xxxx@aliyun.com:chuanxue2,通过在大数据开发套件里授权了grant_to项目的开发角色,现在在使用grant_to项目进行计算的时候,需要用到grant_from项目里的数据、函数和资源。
  • 表:dual,在grant_from和grant_to里都有的一张表,里面就一条数据,用于测试UDF用的。
  • 表:grant_from.wc_in,grant_from项目里的一张表。需要授权给ram$xxxx@aliyun.com:chuanxue2,让他在grant_to里做计算的时候也能用到。
  • 函数:getPersonName,在grant_from里的待授权函数
  • 资源resource_file.txt、和其他一些jar包是在grant_from里的资源文件。

授权

需要添加用户并做表对账号的授权。授权后被授权账号可以跨项目引用。

-- 以下操作是在grant_from里由aliyun$xxxx@aliyun.com执行的
-- add user只需要添加一次就够了。以前添加过了就可以跳过
odps@ grant_from>add user RAM$xxxx@aliyun.com:chuanxue2;
-- 如果只是SQL查询,只要给Select权限就够了。不过使用MapReduce作为输入表的话,还需要Describe 权限。这里一并授权了。
odps@ grant_from>grant Select,Describe on table wc_in to user RAM$xxxx@aliyun.com:chuanxue2;

需要提一句,可以在大数据开发套件的数据管理里更方便地做数据授权,可以参考这里

使用

可以在SQL里,使用ProjectName.TableName使用这张表,比如

---以下操作是由RAM$xxxx@aliyun.com:chuanxue2在grant_to里操作
odps@ grant_to>select * from grant_from.wc_in;

而在MapReduce/Graph里,就以MapReduce为例,可以把代码写成

    InputUtils.addTable(TableInfo.builder().projectName("grant_from").tableName("wc_in").build(), job);
    OutputUtils.addTable(TableInfo.builder().tableName("wc_out").build(), job);

其他的一切使用方法都和使用本项目内的表的用法一样,这里不再赘言。

函数

授权

比如grant_from里有个解析json字符串的内容的一个UDF,现在希望让RAM$xxxx@aliyun.com:chuanxue2在grant_to里也能用起来。
先看看这个UDF,aliyun$xxxx@aliyun.com在grant_from里是怎么用的:

odps@ grant_from>select getPersonName('{"id":100,"name":"chuanxue","age":11}') from dual;
+-----+
| _c0 |
+-----+
| chuanxue |
+-----+

授权之前,需要确定这个函数都涉及了什么资源文件

odps@ grant_from>desc function  getPersonName;
Name                                    getPersonName
Owner                                   ALIYUN$xxxx@aliyun.com
Created Time                            2017-05-26 13:31:33
Class                                   odps.test.GetPersonName
Resources                               grant_from/resources/getPersonName.jar,grant_from/resources/gson-2.2.4.jar

所以授权的步骤包括:

--add user还是如前面提到,只需要添加一次,如果已经添加过可以不添加
odps@ grant_from>add user RAM$xxxx@aliyun.com:chuanxue2;

-- 授权函数
odps@ grant_from>grant read on function getPersonName to user RAM$xxxx@aliyun.com:chuanxue2;
OK
odps@ grant_from>grant read on resource getPersonName.jar to user RAM$xxxx@aliyun.com:chuanxue2;
OK
odps@ grant_from>grant read on resource gson-2.2.4.jar to user RAM$xxxx@aliyun.com:chuanxue2;
OK

使用

被授权后, RAM$xxxx@aliyun.com:chuanxue2就可以在grant_to这个项目里使用到被授权的函数了。通过ProjectName:FunctionName可以很方便的引用这个函数。

-- 这个操作由被授权的子账号在grant_to里执行

odps@ grant_to>select grant_from:getPersonName('{"id":100,"name":"chuanxue","age":11}') from dual;
+-----+
| _c0 |
+-----+
| chuanxue |
+-----+

资源

命令行引用

需要资源的授权的场景比较少。不过比如说刚才的那个函数,也可以只把资源授权给对方,让对方自己创建一个函数。
资源文件的授权和前面函数的授权方式一样,不再重复,创建函数的方法和调用可以参考:

-- 在grant_to里创建一个函数getPersonName2,使用的资源都是来自之前被授权的grant_from里的getPersonName.jar和gson-2.2.4.jar
odps@ grant_to>create function getPersonName2 as odps.test.GetPersonName using grant_from/resources/getPersonName.jar,grant_from/re
sources/gson-2.2.4.jar;

-- 创建好了后的调用就正常调用了。dual表也是grant_to里的dual表。
odps@ grant_to>select getPersonName2('{"id":100,"name":"chuanxue","age":11}') from dual;

而在mapreduce里引用其他项目的jar包,也是一样。先在grant_from里做授权

-- cx_word_count2.jar其实就是cx_word_count.jar改了文件名,然后传到grant_from作跨项目引用的。
odps@ grant_from>add jar C:\Users\chuanxue\Desktop\cx_word_count2.jar -f;
OK: Resource 'cx_word_count2.jar' have been updated.
odps@ grant_from>grant read on resource cx_word_count2.jar to user RAM$xxxx@aliyun.com:chuanxue2;
OK

授权结束后,RAM$xxxx@aliyun.com:chuanxue2就可以在grant_to里使用这个jar包

odps@ grant_to>jar -resources grant_from/resources/cx_word_count2.jar -classpath C:\Users\chuanxue\Desktop\cx_word_count2.jar odps.test.WordCount;

Java代码里读取资源

还有一种场景,就是如何在代码里跨项目读资源文件。一般本项目里的资源文件的读取方法是(参考这里)

            byte[] buffer = new byte[1024];
            int bytesRead = 0;

            String filename = context.getJobConf().get("import.filename");
            bufferedInput = context.readResourceFileAsStream(filename);

            while ((bytesRead = bufferedInput.read(buffer)) != -1) {
              String chunk = new String(buffer, 0, bytesRead);
              importdata.append(chunk);
            }

在命令行里的调用方式是:

odps@ grant_to>jar -resources grant_from/resources/cx_word_count3.jar,grant_from/resources/resource_file.txt -classpath C:\Users\chuanxue\Desktop\cx_word_count3.jar odps.test.WordCount;

在代码里,还是用

        String filename = "resource_file.txt";
        bufferedInput = context.readResourceFileAsStream(filename);

也就是说,是在jar命令里告知任务使用的资源是来自其他项目的,到了MapReduce的Java代码里,所有的用法照旧,不需要特别指定资源的项目。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
6月前
|
数据采集 大数据
大数据实战项目之电商数仓(二)
大数据实战项目之电商数仓(二)
146 0
|
7月前
|
分布式计算 大数据 BI
MaxCompute产品使用合集之MaxCompute项目的数据是否可以被接入到阿里云的Quick BI中
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4月前
|
机器学习/深度学习 设计模式 人工智能
面向对象方法在AIGC和大数据集成项目中的应用
【8月更文第12天】随着人工智能生成内容(AIGC)和大数据技术的快速发展,企业面临着前所未有的挑战和机遇。AIGC技术能够自动产生高质量的内容,而大数据技术则能提供海量数据的支持,两者的结合为企业提供了强大的竞争优势。然而,要充分利用这些技术,就需要构建一个既能处理大规模数据又能高效集成机器学习模型的集成框架。面向对象编程(OOP)以其封装性、继承性和多态性等特点,在构建这样的复杂系统中扮演着至关重要的角色。
69 3
|
4月前
|
监控 Java 开发者
揭秘Struts 2性能监控:选对工具与方法,让你的应用跑得更快,赢在起跑线上!
【8月更文挑战第31天】在企业级应用开发中,性能监控对系统的稳定运行至关重要。针对流行的Java EE框架Struts 2,本文探讨了性能监控的工具与方法,包括商用的JProfiler、免费的VisualVM以及Struts 2自带的性能监控插件。通过示例代码展示了如何在实际项目中实施这些监控手段,帮助开发者发现和解决性能瓶颈,确保应用在高并发、高负载环境下稳定运行。选择合适的监控工具需综合考虑项目需求、成本、易用性和可扩展性等因素。
44 0
|
4月前
|
SQL 大数据 分布式数据库
SQL与大数据的神秘力量:如何用高效SQL处理海量数据,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代软件开发中,处理海量数据是关键挑战之一。本文探讨了SQL与大数据结合的方法,包括数据类型优化、索引优化、分区优化及分布式数据库应用,并通过示例代码展示了如何实施这些策略。通过遵循最佳实践,如了解查询模式、使用性能工具及定期维护索引,开发者可以更高效地利用SQL处理大规模数据集。随着SQL技术的发展,其在软件开发中的作用将愈发重要。
107 0
|
5月前
|
弹性计算 分布式计算 大数据
MaxCompute产品使用合集之如何将用户A从项目空间A申请的表权限需要改为用户B
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
分布式计算 运维 DataWorks
MaxCompute操作报错合集之用户已在DataWorks项目中,并有项目的开发和运维权限,下载数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何查询MaxCompute项目中的所有表及其字段信息
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
机器学习/深度学习 分布式计算 DataWorks
MaxCompute产品使用问题之有什么命令可以看到当前账号拥有哪些项目的什么权限
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
存储 SQL 分布式计算
MaxCompute产品使用问题之如何查看项目空间耗用的存储大小
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
109 3