当您在 Hive 中使用 S3 位置创建外部表时,数据何时传输?

Posted

技术标签:

【中文标题】当您在 Hive 中使用 S3 位置创建外部表时,数据何时传输?【英文标题】:When is the data transferred when you create an external table in Hive with an S3 location? 【发布时间】:2012-11-17 11:03:19 【问题描述】:

当您在 Hive(在 Hadoop 上)中使用 Amazon S3 源位置创建外部表时,数据何时传输到本地 Hadoop HDFS?是否开启:

外部表创建 在外部表上运行查询(MR 作业)时 从不(从未传输任何数据)并且 MR 作业读取 S3 数据。

S3 读取的成本是多少?将数据传输到 HDFS 是否有单一成本,或者没有数据传输成本,但当 Hive 创建的 MapReduce 作业在此外部表上运行时,会产生读取成本。

外部表定义示例如下:

CREATE EXTERNAL TABLE mydata (key STRING, value INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '='
LOCATION 's3n://mys3bucket/';

【问题讨论】:

(假设您的意思是财务成本)我认为您无需为同一 AWS 区域内的 S3 和 EC2 之间的传输付费aws.amazon.com/s3/pricing 【参考方案1】:

Map 任务将直接从 S3 读取数据。在 Map 和 Reduce 步骤之间,数据将被写入本地文件系统,而在 mapreduce 作业之间(在需要多个作业的查询中),临时数据将被写入 HDFS。

如果您担心 S3 读取成本,创建另一个存储在 HDFS 上的表并从 S3 表一次性复制到 HDFS 表可能是有意义的。

【讨论】:

【参考方案2】:

当查询(MR 作业)访问数据时,数据会传输到您的 hadoop 节点。 创建外部表只更改 Hive 元数据,从不移动实际数据。

【讨论】:

以上是关于当您在 Hive 中使用 S3 位置创建外部表时,数据何时传输?的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表位置与加载路径

Hive- 表

Hive面经

Hadoop Hive:创建具有动态位置的外部表

Hive内部表和外部表的区别

hive简单建表