MaxCompute数据的上传下载

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: tunnel常见命令和tunnel SDK

Tunnel

Tunnel通常用来将本地的数据上传到maxcompute或将maxcompute数据下载到本地

1、MaxCompute数据的上传和下载

MaxCompute系统上传/下载数据包括两种方式
DataHub实时数据通道 Tunnel批量数据通道
OGG插件 大数据开发套件
Flume插件 DTS
LogStash插件 Sqoop
Fluentd插件 Kettle插件

MaxCompute客户端

Tunnel查看帮助信息
不带参数的tunnel或tunnel help查看帮助信息
也可tunnel help upload
Available subcommands:
upload
支持文件或目录(只一级目录)的上传;
每一次上传只支持数据上传到一个表或表的一个分区;
有分区的表一定要指定上传的分区,示例如下:
tunnel upload d:testp1.txt yunxiang_01.t_test_p/gender='male'
tunnel upload d:test yunxiang_01.t_test_p/gender='male' --scan=only
注释:yunxiang_01为项目; t_test_p为表;gender='male'为分区类;--scan=only表示只扫码数据不导入数据。
download
只支持下载到单个文件
每一次下载只支持一个表或者一个分区
有分区的表一定要指定下载的分区
例子:
tunnel download yunxiang_01.t_test_p/gender='male' d:testp_download.txt
resume
因为网络原因或者tunnel服务的原因造成的错误,使用该子命令续传;目前仅支持上传数据续传;
用法:tunnel resume [session_id]
show
显示历史任务
用法:tunnel show history [options]
purge


清除历史任务
用法:tunnel purge [n]
help

2、常用参数和Tunnel命令

-c: 数据文件字符编码,默认为UTF-8,也可以自行指定,如下:
tunnel upload log.txt test_table -c "gbk"
-ni: NULL数据标志符,默认为""(空字符串),也可指定如下:
tunnel upload log.txt test_table -ni "NULL"
-fd: 本地数据文件的列分割符,默认为逗号;
-rd: 本地数据文件的行分割符,默认为rn.
1、支持多个字符的列分隔符和行分隔符
2、支持控制字符等不可见字符做分隔符
3、列分隔符不能包含行分割符
4、转义字符分隔符,在命令行模式下只支持r,n和t
分隔符示例:
tunnel upload d:p.txt t_test_p/gender='male' -fd "||" -rd "rn"
tunnel download t_test_p/gender='male' d:p_download.txt -fd "||||" -rd "&&"
错误语句如下:
tunnel upload d:p.txt t_test_p/gender='male' -fd "b" -rd "t"
-dfp: DateTime类型数据格式,默认为yyyy-MM-dd HH:mm:ss如下
tunnel upload log.txt test_table -dfp "yyyy-MM-dd HH:mm:ss"
常见日期格式:
"yyyyMMddHHmmss": 数据格式"20140209101000"
"yyyy-MM-dd HH:mm:ss"(默认):数据格式"2014-02-09 10:10:00"
"yyyy年MM月dd日":数据格式"2014年09月01日"
-sd:设置session目录,通过session id可以对上传、下载数据进行监控、续传(resume命令)等操作。执行过程由于数据问题,提示失败会给出session id及错误信息。
例子:
tunnel u d:data.txt sale_detail/sale_date=201312,region=hangzhou -s false
根据session id进行断点续传:
tunnel resume 201506101639224880870a002ec60c --force;
-te: 指定tunnel的Endpoint;
-threads:指定threads的数量,默认为1;
-tz:指定时区。默认为本地时区:Asia/Shanghai,说明Datetime类型默认支持时区为GMT+8
-acp: 如果目标表分区不存在,自动创建目标分区,默认关闭;
-bs: 每次上传至Tunnel的数据块大小,默认值: 100MiB(MiB=1024*1024B)
-cp: 指定是否在本地压缩后再上传,减少网络流量,默认开启;
-dbr: 是否忽略脏数据(多列,少列,列数据类型不匹配等情况):

当值为true时,将全部不符合表定义的数据忽略
当值为false时,若遇到脏数据,则给出错误提示信息,即目标表内的原始数据不会被污染

-s: 是否扫描本地数据文件,默认为false,具体如下:

值为true时,先扫描数据,若数据格式正确,再导入数据。
值为false时,不扫描数据,直接进行数据导入。
值为only时,仅进行扫描本地数据,扫描结束后不继续导入数据

其他下载参数:
-ci: 指定列索引(从0)下载,使用逗号分隔;
-cn: 指定要下载的列名称,使用逗号分隔每个名称;
-cp: 指定是否压缩,减少网络流量,默认开启;
-e:当下载double值时,如果需要,使用指数函数表示,否则最多保留20位;
-h: 数据文件是否包含表头,如果为true,则dship会跳过表头从第二行开始下载数据。注意,-h=true和threads>1即多线程不能一起使用
-limit: 指定要下载的文件数量
tunnel的一些特点:
tunnel命令是对tunnel模块的SDK封装,具有tunnel的一些特点:

支持对表的读写,不支持视图;
写表是追加(Append)模式
采用并发以提高整体吞吐量
避免频繁提交

3、Tunnel SDK相关知识

Tunnel SDK中的几个概念:
基本含义:

session 完成对一张表或partition上传下载的的过程,称为一个session
request 在一个session内,请求一次tunnel RESTful API的过程
writer 当request为上传数据时,需要打开一个writer,将数据序列化的写入odps后台

cfile文件:

Block 当并发上传数据时,blockID就是不同的writer的标识,其对应后台的一个cfile。

相互关系:

session由一到多个request完成
同一个upload session中,用户可以同时打开多个cfile文件中的writer,多线程或多进程的并发上传数据
由于每一个block对应后台一个cfile文件,所以同一个session,两次打开同一个block就会导致覆盖行为,即只保留最后一次close writer对应的数据。

主要接口:

tabletunnel:访问tunnel服务的入口类,用来对maxcompute和tunnel进行访问
uploadsession:上传会话,包括会话的各种属性、动作以及通过会话进行写操作的方法
downloadsession:下载会话,包括会话的各种属性、动作以及通过会话进行读操作的方法

TableTunnel接口定义:

生命周期:从TableTunnel实例被创建开始,一直到程序结束。
提供方法:创建Upload对象和Download对象的方法
createDownloadSession:创建下载会话对象
createUploadSession:创建上传会话对象
getDownloadSession:获取下载对话对象句柄
getUploadSession:获取上传会话对象句柄
注:无论表有无分区,均有两个方法对应
setEndpoint:设置服务接入点

UploadSession接口定义:

commit:上传会话完成、提交
getBlocklist:得到成功上传的Block的列表
getID:得到上传会话的ID
getSchema:得到上传表的schema
getStatus:得到上传状态
newRecord:创建Record类型的记录
openRecordWriter:打开记录写入器

Java+eclipse环境配置

Step01:官网导航中找到并下载odps-sdk-core
Step02:下载eclipse并安装、配置
Step03:在eclipse中新建Java Project
Step04:将1中下载的压缩包中的jar包添加到项目的路径中。

简单上传实例:

处理流程:
创建阿里云账号->创建表通道->创建上传会话->读取文件->写入记录->上传会话提交
需要处理:
1、提供输入参数,通过run configuration的arguments,添加到program arguments里。
-f <source_file> -c <config_file> -t <odps table> -p <partition_spec> -fd <field_delimiter>

2、建表,增加分区
在maxcompute中建表,创建相应分区
3、上传完成后,检查表中的结果。

简单下载实例

处理流程:
创建阿里云账号->创建表通道->创建下载会话->读取记录->写入文件
需要处理:
1、提供输入参数,通过run configuration中的arguments,添加到program arguments里:
-f <target_file> -c <config_file> -t <odps_table> -p <partition_spec> -fd <field_delimiter>
2、下载完成后,找到对应文件,检查文件内容是否正确

多线程上传实例

处理流程:
提供配置信息-创建阿里云账号-创建表通道-创建上传会话-创建线程池-将待插入记录分给不同线程写入-关闭线程池-将每个线程写入的块提交
需要我们做的:
1、将配置参数写入java脚步(参照odps的配置文件)
2、建表,增加分区
3、上传完成后检查表中的结果

多线程下载实例

处理流程:
提供配置信息-创建阿里云账号-创建表通道-创建下载会话-创建线程池-分配待下载记录给不同的线程-执行下载任务-关闭线程池
需要我们做的:
1、将配置参数写入java脚本(参照odps的配置文件)
2、建表,增加分区
3、下载完成后,输入到屏幕的结果

常见问题:

1、一个session的超时时间:24小时
2、writer close时,将相对应的cfile文件从tmp目录挪移到data目录
3、session commit时,tunnel server将相应session data目录下的所有cfile文件挪移到相应表所在目录,即数据进表中,可以通过SQL进行读取
4、同一个session中,有一个block id对应的block上传失败,需要重传shi,使用相同的blockid
5、对于tunnel server,一个session对应一个目录。所以不同的session会产生不同的目录。这就是不同的session上传数据互不影响的原因
6、对同一个表上传数据,只有一台机器时,基本使用多线程并发就可以了,当需要更多带宽来支持上传数据时,使用不同机器不同进程上传(需要做数据切分)
7、在带宽最大能达到100M/s时,16-64个线程并发,太多的并发将消耗更多的CPU切换。

image

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
12天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
102 7
|
12天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
27 2
|
25天前
|
数据采集 监控 数据管理
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第26天】随着信息技术的发展,数据成为企业核心资源。本文探讨大数据平台的搭建与数据质量管理,包括选择合适架构、数据处理与分析能力、数据质量标准与监控机制、数据清洗与校验及元数据管理,为企业数据治理提供参考。
68 1
|
9天前
|
存储 大数据 数据管理
大数据分区简化数据维护
大数据分区简化数据维护
17 4
|
19天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
41 3
|
19天前
|
存储 大数据 OLAP
大数据数据分区技术
【10月更文挑战第26天】
52 2
|
22天前
|
消息中间件 分布式计算 大数据
数据为王:大数据处理与分析技术在企业决策中的力量
【10月更文挑战第29天】在信息爆炸的时代,大数据处理与分析技术为企业提供了前所未有的洞察力和决策支持。本文探讨了大数据技术在企业决策中的重要性和实际应用,包括数据的力量、实时分析、数据驱动的决策以及数据安全与隐私保护。通过这些技术,企业能够从海量数据中提取有价值的信息,预测市场趋势,优化业务流程,从而在竞争中占据优势。
67 2
|
24天前
|
数据采集 分布式计算 大数据
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第27天】在数字化时代,数据治理对于确保数据资产的保值增值至关重要。本文探讨了大数据平台的搭建和数据质量管理的重要性及实践方法。大数据平台应包括数据存储、处理、分析和展示等功能,常用工具如Hadoop、Apache Spark和Flink。数据质量管理则涉及数据的准确性、一致性和完整性,通过建立数据质量评估和监控体系,确保数据分析结果的可靠性。企业应设立数据治理委员会,投资相关工具和技术,提升数据治理的效率和效果。
55 2
|
26天前
|
存储 安全 大数据
大数据隐私保护:用户数据的安全之道
【10月更文挑战第31天】在大数据时代,数据的价值日益凸显,但用户隐私保护问题也愈发严峻。本文探讨了大数据隐私保护的重要性、面临的挑战及有效解决方案,旨在为企业和社会提供用户数据安全的指导。通过加强透明度、采用加密技术、实施数据最小化原则、加强访问控制、采用隐私保护技术和提升用户意识,共同推动大数据隐私保护的发展。
|
30天前
|
SQL 存储 大数据
大数据中数据提取
【10月更文挑战第19天】
54 2
下一篇
无影云桌面