具有Azure Blob存储的Hive外部表

时间:2017-04-02 01:16:32

标签: hive azure-storage

是否有办法使用SerDe创建一个Hive外部表,其位置指向Azure存储,其组织方式使得数据使用最少数量的blob。例如,如果插入10000个记录,我希望它只创建100个页面blob,每个包含100个行记录,而不是10000个,每个记录1个记录。我是从blob序列化的,所以更少的blob需要更少的时间。什么是hive中最优化的格式?

1 个答案:

答案 0 :(得分:1)

首先,有一种方法可以使用Serde创建Hive外部表,其中locald指向Azure Blob存储,但不是直接创建,请参阅下面的HiveQL部分Create Hive database and tables

create database if not exists <database name>;
CREATE EXTERNAL TABLE if not exists <database name>.<table name>
(
    field1 string,
    field2 int,
    field3 float,
    field4 double,
    ...,
    fieldN string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>' lines terminated by '<line separator>'
STORED AS TEXTFILE LOCATION '<storage location>' TBLPROPERTIES("skip.header.line.count"="1");

并将以下内容集中于解释<storage location>

  

<storage location> :用于保存Hive表数据的Azure存储位置。如果未指定LOCATION,则默认情况下,数据库和表将存储在Hive集群的默认容器中的hive / warehouse /目录中。如果要指定存储位置,则存储位置必须位于数据库和表的默认容器中。此位置必须以&#39; wasb:///<directory 1>/&#39;或者&#39; wasb:///<directory 1>/<directory 2>/&#39;等执行查询后,相关目录将在默认容器中创建。

因此,这意味着您可以通过wasb协议访问Hive上的Azure Blob存储位置,该协议需要支持Hadoop访问Azure存储上的HDFS的hadoop-azure库。如果您的Hadoop Hiveop未部署在Azure上,则需要参考Hadoop官方文档Hadoop Azure Support: Azure Blob Storage进行配置。

对于使用serde,它取决于您使用的文件格式,例如orc文件格式,使用OrcSerde的hql代码,如下所示。

CREATE EXTERNAL TABLE IF NOT EXSISTS <table name> (<column_name column_type>, ...)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
    STORED AS ORC 
    LOCATION '<orcfile path>'

对于您的第二种,最佳格式是Hive中的ORC File Format