首页 > 其他分享 >Hadoop整合AWS S3和Google gcs对象存储实践

Hadoop整合AWS S3和Google gcs对象存储实践

时间:2023-11-05 21:32:13浏览次数:42  
标签:jceks 存储 Google S3 AWS hadoop 访问 fs

1. 背景

https://blog.51cto.com/u_15327484/8193991介绍了海外Hadoop集群一般将冷数据放入到AWS S3或者存放到Google gcs对象存储中。这些对象存储都提供了各自的客户端进行访问,例如aws s3的客户端命令就是aws s3;gcs的客户端命令是gsutil。这些命令一般需要直接登陆到授权机器中执行,比较麻烦。

为了解决这个问题,AWS S3和Google gcs都提供了对应的SDK给Hadoop进行集成,通过指定对应的文件系统类,可以通过sdk访问s3和gcs。

2. hadoop整合aws s3对象存储

下载aws的SDK文件:hadoop-aws-x.x.x.jar,aws-java-sdk-bundle-x.x.x.jar,放到hadoop的安装目录hadoop/share/hadoop/common下。

在core-site.xml增加如下配置:

<property>
  <name>fs.s3a.access.key</name>
  <description>AWS access key ID.
   Omit for IAM role-based or provider-based authentication.</description>
  <value>xxxxxx</value>
</property>

<property>
  <name>fs.s3a.secret.key</name>
  <description>AWS secret key.
   Omit for IAM role-based or provider-based authentication.</description>
  <value>xxxxxx</value>
</property>

<property>
  <name>fs.s3a.aws.credentials.provider</name>
  <value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value>
</property>

注意,fs.s3a.aws.credentials.provider可以有多种配置:

  1. com.amazonaws.auth.EnvironmentVariableCredentialsProvider:使用环境变量AWS_ACCESS_KEY_ID 和AWS_SECRET_ACCESS_KEY。
  2. com.amazonaws.auth.InstanceProfileCredentialsProvider: 使用profile。
  3. org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider: 使用fs.s3a.access.key and fs.s3a.secret.key 配置项。一般都是用这种方式。

如果想通过credentials文件的方式访问,就在hdfs中创建credential文件:

hadoop credential create fs.s3a.access.key -value xxxxx -provider jceks://hdfs@cluster1/user/s3key/credential.jceks 
hadoop credential create fs.s3a.secret.key -value xxxxx -provider jceks://hdfs@cluster1/user/s3key/credential.jceks

方法方式:

hadoop fs -D hadoop.security.credential.provider.path=jceks://hdfs@cluster1/user/s3key/credential.jceks -ls s3a://bucket/

3. hadopo整合google gcs对象存储

下载gcs的SDK文件:gcs-connector-hadoop3-latest.jar,放到hadoop的安装目录hadoop/share/hadoop/common下。

在core-site.xml增加如下配置:

<property>
  <name>fs.AbstractFileSystem.gs.impl</name>
  <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
  <description>The AbstractFileSystem for 'gs:' URIs.</description>
</property>

这样就搭建好了基础的使用姿势。如果gcs开启了aksk认证,需要将aksk转化为credential写到hdfs中,在访问时指定credential即可完成认证:

hadoop credential create fs.gs.auth.service.account.email  \
  -provider jceks://hdfs/app/client-app-a/sa-data-access-a.jceks \
  -value "具体email"
hadoop credential create fs.gs.auth.service.account.private.key.id \
  -provider jceks://hdfs/app/client-app-a/sa-data-access-a.jceks \
  -value "ak"
hadoop credential create fs.gs.auth.service.account.private.key \
  -provider jceks://hdfs/app/client-app-a/sa-data-access-a.jceks \
  -value "sk"

如下,指定credential,即可完成认证并访问gcs:

hadoop dfs  -Dhadoop.security.credential.provider.path=jceks://hdfs@cluster/user/yuliang02/test/gdc-data-tianma.jceks  -ls  gs://gdc-data-tianma-sa/test/test_gcs_distcp_file

4. aws s3智能分层支持

4.1 aws s3智能分层介绍

AWS对S3有以下三种经常存储策略:

  • Standard:通用策略。
  • Standard-IA:不频繁访问策略,必须手动设置S3对象为不频繁访问,设置之后对象无法自动升级和降级。
  • Intelligent - Tiering:智能分层策略,根据数据冷热程度自动对存储进行升级和降级。

AWS S3智能分层策略流程:

  1. 初次上传文件到s3后,会存储在频繁访问层。
  2. 对于频繁访问层大于128KB的文件,如果超过30天没访问,就转移到不频繁访问层。
  3. 对于不频繁访问层的文件,如果超过90天没有访问,就转移到归档即时访问层。
  4. 对于归档即时访问层,如果手动设置N天移动归档访问层,经过N天会移动到归档访问层。
  5. 对于归档即时访问层,如果没有设置移动归档访问层,超过180天移动到深度存储归档层。
  6. 对于归档访问层,由于设置了存储时间上限,超过时间上限,会移动到深度存储归档层。
  7. 对于所有非频繁访问层的文件,一旦用户再次访问S3对象,就会将S3对象转化为频繁访问层。
  8. 不频繁访问层转化为频繁访问层,需要?时间(理论上切换不需要时间)。
  9. 归档即时访问层转化为频繁访问层,需要?时间(理论上切换不需要时间)。
  10. 归档访问层转化为频繁访问层,最长需要5h。
  11. 深度存储归档层转化为频繁访问层,最长需要12h。

其流程图如下所示:

Untitled.png

经过统计,总共2000TB的S3数据,最终大约会有1996.43TB落到不频繁访问层,最终每月能节省4779.03刀的存储费用。

HDFS默认情况下没有指定对象的存储策略,那么文件存储时就是通用策略。只有当设置了桶的存储策略后一段时间内才会将对象转变为Intelligent - Tiering类型。因此,可以引入https://issues.apache.org/jira/browse/HADOOP-12020,在s3a客户端指定对象的存储策略为Intelligent - Tiering类型。可以有效降低存储成本。其关键代码如下:

Untitled 1.png

客户端上传文件到S3时,在HDFS-site.xml中新增存储类型:

Untitled 2.png 上传到S3后,发现对象的存储类型就是智能分层类型:

Untitled 3.png

5. 智能分层相关业务适配

S3的整体存储信息来自于S3的inventory生成的文件,一般会建立一张hive表用于查询inventory信息。开启了智能分层后,inventory新增了智能分层字段,为了获取S3中每个对象的存储层次,需要在hive表中增加相应字段:

如下,在hive表中增加对象的存储类型和目前所处的层次字段:

Untitled 4.png

标签:jceks,存储,Google,S3,AWS,hadoop,访问,fs
From: https://blog.51cto.com/u_15327484/8195931

相关文章

  • VM安装RedHat7虚机ens33网络不显示IP问题解决
    1、今天在VMware中安装RedHat7.4虚拟机,网络连接使用的是NAT连接方式,刚开始安装成功之后输入ifconfig还能看到ens33自动分配的IP地址,但是当虚机关机重启后,再查看IP发现原来的ens33网络已经没有了,只变成了这两个:然后输入ipa查看网卡信息发现出现了下面的信息:ens33:<BROADCA......
  • [935] Python Programming in QGIS3
    ref:GettingStartedWithPythonProgramming(QGIS3)ref:1.4.1.UsingPyQGISinstandalonescripts ......
  • A. Copil Copac Draws Trees
    A.CopilCopacDrawsTrees题目大意:给出一个树边序列,要求你从1号节点建树,对于每条边只有两个端点中有一个绘制了才可以绘制此边思路:这题思路不难,但以前写图太少,遍历被卡,给每个边按序列编号,dfs如果该边的编号大于上条边\(ans++\)code:intn;vector<pii>a[N];intans[N]=......
  • aws cli 使用
    查看命令帮助awshelpawsec2helpawsec2create-imagehelp示例查看instanceidexportAWS_ACCESS_KEY_ID=exportAWS_SECRET_ACCESS_KEY=awsec2describe-instances\--filters"Name=private-ip-address,Values=$(hostname-I)"\--query"Reser......
  • vue3 google浏览器格式化控制台打印的数据
    ......
  • google analytics , looker , bigquery的区别
    GoogleAnalytics、Looker和BigQuery是Google提供的三种不同的数据服务,它们各自有不同的用途和功能。GoogleAnalytics:主要用途:GoogleAnalytics是一种网站和应用程序分析服务,它能帮助您理解用户如何与您的网站或应用互动。它收集关于页面浏览量、用户会话、用户行为......
  • vuejs3.0 从入门到精通——基于 Vite 搭建 Vue3 项目
    基于Vite搭建Vue3项目 一、为什么选Vitehttps://www.vitejs.net/ 在浏览器支持ES模块之前,JavaScript并没有提供的原生机制让开发者以模块化的方式进行开发。这也正是我们对“打包”这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运......
  • google test 之 TEST_F详解
    一、基本概念:googletest三种测试用例写法:TEST(test_suite_name,test_name)第一种是最基本写法:#include<gtest/gtest.h>intadd(inta,intb){returna+b;}TEST(testAdd,testArrayAdd){inta[]={1,2,3,4,5};intb[]={5,6,7,8,9};int......
  • Go开发工程师入门到项目实战 Google架构师联合大厂架构师出品
    01|Go语言课程介绍蔡超Mobvista技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师本节内容你好,我是蔡超,目前在Mobvista担任技术副总裁兼首席架构师。在加入Mobvista前,我也曾在亚马逊,惠普等公司担任过首席软件架构师。我是从小学四年级开始学习计算机编程的,并一直从事......
  • vuejs3.0 从入门到精通——初始化项目——路由
    路由 VueRouter是Vue.js官方的路由管理器,它和Vue.js深度集成,用于构建单页面应用。Vue.js单页面应用是基于路由和组件映射的,路由用于配置访问路径,将组件(components)映射到路由路径(routes)。一、路由模式 VueRouter常用的两种模式是hash模式和HTML5模式,对应的创建......