【问题标题】:Standalone hive metastore with Iceberg and S3带有 Iceberg 和 S3 的独立 Hive Metastore
【发布时间】:2021-01-20 15:57:41
【问题描述】:

我想使用 Presto 来查询存储在 S3 中的 Iceberg 表作为 parquet 文件,因此我需要使用 Hive 元存储。我正在运行由 MySql 支持的独立配置单元元存储服务。我已将 Iceberg 配置为使用 Hive 目录:

import org.apache.hadoop.conf.Configuration;
import org.apache.iceberg.catalog.Namespace;
import org.apache.iceberg.hive.HiveCatalog;

public class MetastoreTest {

    public static void main(String[] args) {
        Configuration conf = new Configuration();
        conf.set("hive.metastore.uris", "thrift://x.x.x.x:9083");
        conf.set("hive.metastore.warehouse.dir", "s3://bucket/warehouse");
        HiveCatalog catalog = new HiveCatalog(conf);
        catalog.createNamespace(Namespace.of("my_metastore"));
    }

}

我收到以下错误:Caused by: MetaException(message:Got exception: org.apache.hadoop.fs.UnsupportedFileSystemException No FileSystem for scheme "s3")

我已将/hadoop-3.3.0/share/hadoop/tools/lib 包含在HADOOP_CLASSPATH 中,还将aws 相关的jar 复制到apache-hive-metastore-3.0.0-bin/lib。还缺少什么?

【问题讨论】:

    标签: hadoop amazon-s3 hive metastore iceberg


    【解决方案1】:

    终于想通了。首先(正如我之前已经提到的)我必须在HADOOP_CLASSPATH 中包含hadoop/share/hadoop/tools/lib。但是,无论是修改 HADOOP_CLASSPATH 还是将特定文件从工具复制到 common 都对我有用。然后我切换到 hadoop-2.7.7 并且它起作用了。此外,我不得不将与杰克逊相关的 jar 从工具复制到 common。我的hadoop/etc/hadoop/core-site.xml 看起来像这样:

    <configuration>
    
        <property>
            <name>fs.default.name</name>
            <value>s3a://{bucket_name}</value>
        </property>
    
    
        <property>
            <name>fs.s3a.impl</name>
            <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
        </property>
    
        <property>
            <name>fs.s3a.endpoint</name>
            <value>{s3_endpoint}</value>
            <description>AWS S3 endpoint to connect to. An up-to-date list is
                provided in the AWS Documentation: regions and endpoints. Without this
                property, the standard region (s3.amazonaws.com) is assumed.
            </description>
        </property>
    
    
        <property>
            <name>fs.s3a.access.key</name>
            <value>{access_key}</value>
        </property>
    
        <property>
            <name>fs.s3a.secret.key</name>
            <value>{secret_key}</value>
        </property>
    
    
    </configuration>
    

    此时,您应该可以使用 s3 存储桶了:

    hadoop fs -ls s3a://{bucket}/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2014-08-27
      相关资源
      最近更新 更多