MaxCompute数据的上传下载
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切换。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云专业认证(ACP),值得报名吗?
是否值得报名要看行业和企业,云计算行业绝对的朝阳产业,阿里云国内第一云。阿里云管家来详细说下阿里云的ACP认证吧: ACP认证方向选择: 阿里云的ACP认证目前分为五个方向,即云计算方向、大数据方向(大数据工程师认证和大数据分析师认证)、云安全工程师认证、人工智能工程师认证(暂未上线)、企业互联网架构工程师认证,按照自身实际情况选择。参考官方:阿里云ACP认证官方详解,目前考取云计算方向的ACP较多。 考试方式详解: **考点介绍:**ACP认证是线下考试,对,是线下,阿里云目前在杭州、北京、上海、深圳、广州、天津、郑州等20多个城市设立考点。分数介绍:以ACP云计算方向为例:单选题及判断题,70题(每题1分)多选题30题(每题1分),试卷满分为100分,考试时间为120分钟,及格分数:80,只要考到80分就可以拿到证书。考试费用:考取ACP认证,需要购买认证授权码,官方报价1200元,一次考不过没有补考机会,需要重新购买重新考,也就是说,考一次1200元,可以随便考,考到通过为止。考试题内容及如何复习?以云计算方向为例,考试题主要集中在云服务器ECS、弹性伸缩、负载均衡、专有网络、O...
- 下一篇
如何将 .NetFramework WebApi 按业务拆分成多个模块
如何将 .NetFramework WebApi 按业务拆分成多个模块 在.NetFramework中使用WebApi,在不讨论微服务的模式下,大部分都是以层来拆分库的 : 基础设施数据存储层服务层WeApi层一些其它的功能库项目结构可能会像下面这样子 有些人可能会将其中的数据存储层、服务层按业务功能进行垂直拆分, 但是到了WebApi这层,就不得不把所向所有业务功能的Controller都堆在这儿了。 随着业务的堆积,WebApi这层的代码量越来越大,耦合性也越来越强,越来越难维护。 … …… ……… ………… 这时候,微服务就出现了。 可是,微服务给系统所带来的复杂程度是极高的, 在某些场景下,转微服务可以很好的解决这些问题,但是又会带来更多的新问题, 所以我们希望有一种模式,即能像微服务那样对代码进行垂直切分,又能保持简单易维护的单体应用程序模式。 打算在单体应用程序中解决这种趋于臃肿问题,我们可以借鉴微服务那种按业务垂直拆分的思想。 但是与微服务不同是,它依然是单启动程序,这个启动程序能够组织出散落在各个模块中的所有WebApi并暴露给外部。 换个角度思考,其实就是将业务模块化...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6