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

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

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

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

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

官方网站模板如下:

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/

运行流程

安装:

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的插件在安装的时候自带。

embulk gem install embulk-output-elasticsearch

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

in:
  type: file
  path_prefix: ./mydata/csv/
out:
  type: elasticsearch
  index: embulk
  index_type: embulk
  nodes:
    - host: localhost

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

embulk guess ./mydata/seed.yml -o config.yml

如下:

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 如果你的文件中牵扯到时区的话,可以加上:

parser:
  default_timezone: 'Asia/Tokyo'

之后就可以执行yml文件:

embulk run config.yml -c diff.yml

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

in: {last_path: mydata/csv/sample_01.csv.gz}
out: {}
Embulk事务的支持

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

embulk run config.yml -r resume-state.yml

事务失败后,再次运行:

embulk run config.yml -r resume-state.yml

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

embulk cleanup config.yml -r resume-state.yml

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

基于Windows下浏览器无法正常打开的解决方案

基于Windows下浏览器无法正常打开的解决方案 今天打开电脑浏览器的时候,浏览器出现了以下问题: 这个是Mozilla Firefox的浏览器界面状况: ? ...

29250
来自专栏小樱的经验随笔

一文让你熟练掌握Linux的ncat(nc)命令

ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的。它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。 它被设计...

34310
来自专栏码代码的陈同学

Linux: sudo小技能

sudo 允许一个权限受限用户在指定的安全策略下以root用户或其它用户执行一条命令(不需要知道root用户密码也不需要切换到root用户)。出于安全考虑,当你...

30810
来自专栏我是攻城师

Nginx入门介绍与安装

32740
来自专栏LanceToBigData

Maven(一)初识Maven

前言 在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了。其实真的感觉Maven并没有想象的那么简单! 那我们该怎么去学习...

31480
来自专栏221-B

Http状态码分析

开发过程中经常需要与后台配合调试接口,在调试过程中后台会返回一些Http状态码,程序员可以通过状态码分析接口是否调通以及如果失败问题在哪。因此了解Http状态码...

14930
来自专栏企鹅号快讯

Nginx入门介绍与安装

Nginx是什么? Nginx是俄罗斯人编写的十分轻量级的HTTP和反向代理服务器。发音:"engine X" Nginx能干什么? (1)Http反向代理 N...

212100
来自专栏张戈的专栏

Linux:10个实用的网络和监控命令

本文列出了 10 个基础的每个 Linux 用户都应该知道的网络和监控命令。网络和监控命令类似于这些: hostname, ping, ifconfig, iw...

43830
来自专栏行者悟空

Nginx 启用upstream模块后,location块中的相关参数说明

7820
来自专栏ytkah

ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes怎么处理

  今天ytkah进行了应急数据库恢复,用Navicat for Mysql导入sql文件出现ERROR 1153 (08S01): Got a packet ...

33180

扫码关注云+社区

领取腾讯云代金券