рд╣рдо рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рде рдореБрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ: рдареЗрда рдмреИрдВрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд▓рд┐рд╡реА

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреИрдВрдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реЙрд▓реНрд╡реЗрдВрд╕реА рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ (рдХреНрд░реЗрдбрд┐рдЯ рдмреНрдпреВрд░реЛ, рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ, рдЖрджрд┐) рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рд╣рд░реА рднрд╛рдЧреАрджрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдИ рджрд░реНрдЬрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗрд╡рд▓ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рднрд░реНрддреА рдХрд░реЗрдВрдЧреЗред рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЫреЛрдЯреА рдЯреАрдо рдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдФрд░ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред

рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдмреИрдВрдХ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреА рдПрдХ рдЯреАрдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреИрд╕реЗ рдХрд░рддреА рд╣реИред



рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

Hadoop рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣рдорд╛рд░реА рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ, рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ SmartData рдХрд╣рддреЗ рд╣реИрдВред рд╕реНрдорд╛рд░реНрдЯрдбрд╛рдЯрд╛ рдмрд╛рд╣рд░реА рдПрдЬреЗрдВрдЯреЛрдВ рд╕реЗ рдПрдкреАрдЖрдИ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдмреИрдВрдХ рдХреЗ рдмрд╛рд╣рд░реА рднрд╛рдЧреАрджрд╛рд░ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рджреЛрдиреЛрдВ рд╣реИрдВ)ред рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ "рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓" рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВред рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдСрдкрд░рд┐рдЯрд┐рдлрд╝рд┐рд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЖрдкрд░реЗрдЯрд┐рдлрд╝рд╛рдЗрд▓ рдЧреНрд░рд╛рд╣рдХ 360 рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Hbase рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЧреНрд░рд╛рд╣рдХ 360
рдЧреНрд░рд╛рд╣рдХ 360 - рд╕рдВрдЧрдарди рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд╛рд▓рди рднрдВрдбрд╛рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн рд╣реИред

рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЬрд╛рд░реА рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рддрдЪреАрдд рдФрд░ рд╣рд┐рдЯ рджрд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдиреНрдп рдЯреАрдореЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЭрд╛рдВрдХреА рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯред

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рдлреНрдХрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИ рдФрд░ рдПрдЪрдбреАрдПрдлрдПрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдП рдЧрдП рдбреЗрдЯрд╛рд▓реЗрдХ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рдПрдЪрдбреАрдПрдлрдПрд╕ рд╕реЗ рд▓реЙрдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЙрдирдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджреИрдирд┐рдХ рдЕрдкрд▓реЛрдбрд┐рдВрдЧред рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрдерди рд▓реИрдкрдЯреЙрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЗ рдкреНрдпрд╛рд░ рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдЖрдВрддрд░рд┐рдХ рд░рд╕реЛрдИ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рд▓рд┐рд╡реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред Livy рдЖрдкрдХреЛ рд╕реАрдзреЗ Jupyter рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЛрдб рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрдерди (рдпрд╛ рд╕реНрдХрд╛рд▓рд╛) рдФрд░ рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдХреЛрдб рд▓рд┐рд╡реА рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд▓рд┐рд╡реА рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕рддреНрд░ рдХреЗ рд╢реБрднрд╛рд░рдВрдн рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╛рд░реНрди рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЬреЛ рд▓реЛрдЧ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ (рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣рд╛рдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ)ред

рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВред (рд╣рдо рдЕрдкрдиреЗ рд╕рддреНрд░ рдХрд╛ рдкрддрд╛ рднреА рддреБрд░рдВрдд рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рдХрд╛рдо рдЖрдПрдЧрд╛)ред рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

import json, requests, schedule, time host = 'http://***:8998' data = {'kind': 'spark', 'proxyUser': 'user'} headers = {'Content-Type': 'application/json'} r = requests.post(host + '/sessions', data=json.dumps(data), headers=headers) session_id = r.json().get('id') print("session_id: " + str(session_id)) session_url = host + r.headers['location'] r = requests.get(session_url, headers=headers) 

рд╣рдо рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ - рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВред

 timeout = time.time() + wait_time sess_state = ['starting', 'success', 'idle'] while(True): time.sleep(7) req_st = requests.get(session_url, headers=headers).json().get('state') if req_st != 'idle' and time.time() > timeout: requests.delete(session_url, headers=headers) send_message("Scheduler_error", req_st) break if req_st == 'idle': break if req_st not in sess_state: send_message("Scheduler_error", req_st) break print("Session_state: ", req_st) 

рдЕрдм рдЖрдк Livy рдХреЛ рдХреЛрдб рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

 statements_url = session_url + '/statements' data = {'code': '1 + 1'} r = requests.post(statements_url, data=json.dumps(data), headers=headers) statement_url = host + r.headers['location'] r = requests.get(statement_url, headers=headers) while (requests.get(statement_url, headers=headers).json()['progress'] != 1): time.sleep(15) r = requests.get(statement_url, headers=headers).json()['output'] session_url = 'http://***:8998/sessions/' + str(session_id) 

рд▓реВрдк рдореЗрдВ, рд╣рдо рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:

 r.get('data').get('text/plain') 

рдбрд┐рд▓реАрдЯ рдореЗрдердб рд╕реЗрд╢рди рд╣рдЯ рдЬрд╛рдПрдЧрд╛ред

 requests.delete(session_url, headers=headers) 

рджреИрдирд┐рдХ рдЙрддрд░рд╛рдИ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдм рдкрд░ рдХреНрд░реЛрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╢реЗрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдирд╣реАрдВред рдмрд╕ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдФрд░, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдПрдХрддреНрд░ рдХрд░реВрдВрдЧрд╛ред

рдХреЛрдб
 import json, requests, schedule, time schedule.every().day.at("16:05").do(job, 300) while True: schedule.run_pending() def job(wait_time): host = 'http://***:8998' data = {'kind': 'spark', 'proxyUser': 'user'} headers = {'Content-Type': 'application/json'} r = requests.post(host + '/sessions', data=json.dumps(data), headers=headers) session_id = r.json().get('id') print("session_id: " + str(session_id)) session_url = host + r.headers['location'] r = requests.get(session_url, headers=headers) timeout = time.time() + wait_time sess_state = ['starting', 'success', 'idle'] while(True): time.sleep(7) req_st = requests.get(session_url, headers=headers).json().get('state') if req_st != 'idle' and time.time() > timeout: requests.delete(session_url, headers=headers) break if req_st == 'idle': break if req_st not in sess_state: send_message("Scheduler_error", req_st) break print("Session_state: ", req_st) statements_url = session_url + '/statements' data = {'code': '1 + 1'} r = requests.post(statements_url, data=json.dumps(data),headers=headers) statement_url = host + r.headers['location'] r = requests.get(statement_url, headers=headers) while (requests.get(statement_url, headers=headers).json()['progress'] != 1): time.sleep(15) r = requests.get(statement_url, headers=headers).json()['output'] session_url = 'http://***:8998/sessions/' + str(session_id) print(r.get('data').get('text/plain')) #requests.delete(session_url, headers=headers) def send_message(subject, text): import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText me = "my_email_adress" you = "email_adress" msg = MIMEMultipart('alternative') msg['Subject'] = subject msg['From'] = me msg['To'] = you text = text part1 = MIMEText(text, 'plain') msg.attach(part1) s = smtplib.SMTP('domain.org') s.ehlo() s.starttls() s.login("user", "password") s.sendmail(me, you, msg.as_string()) s.quit() 


рдирд┐рд╖реНрдХрд░реНрд╖:


рд╢рд╛рдпрдж рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рдкреЗрд╢реЗрд╡рд░реЛрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:

  • рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рдЬреНрдпреВрдкрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
  • рджреГрд╢реНрдп рдмрд╛рддрдЪреАрдд
  • рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдпрд╣ рдЪреБрдирдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╣ рдлрд╛рдЗрд▓реЛрдВ (рд╕реНрдкрд╛рд░реНрдХ-рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдирддреАрдЬрддрди, рдореМрдЬреВрджрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдмреЗрд╢рдХ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдореБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреА рд╣реЛрдЧреА, рдЕрдирд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЖрдзрд╛рд░ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдорддрд┐ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреАрдо рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЛ рдиреЛрдЯ рдХрд░рддреА рд╣реИред

рд╕рдВрджрд░реНрдн


Livy рдкреНрд░рд▓реЗрдЦрди

Source: https://habr.com/ru/post/hi457096/


All Articles