mysql+flinkCDC+hudi

1. Preparativos

1. Se requiere un clúster de Hadoop, que puede ser distribuido, de un solo nodo o pseudodistribuido.

2. Descargue desde el sitio web oficial de flink. Para obtener la versión descargada, consulte el sitio web oficial de hudi https://hudi.apache.org/docs/quick-start-guide/
La versión utilizada en este artículo es flink1.13.6+hudi0.10.1


Nota:
1. Debe agregar la configuración taskmanager.numberOfTaskSlots: 4 en $FLINK_HOME/conf/flink-conf.yaml (más de 4 está bien, configuré 10 aquí), $FLINK_HOME/conf/worker está configurado como el nombre del nodo, copie varias veces, configuré 3 Hadoop01 aquí (Nota: Hadoop01 es mi nombre de nodo, modifíquelo de acuerdo con la situación real ) . El número de ranuras realmente activadas es 10x3=30.
2. Se requiere flink-connector-mysql-cdc-1.4.0.jar , es decir, el conector mysql-cdc se coloca debajo de la biblioteca de flink.

3. Mysql necesita abrir el registro binlog, debe modificar el archivo /etc/my.cnf y agregar los siguientes dos fragmentos de código.

server-id=1
log-bin=mysql-bin    


2. Empezar a parpadear

Ingrese al directorio bin de flink y ejecute

export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`
 
#启动flink
./start-cluster.sh

export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`

#启动flinksql   注意./lib/hudi-flink-bundle_2.11-0.10.1.jar换成自己下载的hudi路径
./sql-client.sh embedded -j ./lib/hudi-flink-bundle_2.11-0.10.1.jar shell

Puntos a tener en cuenta, 4 y 5 necesidades que no son elementos pueden ignorarse
1. Después de iniciar flinksql, debe configurar manualmente el tiempo del punto de control set execute.checkpointing.interval=10sec; 2.
Hudi se comprime automáticamente en un archivo de parquet, pero se ve afectado por los parámetros, se importa cinco veces de forma predeterminada antes de la compresión, y debe agregar parámetros para ajustarlo para comprimir una vez. Cuando la cantidad de datos aumenta en un instante, la escritura frecuente hace que el nodo de datos se cuelgue. Un parámetro de límite actual ( write.rate.limit) debe agregarse para controlarlo. 4. Cuando se cancela un trabajo de flink, el archivo de punto de control se eliminará de forma predeterminada. Para facilitar la reversión y el reinicio del trabajo, puede configurar el archivo de punto de control para que se   conserve al cancelar . establezca la ejecución.checkpointing.externalized-checkpoint-retention= RETAIN_ON_CANCELLATION; 5. Especifique la ruta del punto de guardado/punto de control a través de la ejecución.savepoint.path, y luego active el trabajo, y el trabajo se reiniciará desde el punto de guardado/punto de control. Cabe señalar que los parámetros establecidos son válidos dentro del ciclo de vida de la sesión del cliente flink sql y no se pueden desactivar. Solo puede reiniciar el cliente para borrar la configuración. establecer 'ejecución.savepoint.path'='hdfs:///tmp/flink/checkpoints/k-3'





3. Tiempo de juego libre

####创建mysql数据库连接

CREATE TABLE mysql_binlog2 (
name STRING ,
cust_id INT PRIMARY KEY NOT ENFORCED,
age INT
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'hadoop01',    --mysql数据库所在ip地址
'port' = '3306',     
'username' = 'root',        --账号
'password' = 'pwdd',        --密码
'server-time-zone' = 'Asia/Shanghai',
'debezium.snapshot.mode'='initial',    --读取方式,增量,全量
'database-name' = 'FlinkCDC',    --需要读取的数据库
'table-name' = 'person'     --需要读取的表
);




##创建hudi表,落地文件到hdfs上,参数视个人情况添加

create table hudi_test_1(
name STRING ,
cust_id INT,
age INT,
dt VARCHAR(20),
primary key(cust_id) not enforced
)PARTITIONED BY (dt)
with(
'connector'='hudi',
'path' = 'hdfs://hadoop02:8020/hudi/hudi_mysql_hive/',
'hoodie.datasource.write.recordkey.field'='cust_id',    --主键
'hoodie.parquet.max.file.size'='268435456',   --Hudi 写入阶段生成的 parquet 文件的大小
'write.precombine.field'='dt',   --时间记录,用于覆盖数据,当两个记录具有相同的键值时,将选择一个值最大的记录
'write.tasks'='1',  --执行实际写入的任务的并行度
'write.bucket_assign.tasks'='1',  --执行桶分配的任务的并行性,默认是执行环境的并行性。
'write.task.max.size'='1024',  --写入任务的最大内存(以MB为单位),当阈值达到时,它会刷新最大大小的数据桶以避免ooM,默认1G
'write.rate.limit'='30000',   --写入限制,每秒写入记录速率限制,以防止流量抖动并提高稳定性,默认为0(无限制)
'table.type'='MERGE_ON_READ',  
'compaction.tasks'='1',  --执行实际压缩的任务的并行性,默认为4。
'compaction.async.enabled'='true',  --开启自动压缩
'compaction.delta_commits'='1',  --通过提交数确定是否启动压缩,启动压缩所需的MAX Delta提交,默认为5提交
'compaction.max_memory'='500',  --用于压缩可溢出映射的最大内存(MB)
'changelog.enabled'='true',  --是否保留所有中间更改
'read.streaming.enabled'='true', --开启流式读
'read.streaming.check.interval'='3',
'hive_sync.enable'='true',  --将Hive meta异步同步到hms,默认为false
'hive_sync.mode'='hms',  
'hive_sync.metastore.uris'='thrift://hiveserver2:9083',  --hive的uri
'hive_sync.db'='test',  --hive数据库
'hive_sync.table'='hudi_test_1', --hive表
'hive_sync.username'='flinkcdc',  --hive 同步的用户名
'hive_sync.support_timestamp'='true'   --具有原始类型 TIMESTAMP_MICROS 的 INT64 转换为 hive 时间戳类型
);



##flinkCDC读取mysql数据写到hudi

insert into hudi_test_1 select *,date_format(now(),'yyyyMMdd') from mysql_binlog2

##查看数据写入情况

select * from hudi_test_1; --小数据量

select count(1) from  hudi_test_1;  --大数据量



Supongo que te gusta

Origin blog.csdn.net/qq_40788398/article/details/124040108
Recomendado
Clasificación