Implementação de Replicação de Dados do MySQL para o Hadoop com Tungsten Replicator

Aqruitetura e Dependências do Sistema

Para construir um data warehouse analítico baseado no ecossistema Hadoop, é frequentemente necessário ingerir dados transacionais de bancos de dados relacionais em tempo real. O Tungsten Replicator atua como uma solução robusta para catpurar alterações no MySQL e aplicá-las no HDFS, formatando-as para consumo posterior pelo Hive.

Antes de iniciar a configuração dos serviços, os nós requerem o interpretador Ruby e o gerenciador de pacotes RubyGems. Em ambientes com restrições severas de firewall corporativo que bloqueiam repositórios públicos, a instalação de dependências como o módulo JSON deve ser realizada via pacotes locais.

sudo dnf install -y ruby ruby-devel rubygems

# Instalação offline da dependência JSON caso o acesso externo seja restrito
gem install --local /opt/installers/json-2.6.3.gem

A topologia de rede para este cenário assume um nó mestre rodando MySQL na sub-rede 10.0.5.10:3306 e um nó de processamento Hadoop (HDFS na porta 9000) em 10.0.5.20. As credenciais de replicação devem estar previamente provisionadas no banco de dados relacional.

Configuração do Nó Mestre (MySQL)

No servidor de origem, o Tungsten precisa ser instalado como um serviço de extração. O parâmetro --enable-heterogenous-master é crucial aqui, pois instrui o replicador a traduzir os tipos de dados nativos do MySQL para formatos compatíveis com sistemas não relacionais.

cd /opt/continuent/tungsten-replicator

./tools/tpm install alpha_master \
  --master=10.0.5.10 \
  --install-directory=/opt/continuent/alpha_master \
  --datasource-mysql-conf=/etc/mysql/conf.d/replication.cnf \
  --replication-user=tungsten_repl \
  --replication-password=Str0ng_S3cret! \
  --enable-heterogenous-master=true \
  --net-ssh-option=port=2222 \
  --property=replicator.filter.pkey.addColumnsToDeletes=true \
  --property=replicator.filter.pkey.addPkeyToInserts=true

# Inicialização do cluster de replicação
/opt/continuent/alpha_master/tungsten/cluster-home/bin/startall

Após a execução, utilitários como trepctl e thl podem ser utilizados para monitorar a integridade do pipeline de extração.

Configuração do Nó Escravo (Hadoop)

No nó de destino, o Tungsten é configurado como um applier. Ele receberá o fluxo de eventos e os persistirá no sistema de arquivos distribuído como arquivos CSV, otimizados para carga em lote no Hive. Os parâmetros de blockCommit controlam a frequência e o volume de micro-lotes escritos em disco.

cd /opt/continuent/tungsten-replicator

./tools/tpm install beta_hadoop \
  --batch-enabled=true \
  --batch-load-language=js \
  --batch-load-template=hadoop \
  --datasource-type=file \
  --install-directory=/opt/continuent/beta_hadoop \
  --java-file-encoding=UTF8 \
  --java-user-timezone=UTC \
  --master=10.0.5.10 \
  --members=10.0.5.20 \
  --property=replicator.datasource.applier.csvType=hive \
  --property=replicator.stage.q-to-dbms.blockCommitInterval=2s \
  --property=replicator.stage.q-to-dbms.blockCommitRowCount=5000 \
  --skip-validation-check=DatasourceDBPort \
  --skip-validation-check=DirectDatasourceDBPort \
  --skip-validation-check=HostsFileCheck \
  --skip-validation-check=InstallerMasterSlaveCheck \
  --skip-validation-check=ReplicationServicePipelines \
  --rmi-port=10990

Validação no HDFS

Com ambos os serviços operacionais, os eventos de modificação de dados (DML) serão serializados em diretórios de staging no HDFS. A estrutura de diretórios espelha o esquema e as tabelas do banco de dados original.

$ hdfs dfs -ls -R /user/tungsten/staging/beta_hadoop/
/user/tungsten/staging/beta_hadoop/analytics_db
/user/tungsten/staging/beta_hadoop/analytics_db/user_events
/user/tungsten/staging/beta_hadoop/analytics_db/user_events/events-001.csv
/user/tungsten/staging/beta_hadoop/analytics_db/user_events/events-002.csv
/user/tungsten/staging/beta_hadoop/analytics_db/financial_tx
/user/tungsten/staging/beta_hadoop/analytics_db/financial_tx/tx-101.csv
/user/tungsten/staging/beta_hadoop/analytics_db/financial_tx/tx-102.csv

Integração e Processamento no Hive

Os dados em staging precisam ser consolidados em tabelas Hive gerenciadas para que consultas SQL analíticas possam ser executadas. O utilitário load-reduce-check, parte do pacote continuent-tools-hadoop, automatiza essa ponte. Requer que o HiveServer2 esteja ativo (padrão na porta 10000) e que as bibliotecas JDBC e de comunicação do Hadoop/Hive estejam no classpath do Tungsten.

# Automação da cópia dos JARs essenciais para o diretório de extensões do Tungsten
HIVE_LIB="/opt/apache-hive/lib"
TUNGSTEN_LIB_EXT="/opt/continuent/beta_hadoop/tungsten/bristlecone/lib-ext/"
HADOOP_LIB="/opt/hadoop/share/hadoop/common"

for jar_lib in hive-jdbc-*.jar hive-exec-*.jar hive-service-*.jar httpclient-*.jar httpcore-*.jar commons-httpclient-*.jar; do
    cp -v "${HIVE_LIB}/${jar_lib}" "${TUNGSTEN_LIB_EXT}"
done

cp -v "${HADOOP_LIB}/hadoop-common-*.jar" "${TUNGSTEN_LIB_EXT}"
cp -v "${HADOOP_LIB}/lib/slf4j-*.jar" "${TUNGSTEN_LIB_EXT}"

O script de carga oferece diferentes modos de execução dependendo do estado do ambiente de destino. Abaixo estão os fluxos para inicialização completa, recarga incremental e auditoria de consistência.

# Modo 1: Provisionamento inicial ou sincronização após alterações no DDL
./bin/load-reduce-check \
  --service=beta_hadoop \
  -r /opt/continuent/beta_hadoop \
  --schema analytics_db \
  -U jdbc:mysql:thin://10.0.5.10:3306/ \
  -u tungsten_repl -p Str0ng_S3cret! \
  -v --no-compare

# Modo 2: Recarga estrita de dados (ignora metadados e DDL)
./bin/load-reduce-check \
  --service=beta_hadoop \
  -r /opt/continuent/beta_hadoop \
  --schema analytics_db \
  -U jdbc:mysql:thin://10.0.5.10:3306/ \
  -u tungsten_repl -p Str0ng_S3cret! \
  -v --no-base-ddl --no-staging-ddl --no-meta

# Modo 3: Validação de paridade de dados entre origem e destino
./bin/load-reduce-check \
  --service=beta_hadoop \
  -r /opt/continuent/beta_hadoop \
  --schema analytics_db \
  -U jdbc:mysql:thin://10.0.5.10:3306/ \
  -u tungsten_repl -p Str0ng_S3cret! \
  -v --no-base-ddl --no-staging-ddl --no-meta --no-materialize

Tags: MySQL hadoop tungsten-replicator hive HDFS

Publicado em 6-10 21:29 por Thomas