[英]How AWS EMR resize
我今天在使用AWS EMR時遇到了一些問題。
EMR為我們調整群集大小提供了非常簡單的方法,添加刪除一些節點很容易。
在apache hadoop中,我們可以修改slaves
文件來更改添加或刪除節點。 但我發現EMR中的slaves
文件只包含localhost
,我找不到任何其他配置來指示slave的位置。
EMR如何在主節點中添加或刪除群集中的節點,甚至沒有重啟過程?
master和slaves文件僅由shell腳本使用,如start-all.sh,start-dfs.sh等。這些文件不會被hadoop中的任何其他函數使用。 從hadoop集群角度來看,這些文件未定義namenode,secondary namenode,worker節點的位置。 EMR未使用這些shell腳本來啟動集群。 core-site.xml中的屬性fs.default.name或fs.defaultFS定義namenode主機。 以此配置開頭的所有數據節點都將報告給namenode並添加到集群中。 類似地,resourcemanager主機在所有節點的yarn-site.xml中定義。
我們不需要重新啟動集群中的任何進程來添加新節點。 一旦datanode啟動,它將報告給namenode,這樣節點將為HDFS做出貢獻。 類似地,一旦nodemanager啟動,它將向集群的資源管理器報告,它將為處理層做出貢獻。
在EMR中,我們有3種類型的節點。
對於EMR集群,主節點將只有一個。 該節點是具有namenode和所有主服務的節點,如Resourcemanager,HBase Master等。
核心節點是具有存儲和處理能力的節點,這意味着它具有數據節點和節點管理器。 我們可以增加核心節點的數量,但我們不能減少數量,因為它會導致數據丟失。
任務節點是僅具有處理能力的節點。 這基本上用於服務瞬態負載。 這只有nodemanager。 沒有數據節點與此節點關聯。 我們可以增加或減少任務節點的數量。
在調整群集大小時,現有群集不會受到干擾。 在EMR中不調用start-all.sh,stop-all.sh等腳本。 它啟動單個服務並啟動集群。 因此不考慮主文件和從屬文件中的條目。
在AWS EMR上使用自動擴展,您可以在群集上的節點中擴展和擴展。 可以使用Cloudwatch指標(YARNMemoryAvailablePercentage和ContainerPendingRatio)觸發橫向擴展操作。 以下示例政策
"AutoScalingPolicy":
{
"Constraints":
{
"MinCapacity": 10,
"MaxCapacity": 50
},
"Rules":
[
{"Name": "Compute-scale-up",
"Description": "Scale out based on ContainerPending Mterics",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": 1,
"CoolDown":0}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-up",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "ContainerPending",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 10,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
},
{"Name": "Compute-scale-down",
"Description": "Scale in",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": -1,
"CoolDown":300}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-down",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "MemoryAvailableMB",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 24000,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
}
]
}
您可以參考此博客了解更多詳情https://aws.amazon.com/blogs/big-data/dynamically-scale-applications-on-amazon-emr-with-auto-scaling/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.