注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

Hadoop实战:使用Maxwell把MySQL数据实时同步到HDFS

Hadoop 彭东稳 2034次浏览 已收录 2个评论

Maxwell介绍

Maxwell是一个守护程序,一个应用程序,能够读取MySQL Binlogs然后解析输出为json。支持数据输出到Kafka中,支持表和库过滤。

→ Reference:http://maxwells-daemon.io

→ Download: https://github.com/zendesk/maxwell/releases/download/v1.10.3/maxwell-1.10.3.tar.gz

→ Source: https://github.com/zendesk/maxwell

配置MySQL->Maxwell->Kafka->Flume->HDFS

1)MySQL配置要求

配置要求

权限要求

2)安装配置Kafka

确认已安装java运行环境,直接解压Kafka即可使用。

解压后,编辑配置文件:

kafka需要依赖zookeeper,所以需要先启动zookeeper。

启动Kafka Server:(指定JMX_PORT端口,可以通过Kafka-manager获取统计信息)

3)安装配置Flume

去Apache官网下载Flume二进制安装包,然后解压即可。

设置环境变量

查看Flume版本

创建配置文件和环境变量

如果上面的JAVA_HOME设置好了,这里其实不需要设置flume-env.sh,也可以选择配置。

4)安装配置Maxwell

Maxwell存储在MySQL服务器本身所需要的所有状态,在schema_database选项指定的数据库中。默认情况下, 数据库被命名为maxwell。

MySQL创造点数据

然后可以看到Maxwell的输出信息:

5)数据输出到HDFS

Kafka创建topic

查看主题

查看主题详情

提供一份Flume配置文件(从Kafka收集日志到HDFS)

启动Flume

如果启动Flume时报错:ERROR – org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:146)] Failed to start agent because dependencies were not found in classpath. Error follows.java.lang.NoClassDefFoundError: org/apache/hadoop/io/SequenceFile$CompressionType.

可能是因为你的Flume是独立部署,需要依赖Hadoop HDFS的jar包,解决方法也很简单,就是在Flume主机上解压好Hadoop的二进制安装包,然后输出Hadoop环境变量即可,Flume会根据环境变量自动找到相关的依赖jar包。具体可以看:Hadoop实战:Flume输入日志到HDFS报错解决

另外,当Flume-ng正常运行后,写入HDFS时报错:java.lang.NoClassDefFoundError: org/apache/hadoop/io/SequenceFile$CompressionType
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=root, access=WRITE, inode=”/”:hadoop:supergroup:drwxr-xr-x.

这个提示很明显,就是没有写入权限(因为你当前运行flume-ng的用户不是Hadoop用户),解决方案也很简单,就是切换到Hadoop用户执行flume-ng命令即可。或者开启HDFS允许所有用户进行文件写入,默认可能你没有开启。具体可以看:Hadoop实战:Flume输入日志到HDFS报错解决

启动Maxwell

测试MySQL->Maxwell->Kafka->Flume->HDFS

相关组件现在都已经跑通了,接下来就是测试了,我们在MySQL插入一条数据:

查看Kafka队列

然后去HDFS查看:

会自动创建相关目录,并生成一个文件。

总结

整个MySQL->Maxwell->Flume->HDFS流程算是跑通了,但是此时也仅限于玩一玩而已,包括Flume和Kakfa都得深入学习一下。另外,我们可以看到写入HDFS的数据时json的,可能还需要提取只需要的数据,另外,对于update或delete操作目前还不知道要怎么处理。生产使用难度很大。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (5)or分享 (0)
关于作者:

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. 请问你这个现在线上有用到吗?如果不用这个方案,还有其它好的方案能实现这个功能吗
    gzw2017-08-04 17:32 Windows 7 | Chrome 59.0.3071.115
    • 没有用,需要二次开发。
      彭东稳2017-08-07 15:38 未知操作系统 | Chrome 59.0.3071.115