全部产品
Search
文档中心

MaxCompute:DNS resolution gagal karena konkurensi tinggi

更新时间:Jun 19, 2025

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