首页 > 代码库 > 使用tungsten将mysql的数据同步到hadoop

使用tungsten将mysql的数据同步到hadoop

  • 背景

线上有很多的数据库在运行,后台需要一个分析用户行为的数据仓库。目前比较流行的是mysql和hadoop平台。

现在的问题是,如何将线上的mysql数据实时的同步到hadoop中,以供分析。这篇文章就是利用tungsten-replicator来实现。

 

  • 环境

由于tungsten-replicator依赖ruby和gem。需要安装

yum install rubyyum install rubygemsgem install json

其中json模块可能因为gfw的原因,需要手动下载到本地,然后使用gem本地安装
yum install ruby-devel
gem install --local json-xxx.gem
 

 

安装好mysql,地址是 192.168.12.223:3306 ,数据库配置好权限

安装好hadoop 2.4 ,hdfs的地址是 192.168.12.221:9000

 

  • 配置

先在mysql的机器上,进入到tungsten-replicator目录下执行,并且启动tungsten,可以使用trepctl thl 等命令查看服务的状态

./tools/tpm install mysql1 --master=192.168.12.223 --install-directory=/user/app/tungsten/mysql1 --datasource-mysql-conf=/user/data/mysql_data/my-3306.cnf --replication-user=stats --replication-password=stats_dh5 --enable-heterogenous-master=true --net-ssh-option=port=20460  --property=replicator.filter.pkey.addColumnsToDeletes=true --property=replicator.filter.pkey.addPkeyToInserts=true 

mysql1/tungsten/cluster-home/bin/startall 

 

到hadoop的机器上,,进入到tungsten-replicator目录下执行,并且启动tungsten,可以使用trepctl thl 等命令查看服务的状态

./tools/tpm install hadoop1 --batch-enabled=true --batch-load-language=js --batch-load-template=hadoop --datasource-type=file --install-directory=/user/app/tungsten/hadoop1 --java-file-encoding=UTF8 --java-user-timezone=GMT --master=192.168.12.223 --members=192.168.12.221 --property=replicator.datasource.applier.csvType=hive --property=replicator.stage.q-to-dbms.blockCommitInterval=1s --property=replicator.stage.q-to-dbms.blockCommitRowCount=1000 --skip-validation-check=DatasourceDBPort --skip-validation-check=DirectDatasourceDBPort --skip-validation-check=HostsFileCheck --skip-validation-check=InstallerMasterSlaveCheck --skip-validation-check=ReplicationServicePipelines --rmi-port=25550 

 

可以在hadoop的文件系统上,查看对应的目录下是否生成了mysql对应的库。如下所示:

 

└── user............    └── tungsten        └── staging            └── hadoop1                └── db1                    ├── x1                    │   ├── x1-14.csv                    │   └── x1-3.csv                    └── x2                        ├── x2-115.csv                        ├── x2-15.csv                        ├── x2-16.csv                        ├── x2-17.csv                        └── x2-18.csv

 

最后还需要将staging的数据merge到hive中,建立hive的表结构,并且让数据能够被hive查询,这里使用continuent-tools-hadoop工具里面的load-reduce-check脚本,在使用之前,先需要配置好hive的环境变量,并且启动hiveservice在10000端口上。拷贝如下的jar包到bristlecone的lib-ext目录

 

 cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/hive-jdbc-0.13.1.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/hive-exec-0.13.1.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/hive-service-0.13.1.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/httpclient-4.2.5.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/commons-httpclient-3.0.1.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hive/apache-hive-0.13.1-bin/lib/httpcore-4.2.5.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hadoop/hadoop-2.4.0-onenode/share/hadoop/common/hadoop-common-2.4.0.jar /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/ cp -v /user/app/hadoop/hadoop-2.4.0-onenode/share/hadoop/common/lib/slf4j-* /user/app/tungsten/hadoop1/tungsten/bristlecone/lib-ext/

 

然后执行如下的命令:

第一次,或者以后增加了表,或者表结构发生了变化./bin/load-reduce-check -v -U jdbc:mysql:thin://192.168.12.223:3306/ -u stats -p stats_dh5 --schema db1 --service=hadoop1 -r /user/app/tungsten/hadoop1  --no-compare

如果表结构没有发生变化,只需要重新装载数据的话,可以执行如下的命令./bin/load-reduce-check -v -U jdbc:mysql:thin://192.168.12.223:3306/ -u stats -p stats_dh5 --schema db1 --service=hadoop1 -r /user/app/tungsten/hadoop1 --no-base-ddl --no-staging-ddl --no-meta

只想比较数据,不过貌似compare很卡./bin/load-reduce-check -v -U jdbc:mysql:thin://192.168.12.223:3306/ -u stats -p stats_dh5 --schema db1 --service=hadoop1 -r /user/app/tungsten/hadoop1 --no-base-ddl --no-staging-ddl --no-meta --no-materialize

 

  • 参考

tungsten-replicator-3.0.pdf   中的  3.4. Deploying MySQL to Hadoop Replication

https://github.com/continuent/continuent-tools-hadoop

使用tungsten将mysql的数据同步到hadoop