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


    • 背景

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

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

    • 环境

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

    yum install ruby
    yum install rubygems
    gem 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

  • 相关阅读:
    实现分布式爬虫
    hadoop安装文档
    远程连接mysql和redis配置
    scrapy(2)
    10月10号动手动脑
    10月6日和动手动脑
    10月4日
    课程总结
    又学java的第一天
    第一节测试总结
  • 原文地址:https://www.cnblogs.com/fyzjhh/p/4172620.html
Copyright © 2020-2023  润新知