前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Iceberg在微软云azure上的部署实践

Iceberg在微软云azure上的部署实践

作者头像
大数据技术与应用实战
发布2021-11-11 15:28:05
1.8K0
发布2021-11-11 15:28:05
举报
文章被收录于专栏:大数据技术与应用实战
  • 前言
  • 微软云设置
    • 创建存储账号
    • 创建容器
  • hadoop的配置
    • 添加环境变量
    • 配置文件
    • 相关jar包
    • Azure Blob Storage 存储的支持
  • hive的支持
    • 复制jar包
    • 修改配置
  • spark的支持
    • 复制jar包
    • 配置文件
  • flink的支持
  • trino的支持

前言

本文主要讲解一下iceberg数据湖在微软云azure上面的部署方案,采用的方案是通过hadoop的api写入azure,和之前写入hdfs没有太大区别,只需要配置一下hadoop的配置文件即可。iceberg这里不需要做任何改动。目前支持Azure Blob StorageAzure Data Lake Storage Gen2。此外着重说明一下,azure仅支持hadoop 3.2 以上的版本,否则的会报错 java.io.ioexception no filesystem for scheme : abfss.

微软云设置

创建存储账号

首先我们需要去创建一个微软云的存储账号,具体的方法可以参考官方文档,https://docs.microsoft.com/zh-cn/azure/storage/common/storage-account-create?tabs=azure-portal ,如果我们需要Azure Data Lake Storage Gen2,则需要在创建账户的过程中启用分层命名空间, 具体参考这个 https://docs.microsoft.com/zh-cn/azure/storage/blobs/create-data-lake-storage-account

由于Azure Data Lake Storage Gen2专门针对大数据分析做了优化,并且Azure Data Lake Storage Gen2集成了Azure Blob Storage 的功能,所以我们这里采用了Azure Data Lake Storage Gen2来讲解相关的配置。其相关介绍参考 :https://docs.microsoft.com/zh-cn/azure/storage/blobs/data-lake-storage-introduction

创建容器

接下来创建一个容器,这个容器我个人理解有点namespace的意思,我们可以逻辑上和物理上对数据进行相关的划分,比如我们可以每个业务或者每个数据库指定使用一个容器,用于区分。

比如我这里创建了一个叫做mydatalake的容器.

hadoop的配置

添加环境变量

在${HADOOP_HOME}/etc/hadoop/hadoop-evn.sh中添加

代码语言:javascript
复制
HADOOP_OPTIONAL_TOOLS="hadoop-azure,hadoop-azure-datalake"

配置文件

目前使用的hadoop-3.2.2版本,我们使用最简单的配置,只配置core-site.xml,其实在配置文件只需要配置存储账号和access key就可以了,它会自动访问azure的地址进行读写,

代码语言:javascript
复制
<property>
        <name>fs.azure.account.key.${youraccount}.dfs.core.windows.net</name>
        <value>${YOUR ACCESS KEY}</value>
</property>

其中youraccount就是你申请的微软云存储的账号,比如我上面申请的baidudatalake , ACCESS KEY也就是帐户访问密钥,如果获取可以参考 :https://docs.microsoft.com/zh-cn/azure/storage/common/storage-account-keys-manage?tabs=azure-portal。

但是这个access key是没有受保护的,直接配置在core-site.xml里面,一旦泄露是很危险的,所以我们在生产上需要加密存储。

加密方式如下:我们使用hadoop的命令创建一个加密的文件.

代码语言:javascript
复制

hadoop credential create fs.azure.account.key.youraccount.dfs.core.windows.net -value 123
    -provider localjceks://file/home/lmccay/wasb.jceks

其中create后面的参数中,youraccount替换成你的存储账号,--value后面的参数值(比如示例中的123) 替换成你的 access key.之后就会在/home/lmccay/目录下生成一个wasb.jceks文件.

然后在配置文件core-site.xml添加配置。不要明文的在core-site.xml中配置fs.azure.account.key.youraccount.dfs.core.windows.net,上述讲解只是为了增加理解。

代码语言:javascript
复制
<property>
  <name>hadoop.security.credential.provider.path</name>
  <value>localjceks://file/home/lmccay/wasb.jceks</value>
  <description>Path to interrogate for protected credentials.</description>
</property>

为了方便的通过hdfs命令行管理,我们可以配置fs.defaultFS,这样就不用每次都写全路径了.

示例如下:

代码语言:javascript
复制
    <property>
        <name>fs.defaultFS</name>
        <value>abfss://{your container}@{your account }.dfs.core.windows.net/</value>
    </property>

相关jar包

为了方便,我们把azure相关的jar包全部拷贝到 ${HADOOP_HONE}/share/hadoop/common 下面,azure相关的jar包有azure相关的包和wildfly-openssl-1.0.7.Final.jar

Azure Blob Storage 存储的支持

Azure Blob Storage存储我们这暂时不用,不过有用的话可以参考下,其实和Azure Data Lake Storage Gen2配置差不多.

示例如下:

代码语言:javascript
复制

<property>
      <name>fs.azure.account.key.{your account}.blob.core.windows.net</name>
      <value>{access key}</value>
</property>

    <property>
            <name>fs.defaultFS</name>
        <value>wasbs://{your container}@{your account}.blob.core.windows.net/</value>
    </property>

线上环境也是用加密的密钥来替换access key。

hive的支持

目前我们并没涉及到相关的hive任务,但是由于在生产中iceberg的元数据是存储到hive的,所以还是需要讲一下.

复制jar包

和hadoop中的配置一样,将上面的jar包复制到hive的${HIVE_HOME}/lib下面。

修改配置

代码语言:javascript
复制
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>abfss://{your container}@{your account }.dfs.core.windows.net/user/hive3/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>

spark的支持

spark我这里使用的是spark-3.1.2-bin-hadoop3.2版本,请注意需要hadoop的最低版本要求是3.2.

复制jar包

和hadoop中的配置一样,将azure需要的jar包复制到spark的${SPARK_HOME}/jars下面。

配置文件

配置文件和以前操作hdfs一样,不需要特殊修改.我这里给一个示例 在${SPARK_HOME}/conf/spark-defaults.conf中添加

代码语言:javascript
复制
spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark.sql.catalog.iceberg = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.iceberg.type = hive
spark.sql.catalog.iceberg.uri = thrift://localhost:9083

flink的支持

flink的集成主要是再通过hadoop api操作的时候,需要集成一下flink-shaded-hadoop的jar包,目前没有合适的hadoop 3.2版本的包,需要自己打包编译一个,具体的地址是 https://github.com/apache/flink-shaded.git ,目前最新版已经移除了hadoop的模块,需要切换到以前的旧的分支,我这里是切换到原来的release-10.0分支,修改hadoop的版本为hadoop 3.2 ,然后重新打包编译,最后得到一个flink-shaded-hadoop-2-uber-3.2.2-10.0.jar的包,替换掉原来的即可。

trino的支持

目前对于trino来说,相对于以前查询hdfs没任何改动,就是配置iceberg connecter的时候,指定的core-site.xml需要从hadoop集群复制过来一份即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术与应用实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 微软云设置
    • 创建存储账号
      • 创建容器
      • hadoop的配置
        • 添加环境变量
          • 配置文件
            • 相关jar包
              • Azure Blob Storage 存储的支持
              • hive的支持
                • 复制jar包
                  • 修改配置
                  • spark的支持
                    • 复制jar包
                      • 配置文件
                      • flink的支持
                      • trino的支持
                      相关产品与服务
                      容器服务
                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档