栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

使用腾讯云EMR spark程序通过内网VPC方式访问亚马逊S3

使用腾讯云EMR spark程序通过内网VPC方式访问亚马逊S3

1.背景:

        部分业务数据存放在亚马逊S3上,但大数据集群是购买腾讯云emr,希望通过内网专线从腾讯云emr上读取S3的数据写入基于腾讯云cos的hudi中;

2.环境:

        Hadoop 3.2.2

        spark 3.1.2

        hudi 0.9

        腾讯云 cos

        亚马逊云 s3

        spark添加jar包:aws-java-sdk-1.12.52.jar;     aws-java-sdk-bundle-1.12.52.jar;    aws-java-sdk-core-1.12.52.jar;    aws-java-sdk-kms-1.12.52.jar

3.问题:

        亚马逊云s3外网访问速度非常慢,极大概率出现访问超时情况,并且数据传输非常不安全,需要使用专线通过亚马逊提供的interface的VPC endpoint进行访问,但是在此环境下,通过配置S3 bucket访问秘钥来读取数据报错,配置代码如下:

sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.access.key", "xxxxx");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.secret.key", "xxxxx");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.endpoint","https://bucket.vpce-xxxxxxx-ap-east-1b.s3.ap-east-1.vpce.amazonaws.com ")

查询可能出现的原因,增加其他配置:

System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "false");

还是会报同样错误,具体错误如下:

 4.解决过程:

 向亚马逊提case,寻求帮助,亚马逊技术支持回复为hadoop版本过低导致,修复此问题后的版本为Hadoop version 3.3.2

[1] https://issues.apache.org/jira/browse/HADOOP-17677 

[2] https://issues.apache.org/jira/browse/HADOOP-17705      

  此时检查hadoop官网和git,最新版本为hadoop 3.3.1

 我寻思这不扯淡吗,又去找亚马逊技术支持

[1] https://github.com/apache/hadoop/tree/branch-3.3 

然后我们希望升级hadoop,但是因为是购买腾讯云emr服务,并不支持升级为hadoop 3.3.1,但因为我们使用spark读取s3,讲道理只需要替换spark集成hadoop的包为3.3.1版本就可以;

于是我们替换spark安装目录下jars文件夹内 hadoop-common 为3.3.1版本进行测试,报错信息发生变化,忘记保存,报错与社区下面错误相同,无法设置endpoint.region导致,此问题已解决,会在hadoop 3.3.2版本发布。这 ... 又回到起点,于是我们根据hadoop github上的 17705 提交,修改了3.3.1版本代码,并重新编译打包了hadoop-common 3.3.1上传并替换至spark jars目录,成功可以配置endpoint.region,从而解决此问题

[HADOOP-17705] S3A to add option fs.s3a.endpoint.region to set AWS region - ASF JIRA

sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.access.key", "xxxxxxx");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.secret.key", "xxxxxxx");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.endpoint.region", "xxxxxxx");
sparkSession.sparkContext().hadoopConfiguration().set("fs.s3a.endpoint", "xxxxxxx");

5.总结

已知此问题解决方法2个:

(1)等hadoop-3.3.2版本发布,整个集群更新为此版本,其他组件更新为相应兼容版本

(2)使用hadoop-3.3.1版本,根据hadoop项目 github上的 17705 提交修改源码,重新打包hadoop-common-3.3.1替换driver端spark目录下jars内hadoop-common可解决,但会引发其他问题,目前发现有提交spark任务,yarn不能分配资源,已解决,解决方案如下文:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号