开发者学堂课程【SaaS 模式云数据仓库系列课程 —— 2021数仓必修课:MaxCompute 客户端 odpscmd 使用说明】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/55/detail/1036
MaxCompute 客户端 odpscmd 使用说明
内容简介:
1.odpscmd 在 MaxCompute 生态中的定位
2.快速开始:一个完整简单的小例子
3.客户端提供的能力框架
4.客户端重点场景说明
5.容易碰到的问题
1.odpscmd 在 MaxCompute 生态中的定位
命令行工具在 MaxCompute 中的位置
odpscmd 是命令行工具的名称,在整个 MaxCompute 是处于最上端的,在MaxCompute 中是逐渐往上支撑的,真正暴露给用户的其实是有一套 API,API 是最核心的一些接口,不管是 JAVA 还是 SDK 也是调用 API 的,实际上命令行工具是对 MaxCompute 开发的 API 做的一些深度的包装,通过一个工具的形式在客户端以命令的方式提供作业,这些作业再通过接口的方式进行集群并进行相关的管理和开发使用。
在过程中可能会遇到的问题,在网站推的比较多的是 MaxCompute 以及DataWorks 的组合,因为在操作使用 MaxCompute 的需要再 DataWorks 做一个开通,而实际上 MaxCompute 有自身的生态工具包含了命令行工具,odpscmd 、以及基 于 Java idea 开发环境的插件 studio。
DataWorks 也是一个独立的产品,它实际上也是通过调用 MySQL 底层的 Restful API ,把在 B/S 端中所做的用户管理,用户开发提交,运维的集成过去,满足一站式仓库的解决方案,在这主要强调 MySQL 和 B/S 段的集成关系。
Odpscmd 实际上是作为命令行工具,很像 PostgreSQL 数据库,但是一个黑屏的操作管理。
2.快速开始:一个完整简单的小例子
模拟常见数据处理各种环节的例子:创建项目、瞎下载客户端、配置连接、创建用户并赋权、建表、上传数据、数据加工处理、作业查看、数据消费。
大数据加工处理的环节:数据的准备,数据接入,数据加工,数据消费。
1、下载与配置安装
先观看目录,odpscmd.public 是实际下载解压后的一个包,解压之后打开,在连接之前进入 cof 目录,找到 odps_config.ini 的配置文件。
启动客户端,在 eclipse 环境中,把 opdscmd 加入 path 环境中去,到决定路径去敲 cmd ,这时会读取刚刚配置好的文件,项目以及所录入的 key 信息进行认证,这就可以连接到 project,能够敲击类似 show tables 的命令,可以看到数据仓库中已经提前进行了数据的建模,建的表。今天主要是对建立的表 WEBsite (是一张分区表)进行一个演示。
2、数据环境准备
快速开始的例子:
通过 DataX 这种开源工具来执行一个命令,将生成的业务表通过任务插入到旧的数据表。
数据同步完成后,可以简单的检索一下这张表,数据可以通过一些同步工具Dataworks 或是 DataX 进行数据同步,同步到环境当中,通过cmd去手工写一些作业,然后进行数据加工处理。若是在遇到的作业较长的时候,可能会想查看作业运行情况,而 cmd 也是提供作业监控的命令,show p可以检索出全量历史作业,作业会有 instance id ,每个 instance 是作业提交的实例,可以查看作业的基本信息、状况,同时在事后也能检索到作业的 log view。
Logview 是一种基于 web 的一种监控诊断的一种工具,该工具在后期还会有专门的介绍,在这里主要是说 odpscmd 主要是提供一种作业的提交、作业事后的查看、对指定作业详情查看的能力。
3、数据加工处理示例
数据加工脚本
查看任务
数据下载消费
数据在被处理加工之后会有很多简单处理的场景,在这主要是以 odpscmd 中集成的数据下载工具—— tunnel,对结果进行数据下载,再通过 cl 或是 ask 工具进行分析。
执行 tunnel download 后它会自动下载到本地文件中,找到刚刚文件目录查看对应的文件是否成功,以上就是通过 web 的名称做分组聚合的一个结果。
它所能具备完成以下的能力:包括对项目空间的管理,表/视图/分区,数据库中的资源、函数,一些实例,提供数据通道进行数据的上传、下载,同时对用户的安全与权限提供相关命令以及其他的操作。
操作和管理对象
首先是对项目的空间管理,通过 use 可以在多个项目中快速切换项目空间。
项目空间相关操作
项目空间是 MaxCompute 的基本组织单元,是进行多用户隔离和访问控制的主要边界。
(1)自由切换进入具备访问权限的项目空间
(2)进入项目空间后可以直接操作项目空间下的对象,包括:
表、资源、函数等。
表操作管理
其中的命令可以在 odpscmd 中轻松找到,包括表的创建、删除、修改,例如想修改表的列名分区,可以用 alter; 非分区的可以选择 truncate 进行修改在这给出了跟表相关的命令以及帮助问答。
视图及分区操作, view 通过把一些复杂进行二次封装更容易对外去暴露,对view提供创建、 drop 、查看的操作;而 partition 可以查出表名的分区数量、名称,也可以对其修改、重命名。
资源与函数相关操作
很多深度用户会发现在处理自身业务时往往会使用 udf 去做复杂的运算,这时候需要用户自定义的去上传一个包,这些包对 于 udf 来说就叫 resource,resource 提供的命令就是上传一个自定义文件等等,也可以查看资源数量、删除资源。
实例相关操作
在客户端提交的作业,但记不住 id,可以通过一些时间的物理限制来进行作业列表的获取,在获取 instance 列表之后,可以用 wait 的来查询详情
Tunnel 相关操作
Tunnel 能够进行数据的上传下载,很多开发者会在 Linux 环境中通过 Tunnel 进行数据的同步,在生产环境中,对数据重传的要求很高需要提供断点机制
安全及权限相关操作:
角色相关权限管理
通过 role 在数据库中创建角色,为角色赋权把某一个角色加入到其中去操作管理,同时也能查看 listrole 有什么角色。
用户相关权限管理:将用户加入到项目中去,通过项目获取用户对应的权限,能够对用户进行添加、修改、删除、移除、对用户权限的管理。
项目空间的数据保护:可以设计权限对项目空间进行保护。
权限查看:通过命令行方式进行查看具体用户的权限配置
其他操作: MaxComputer console 还提供一些其他丰富的命令。
4.客户端重点场景说明
场景:通过 shell 脚本调用 tunnel 命令进行文件上下传
基础上传方式
文本命令
使用分区表上传
Odps 下载数据
场景:调试 odpscmd 命令
在 Shell 脚本中,如何执行 MaxCompute 命令?
crontable 时执行 SQL。
A: MaxCompute 命合支持-f参数,可在脚本或其它程序中直接以 odps-f< 文件路径>的方式支持 MaxCompute 命令。
odpscmd-fxx. sql>>path/to/odpscmd. log 2>&1
动态参数:目前不支持传入变量。有个变通的方式:在cmd. sh脚本文件中,动
态构造 MaxCompute 的执行语句。
B:可以用 -e 直接运行语句
任务执行的输出记录下来,后续出了问题可以到日志文件里获取 odpscmd-fxx. sql>>path/to/odpscmd. log 2>&1。
场景:运行数据查询/数据加工作业 UDF
配置环境安装配置环境,开发并使用本地模式测试 UDF2. 打成 Jar 包 将开发好的UDF导出 成Jar 包
3. 注册 MaxCompue 资源数据开发上新建资源上传 jar 包,注册成 MaxCompute资源
4.创建函数数据开发上新建函数并关联已上传 MaxCompute 资源
5. 在 SQL 中试用数据开发上新建 SQL 脚本测试使用自定义 函数 Java 编程环境 。
1.准备测试的数据环境
create table udf _ demo(price bigint);
insert into udf-demo values(8958355);
insert into udf _ demo values(123566677);
2.通过 Intelli JIDEA 编写和上传 UDF 到 maxcompute 项目
add jar dataly resourceslmapeduce-examples. jar-f;
3.通过命合行创建 function create function Ten Thousand Number as com/allyun,odops. Ten Thousand Number Help using "TenThousandNumberHelp. jar;
4.测试验证 UDF 功能
Select TenThousandNumber(price) from udf demo:
场景:运行数据查询/
step0:编写并打包 MR 程序
step1:新建数据表
step2:上传数据
step3:上传本地MRJar包
step4:获取结果
数据加工作业 MR :
1.写 MR 代码并打包
2.应用所需数据的准备
·创建测试输入输出表CREATETABLEwcjn(keySTRING,value STRING);CREATETABLE wc out(key STRING,cntBIGINT);
·插入测试数据insert into table wc _ in select'238',val 238' from(select count(*)
from wc. in)a;
3.添加 jar 到 project 资源
addjar/home/user/mr _ example,jar
4.运行wordCount
jar-resourcesmr _ example,jar-classpath
/home/quning/mr=example,jar com. aliyun,example. Word Count
wc _ in wc _ out;
5.查看结果
select*from wc _ out;
5.常见问题
问题:动态参数传入?
回答:通过 shell 方式变相实现
问题:手工抗行 odpscred 命令正常,通过 shell 脚本调用时报错?
回答:检查 shel 脚本下有没有设置 JAVA 的环境变量. JAVA.HOME,PATH。