Kettle和Sqoop的使用感触

近一个月来,主要针对数据仓库的数据融合进行研究工作。尝试使用kettle在hive和数据库之间进行导数据。

针对hive上的查询,kettle可以进行的很快,但是针对hive上插入,就变的十分慢。原因主要就是因为hive本身就不知道insert的批量处理,针对独立的hive版本驱动,kettle是没有进行相应驱动的集成,依次会调用独立的insert的插入功能,此时,hive将每一个insert进行map然后再进行分发到hadoop中去进行,导致整个插入十分缓慢。针对这样的问题,通常的解决方案就是将数据首先写入到hdfs中,然后在hive中执行相关的load命令执行。在准备kettle的hdfs驱动问题时,发现,kettle只能支持特定发行版本的hadoop生态软件,hive的完整驱动应该也是只能是特定的开发才行,如kettle8.3中自带的cdh61\emr511\hdp30针对big data 的驱动才可以。因此导致kettle在big data比较局限。

但是,kettle可以在数据转换间生成成熟的sql语句,大大减少了sql的工作量,同时能够大大减少表名、字段、格式的错误,因此可以kettle来加快sql的撰写功能。

针对数据的导出导入,这里还是推荐使用sqoop,可以自定义支持的数据库、大数据版本,具有良好的适应性,而且sqoop比kettle在全数据的迁移速度上还是要快很多,kettle还是不够快。

在hive中的数据抽取、数据分层,可以直接执行由kettle生成的SQL语句,使用create table xxx as (select *** from xxx)类似语句,不用独立再撰写SQL来创建表,可较快的生成分层数据。

总结:

  • kettle对big data的支持还是有限,在关系型数据库之间进行集成推荐使用,如集成oracle\mysql\sqlserver到kingbase等任务,可以手动进行配置,还是比较简单方便。当然还有特别好用的就是各种数据清洗、数据过滤、数据转换任务。
  • sqoop用来迁移关系型到非关系型数据库,用于数据仓库的数据集成工作。
  • 可以借助kettle来辅助书写SQL语句。

推荐阅读更多精彩内容