从MySQL采集binlog到 Hive [使用Tungsten]

Source from: http://www.malinga.me/continuous-data-loading-from-mysql-to-hive-using-tungsten/

入门 [可以跳过]

什么是 Hive

Continuous data loading from MySQL to Hive“The Apache Hive™ data warehouse software facilitates querying and managing large datasets residing in distributed storage. Hive provides a mechanism to project structure onto this data and query the data using a SQL-like language called HiveQL. At the same time this language also allows traditional map/reduce programmers to plug in their custom mappers and reducers when it is inconvenient or inefficient to express this logic in HiveQL.”

~ Hive official site

Why Hive

Hive 应该被很多大公司使用,并表现出优秀的实时大规模数据处理能力和近实时的查询能力。Hive现在支持复杂的schemas和高级操作。如果正面临传统的数据仓库的瓶颈,那么Hive将是很好的选择。下面是一些公司正在采用的业务场景:

  • Bizo:  用于 reporting 和 ad hoc queries.
  • Chitika:  用于 data mining 和 analysis
  • CNET: 用于data mining, log analysis 和 ad hoc queries
  • Digg: 用于 data mining, log analysis, R&D, reporting/analytics
  • Grooveshark: 用于客户分析, 数据清洗, machine learning R&D.
  • Hi5: 用于 analytics, machine learning, social graph analysis.
  • HubSpot: 用于近实时的web analytics.
  • Last.fm: 用于 各种 ad hoc queries.
  • Trending Topics: 用于 log data 建模, 和 构建 抽样数据集用于趋势分析和研发
  • VideoEgg: 用于分析usage数据

接下来让我们开始了解整个流程实现

Process

Continuous data loading from MySQL to Hive

  1. 使用 Tungsten 获取 MySQL bin logs 的 CSV 文件
  2. 使用DDLScan 工具 去创建 Hive Staging 和base tables 表结构
  3. 使用Map-Reduce job 从staging 层来初始化装载
  4. [可选] 使用 bc tool 去比较核对 MySQL 表 和 hive 表的数据正确性
  5. setup 持续的装载处理过程

Scope

这篇文章假定你已经提前setup tungsten,并在Hadoop 中已经有csv文件。这里重点谈剩余的其他处理细节。 上面的处理过程脚本,你可以在 https://github.com/continuent/continuent-tools-Hadoop。

预备工作

详细步骤

Step 1 – 在Hive 中创建 Staging 和 Base tables

使用 continuent/tungsten/tungsten-replicator/bin/DDLScan 工具创建 Staging 和 Base table 表结构。 下面的两个命令将创建 Staging 和 Base table 表结构。

创建 staging tables

ddlscan -user hive -url jdbc:mysql:thin://localhost:3306/DB_NAME -pass password -template ddl-mysql-hive-0.10-staging.vm -db DB_NAME -opt hdfsStagingDir /path/to/hadoop/csv | hive

  对于ddl-mysql-hive-0.10-staging.vm 请参见 https://docs.continuent.com/tungsten-replicator-3.0/deployment-hadoop-preparation.html。

你也可以使用load-reduce-check (https://github.com/continuent/continuent-tools-hadoop)做所有的事情。但是,下面的脚本执行和上面两个命令同样的目的,只是做(初始化工作initial load)。

load-reduce-check -U jdbc:mysql:thin://localhost:3306/DB_NAME -D /path/to/hadoop/csv -r /path/to/continuent/dir -s DB_NAME -u tungsten -p password -v –no-compare –no-map-reduce –no-materialize –no-meta –no-sqoop

【注意】 load-reduce-check 是一个从表创建到数据装载的完整脚本。

Step 2 – Loading data to base tables

这里运行 load-reduce-check 去装载数据到base tables,其中跳过一些已经完成的步骤。按照每个staging table去运行 Map-Reduce 来完成 base tables。

loadreducecheck U jdbc:mysql:thin://localhost:3306/DISCO -D /user/tungsten/staging/alpha -r /ebs/continuent -s DISCO -u tungsten -p password -v –no-base-ddl –no-compaer –no-staging-ddl –no-base-ddl

Step 3 – 配置完成连续的加载过程

完成step 2将可以在base table中看到数据,可以多次运行step 2但它只是再次在完整的数据集上运行map reduce。所以, 我们只需要在增量的数据集上运行map-reduce job,把新增部分增加到Hive table。下面列出用于连续加载数据的过程:

  1. Stop tungsten replication
  2. Run Map-reduce
  3. 移除全量的CSV files
  4. Start tungsten replication

Conclusion

总之,这里讨论了从Mysql连续加载数据到Hive的过程,可以在https://github.com/continuent/continuent-tools-hadoop.git 找到脚本去创建 表和加载数据。

1)  Intial load:  Tungsten initial load data –>HDFS (CSV files) — >运行步骤1: load data to staging tables –> 运行步骤2:loading data to base tables

       2) 连续loading:  停掉tungsten –> 运行Map redue –> 清空HDFS下的CVS文件 –> 启动tungsten

 

[HELP] load-reduce-check

  •    -D, –staging-dir String         Directory within Hadoop for staging data (default=/user/tungsten/staging)
  •    -l, –log String                 Log file for detailed output
  •    -m, –metadata String           Table metadata JSON file (/tmp/meta.json)
  •    -P, –schema-prefix String       Prefix for schema names (defaults to replication service
  •    -p, –password String           MySQL password
  •    -q, –sqoop-dir String           Directory within Hadoop for Sqooped table data (default=/user/tungsten/sqoop)
  •    -r, –replicator String         Replicator home (/opt/continuent)
  •    -S, –service String             Replicator service that generated data
  •    -s, –schema String             DBMS schema
  •    -t, –table String               Table within schema (default=all)
  •    -U, –url String                 MySQL DBMS JDBC url
  •    -u, –user String               MySQL user
  •    -v, –verbose                   Print verbose output
  •        –hive-ext-libs String       Location of Hive JDBC jar files
  •        –[no-]base-ddl             Load base table ddl
  •        –[no-]compare               Compare to source data
  •        –[no-]map-reduce           Materialize view for tables (deprecated)
  •        –[no-]materialize           Materialize view for tables
  •        –[no-]meta                 Generate metadata for tables
  •        –[no-]sqoop                 Generate Sqoop commands to provision data
  •        –[no-]staging-ddl           Load staging table ddl
  •    -h, –help                       Displays help

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s