【大数据开发工程师】面试——Sqoop、Canal、Maxwell

sqoop主要用来做离线任务,每天定时执行脚本。

canal和maxwell主要用来做实时任务或拉链表,实时监控表的变化。

Sqoop

项目经验

Hive中的Null在底层是以“N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用--input-null-string和--input-null-non-string两个参数。导入数据时采用--null-string和--null-non-string。

canal

原理:伪装成mysql master的从机。拷贝binlog的内容到本机。

MySQL主从复制过程

  • Master主库将改变记录,写到二进制日志(binary log)中 
  • Slave从库向mysql master发送dump协议,将master主库的binary log events拷贝到它的中继日志(relay log);
  • Slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。

maxwell

抓取msql变化的原理也是基于binlog,但是它只有一个server把数据发送到消息队列或redis。

 Maxwell和canal工具对比

  • Maxwell没有canal那种server+client模式,只有一个server把数据发送到消息队列或redis。如果需要多个实例,通过指定不同配置文件启动多个进程。
  • Maxwell有一个亮点功能,就是canal只能抓取最新数据,对已存在的历史数据没有办法处理。而Maxwell有一个bootstrap功能,可以直接引导出完整的历史数据用于初始化,非常好用。
  • Maxwell不能直接支持HA,但是它支持断点还原,即错误解决后重启继续上次点儿读取数据。
  • Maxwell只支持json格式,而Canal如果用Server+client模式的话,可以自定义格式。
  • Maxwell比Canal更加轻量级。maxwell记录的每一行数据是一个SQL命令引起的一行变化,而canal记录的每一行数据是一个SQL命令引起的一个表的所有变化。
原文地址:https://www.cnblogs.com/lintong-zf/p/14235079.html