āĻšā§āĻ¯āĻžāĻ˛ā§! āĻāĻŽāĻ°āĻž āĻŽāĻžāĻ¨ā§āĻˇāĻā§ āĻŦāĻĄāĻŧ āĻĄā§āĻāĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŖ āĻĻāĻŋāĻāĨ¤ āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻžāĻĄāĻŧāĻž āĻŦāĻĄāĻŧ āĻĄā§āĻāĻžāĻ¤ā§ āĻāĻāĻāĻŋ āĻļāĻŋāĻā§āĻˇāĻžāĻŽā§āĻ˛āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻž āĻ āĻ¸āĻŽā§āĻāĻŦ, āĻ¯āĻžāĻ° āĻāĻĒāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§ āĻāĻāĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻāĻ āĻāĻžāĻ°āĻŖā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻāĻŋ āĻĨāĻžāĻā§ đ āĻāĻŽāĻ°āĻž āĻāĻāĻŋāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨, āĻāĻŋāĻāĻ¨āĻŋāĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ¨ā§ āĻ¨āĻŋāĻ¯ā§āĻā§āĻ¤ āĻĨāĻžāĻāĻŋ āĻāĻŦāĻ āĻā§āĻ˛ā§āĻ°āĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸ā§āĻāĻžāĻ¨ā§ MapReduce āĻāĻžāĻāĻ°āĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸ā§āĻĒāĻžāĻ°ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻāĻ āĻĒā§āĻ¸ā§āĻā§ āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻāĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ˛āĻŋāĻā§ āĻ
āĻ¸āĻŽ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ˛ā§āĻĄāĻŋāĻāĻ¯āĻŧā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž
āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽā§āĻĄā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž. āĻ¨āĻŋāĻˇā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ āĻ¸āĻŽ. āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻā§āĻ˛āĻžāĻ¸ āĻāĻā§, āĻ¯āĻāĻ¨ 30 āĻāĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻ¨ āĻļāĻŋāĻā§āĻˇāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨āĨ¤ āĻ āĻĨāĻŦāĻž āĻāĻŦāĻžāĻ°, āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻŽāĻžāĻ° āĻāĻā§ āĻāĻŽāĻ¨ āĻāĻŋāĻā§ āĻĻāĻŋāĻ¨ āĻāĻā§ āĻ¯āĻāĻ¨ āĻ˛ā§āĻĄ āĻ āĻ¨ā§āĻ āĻŦā§āĻĄāĻŧā§ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻŦāĻžāĻāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻāĻŋ āĻāĻ¨ā§āĻĄāĻžāĻ°āĻ˛ā§āĻĄ āĻŽā§āĻĄā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ #1 āĻšāĻ˛ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ°āĻžāĻāĻž āĻ¯āĻž āĻĒāĻŋāĻ āĻ˛ā§āĻĄ āĻ¸āĻšā§āĻ¯ āĻāĻ°āĻŦā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻžāĻāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ # 2 āĻšāĻ˛ āĻāĻāĻāĻŋ āĻā§āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ°āĻžāĻāĻž, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻā§ āĻāĻŦāĻ āĻĒāĻŋāĻ āĻ˛ā§āĻĄā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ¨ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ #3 āĻšāĻ˛ āĻāĻāĻāĻŋ āĻā§āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ°āĻžāĻāĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ˛ā§āĻĄ āĻ¨āĻŋāĻ°ā§āĻā§āĻˇāĻŖ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻ¯ā§āĻ āĻ āĻ āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°āĻŦā§āĨ¤
āĻāĻ āĻĒā§āĻ¸ā§āĻā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ #3 āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤ āĻāĻ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻā§āĻ˛āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻāĻžāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻļā§āĻ˛ āĻāĻŦāĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§āĻ°āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻāĻŽāĻ°āĻž Mail.ru āĻā§āĻ˛āĻžāĻāĻĄ āĻ¸āĻ˛āĻŋāĻāĻļāĻ¨ āĻā§āĻ˛āĻžāĻāĻĄ āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻŦāĻ MCS API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ˛āĻŋāĻā§āĻāĻŋāĨ¤ āĻāĻŦāĻ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĄā§āĻāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻļāĻŋāĻāĻŋāĻ¯āĻŧā§āĻāĻŋ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻžāĻ¨ā§āĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻāĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻĒā§āĻ°ā§āĻŦāĻļāĻ°ā§āĻ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ Hadoop āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž HDP āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻ¯ā§āĻ āĻāĻŦāĻ āĻ¸āĻ°āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻŽāĻŋāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤
- āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ¨ā§āĻĄāĨ¤ āĻ āĻŋāĻ āĻāĻā§, āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§ āĻāĻŋāĻā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻ: āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¨ā§āĻĄ, āĻ¯āĻžāĻ° āĻāĻĒāĻ°, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¸ā§āĻĒāĻžāĻ°ā§āĻ āĻĄā§āĻ°āĻžāĻāĻāĻžāĻ° āĻāĻžāĻ˛ā§ āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻ¨ā§āĻāĻžāĻ°ā§āĻā§āĻāĻŋāĻ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤
- āĻ¤āĻžāĻ°āĻŋāĻ āĻ¨ā§āĻĄ. āĻāĻāĻŋ āĻ¸ā§āĻ āĻ¨ā§āĻĄ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ HDFS-āĻ āĻĄā§āĻāĻž āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
- āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻ¨ā§āĻĄāĨ¤ āĻāĻāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¨ā§āĻĄ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ HDFS-āĻ āĻāĻŋāĻā§ āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°ā§āĻ¨ āĻ¨āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŖāĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ. āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¨ā§āĻĄā§āĻ° āĻāĻžāĻ°āĻŖā§ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻāĻāĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻāĻŦāĻ āĻ¯ā§āĻ āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨, āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻ¤āĻŋ āĻā§āĻŦ āĻāĻŽ āĻšāĻŦā§ - āĻĄāĻŋāĻāĻŽāĻŋāĻļāĻ¨ āĻāĻŦāĻ āĻ°āĻŋāĻāĻŽāĻŋāĻ āĻāĻ°āĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻ¨ā§āĻāĻž āĻ˛āĻžāĻāĻŦā§ā§ˇ āĻāĻāĻŋ, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻĒāĻ¨āĻŋ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻĨā§āĻā§ āĻ¯āĻž āĻāĻļāĻž āĻāĻ°ā§āĻ¨ āĻ¤āĻž āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŦāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¨ā§āĻĄ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ¨āĻž. āĻ¤āĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°āĻŦā§ āĻ¯āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻāĻžāĻ˛ āĻā§āĻĄāĻŧā§ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻžāĻĻā§āĻ° āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻĒāĻžāĻāĻĨāĻ¨ 3 āĻ āĻ˛ā§āĻāĻž āĻāĻā§, āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ Ambari API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ°
- āĻŽāĻĄāĻŋāĻāĻ˛
autoscaler.py
. āĻāĻāĻŋāĻ¤ā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻļā§āĻ°ā§āĻŖā§ āĻ°āĻ¯āĻŧā§āĻā§: 1) Ambari āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨, 2) MCS āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨, 3) āĻ āĻā§āĻ¸ā§āĻā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻ° āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨āĨ¤ - āĻ˛āĻŋāĻĒāĻŋ
observer.py
. āĻŽā§āĻ˛āĻ¤ āĻāĻāĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤: āĻāĻāĻ¨ āĻāĻŦāĻ āĻā§āĻ¨ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§ āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ā§ˇ - āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛
config.py
. āĻāĻāĻŋāĻ¤ā§ āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¯āĻž āĻĒā§āĻ°āĻāĻžāĻŦāĻŋāĻ¤ āĻāĻ°ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨ā§āĻĄ āĻ¯ā§āĻā§āĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻĨā§āĻā§ āĻāĻ¤āĻā§āĻˇāĻŖ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻā§āĻ˛āĻžāĻ¸ āĻļā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻāĻŽāĻ¸ā§āĻā§āĻ¯āĻžāĻŽā§āĻĒāĻ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¯āĻžāĻ¤ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻā§ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻāĻ¨ āĻĒā§āĻ°āĻĨāĻŽ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§āĻ° āĻā§āĻĄā§āĻ° āĻā§āĻāĻ°ā§āĻā§āĻ˛ā§ āĻĻā§āĻāĻŋāĨ¤
1. Autoscaler.py āĻŽāĻĄāĻŋāĻāĻ˛
āĻ āĻŽā§āĻŦāĻ°ā§ āĻā§āĻ˛āĻžāĻ¸
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻ§āĻžāĻ°āĻŖāĻāĻžāĻ°ā§ āĻā§āĻĄ āĻāĻāĻāĻŋ āĻā§āĻāĻ°āĻž āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŋ Ambari
:
class Ambari:
def __init__(self, ambari_url, cluster_name, headers, auth):
self.ambari_url = ambari_url
self.cluster_name = cluster_name
self.headers = headers
self.auth = auth
def stop_all_services(self, hostname):
url = self.ambari_url + self.cluster_name + '/hosts/' + hostname + '/host_components/'
url2 = self.ambari_url + self.cluster_name + '/hosts/' + hostname
req0 = requests.get(url2, headers=self.headers, auth=self.auth)
services = req0.json()['host_components']
services_list = list(map(lambda x: x['HostRoles']['component_name'], services))
data = {
"RequestInfo": {
"context":"Stop All Host Components",
"operation_level": {
"level":"HOST",
"cluster_name": self.cluster_name,
"host_names": hostname
},
"query":"HostRoles/component_name.in({0})".format(",".join(services_list))
},
"Body": {
"HostRoles": {
"state":"INSTALLED"
}
}
}
req = requests.put(url, data=json.dumps(data), headers=self.headers, auth=self.auth)
if req.status_code in [200, 201, 202]:
message = 'Request accepted'
else:
message = req.status_code
return message
āĻāĻĒāĻ°ā§, āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻĒāĻ¨āĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ stop_all_services
, āĻ¯āĻž āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ¨ā§āĻĄā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻĒā§āĻ°āĻŦā§āĻļ āĻĒāĻĨā§ Ambari
āĻāĻĒāĻ¨āĻŋ āĻĒāĻžāĻ¸:
ambari_url
, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŽāĻ¤'http://localhost:8080/api/v1/clusters/'
,cluster_name
- āĻāĻŽāĻŦāĻžāĻĄāĻŧāĻŋāĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ,headers = {'X-Requested-By': 'ambari'}
- āĻāĻŦāĻ āĻāĻŋāĻ¤āĻ°ā§
auth
āĻāĻāĻžāĻ¨ā§ Ambari āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ:auth = ('login', 'password')
.
āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻ¨āĻŋāĻā§āĻ REST API-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ Ambari-āĻ¤ā§ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻ˛ āĻāĻžāĻĄāĻŧāĻž āĻāĻ° āĻāĻŋāĻā§āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻĄā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻžāĻ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§, āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ¨ā§āĻĄā§, āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻ°āĻžāĻā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻŋā§ˇ INSTALLED
. āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨, āĻ°āĻžāĻā§āĻ¯ā§ āĻ¨ā§āĻĄ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ Maintenance
āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻāĻāĻ āĻ°āĻāĻŽ - āĻāĻā§āĻ˛āĻŋ API āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻŽāĻžāĻ¤ā§āĻ°āĨ¤
āĻā§āĻ˛āĻžāĻ¸ Mcs
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻ§āĻžāĻ°āĻŖāĻāĻžāĻ°ā§ āĻā§āĻĄ āĻāĻāĻāĻŋ āĻā§āĻāĻ°āĻž āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŋ Mcs
:
class Mcs:
def __init__(self, id1, id2, password):
self.id1 = id1
self.id2 = id2
self.password = password
self.mcs_host = 'https://infra.mail.ru:8774/v2.1'
def vm_turn_on(self, hostname):
self.token = self.get_mcs_token()
host = self.hostname_to_vmname(hostname)
vm_id = self.get_vm_id(host)
mcs_url1 = self.mcs_host + '/servers/' + self.vm_id + '/action'
headers = {
'X-Auth-Token': '{0}'.format(self.token),
'Content-Type': 'application/json'
}
data = {'os-start' : 'null'}
mcs = requests.post(mcs_url1, data=json.dumps(data), headers=headers)
return mcs.status_code
āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻĒā§āĻ°āĻŦā§āĻļ āĻĒāĻĨā§ Mcs
āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻāĻĄā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻĒā§āĻ°āĻā§āĻā§āĻ āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻāĻāĻāĻžāĻ° āĻāĻāĻĄāĻŋ, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻ¤āĻžāĻ° āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ¸ āĻāĻ°āĻŋāĨ¤ āĻāĻžāĻ°ā§āĻ¯āĻ°āĻ¤ vm_turn_on
āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻžāĻ˛ā§ āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ āĻāĻāĻŋāĻ˛āĨ¤ āĻā§āĻĄā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§, āĻ¤āĻŋāĻ¨āĻāĻŋ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ: 1) āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻā§āĻ¨ āĻĒā§āĻ¤ā§ āĻšāĻŦā§, 2) āĻāĻŽāĻžāĻĻā§āĻ° āĻšā§āĻ¸ā§āĻāĻ¨āĻžāĻŽāĻāĻŋāĻā§ āĻāĻŽāĻ¸āĻŋāĻāĻ¸-āĻ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻ¨āĻžāĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, 3) āĻāĻ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻāĻāĻĄāĻŋ āĻĒā§āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻ°āĻž āĻā§āĻŦāĻ˛ āĻāĻāĻāĻŋ āĻĒā§āĻ¸ā§āĻ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻ āĻŽā§āĻļāĻŋāĻ¨āĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋāĨ¤
āĻāĻāĻāĻŋ āĻā§āĻā§āĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻā§āĻā§:
def get_mcs_token(self):
url = 'https://infra.mail.ru:35357/v3/auth/tokens?nocatalog'
headers = {'Content-Type': 'application/json'}
data = {
'auth': {
'identity': {
'methods': ['password'],
'password': {
'user': {
'id': self.id1,
'password': self.password
}
}
},
'scope': {
'project': {
'id': self.id2
}
}
}
}
params = (('nocatalog', ''),)
req = requests.post(url, data=json.dumps(data), headers=headers, params=params)
self.token = req.headers['X-Subject-Token']
return self.token
āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸
āĻāĻ āĻā§āĻ˛āĻžāĻ¸ā§ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ˛āĻāĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻ āĻāĻļ āĻĻā§āĻāĻ¤ā§ āĻā§āĻŽāĻ¨:
class Autoscaler:
def __init__(self, ambari, mcs, scaling_hosts, yarn_ram_per_node, yarn_cpu_per_node):
self.scaling_hosts = scaling_hosts
self.ambari = ambari
self.mcs = mcs
self.q_ram = deque()
self.q_cpu = deque()
self.num = 0
self.yarn_ram_per_node = yarn_ram_per_node
self.yarn_cpu_per_node = yarn_cpu_per_node
def scale_down(self, hostname):
flag1 = flag2 = flag3 = flag4 = flag5 = False
if hostname in self.scaling_hosts:
while True:
time.sleep(5)
status1 = self.ambari.decommission_nodemanager(hostname)
if status1 == 'Request accepted' or status1 == 500:
flag1 = True
logging.info('Decomission request accepted: {0}'.format(flag1))
break
while True:
time.sleep(5)
status3 = self.ambari.check_service(hostname, 'NODEMANAGER')
if status3 == 'INSTALLED':
flag3 = True
logging.info('Nodemaneger decommissioned: {0}'.format(flag3))
break
while True:
time.sleep(5)
status2 = self.ambari.maintenance_on(hostname)
if status2 == 'Request accepted' or status2 == 500:
flag2 = True
logging.info('Maintenance request accepted: {0}'.format(flag2))
break
while True:
time.sleep(5)
status4 = self.ambari.check_maintenance(hostname, 'NODEMANAGER')
if status4 == 'ON' or status4 == 'IMPLIED_FROM_HOST':
flag4 = True
self.ambari.stop_all_services(hostname)
logging.info('Maintenance is on: {0}'.format(flag4))
logging.info('Stopping services')
break
time.sleep(90)
status5 = self.mcs.vm_turn_off(hostname)
while True:
time.sleep(5)
status5 = self.mcs.get_vm_info(hostname)['server']['status']
if status5 == 'SHUTOFF':
flag5 = True
logging.info('VM is turned off: {0}'.format(flag5))
break
if flag1 and flag2 and flag3 and flag4 and flag5:
message = 'Success'
logging.info('Scale-down finished')
logging.info('Cooldown period has started. Wait for several minutes')
return message
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻ¸ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻŋāĨ¤ Ambari
и Mcs
, āĻ¨ā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¯āĻž āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻ¨ā§āĻĄ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ: YARN-āĻ āĻ¨ā§āĻĄā§ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻŽā§āĻŽāĻ°āĻŋ āĻāĻŦāĻ cpuāĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ 2āĻāĻŋ āĻ
āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ°āĻ¯āĻŧā§āĻā§ q_ram, q_cpu, āĻ¯āĻž āĻ¸āĻžāĻ°āĻŋāĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ˛ā§āĻĄā§āĻ° āĻŽāĻžāĻ¨ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŋ āĻ¯ā§ āĻāĻ¤ 5 āĻŽāĻŋāĻ¨āĻŋāĻ āĻ§āĻ°ā§ āĻā§āĻ°āĻŽāĻžāĻāĻ¤āĻāĻžāĻŦā§ āĻ˛ā§āĻĄ āĻŦā§āĻĻā§āĻ§āĻŋ āĻĒā§āĻ¯āĻŧā§āĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ +1 āĻ¨ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻĄāĻžāĻ° āĻāĻāĻāĻŋāĻ˛āĻžāĻāĻā§āĻļāĻ¨ āĻ¸ā§āĻā§āĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ āĻāĻāĻ āĻāĻĨāĻžāĨ¤
āĻāĻĒāĻ°ā§āĻ° āĻā§āĻĄāĻāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¯āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŽā§āĻļāĻŋāĻ¨āĻā§ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄā§ āĻāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻāĻāĻŋ āĻĄāĻŋāĻāĻŽāĻŋāĻļāĻ¨ āĻāĻā§ YARN Nodemanager
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻŽā§āĻĄ āĻāĻžāĻ˛ā§ āĻšāĻ¯āĻŧ Maintenance
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄā§ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻŋāĨ¤
2. āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻ.py
āĻ¸ā§āĻāĻžāĻ¨ āĻĨā§āĻā§ āĻ¨āĻŽā§āĻ¨āĻž āĻā§āĻĄ:
if scaler.assert_up(config.scale_up_thresholds) == True:
hostname = cloud.get_vm_to_up(config.scaling_hosts)
if hostname != None:
status1 = scaler.scale_up(hostname)
if status1 == 'Success':
text = {"text": "{0} has been successfully scaled-up".format(hostname)}
post = {"text": "{0}".format(text)}
json_data = json.dumps(post)
req = requests.post(webhook, data=json_data.encode('ascii'), headers={'Content-Type': 'application/json'})
time.sleep(config.cooldown_period*60)
āĻāĻāĻŋāĻ¤ā§, āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ āĻ¯ā§ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļāĻ°ā§āĻ¤ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻž āĻāĻŦāĻ āĻ°āĻŋāĻāĻžāĻ°ā§āĻā§ āĻā§āĻ¨ā§ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻā§ āĻāĻŋ āĻ¨āĻž, āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋāĻ° āĻšā§āĻ¸ā§āĻāĻ¨āĻžāĻŽ āĻĒāĻžāĻ¨, āĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĻāĻ˛ā§āĻ° āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻŋāĨ¤ āĻ¯āĻžāĻ° āĻĒāĻ° āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ cooldown_period
, āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻāĻŋāĻā§ āĻ¯ā§āĻ āĻŦāĻž āĻ
āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°āĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻā§āĻŦāĻ˛ āĻ˛ā§āĻĄ āĻ¨āĻŋāĻ°ā§āĻā§āĻˇāĻŖ āĻāĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻļā§āĻ˛ āĻšāĻ¯āĻŧā§ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ˛ā§āĻĄ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ°āĻŋāĻĄā§āĻ°ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻā§āĻŦāĻ˛ āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻ¨ā§āĻĄ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻāĻ°ā§āĻāĻāĻŋ āĻ¯ā§āĻ āĻāĻ°āĻŋāĨ¤
āĻ¯ā§ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻŽāĻ¨ā§ āĻāĻāĻāĻŋ āĻĒāĻžāĻ āĻāĻā§, āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻžāĻ¨āĻŋ āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻĄ āĻ¯āĻĨā§āĻˇā§āĻ āĻšāĻŦā§ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§āĻ° āĻ¨ā§āĻĄ āĻļā§āĻ°ā§ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒāĻžāĻ āĻļā§āĻˇ āĻ¨āĻž āĻšāĻāĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ°āĻžāĻāĻŋāĨ¤ āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ˛āĻžāĻĒā§āĻ° āĻāĻžāĻāĻŽāĻ¸ā§āĻā§āĻ¯āĻžāĻŽā§āĻĒā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻā§āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻ¯āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ āĻ¸āĻŽ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ˛ā§āĻĄāĻŋāĻ āĻ āĻ¨ā§āĻāĻŦ āĻāĻ°ā§āĻ¨ āĻ¤āĻāĻ¨ āĻ āĻā§āĻ¸ā§āĻā§āĻ¯āĻžāĻ˛āĻžāĻ° āĻ¸ā§āĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻāĻŦāĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§ˇ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻĒāĻŋāĻ āĻ˛ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻĄāĻžāĻ°āĻ˛ā§āĻĄā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻāĻŋ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¨āĻž, āĻ āĻ°ā§āĻĨ āĻ¸āĻžāĻļā§āĻ°āĻ¯āĻŧ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻžāĻ˛, āĻĒā§āĻ˛āĻžāĻ¸ āĻāĻ āĻ¸āĻŦ āĻāĻĒāĻ¨āĻžāĻ° āĻ āĻāĻļāĻā§āĻ°āĻšāĻŖ āĻāĻžāĻĄāĻŧāĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻāĻŦā§. āĻ āĻā§āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻ¨āĻŋāĻā§āĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ° āĻāĻĒāĻŋāĻāĻ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ āĻāĻĒāĻŋāĻāĻāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ˛ā§āĻāĻž āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻāĻžāĻĄāĻŧāĻž āĻāĻ° āĻāĻŋāĻā§āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻž āĻ āĻŦāĻļā§āĻ¯āĻ āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻž āĻĻāĻ°āĻāĻžāĻ° āĻ¤āĻž āĻšāĻ˛ āĻ¨ā§āĻĄā§āĻ° 3 āĻĒā§āĻ°āĻāĻžāĻ°ā§ āĻŦāĻŋāĻāĻžāĻāĻ¨, āĻ¯ā§āĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻā§ āĻ˛āĻŋāĻā§āĻāĻŋāĨ¤ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻā§āĻļāĻŋ āĻšāĻŦā§āĻ¨.
āĻāĻ¤ā§āĻ¸: www.habr.com