在Hive中创建具有S3位置的外部表时,数据是否已传输?

时间:2012-11-29 11:22:28

标签: hadoop amazon-s3 amazon hive

使用Amazon S3源位置在Hive(在Hadoop上)创建外部表时,数据将传输到本地Hadoop HDFS:

  • 外部表创建
  • 当quires(MR作业)在外部表上运行时
  • 从不(没有数据传输)和MR作业读取S3数据。

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

外部表定义的示例如下:

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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