在新上线的机器上,需要给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 ($)条转到行最后一个字符
【注意】记得切换成英文输入法,否则可能按什么都没反应
因为在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使用的配置项不是下面这个文件
/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的机器配置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>