马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本文针对csv文件导入到 HANA速度进行优化,以测试数据导入速度与那些因素相关,使用哪些方法能加快csv文件导入速度,以获取HANA的最快导入速度。 硬件因素SAP HANA的极限导入速度是与硬件的配置相关的,无论我们在软件层面做多少工作,硬件的配置是影响导入速度极限的重要因素,本人总结以下几项硬件配置主要影响SAP HANA的导入极限速度。 由于SAP HANA导入数据会实时地将事务log,delta log写到硬盘中,因此硬盘的读写速度尤为重要。推荐使用SSD作为Log区和Data区的硬盘,并且将需导入的csv文件放入SSD中,以达到最快读取速度。 SAP HANA支持利用多线程并行导入数据,因此CPU核数决定了导入数据的并行程度。核数越多,并行程度越好,导入速度越快。 SAP HANA是内存数据库,因此数据导入到数据库内存空间是最核心的内容,如果内存不够大,导入的数据会导致SAP HANA数据库内存不足,从而需要unload其他数据以腾出空间,降低导入效率。另一个原因是,在读取csv文件的过程中,csv文件会被读取到cache中,这会占用一部分内存。当cache占用过多内存的情况下,linux系统会自动释放cache以供SAP HANA使用,这个释放的过程也会影响到导入效率。因此通过实验,若想达到最大导入速度,本人推荐剩余的内存空间需达到导入文件所占磁盘2倍。 导入文件因素针对导入文件有以下因素可影响导入速度。 如果csv文件包含不符合元组格式的数据,则此次batch的导入全部失败,从而导入数据不一致,会降低导入速度。例如csv中某些字段长度超过SAP HANA表定义的字段长度。(在导入文件包含中文时经常发生此类问题) SAP HANA导入单个csv文件时,可利用多线程技术,并行导入此文件,但如果文件太小,就无法充分利用所有线程来并行导入文件。通过实验,每个csv文件大小超过(100M*线程数)则不会影响导入速度的提升。 若包含多个csv文件进行导入,有两种方式:利用足够多的线程串行导入所有csv文件或者利用多个进程并行导入csv文件。经测试,第二种方式不会加快导入速度,反而当进程数多于3个时,导入速度降低。因此推荐采用足够多的线程串行导入所有csv文件。 SAP HANA内部因素在SAP HANA中,数据既存储在内存中也存储在硬盘中,同时也会记录在日志中,因此,达到最大导入速度,最重要的是数据到达SAP HANA内存中,因此需要舍弃一些影响导入速度的设置,以达到极限速度。 Partition在导入前对大表进行partition有助于并行插入数据,可提高导入速度。经测试,线程数是partition数的整数倍时速度较快。方式为Hash partition,并且类型为数字类型效时率最高。举例: alter table "table name" partition by hash(col1,col2) partitions 10; Auto merge对列存储而言,插入的数据会存储在目标表的Delta区,在导入过程中系统会自动的将Delta区数据merge到main区,此过程不能进行数据的导入,因此需要在导入前disable auto merge保证导入过程不会进行merge,从而提升导入效率。可在导入操作结束后统一进行merge。举例: alter table "table name" disable automerge ; Delta log对列存储而言,导入过程中,SAP HANA需同步将Delta log写入到硬盘以保证重启系统后,Delta 区的数据可以恢复。此过程会影响导入效率,在导入数据之前,可通过Disable delta log的方式,以牺牲数据安全性的代价来提高导入效率,在导入结束,进行merge后,enable delta log即可恢复安全。(注:若关闭Delta log,在导入过程中发生系统崩溃,则已导入数的数据将会丢失,需重新导入。)举例: alter table "table name" disable delta log ; 导入线程数为了充分利用多核的并行优势,在导入数据时可以指定线程数。经实验,线程数=CPU核数时,CPU使用量可超过90%。举例: import from csv file 'csv path’ into “table name” with threads [CPU cores];
Batch数量SAP HANA导入数据是分批导入的,因此每批次导入数据的条数会影响导入效率,经实验,每次导入100000导入效率最高。举例: import from csv file 'csv path’ into “table name” with threads [CPU cores] batch 100000; 总结根据两款不同的硬件配置,得出最大导入速度不同,具体如下。 硬件配置 | 导入速度 | CPU: 16 cores Memory: 256GB 硬盘:SSD | | CPU: 80 cores Memory: 1TB 硬盘: SSD | |
导入操作的具体操作流程如下图所示。
|