Topik ini menjelaskan cara mengatasi kegagalan DNS resolution yang terjadi akibat banyaknya permintaan konkuren untuk mengakses nama domain layanan peer.
Pesan kesalahan
Pesan kesalahan yang muncul di Logview mencakup "nama atau layanan tidak dikenal".
Deskripsi masalah
Kegagalan DNS resolution dapat terjadi ketika pekerjaan UDF atau Spark menghasilkan sejumlah besar permintaan konkuren ke nama domain layanan peer.
Solusi
Untuk mencegah masalah ini, selesaikan nama domain menjadi alamat IP selama fase inisialisasi pekerjaan. Gunakan alamat IP tersebut untuk akses selanjutnya selama fase eksekusi pekerjaan. Berikut adalah contoh kode:
# -*- coding:UTF-8 -*-
from odps.udf import annotate
@annotate("string->string")
class test_udf(object):
__ip_address = ''
def evaluate(self, inputPath):
import requests
output = 'false'
retries = 3
print(self.__ip_address)
url = f"http://{self.__ip_address}/{inputPath}"
print(url)
for i in range(retries):
try:
response = requests.get(url)
if response.status_code == 200:
output = 'true'
else:
raise
except Exception as e:
if i < retries:
print('menghubungkan ulang: ' + str(i + 1))
print('kesalahan: ' + e.message)
continue
else:
raise
break
return output
def __init__(self):
import socket
retries = 3
for i in range(retries):
try:
self.__ip_address = socket.gethostbyname("xxx-vpc.cn-shanghai.aliyuncs.com")
print(self.__ip_address)
except socket.gaierror as e:
print('Gagal menyelesaikan domain' + e.strerror)
if i < retries:
print('menyelesaikan domain ulang: ' + str(i + 1))
continue
else:
raise
break