您可以使用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
语句比INSERTOVERWRITE
S3更快。默认情况下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上。CREATETABLEASSELECT
CREATETABLE
HDFSS3S3S3_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://
URLLOCATION
DESCRIBEFORMATTED
Impalacore-site.xml
ETLS3ImpalaImpalaDMLImpala
ImpalaDMLINSERT
LOADDATA
CREATETABLEASSELECT
S3DMLS3ors3a://
LOCATION
aCREATETABLEALTERTABLEREFRESH
S3S3DMLHDFSLOADDATA
INSERT
CREATETABLEASSELECT
INSERT
CREATETABLEASSELECT
S3Impala2.6S3_SKIP_INSERT_STAGING
INSERT
S3INSERTOVERWRITE
LOADDATA
S3ImpalaAmazonS3Impala
重要的:
Impala2.6
PURGE
DROPTABLE
mandefaultpalaHDFSaoppalaieDROPTABLEtable_namePURGEDROPTABLEPURGEPURGEhadoopfs-cpINSERT
ImpalaS3REFRESH
Impala
S3CREATETABLE
orALTERTABLE
LOCATION
ALTERTABLE
LOCATION
S3HDFS
LOCATION
LOCATION 's3a://bucket_name/path/to/file'
s3a://
.Impalas3://
ors3n://
LOCATION
LOCATION
S3ImpalaS3
S3S3ImpalaHDFSHDFSS3
S3LOCATION
S3URLs3a://bucket/root/path/for/databaseLOCATIONLOCATION
2017HDFS2018S3
2018LOCATION
s3a://
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
LOCATION
s3a://
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/
CREATEDATABASE
CREATETABLE
CREATE
mkdir-p
.
S3ImpalaImpala
ALTERTABLE
LOCATION
HDFSS3ImpalaHDFSS3ALTERTABLE
LOCATION
HDFSCREATETABLE
orCREATEEXTERNALTABLE
S3
S3ImpalaCREATEEXTERNALTABLE
S3
S3ImpalaImpalaCREATETABLE
S3
S3SELECT
ALTERTABLE...ADDPARTITION
COMPUTESTATS
SHOWTABLESTATS
SHOWCOLUMNSTATS
S3S3
S3HDFSSELECT
S3DataNodeImpalaHDFSS3
S3HDFSImpalaS3S3HDFSI/OS3HDFS.
PARQUET_OBJECT_STORE_SPLIT_SIZE
Parquet256MB
ImpalaHDFSS3S3HDFSCOMPUTESTATS
Impala
BytesReadLocal
BytesReadShortCircuit
BytesReadDataNodeCached
BytesReadRemoteUnexpected
HDFSI/O
ImpalaS3
s3://
s3n://
s3a://
.ALTERTABLE...SETCACHED
S3