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