如果集群在私有子网中,我如何通过应用程序访问 EMR 集群?
上次更新时间:2020 年 9 月 24 日
我想要使用 Apache Livy 之类的应用程序访问并将工作提交到处于私有子网中的 Amazon EMR 集群。
简短描述
在公有子网中创建 Application Load Balancer。将 Application Load Balancer 的目标设置为主节点的私有 IP 地址。这样做可使您连接到处于私有子网中的 EMR 集群,然后将作业提交到使用 REST API 的客户端。
解决方法
注意:如果您使用 Kerberos 启动集群或启用 SSL for Livy,以下操作可能无法起作用。
-
打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
在导航窗格中,选择 LOAD BALANCING 下的负载均衡器。
选择创建负载均衡器。
在选择负载均衡器类型页面上的 Application Load Balancer 下,选择创建。
在步骤 1:配置负载均衡器页面上:
对于方案,选择面向 Internet。
对于侦听器,使用默认选项(HTTP 和端口 80)
对于 VPC,选择 EMR 集群所在的 VPC。
对于可用区,选择两个子网。请确保其中一个是 EMR 集群所在的子网(私有子网)。 选择 Next: Configure Security Settings(下一步:配置安全设置)。 如果您在上一步创建了一个安全侦听器,请完成 Configure Security Settings(配置安全设置)页面。否则,选择 Next: Configure Security Groups(下一步:配置安全组)。 为 Application Load Balancer 选择安全组。请记住,这是面向 Internet 的 Application Load Balancer。最佳做法是使用安全组将传入请求限制在特定 IP 地址或 IP 地址范围。 选择下一步: 配置路由。 在步骤 4:配置路由页面上:
对于目标类型,选择 ip。
对于协议,选择 HTTP。
对于端口,输入客户端 Web UI 的端口。例如,对于 Livy,输入 8998。有关更多信息,请参阅查看 Amazon EMR 集群上托管的 Web 界面。
在 Health checks(运行状况检查)部分中,对于 Protocol(协议),选择 HTTP。
对于路径,输入 /sessions。 选择 Next: Register Targets(下一步:注册目标)。 在 Step 5: Register Targets(步骤 5:注册目标)页面上,对于 IP,输入主节点的私有 IP 地址。 您可以在 cluster details(集群详细信息)页面的 Hardware(硬件)选项卡上查找主节点的私有 IP 地址。 选择 Add to list(添加到列表)以将 IP 地址添加到 To be registered(待注册)列表中。 选择下一步:查看,然后选择创建。 当状态变为活动时,选择侦听器选项卡。 在规则列中,选择目标组链接。 在目标选项卡中,确认注册目标和可用区运行状况正常。 在描述选项卡上,选择负载均衡器旁的链接(该链接是负载均衡器的名称)。如果出现 Livy Web UI,配置将起作用,请求能够在私有子网中的 EMR 集群上到达 EMR。
您现在可以将作业提交至客户端。例如,以下命令将 Apache Spark 作业提交到 Livy 服务器。将 livyALB-2103017743.us-east-1.elb.amazonaws.com 替换为您的 Application Load Balancer 的 DNS 名称。您可以在 Application Load Balancer 的 Description(描述)选项卡中找到 DNS 名称。
curl -X POST --data '{"kind": "pyspark"}' -H "Content-Type: application/json" livyALB-2103017743.us-east-1.elb.amazonaws.com/sessions