您可以使用Impala查询驻留在AmazonS3对象存储上的数据。此功能允许方便地访问远程管理、可从任何地方访问并与各种基于云的服务集成的存储系统。Impala可以从S3查询任何支持的文件格式的文件。S3存储位置可以是整个表,也可以是分区表中的单个分区。
以下指南总结了本主题其余部分中描述的最佳实践:
s3a:://[s3-bucket-name]。fs.s3a.connection.maximum对于impalad设置为1500。fs.s3a.block.size如果Impala查询的大多数Parquet文件是由Hive或ParquetMR作业写入的,则设置为134217728(128MB字节)。
如果Impala查询的大多数Parquet文件是由Impala写入的,请将块大小设置为268435456(256MB字节)。
fs.s3a.block.size,PARQUET_OBJECT_STORE_SPLIT_SIZE查询选项控制Parquet特定的拆分大小,而不是。默认值为256MB。DROPTABLE..PURGE比默认的快得多DROPTABLE。这同样适用于ALTERTABLE...DROPPARTITIONPURGE与默认DROPPARTITION操作。由于S3的最终一致性特性,该表或分区的文件在使用PURGE.默认DROPTABLE/PARTITION是慢的,因为Impala将文件复制到S3A垃圾文件夹,并且Impala等待直到所有数据移动。DROPTABLE/PARTITION..PURGE是一个快速删除操作,即使更改可能没有在整个S3中完全传播,Impala语句也会快速完成。INSERT语句比INSERTOVERWRITES3更快。默认情况下S3_SKIP_INSERT_STAGING设置为的查询选项true跳过常规INSERT(但不是INSERTOVERWRITE)的暂存步骤。这使得操作更快,但不能保证一致性:如果节点在执行过程中失败,表可能会以不一致的数据结束。false如果需要更强的一致性,请将此选项设置为,但是,此设置会使INSERT操作变慢。
INSERT和INSERTOVERWRITE表格提供了S3的速度快,无论设置的S3_SKIP_INSERT_STAGING。另外,ACID表保证了一致性。INSERT查询而有很多小文件,请使用bulk,INSERT以便将更多数据写入更少的文件。ImpalaSQL语句处理S3中的数据,如下所示:
s3a://为前缀LOCATION属性。ALTERTABLE还可以为LOCATION单个分区设置属性,以便表中的某些数据驻留在S3中,而同一个表中的其他数据驻留在HDFS上。CREATETABLEASSELECTCREATETABLEHDFSS3S3S3_SKIP_INSERT_STAGINGS3ImpalaS3core-site.xml
<property>
<name>fs.s3a.access.key</name>
<value>your_access_key</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>your_secret_key</value>
</property>
重要的:IDs3a://URLLOCATIONDESCRIBEFORMATTEDImpalacore-site.xml
ETLS3ImpalaImpalaDMLImpala
ImpalaDMLINSERTLOADDATACREATETABLEASSELECTS3DMLS3ors3a://LOCATIONaCREATETABLEALTERTABLEREFRESH
S3S3DMLHDFSLOADDATAINSERTCREATETABLEASSELECTINSERTCREATETABLEASSELECTS3Impala2.6S3_SKIP_INSERT_STAGINGINSERTS3INSERTOVERWRITELOADDATA
S3ImpalaAmazonS3Impala
重要的:
Impala2.6
PURGEDROPTABLEmandefaultpalaHDFSaoppalaieDROPTABLEtable_namePURGEDROPTABLEPURGEPURGEhadoopfs-cpINSERT
ImpalaS3REFRESHImpala
S3CREATETABLEorALTERTABLELOCATION
ALTERTABLELOCATIONS3HDFS
LOCATION
LOCATION 's3a://bucket_name/path/to/file'
s3a://.Impalas3://ors3n://
LOCATIONLOCATIONS3ImpalaS3
S3S3ImpalaHDFSHDFSS3
S3LOCATIONS3URLs3a://bucket/root/path/for/databaseLOCATIONLOCATION
2017HDFS2018S3
2018LOCATIONs3a://URLS3impala-demo
CREATE TABLE mostly_on_hdfs (x int) PARTITIONED BY (year INT);
ALTER TABLE mostly_on_hdfs ADD PARTITION (year=2017);
ALTER TABLE mostly_on_hdfs ADD PARTITION (year=2018)
LOCATION 's3a://impala-demo/dir1/dir2/dir3/t1';
S3
LOCATIONs3a://URLS3CREATE DATABASE db_on_s3 LOCATION 's3a://impala-demo/dir1/dir2/dir3';
CREATE TABLE partitioned_multiple_keys (x INT)
PARTITIONED BY (year SMALLINT, month TINYINT, day TINYINT);
ALTER TABLE partitioned_multiple_keys
ADD PARTITION (year=2015,month=1,day=1);
ALTER TABLE partitioned_multiple_keys
ADD PARTITION (year=2015,month=1,day=31);
!hdfs dfs -ls -R s3a://impala-demo/dir1/dir2/dir3
2015-03-17 13:56:34 0 dir1/dir2/dir3/
2015-03-17 16:47:13 0 dir1/dir2/dir3/partitioned_multiple_keys/
2015-03-17 16:47:44 0 dir1/dir2/dir3/partitioned_multiple_keys/year=2015/month=1/day=1/
2015-03-17 16:47:50 0 dir1/dir2/dir3/partitioned_multiple_keys/year=2015/month=1/day=31/
CREATEDATABASECREATETABLECREATEmkdir-p.
S3ImpalaImpala
ALTERTABLELOCATIONHDFSS3ImpalaHDFSS3ALTERTABLELOCATION
HDFSCREATETABLEorCREATEEXTERNALTABLE
S3
S3ImpalaCREATEEXTERNALTABLES3
S3ImpalaImpalaCREATETABLES3
S3SELECT
ALTERTABLE...ADDPARTITIONCOMPUTESTATSSHOWTABLESTATSSHOWCOLUMNSTATSS3S3
S3HDFSSELECTS3DataNodeImpalaHDFSS3
S3HDFSImpalaS3S3HDFSI/OS3HDFS.
PARQUET_OBJECT_STORE_SPLIT_SIZEParquet256MB
ImpalaHDFSS3S3HDFSCOMPUTESTATSImpala
BytesReadLocalBytesReadShortCircuitBytesReadDataNodeCachedBytesReadRemoteUnexpectedHDFSI/O
ImpalaS3
s3://s3n://s3a://.ALTERTABLE...SETCACHEDS3