从客户端应用程序写入的 Google Dataproc 将集群的内部 IP 用于 Datanodes

我已在 Google Cloud 上设置了 Dataproc 集群。 它已启动并正在运行,我可以从“浏览器”控制台中的 SSH 访问 HDFS 和复制文件。所以问题不在 Dataproc 端。

我现在使用 Pentaho(ELT 软件)来复制文件。 Pentaho 需要访问 Master 和 Data 节点。

我收到以下错误消息:

456829 [Thread-143] WARN org.apache.hadoop.hdfs.DataStreamer - Abandoning BP-1097611520-10.132.0.7-    1611589405814:blk_1073741911_1087
456857 [Thread-143] WARN org.apache.hadoop.hdfs.DataStreamer - Excluding datanode DatanodeInfoWithStorage[10.132.0.9:9866,DS-6586e84b-cdfd-4afb-836a-25348a5080cb,DISK]
456870 [Thread-143] WARN org.apache.hadoop.hdfs.DataStreamer - DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/jmonteilx/pentaho-shim-test-file.test could only be replicated to 0 nodes instead of minreplication (=1).  There are 2 datanode(s) running and 2 node(s) are excluded in this operation.
    at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.choosetarget4NewBlock(BlockManager.java:1819)
    at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.choosetargetForNewBlock(FSDirWriteFileOp.java:265)
    at org.apache.hadoop.hdfs.server.namenode.Fsnamesystem.getadditionalBlock(Fsnamesystem.java:2569)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:846)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:510)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:503)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:989)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:871)
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:817)
    at java.security.accessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1893)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2606)

日志中使用的IP地址是我在Dataproc中的第一个datanode的内部IP。 我需要使用外部 IP。

我的问题如下,

在客户端文件中的配置文件中是否有任何更改?

我试过了:

<property>    
        <name>dfs.client.use.datanode.hostname</name>    
        <value>true</value>
</property>

没有成功, 非常感谢,

langku 回答:从客户端应用程序写入的 Google Dataproc 将集群的内部 IP 用于 Datanodes

ETL 工具无法通过内部部署数据中心的外部 IP 访问 DataNode,因为可能您的防火墙规则阻止了来自 Internet 的访问或您创建了 Dataproc cluster with internal IPs

也就是说,允许从 Internet 访问 HDFS 存在安全风险。默认情况下,Dataproc 集群不配置使用 Kerberos 的安全身份验证,因此如果您决定将集群开放到互联网,您至少应该configure secure access 到它。

首选解决方案是在内部部署和 GCP 集群之间建立安全网络连接并通过它访问 HDFS。您可以在 GCP documentation 中阅读有关此选项的更多信息。

本文链接:https://www.f2er.com/1023809.html

大家都在问