前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Embulk--异构数据库和文件系统处理神器

Embulk--异构数据库和文件系统处理神器

作者头像
哒呵呵
发布2018-08-06 11:28:54
1.2K0
发布2018-08-06 11:28:54
举报
文章被收录于专栏:鸿的学习笔记

Embulk是一款开源的批处理框架,它主要用于异构数据库,文件存储以及云服务之间的数据传输工具。特色:

  1. 支持并行和分布式处理大数据集
  2. 大部分插件支持事务处理
  3. 支持重跑(需要自身幂等性支持)

Embulk使用Yaml进行配置,主要包括下面几个section:

代码语言:javascript
复制
in:从数据源读取数据数据(基于文件(ftp等)和基于记录(数据库等))
    parser:如果数据源是文件,parser解析文件格式(基于文件)
    decoder:用来解压缩和加解密数据(基于文件)
out:输出数据到目标数据源
     formatter:将数据输出成相应文件格式(基于文件)
     encoder:压缩数据或加解密数据(基于数据)
filters:输出后的数据过滤(可选)
exec:执行引擎(可选)

官方网站模板如下:

代码语言:javascript
复制
in:
  type: file
  path_prefix: ./mydata/csv/
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    skip_header_lines: 1
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: timestamp, format: '%Y%m%d'}
    - {name: comment, type: string}
filters:
  - type: speedometer
    speed_limit: 250000
out:
  type: stdout

每个插件的具体的模板可以参考: http://www.embulk.org/plugins/

运行流程

安装:

代码语言:javascript
复制
curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

下载elasticsearch的输出插件,file的插件在安装的时候自带。

代码语言:javascript
复制
embulk gem install embulk-output-elasticsearch

创建一个简单的yml文件:seed.yml

代码语言:javascript
复制
in:
  type: file
  path_prefix: ./mydata/csv/
out:
  type: elasticsearch
  index: embulk
  index_type: embulk
  nodes:
    - host: localhost
代码语言:javascript
复制

随后embulk会自动猜测你需要的Yaml文件:

代码语言:javascript
复制
embulk guess ./mydata/seed.yml -o config.yml

如下:

代码语言:javascript
复制
in:
  type: file
  path_prefix: ./mydata/csv/
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: ''
    null_string: 'NULL'
    skip_header_lines: 1
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: timestamp, format: '%Y%m%d'}
    - {name: comment, type: string}
out:
  type: elasticsearch
  index: embulk
  index_type: embulk
  nodes:
  - {host: localhost}

你看Embulk帮你补全了大部分,并在默认目录下生成了config.yml 如果你的文件中牵扯到时区的话,可以加上:

代码语言:javascript
复制
parser:
  default_timezone: 'Asia/Tokyo'

之后就可以执行yml文件:

代码语言:javascript
复制
embulk run config.yml -c diff.yml

diff.yml记录了上次最新跑过的数据,下一次会自动更新,并不会再运行记录在diff.yml文件里的文件

代码语言:javascript
复制
in: {last_path: mydata/csv/sample_01.csv.gz}
out: {}
Embulk事务的支持

当数据中途因为各种原因断了的时候,Embulk支持重跑,只需要运行时加上resume-state.yml的生成路径

代码语言:javascript
复制
embulk run config.yml -r resume-state.yml

事务失败后,再次运行:

代码语言:javascript
复制
embulk run config.yml -r resume-state.yml

Embulk会根据resume-state.yml记录的状态重跑数据 如果不再需要事务支持,只需要删除即可。

代码语言:javascript
复制
embulk cleanup config.yml -r resume-state.yml
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运行流程
  • Embulk事务的支持
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档