通过Lamba函数创建EMR:在Config文件中获取主机名/ IP

时间:2017-05-23 15:57:44

标签: python amazon-web-services lambda config emr

我正在尝试通过Lambda函数配置/启动EMR。它可以正常工作,除了在配置文件中获取IP地址或主机名。我正在尝试为presto config.properties文件配置一个属性,如

"hive.metastore.uri" : "thrift://<IP address of the Master Node>:9083"

每次启动新的群集/ emr时,我不确定如何在配置文件中获取要替换的主节点的IP地址或主机名?我试过了 -

"hive.metastore.uri" : "thrift://${yarn.nodemanager.hostname}:9083"

它没有用,它不会用实际的主机名替换主机名。

    Configurations=[
        {
            "Classification": "presto-log",
            "Properties": {
              "com.facebook.presto":"DEBUG",
              "com.sun.jersey.guice.spi.container.GuiceComponentProviderFactory":"DEBUG",
              "com.ning.http.client":"DEBUG",
              "com.facebook.presto.server.PluginManager":"DEBUG"
            }
        },
        {
            "Classification": "presto-config",
            "Properties": {
                "http-server.threads.max" : "500",
                "discovery-server.enabled" : "true",
                "sink.max-buffer-size" : "1GB",
                "query.max-memory" : "90GB",
                "query.max-history" : "40",
                "query.min-expire-age" : "100m",
                "http-server.log.path" : "/var/log/presto/http-request.log",
                "http-server.log.max-size" : "67108864B",
                "http-server.log.max-history" : "5",
                "log.max-size" : "268435456B",
                "log.max-history" : "5",
                "distributed-joins-enabled" : "true",
                "query.client.timeout" : "30m"
            }
        },
        {
            "Classification": "presto-connector-hive",
            "Properties": {
                "hive.s3.connect-timeout" : "2m",
                "hive.s3.max-backoff-time" : "10m",
                "hive.s3.max-error-retries" : "50",
                "hive.metastore-refresh-interval" : "1m",
                "hive.s3.max-connections" : "500",
                "hive.s3.max-client-retries" : "50",
                "connector.name" : "hive-hadoop2",
                "hive.s3.socket-timeout" : "2m",
                "hive.metastore.uri" : "thrift://${yarn.nodemanager.hostname}:9083",
                "hive.metastore-cache-ttl" : "20m",
                "hive.s3.staging-directory" : "/mnt/tmp",
                "hive.s3.use-instance-credentials" : "true",
                "hive.external-table-writable " : "true"
            }
        }
    ],

任何想法如何使这个工作?

1 个答案:

答案 0 :(得分:0)

您无需在配置上设置hive.metastore.uri。 EMR将在所有节点上自动配置此参数,以包含主节点的FQDN(Metastore守护程序所在的位置)。

如果您确实想要在应用程序配置上替换master / core / task的FQDN,那么EMR上没有支持的文档可以这样做。但是,Amazon EMR版本使用基于Apache BigTop的系统打包。因此,您可以在config API上使用yaml文件中定义的参数。

https://github.com/apache/bigtop/blob/master/bigtop-deploy/puppet/hieradata/bigtop/cluster.yaml

示例JSON:

[
    {
    "Classification": "presto-config",
            "Properties": {
                "http-server.http.port" : "8081",
                "discovery.uri" : "http://%{hiera('bigtop::hadoop_head_node')}:8081",
            }
    }
]

其中,

%{hiera('bigtop::hadoop_head_node')}:可用于替换主节点的FQDN

%{fqdn}:可用于替换自己的FQDN。

注意:未对此配置进行测试以成功启动EMR群集,并且所有此类自定义参数的使用都应由您自行承担风险。