impala(Impala的最佳做法)

更新时间:2023-09-21 14:06:18 所在栏目: 美容养生点击量:

Impala的最佳做法


选择准确的文件格式

关于多量数据(每个表或分区多个千兆字节),Parquet文件格式的功能最佳,由于它团结了列式存储布局,较大的I / O哀求轻重以及紧缩和编码。

关于较小的数据量(每个表或分区仅有几GB或更少),您约莫看不到文件格式之间的显着功能差别。 在小数据量下,可以经过变小并行实行的时机来抵消来自好效紧缩文件格式的I / O变小。

在方案消费摆设或举行基准测试时,请一直使用实践数据量来取得功能和可伸缩性的真实画面。


最小化将后果传输回客户端的开支

使用以下武艺:

· 聚合。 假如您必要晓得有几多行与某个条件婚配,某列中的婚配值的总和,最低或最高婚配值等,请调用聚合函数,比如COUNT(),SUM()和MAX() 而不是将后果集发送到使用步骤并在那边举行那些盘算。 请记取,未聚合后果集的范围约莫很大,必要多量时间才干在网络上传输。

· 过滤。 在查询的WHERE子句中使用一切实用的测试,以消弭不干系的行,而不是天生较大的后果集并使用使用步骤逻辑对其举行过滤。

· LIMIT子句。 假如您只必要查察后果会合的一些样本值,或使用ORDER BY举行查询的顶部或底部值,请使用LIMIT子句来减小后果集的轻重,而不是要求完备的后果集,然后 丢弃大局部的行。

选择切合的Parquet块尺寸

默许情况下,Impala INSERT…SELECT语句创建块轻重为256 MB的Parquet文件。 (此默许值在Impala 2.0中已变动。从前,限定为1 GB,但是Impala对紧缩举行了保守的估测,招致文件小于1 GB。)

Impala编写的每个Parquet文件都是单个块,从而允许单个主机将整个文件作为一个单位举行处理。 当您将Parquet文件复制到HDFS或HDFS文件体系之间时,请使用hdfs dfs -pb保存原始块轻重。

假如您的Parquet表中大概仅有一个查询拜候的分区中仅有一个或几个数据块,那么您约莫会由于不同的缘故而变慢:没有充足的数据来使用Impala的并行分布式 查询。 每个数据块由一个DataNode上的单个内核处理。 在16核盘算机的100个节点的会萃中,您约莫同时处理数千个数据文件。 您想在"很多小文件"和"单个大文件"之间找到一个均衡点,以均衡大容量I / O和并行处理。 您可以在实行INSERT…SELECT语句之前设置PARQUET_FILE_SIZE查询选项,以减小每个天生的Parquet文件的轻重。

对分区键列使用最小的得当整数典范

只管试图将字符串用作分区键列是很吸引人的,但是由于这些值一直会变成HDFS目次名,因此您可以经过将数字值用于稀有分区键字段(比如YEAR,MONTH和DAY)来最大水平地变小内存使用。 使用最小的整数典范来保存得当的值范围,通常MONTH和DAY为TINYINT,而YEAR为SMALLINT。 使用EXTRACT()函数可从TIMESTAMP值中提取各个日期和时间字段,并将CAST()前往值转换为得当的整数典范。

制止小文件

在Impala之外天生数据文件时,最好使用文本格式或Avro,您可以在此中逐行构建文件。

数据放入Impala后,您可以将其转换为更好效的Parquet格式,并使用单个INSERT…SELECT语句将其拆分为多个数据文件。 大概,假如您具有在数据准备历程中天生数兆字节的Parquet文件的基本布局,请实行此利用,并跳过Impala中的转换步调。

一直使用INSERT…SELECT在Impala中将多量数据从表复制到表。 关于多量数据或对功能至关紧张的表,请制止使用INSERT…VALUES,由于每个此类语句都市产生一个单独的弱小数据文件。

比如,假如一个Parquet表中有不计其数个分区,每个分区的数据少于256 MB,则思索以更细粒度的办法举行分区,比如按年/月而不是年/月/日。 假如听从低下的数据提取历程在同一表或分区中天生了数千个数据文件,请思索经过实行INSERT…SELECT紧缩一切数据到另一个表来紧缩数据。 数据将经过此历程重组为少数的较大文件。

(本文翻译自Z2 Little的文章《Best Practices of Impala》,参考:https://medium.com/@
xzz201920/best-practices-of-impala-3480069ae767)

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。