• 使用MaxCompute访问TableStore(OTS) 简明手册


    摘要: 大数据计算服务 MaxCompute 能够提供强大的分析能力,而分布式 NoSQL 数据库表格存储在行级别上的实时更新和可覆盖性写入等特性,相对于 MaxCompute 内置表 append-only 批量操作,提供了一个很好的补充。

    关系数据库已经存在半个世纪,有非常广泛的使用场景,但是在快速迭代的互联网领域其扩展性和 schema 灵活性被诟病颇多,因此类似 TableStore/BigTable/HBase 等强调扩展性和灵活性的NoSQL数据库逐步流行起来,这些 NoSQL 数据库只提供 API 接口,不提供 SQL 访问,这就导致很多熟悉 SQL 但是不喜欢写代码的用户没法很舒服的使用此类NoSQL数据库。基于此,表格存储开发团队联合 MaxCompute(下文中 ODPS 与 MaxCompute 同义)团队打通了 ODPS-SQL 访问表格存储的路径,这样一个只懂 SQL 的用户也可以愉快的访问表格存储里面的大量数据了。

    本篇文章就以一个小白用户的身份体验如何使用 MaxCompute-SQL 查询表格存储里面的数据,以及如何开发自定义逻辑(User Defined Function, UDF)来处理用户特定的数据格式。

    什么是表格存储 TableStore?

    分布式NoSQL数据存储服务,无缝支持单表PB级数据及百万级访问并发,弹性资源,按量计费,对数据高频的增、删、改支持的很好,保证单行数据读写的强一致性。

    什么是大数据计算服务 MaxCompute?

    一种快速、完全托管的TB/PB级数据仓库解决方案,提供多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题。

    下面首先我们将介绍环境准备,这是所有后面的操作的基础。然后会介绍使用 OdpsCmd 访问表格存储。在第三节我们介绍使用 OdpsStudio 访问表格存储。最后介绍如何写 UDF、部署 UDF 以及在查询中使用 UDF。

    环境准备

    首先,准备好一个 MaxCompute 的工程,工程创建指导文档,准备好AccessId和AccessKey备用,为了区别其他产品的AccessId和AccessKey,后面我们称之为ODPS-AccessId,ODPS-AccessKey。并在RAM中授权 MaxCompute 访问 TableStore 的权限,授权方式请参考MaxCompute访问TableStore数据——授权

    小提示:由于 MaxCompute 在 2.0 版本的计算框架才能支持直接访问 TableStore 数据,该版本还在灰度上线中,目前还需要 申请MaxCompute 2.0试用,具体开通使用方法请参见 如何申请试用MaxCompute 2.0

    然后,准备好一个表格存储的实例以及一张数据表,表格存储实例管理,准备好实例名、EndPoint,为了区别其他产品的AccessId和AccessKey,后面我们称之为TableStore-InstanceName,TableStore-EndPoint。

    网络连通性

    MaxCompute 与 TableStore 是两个独立的大数据计算以及大数据存储服务,所以两者之间的网络必须保证连通性。 对于 MaxCompute 公共云服务访问 TableStore 存储,推荐使用 TableStore 私网 地址,例如http://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com。

    如果网络不通,可以使用公网地址,TableStore原生支持 VPC 网络控制,也需要将网络类型设置为 "允许任意网络访问"

     

    使用客户端 ODPS-CMD

    1.下载并安装大数据计算服务客户端

    2.下载解压,将conf/odps_config.ini 的内容修改为:

    project_name=上面申请的ODPS工程名

    access_id=ODPS-AccessId

    access_key= ODPS-AccessKey

    end_point=http://service-corp.odps.aliyun-inc.com/api

    https_check=true

    # confirm threshold for query input size(unit: GB)

    data_size_confirm=100.0

    # this url is for odpscmd update

    update_url=http://repo.aliyun.com/odpscmd

    3.行bin/odpscmd,输入show tables,正常执行则表示上面配置正确。

     

    4.在bin/odpscmd 下输入环境变量,显式开启 ODPS 2.0 的非结构化功能( 仅在 ODPS 2.0 计算框架完全上线为必须),单独执行 xx.sql 文件时也需要将下属设置写在 SQL 文件的开头处。

    set odps.task.major.version=2dot0_demo_flighting;

    set odps.sql.planner.mode=lot;

    set odps.sql.ddl.odps2=true;

    set odps.sql.preparse.odps2=lot;

    set odps.sql.type.system.odps2=true; --是支持表格存储的binary类型

    5.创建一张 MaxCompute 的数据表关联到 TableStore 的某一张表。

    关联的数据表信息如下:

    DROP TABLE IF EXISTS ots_vehicle_track;

     

    CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track

    (

    vid bigint,

    gt bigint,

    longitude double,

    latitude double,

    distance double ,

    speed double,

    oil_consumption double

    )

    STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)

    WITH SERDEPROPERTIES ( -- (2)

    'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)

    'tablestore.table.name'='vehicle_track' -- (4)

    )

    LOCATION 'tablestore://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com'; -- (5)

    • com.aliyun.odps.TableStoreStorageHandler 是 MaxCompute 内置的处理 TableStore 数据的 StorageHandler, 定义了 MaxCompute 和 TableStore 的交互,相关逻辑由 MaxCompute 实现。
    • SERDEPROPERITES 可以理解成提供参数选项的接口,在使用 TableStoreStorageHandler 时,有两个必须指定的选项,分别是下面介绍的 tablestore.columns.mapping 和 tablestore.table.name。 更多的可选选项将在后面其他例子中提及。
    • tablestore.columns.mapping 选项:必需选项,用来描述对需要 MaxCompute 将访问的 TableStore 表的列,包括主键和属性列。 这其中以 : 打头的用来表示 TableStore 主键,例如这个例子中的 :vid:gt。 其他的均为属性列。 TableStore支持最少1个,最多4个主键,主键类型为 bigint 或 string,其中第一个主键为分区键。 在指定映射的时候,用户必须提供指定 TableStore 表的 所有主键,对于属性列则没有必要全部提供,可以只提供需要通过 MaxCompute 来访问的属性列。
    • tablestore.table.name:需要访问的 TableStore 表名。 如果指定的 TableStore 表名错误(不存在),则会报错,MaxCompute 不会主动去创建 TableStore 表。
    • LOCATION 用来指定访问的 TableStore 的实例信息,包括 instance 名字,endpoint 等。 
    • 数据格式对应,MaxCompute 与 TableStore 的数据格式对应如下:

    TableStore数据类型

    MaxCompute数据类型

    string

    string

    binary

    blob

    int

    bigint

    double

    double

    6.执行ODPS-SQL

    // 统计编号 4 以下的车辆在时间戳 1469171387 以前的平均速度和平均油耗

    select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387  group by vid;

     

    使用 UDF(User Defined Function)处理数据

    有时候用户在表格存储里面的数据有独特的结构,希望自己开发逻辑来处理每一行数据,比如解析特定的json字符串,这一块的开发也已经很方便了。

    1.按照MaxCompute Studio文档的说明在IntelliJ里面安装MaxCompute-Java/MaxCompute-Studio插件,一旦插件安装完毕,就可以直接开发。

    比如下面就是一个简单的 UDF 定义,只是简单的将两个字符串连接。 MaxCompute 支持更复杂的UDF,包括自定义窗口执行逻辑等,详细请参考MaxCompute Studio-开发 UDF

     

    2.打包之后可以上传到 MaxCompute,其中打包这里有需要注意的地方,File->Project Structure->Artifacts, 填写好 Name 和 Output Directory 后,要点击 + 选择输出模块,打包后通过 ODPS Project Explorer 来上传资源、创建函数,然后就可以在SQL中调用。

     

    3.打开bin/odpscmd,输入

    // 我们选出来1行数据,并将name/name传入UDF,返回两个string的累加

    select cloud_metric_extract_md5(name, name) as udf_test from test_table limit 1;

     

    写在最后

    目前ODPS-SQL访问 TaleStore 还在对执行逻辑进行深度的优化,如果有需求请联系ots_support,我们将针对业务场景来进行优化。

    FAQ

    常见错误处理:

    1. FAILED: ODPS-0010000:System internal error - fuxi job failed, WorkerPackageNotExist:需要设置set odps.task.major.version=unstructured_data
    2. FAILED: ODPS-0010000:System internal error - std::exception:Message: a timeout was reached:一般情况下是OTS的endpoint填写错误,导致ODPS没法访问,可以咨询ots_support旺旺账号
    3. logview invalid end_point:在执行过程中,会返回一个logview URL地址,如果使用浏览器访问该地址返回错误,可能是配置不对,请检查 MaxCompute 配置,并咨询 odps_support 旺旺账号
  • 相关阅读:
    BAT系列(一)— CNN
    图像处理基本知识总结(一)
    机器学习(二十一)— 特征工程、特征选择、归一化方法
    C++(三)— 二维容器
    代码题(19)— 组合与排列
    代码题(18)— 子集
    机器学习(二十)— 常见统计学习方法总结(一)
    【angularjs】使用angular搭建项目,获取dom元素
    【css】常用css
    【angularjs】使用angular搭建项目,图片懒加载资料
  • 原文地址:https://www.cnblogs.com/aliyunblogs/p/6846226.html
Copyright © 2020-2023  润新知