整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

大数据常用同步工具

大数据常用同步工具

、离线数据同步

DataX

阿里的Datax是比较优秀的产品,基于python,提供各种数据村塾的读写插件,多线程执行,使用起来也很简单,操作简单通常只需要两步;

创建作业的配置文件(json格式配置reader,writer);

启动执行配置作业。

非常适合离线数据,增量数据可以使用一些编码的方式实现,

缺点:仅仅针对insert数据比较有效,update数据就不适合。缺乏对增量更新的内置支持,因为DataX的灵活架构,可以通过shell脚本等方式方便实现增量同步。

参考资料:

github地址:https://github.com/alibaba/DataX

dataX3.0介绍:https://www.jianshu.com/p/65c440f9bce1

datax初体验:https://www.imooc.com/article/15640

文档:https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md

Sqoop

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

地址:http://sqoop.apache.org/

Sqoop导入:导入工具从RDBMS到HDFS导入单个表。表中的每一行被视为HDFS的记录。所有记录被存储在文本文件的文本数据或者在Avro和序列文件的二进制数据。

Sqoop导出:导出工具从HDFS导出一组文件到一个RDBMS。作为输入到Sqoop文件包含记录,这被称为在表中的行。那些被读取并解析成一组记录和分隔使用用户指定的分隔符。

Sqoop支持全量数据导入和增量数据导入(增量数据导入分两种,一是基于递增列的增量数据导入(Append方式)。二是基于时间列的增量数据导入(LastModified方式)),同时可以指定数据是否以并发形式导入。

Kettle

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。

Kettle的Spoon有丰富的Steps可以组装开发出满足多种复杂应用场景的数据集成作业,方便实现全量、增量数据同步。缺点是通过定时运行,实时性相对较差。

NiFi

Apache NiFi 是一个易于使用、功能强大而且可靠的数据拉取、数据处理和分发系统,用于自动化管理系统间的数据流。它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。

NiFi基于Web方式工作,后台在服务器上进行调度。 用户可以为数据处理定义为一个流程,然后进行处理,后台具有数据处理引擎、任务调度等组件。

几个核心概念:

Nifi 的设计理念接近于基于流的编程 Flow Based Programming。

FlowFile:表示通过系统移动的每个对象,包含数据流的基本属性

FlowFile Processor(处理器):负责实际对数据流执行工作

Connection(连接线):负责不同处理器之间的连接,是数据的有界缓冲区

Flow Controller(流量控制器):管理进程使用的线程及其分配

Process Group(过程组):进程组是一组特定的进程及其连接,允许组合其他组件创建新组件

参考资料

Nifi简介及核心概念整理

官方网站:http://nifi.apache.org/index.html

二、实时数据同步

实时同步最灵活的还是用kafka做中间转发,当数据发生变化时,记录变化到kafka,需要同步数据的程序订阅消息即可,需要研发编码支持。这里说个mysql数据库的同步组件,阿里的canal和otter

canal

https://github.com/alibaba/canal

数据抽取简单的来说,就是将一个表的数据提取到另一个表中。有很多的ETL工具可以帮助我们来进行数据的抽取和转换,ETL工具能进行一次性或者定时作业抽取数据,不过canal作为阿里巴巴提供的开源的数据抽取项目,能够做到实时抽取,原理就是伪装成mysql从节点,读取mysql的binlog,生成消息,客户端订阅这些数据变更消息,处理并存储。下面我们来一起搭建一下canal服务

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。

ps. 目前内部版本已经支持mysql和oracle部分版本的日志解析,当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)

基于日志增量订阅&消费支持的业务:

数据库镜像

数据库实时备份

多级索引 (卖家和买家各自分库索引)

search build

业务cache刷新

价格变化等重要业务消息

otter

https://github.com/alibaba/otter

otter是在canal基础上又重新实现了可配置的消费者,使用otter的话,刚才说过的消费者就不需要写了,而otter提供了一个web界面,可以自定义同步任务及map表。非常适合mysql库之间的同步。

另外:otter已在阿里云推出商业化版本 数据传输服务DTS, 开通即用,免去部署维护的昂贵使用成本。DTS针对阿里云RDS、DRDS等产品进行了适配,解决了Binlog日志回收,主备切换、VPC网络切换等场景下的同步高可用问题。同时,针对RDS进行了针对性的性能优化。出于稳定性、性能及成本的考虑,强烈推荐阿里云用户使用DTS产品。

求说明

在web服务器中,作为代码发布机A,文件同步到服务器B,C,D等集群中,可以忽略某个文件和目录。

A服务器:内网IP: 192.168.1.2

B服务器:内网IP: 192.168.1.3

A和B的www用户,或者root用户免密登录。

rsync介绍

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

inotify介绍

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

1.安装rsync

A和B都做

yum -y install xinetd
yum -y install rsync

chkconfig  rsync  on

service xinetd restart
systemctl restart xinetd

A上操作:

rsync -av root@192.168.1.3:/rsynctest/1.txt /root

B上操作

rsync -av /rsynctest/2.txt root@192.168.1.2:/root
rsync -av -e "ssh -p 22" /rsynctest/2.txt root@192.168.1.2:/root        【如果ssh的开启的端口不是22 则用-e指定ssh端口】

2.安装 inotify

只在A上操作即可。

安装inotify-tools
wget http://js.地址funet8地址.com/centos_software/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz 
cd inotify-tools-3.14
./configure
make 
make install

inotifywait -m /root    【查看inotify-tools是否运行正常】


新开一个终端:
[root@localhost ~]# cd /root
[root@localhost ~]# touch bb.txt

监控到

# inotifywait -m /root
Setting up watches.
Watches established.
/root/ OPEN .bash_profile
/root/ ACCESS .bash_profile
/root/ CLOSE_NOWRITE,CLOSE .bash_profile
/root/ OPEN .bashrc
/root/ ACCESS .bashrc
/root/ CLOSE_NOWRITE,CLOSE .bashrc
/root/ CREATE bb.txt
/root/ OPEN bb.txt
/root/ ATTRIB bb.txt
/root/ CLOSE_WRITE,CLOSE bb.txt

网站实时同步脚本

test.sh 为要运行网站实时同步脚本 其中定义了要同步的网站的路径,要同步到的ip地址,哪些后缀名的文件忽略监控,同步的用户名,同步的文件列表,哪些文件不需要同步。

cat test.sh
#!/bin/sh
SRC=/data/wwwroot/web/test/ #代码发布服务器目录
DST=/data/wwwroot/web/test/ #目标服务器目录

IP="192.168.1.3 192.168.1.4" # 这里可以用hostname,多个主机用空格
USER=www
inotifywait -mrq $SRC -e modify,delete,create,close_write,attrib  | while read D E F  
        do  
                for i in $IP
                do
                        #排除后缀名和目录
                        /usr/bin/rsync -e 'ssh -p 60920' \
                        -ahqzt --exclude "*.swp" \
                        --exclude "*.svn" \
                        --exclude "test/" \
                        --exclude "runtime/" \
                        --delete $SRC $USER@$i:$DST
                done
        done

运行:

html中,我们经常会用到table布局;有时候需要实现指定单元格,当鼠标移动到上面的时候,该单元格背景变色,不是该行背景变色,也不是仅仅文字的背景变色;


html的文件结构大家都是知道的了,总体分为head和body部分

我们要实现变色,在head部分实现格式

<style>

.tablex {border-collapse: collapse;}

.tablex tr {}

.tablex tr td {text-align:center; line-height:30px;}

.tablex tr td:hover { background-color:#f00; color:#fff;}

</style>

然后在body部分,使用table时候,注明class="tablex".这样的话,就实现了我们所说的效果了。

附上完整代码:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

<title>测试鼠标移到到表格单元格背景颜色改变的</title>

<style>

.table1 {border-collapse: collapse;}

.table1 tr {}

.table1 tr td {text-align:center; line-height:30px;}

.table1 tr td:hover { background-color:#006030; color:#006030;}

</style>

</head>

<body>

<table class="table1" width="70%" border="1">

<tr>

<td>测试</td>

<td>测试</td>

<td>测试</td>

<td>测试</td>

</tr>

<tr>

<td>测试</td>

<td>测试</td>

<td>测试</td>

<td>测试</td>

</tr>

<tr>

<td>测试</td>

<td>测试</td>

<td>测试</td>

<td>测试</td>

</tr>

<tr>

<td>测试</td>

<td>测试</td>

<td>测试</td>

<td>测试</td>

</tr>

<tr>

<td>测试</td>

<td>测试</td>

<td>测试</td>

<td>测试</td>

</tr>

</table>

</body>

</html>

在任何一个浏览器中运行,效果如下




南大盛联20年来一直致力于高端IT培训--打造高级软件人才实战培训专家,学生对我们的认可是我们一直前进的动力;项目团队全球招聘,特聘来自海外的老师进行任教,采用100%商业项目进行实战培训,线上线下同步进行。

课程全部紧随市场需求进行设计,并且动态进行调整;7天免费试听,0首付开始学习,学完后进行100%推荐就业,不满意工作岗位2次推荐。

选定一个平台,认识一群志同道合的朋友,你的未来人生路必定不一样。

目前已经开设下面这些培训项目

Java培训

安卓培训

JavaWeb培训

Linux培训

云服务器布置培训

HTML5培训

SEO培训

视频剪辑培训

UI培训

欢迎您们分享给自己愿意分享的朋友,大家一起来进步;相互转告,咨询,学习。

南大盛联培训理念:我懂,我也能让你懂。