如何使用Maxwell和flume,kafka 把MySQL数据实时同步到HDFs?

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

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包。

另外,当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允许所有用户进行文件写入,默认可能你没有开启。

启动Maxwell

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

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

查看Kafka队列

然后去HDFS查看:


Thupdi _ 乔飞 

你可能感兴趣的:(mapreduce,hadoop)