当前位置: 首页 > 工具软件 > S3QL > 使用案例 >

AWS S3桶 配置访问权限(AKSK)的流程

百里成仁
2023-12-01

一、背景

在新上线的机器上,需要给hadoop配置AKSK,否则在该机器上执行的任务将无法访问S3中的文件。

AK:Access Key Id,用于标示用户

SK:Secret Access Key,是用户用于加密认证字符串和用来验证认证字符串的密钥

容器如果其宿主机配置了角色(Role)权限,则对应的容器不需要配置aksk也可以访问S3

Flume服务和hiveserver2的的S3权限配置方法查看最后补充内容


二、流程

  • 登录主机

使用root账号登录需要访问S3桶的机器

  • 验证机器没有权限登录

首先输入hdfs指令,确认该机器没有权限登录S3桶

hdfs dfs -ls s3://桶名/

报下面错误的就是没有权限

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain

  • 编辑配置文件

配置文件所在的路径为

/etc/hadoop/conf/core-site.xml

备份配置文件

cp /etc/hadoop/conf/core-site.xml /etc/hadoop/conf/core-site.xml_bak

编辑配置文件,通常将AKSK添加在下面位置,方便查找

vi /etc/hadoop/conf/core-site.xml


<!-- AKSK -->
  <property>
    <name>fs.s3.awsAccessKeyId</name>
    <value>这里填AK</value>
  </property>
  
  <property>
    <name>fs.s3.awsSecretAccessKey</name>
    <value>这里填SK</value>
  </property>


</configuration>

※按shift+g (G)自动跳转到最后一行

※按shift+4 ($)条转到行最后一个字符

【注意】记得切换成英文输入法,否则可能按什么都没反应

  • 在根目录创建mnt文件夹

因为在AWS集群中,执行作业的时候会在本地机器创建缓存文件。如果该文件夹不存在,或者没有访问文件夹的权限,则会报错

登录root账号,在根目录创建

※参数-p是若指定的目录(mnt、mnt1、mnt2、mnt3)不存在,则创建该目录

mkdir -p /mnt/s3
mkdir -p /mnt1/s3
mkdir -p /mnt2/s3
mkdir -p /mnt3/s3
mkdir -p /mnt4/s3

然后修改文件夹权限

※参数-R是将该目录下的文件、文件夹的权限一并修改

chmod -R 777 /mnt
chmod -R 777 /mnt1
chmod -R 777 /mnt2
chmod -R 777 /mnt3
chmod -R 777 /mnt4

  • 验证机器有权限登录

输入hdfs指令,确认该机器已有权限登录S3桶,正常输出桶路径下文件则说明没有问题

hdfs dfs -ls s3://S3桶名/

三、补充内容

  • Flume服务的S3权限配置

flume使用的配置项不是下面这个文件

/etc/hadoop/conf/core-site.xml

而是需要查看flume服务启动时导入的参数文件,其中--conf-file 后面的文件即该文件启动时所载入的配置文件

jps -ml
749 flume.Application --conf-file /xxx/conf/flume.conf

编辑里面的S3桶的配置

default_hdfs_path=s3://AK:SK@桶路径

  • hiveserver2服务的S3权限配置

如果是hiveserver2的机器配置AKSK后,则可能依旧会出现以下报错

Error running hive query: 
org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: BXY1RFNT2S0X40Z5; S3 Extended Request ID: yt6I7Ieig9vhBUFFRSmysr0NY6cQABowIDgrPPT/MqCKUVDqtc91ootdSud1Pb416X24tQ1vHhU=; Proxy: null)
	at ...
Caused by: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: BXY1RFNT2S0X40Z5; S3 Extended Request ID: yt6I7Ieig9vhBUFFRSmysr0NY6cQABowIDgrPPT/MqCKUVDqtc91ootdSud1Pb416X24tQ1vHhU=; Proxy: null)
    at ...

原因:

在独立容器部署的hive中,使用添加core-site.xml新增AKSK的方法,会因为默认的hidden configuration配置的原因,导致在Hive server2端配置中指定的AKSK会被隐藏,无法被完整传递到YARN上,最终在子节点的container任务端上就会发生无法辨识身份的S3 400错误问题。

此报错的处理方法为:需要在hiveserver2中的hive-site.xml中添加下面的参数

vi /etc/hive/hiveserver2/conf/hive-site.xml  


    <property>
        <name>hive.conf.hidden.list</name>
        <value>none</value>
        <description>Hidden config in hive</description>
    </property>

 类似资料: