使用s3distcp将数据从非emr集群复制到s3时的权限问题

ddrv8njm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(504)

陈述我的问题
1) 我想把我们的cdh hadoop集群备份到s3
2) 我们有一个emr集群在运行
3) 我试图从emr集群运行s3distcp,将src作为cdh远程集群的hdfs url,并将目的地作为s3。
出现以下错误:原因:org.apache.hadoop.ipc.remoteexception(org.apache.hadoop.security.accesscontrolexception):权限被拒绝:user=mapred,access=re ad\u execute,inode=“/tmp/hadoop mapred/mapred/staging”
以下是我在阅读完文档后提出的问题
http://docs.aws.amazon.com/emr/latest/releaseguide/usingemr_s3distcp.html
1) 这可行吗。我可以从s3distcp文档中看到,可以给出任何hdfs url。但是我找不到任何关于它如何在外部集群的情况下工作的文档。
2) 我想知道文档中提到的staging目录(提到s3distcp在复制到s3之前将数据复制到此目录)是在哪里创建的,即在远程集群或emr集群中。

bfnvny8b

bfnvny8b1#

这绝对是可能的。很难说没有看到distcp命令。这里有一些基本信息。。。
我们构建了一个相当复杂的过程,将cdh集群备份到s3。我们不需要做任何特殊的处理暂存目录。我们使用了cdh发行版中包含的distcp,它工作得很好。
这些都是从shell脚本运行的。我们制定的关键命令是

hadoop distcp $distcp_opts -m 20 -numListstatusThreads 15 -strategy dynamic -update -delete $distcp_source $distcp_target

首先设置这些变量:

distcp_opts="-Dfs.s3a.multipart.uploads.enabled=false -Dmapreduce.map.memory.mb=5000 -Dmapreduce.task.timeout=2400000 -Dmapreduce.map.maxattempts=8 -Dmapreduce.reduce.maxattempts=8 -Dfs.s3a.access.key=$AWS_ACCESS_KEY_ID -Dfs.s3a.secret.key=$AWS_SECRET_ACCESS_KEY"

distcp_source="hdfs://nameservice1/foo/$table/"
distcp_target="s3a://my-aws-bucket/foo/$table"

这个 distcp_opts 只是我们最终发现的对我们来说是可靠的。
我们现在已经转向电子病历流程,cdh上只有少数剩余流程。但它仍然运作良好。在emr集群中,我们使用aws s3-dist-cp 命令,它比我们使用的apache版本更强大。它可能值得在您的集群上提供并尝试。

p3rjfoxz

p3rjfoxz2#

distcp喜欢在集群上发布数据(puting)而不是获取数据;如果其中一个集群上有kerberos,那么它需要在该集群上运行。
对于您的任务,除非有一个vpn以便emr集群可以看到另一个,否则您将无法访问。考虑到权限的问题,我会怀疑kerberos或其他身份验证,而不是连接性。

相关问题