0

陈述我的问题
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_EXECUTE, inode="/tmp/hadoop-mapred/映射/分期“

以下是我在这里浏览文档后的问题

http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

1)这可行吗?我可以从 s3distcp 文档中看到可以给出任何 hdfs url。但我找不到任何关于它在外部集群情况下如何工作的文档。

2)我想知道在文档中提到的暂存目录(有人提到s3distcp在复制到s3之前将数据复制到这个目录)是在哪里创建的,即在远程集群或emr集群中。

4

2 回答 2

0

这绝对是可能的。没有看到你的 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我们发现这些最终对我们来说是可靠的。

我们现在已经转移到 EMR 流程,并且在 CDH 上只有几个剩余流程。但它仍然可以正常工作。在 EMR 集群中,我们使用 AWSs3-dist-cp命令​​,它比我们使用的 apache 版本更强大。它可能值得在您的集群上使用并尝试。

于 2018-01-07T03:57:30.307 回答
0

Distcp 喜欢在集群上发布数据(putting)而不是get;如果您在其中一个集群上有 kerberos,它需要在那个集群上运行。

对于您的任务,除非有 VPN 以便 EMR 集群可以看到另一个,否则您将无法访问。鉴于它的权限问题,我怀疑 kerberos 或其他身份验证而不是连接性。

于 2018-01-07T17:21:56.050 回答