kesalahan PolyBase serta solusi yang mungkin
Berlaku untuk: SQL Server
Artikel ini berisi skenario kesalahan umum dan solusi untuk PolyBase.
Untuk informasi selengkapnya tentang pemantauan dan pemecahan masalah PolyBase, lihat Memantau dan memecahkan masalah PolyBase.
Untuk lokasi file log PolyBase umum di Windows dan Linux, lihat Memantau dan memecahkan masalah PolyBase.
Pesan kesalahan dan kemungkinan solusi
Pembaruan SQL Server 2022 gagal karena nama kolom yang tidak valid (peka huruf besar/kecil)
Kesalahan ini dapat terjadi saat menerapkan penginstalan pembaruan kumulatif SQL Server di server dengan fitur PolyBase diinstal dan menggunakan kolase sensitif huruf besar/kecil, pesan peningkatan kesalahan yang dilaporkan adalah sebagai berikut:
Contoh pesan kesalahan: Error: 912, Severity: 21, State: 2. Script level upgrade for database 'master' failed because upgrade step 'polybase_database_upgrade.sql' encountered error 200, state 7, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
Alasan:
Selama prosedur peningkatan skrip SQL Server berhasil diselesaikan karena nilai peka huruf besar/kecil.
Solusi: Masalah ini akan diperbaiki secara permanen dalam pembaruan kumulatif yang akan datang.
Solusi:
- Aktifkan Bendera Pelacakan 902.
- Mulai SQL Server.
- Ubah kolatasi database 'DWConfiguration' dari CS (peka huruf besar/kecil) menjadi CI (tidak peka huruf besar/kecil).
- Jalankan kembali peningkatan.
- Nonaktifkan Bendera Pelacakan 902.
- Mulai ulang SQL Server.
- Ubah kolaterasi database 'DWConfiguration' kembali, dari CI (tidak peka huruf besar/kecil) menjadi CS (peka huruf besar/kecil).
Sebagai alternatif untuk bendera pelacakan, untuk mencegah masalah terjadi sebelum pembaruan kumulatif, periksa apakah database 'DWConfiguration' menggunakan kolase peka huruf besar/kecil (CS). Pertimbangkan untuk mengubahnya menjadi kolase tidak peka huruf besar/kecil (CI), terapkan pembaruan kumulatif, ubah kembali ke aslinya.
Kesalahan: "100001; Gagal membuat rencana kueri"
Kesalahan "Gagal menghasilkan rencana kueri" dapat terjadi ketika mesin database SQL Server telah di-patch ke setidaknya Pembaruan Kumulatif 8 (15.0.4073) tetapi fitur PolyBase belum diperbarui ke build yang sama. Ini dapat terjadi saat menambahkan fitur PolyBase ke instans SQL Server yang ada. Untuk informasi selengkapnya, lihat Kesalahan PolyBase - 100001; Gagal membuat rencana kueri.
Selalu tindak lanjuti penginstalan fitur PolyBase dengan membawa fitur baru ke tingkat versi yang sama. Instal paket layanan (SPs), pembaruan kumulatif (CUs), dan/atau rilis distribusi umum (GDR) sesuai kebutuhan. Untuk menentukan versi PolyBase, lihat Menentukan versi, edisi, dan tingkat pembaruan SQL Server dan komponennya.
Perubahan akun layanan
Contoh pesan kesalahan:
107035; Otorisasi DMs gagal karena [DOMAIN\user] bukan anggota grup [PdwDataMovementAccess]
107017; Header kontrol DMS tidak valid:
Kesalahan ini kemungkinan karena mengubah akun layanan PolyBase. Untuk mengubah akun layanan untuk layanan PolyBase Engine dan PolyBase Data Movement, hapus instalan dan instal ulang fitur PolyBase.
Kesalahan izin layanan pergerakan data
Untuk informasi selengkapnya tentang pemecahan masalah dan penyelesaian masalah izin dengan layanan pergerakan data, lihat Izin Akun Layanan PolyBase dan Kesalahan Umum yang Diamati Saat Hilang.
Kegagalan autentikasi Windows
Untuk informasi selengkapnya tentang pemecahan masalah dan penyelesaian masalah izin yang terkait dengan kegagalan dalam autentikasi Windows, lihat Izin Akun Layanan PolyBase dan Kesalahan Umum yang Diamati Saat Hilang.
Tidak dapat menjalankan kueri "Kueri Jarak Jauh"
Contoh pesan kesalahan:
Msg 7320, Tingkat 16, Status 110, Baris 14
Tidak dapat menjalankan kueri "Kueri Jarak Jauh" terhadap penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)". Kueri dibatalkan-- ambang penolakan maksimum (0 baris) tercapai saat membaca dari sumber eksternal: 1 baris ditolak dari total 1 baris yang diproses. (/negara/sensors.ldjson.txt) Ordinal kolom: 0, Jenis data yang diharapkan: INT, Nilai yang menyinggung: {"id":"S2740036465E2B","time":"2016-02-26T16:59:02.9300000Z","temp":23.3,"hum":0.77,"wind":217,"press":1032,"loc":[-76.90914996169623,38.8929314364726]} (Kesalahan Konversi Kolom), Kesalahan: Kesalahan mengonversi tipe data NVARCHAR ke INT.
Perlu diingat mungkin ada turunan dari kesalahan ini. Nama file pertama yang ditolak ditampilkan di SQL Server Management Studio (SSMS) dengan jenis atau nilai data yang menyinggung.
Kemungkinan Alasan:
Alasan kesalahan ini terjadi adalah karena setiap file memiliki skema yang berbeda. DDL tabel eksternal PolyBase saat diarahkan ke direktori secara rekursif membaca semua file dalam direktori tersebut. Ketika ketidakcocokan kolom atau jenis data terjadi, kesalahan ini dapat dilihat di SSMS.
Kemungkinan Solusi:
Jika data untuk setiap tabel terdiri dari satu file, gunakan nama file di bagian LOCATION yang diawali oleh direktori file eksternal.
Jika ada beberapa file per tabel, masukkan setiap set file ke direktori yang berbeda di Azure Blob Storage. Arahkan LOCATION ke direktori alih-alih file tertentu. Solusi ini direkomendasikan.
Contoh:
Create External Table foo
(col1 int)WITH (LOCATION='/bar/foobar.txt',DATA_SOURCE…); OR
Create External Table foo
(col1 int) WITH (LOCATION = '/bar/', DATA_SOURCE…);
Catatan
SQL Server Native Client (SNAC) tidak dikirim dengan:
- SQL Server 2022 (16.x) dan versi yang lebih baru
- SQL Server Management Studio 19 dan versi yang lebih baru
SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.
Untuk proyek baru, gunakan salah satu driver berikut:
Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.
Dukungan Kerberos
SQL Server dikonfigurasi untuk mengakses Kluster Hadoop yang didukung. Keamanan Kerberos tidak diberlakukan di Kluster Hadoop.
Memilih dari tabel eksternal mengembalikan kesalahan berikut:
Msg 105019, Level 16, State 1, Line 55
Akses EXTERNAL TABLE gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke HdfsBridge_Connect: Kesalahan [Tidak dapat membuat instans LoginClass] terjadi saat mengakses file eksternal.'
Msg 7320, Level 16, State 110, Line 55
Tidak dapat menjalankan kueri "Kueri Jarak Jauh" terhadap penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)". Akses EXTERNAL TABLE gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke HdfsBridge_Connect: Kesalahan [Tidak dapat membuat instans LoginClass] terjadi saat mengakses file eksternal.'
Interogasi log DWEngine Server menunjukkan kesalahan berikut:
[Thread:16432] [EngineInstrumentation:EngineQueryErrorEvent] (Kesalahan, Tinggi):
Akses TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke HdfsBridge_Connect: Kesalahan [com.microsoft.polybase.client.KerberosSecureLogin] terjadi saat mengakses file eksternal.' Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: AKSES TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke HdfsBridge_Connect: Kesalahan [com.microsoft.polybase.client.KerberosSecureLogin] terjadi saat mengakses file eksternal.' >--- Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsAccessException: Pengecualian Java yang diajukan pada panggilan ke HdfsBridge_Connect: Kesalahan [com.microsoft.polybase.client.KerberosSecureLogin] terjadi saat mengakses file eksternal.
Kemungkinan Alasan:
Kerberos tidak diaktifkan di Kluster Hadoop, tetapi keamanan Kerberos diaktifkan di core-site.xml, yarn-site.xml, atau hdfs-site.xml yang terletak secara default di bawah Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf. Di Linux, file secara default terletak di /var/opt/mssql/binn/polybase/hadoop/conf/.
Kemungkinan Solusi:
Komentari informasi keamanan Kerberos dari file yang disebutkan di atas.
Untuk informasi selengkapnya tentang pemecahan masalah PolyBase dan Kerberos, lihat Memecahkan masalah konektivitas PolyBase Kerberos.
Kesalahan prosesor kueri internal
Mengkueri tabel eksternal mengembalikan kesalahan berikut:
Msg 8680, Level 17, State 5, Line 118
Kesalahan Prosesor Kueri Internal: Prosesor kueri mengalami kesalahan tak terduga selama pemrosesan fase kueri jarak jauh.
Log server DWEngine berisi pesan berikut:
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Kesalahan, Tinggi): ***** Sistem DMS telah memutuskan sambungan simpul :
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Kesalahan, Tinggi): ***** Sistem DMS telah memutuskan sambungan simpul :
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Kesalahan, Tinggi): ***** Sistem DMS telah memutuskan sambungan simpul :
Kemungkinan Alasan:
Alasan kesalahan ini bisa jadi SQL Server tidak dimulai ulang setelah mengonfigurasi PolyBase.
Kemungkinan Solusi:
Mulai ulang SQL Server. Periksa Log Server DWEngine untuk mengonfirmasi tidak ada pemutusan DMS setelah memulai ulang.
Pengguna yang diperlukan untuk akses HDFS
Skenario:
SQL Server terhubung ke kluster Hadoop yang tidak aman (Kerberos tidak diaktifkan). PolyBase dikonfigurasi untuk mendorong komputasi ke kluster Hadoop.
Kueri Sampel:
select count(*) from foo WITH (FORCE EXTERNALPUSHDOWN);
Pesan kesalahan yang mirip dengan berikut ini dikembalikan:
Msg 105019, Tingkat 16, Status 1, Baris 1
Akses TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java dinaikkan pada panggilan ke JobSubmitter_PollJobStatus: Kesalahan [java.net.ConnectException: Panggilan Dari big1506sql2016/172.16.1.4 ke 0.0.0.0:10020 gagal pada pengecualian koneksi: java.net ConnectException: Koneksi ditolak: tidak ada informasi lebih lanjut; Untuk informasi selengkapnya, lihat: http://wiki.apache.org/hadoop/ConnectionRefused] terjadi saat mengakses file eksternal.'
Penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)" mengembalikan pesan "Kesalahan yang tidak ditentukan".
Msg 7421, Tingkat 16, Status 2, Baris 1
Tidak dapat mengambil set baris dari penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)". .
Kesalahan Log Benang Hadoop:
Pengaturan pekerjaan gagal : org.apache.hadoop.security.AccessControlException: Izin ditolak: user=pdw_user, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251) di org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:232) org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:176) di org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5525)
Kemungkinan Alasan:
Dengan Kerberos dinonaktifkan, PolyBase akan menggunakan pdw_user sebagai pengguna untuk mengakses HDFS dan mengirimkan pekerjaan MapReduce.
Kemungkinan Solusi:
Buat pdw_user di Hadoop dan berikan izin yang memadai ke direktori yang digunakan selama pemrosesan mapreduce. Pastikan juga bahwa pdw_user adalah pemilik direktori HDFS /user/pdw_user.
Di bawah ini adalah contoh cara membuat direktori beranda dan menetapkan izin untuk pdw_user:
sudo -u hdfs hadoop fs -mkdir /user/pdw_user
sudo -u hdfs hadoop fs -chown pdw_user /user/pdw_user
Setelah ini pastikan bahwa pdw_user telah membaca, menulis, dan menjalankan izin pada direktori /user/pdw_user. Pastikan direktori /tmp memiliki 777 izin.
Untuk informasi selengkapnya tentang pemecahan masalah PolyBase dan Kerberos, lihat Memecahkan masalah konektivitas PolyBase Kerberos.
Kesalahan memori Java karena UTF-8
Skenario:
SQL Server PolyBase disiapkan dengan Kluster Hadoop atau Azure Blob Storage. Kueri Pilih apa pun gagal dengan kesalahan berikut:
Msg 106000, Tingkat 16, Status 1, Baris 1
Ruang timbunan Java
Kemungkinan Alasan:
Input ilegal dapat menyebabkan kesalahan java kehabisan memori. File mungkin tidak dalam format UTF-8. DMS mencoba membaca seluruh file sebagai satu baris karena tidak dapat mendekode pemisah baris dan mengalami kesalahan ruang timbunan Java.
Kemungkinan Solusi:
Konversikan file ke format UTF-8 karena PolyBase saat ini memerlukan format UTF-8 untuk file yang dibatasi teks.
Konfigurasi konektivitas Hadoop
Mengonfigurasi SQL Server PolyBase untuk menyambungkan ke Azure Blob Storage mengembalikan pesan kesalahan berikut di SQL Server:
Msg 105019, Level 16, State 1, Line 74
Akses TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke HdfsBridge_Connect: Kesalahan [Tidak ada FileSystem untuk skema: wasbs] terjadi saat mengakses file eksternal.'
Kemungkinan Alasan:
Konektivitas Hadoop tidak diatur ke nilai konfigurasi untuk mengakses penyimpanan Azure Blob.
Kemungkinan Solusi:
Atur konektivitas Hadoop ke nilai (sebaiknya 7) yang mendukung Azure Blob Storage dan mulai ulang SQL Server. Untuk daftar nilai konektivitas dan jenis yang didukung, lihat Konfigurasi Konektivitas PolyBase.
Buat Tabel Sebagai Kesalahan pilih
Skenario:
Mencoba mengekspor data ke Azure Blob Storage atau sistem file Hadoop menggunakan PolyBase dengan sintaks CREATE EXTERNAL TABLE AS SELECT (CETAS) dari SQL Server gagal dengan pesan kesalahan berikut:
Msg 156, Tingkat 15, Status 1, Baris 177
Sintaksis yang salah di dekat kata kunci 'WITH'.
Msg 319, Tingkat 15, Status 1, Baris 177
Sintaksis yang salah di dekat kata kunci 'dengan'. Jika pernyataan ini adalah ekspresi tabel umum, klausa xmlnamespaces atau klausa konteks pelacakan perubahan, pernyataan sebelumnya harus dihentikan dengan titik koma.
Kemungkinan Alasan:
Saat mengekspor data ke Hadoop atau Azure Blob Storage melalui PolyBase, hanya data yang diekspor, bukan nama kolom (metadata) seperti yang didefinisikan dalam perintah CREATE EXTERNAL TABLE.
Kemungkinan Solusi:
Buat tabel eksternal terlebih dahulu lalu gunakan INSERT INTO SELECT untuk mengekspor ke lokasi eksternal. Untuk sampel kode, lihat skenario kueri PolyBase.
Membuat Tabel Eksternal dari Azure Blob Storage gagal
Skenario:
Kumpulan SQL khusus (sebelumnya SQL DW) disiapkan untuk mengimpor data dari Azure Blob Storage. Buat tabel eksternal gagal dengan pesan berikut.
Msg 105019, Tingkat 16, Status 1, Baris 34
Akses TABLE eksternal gagal karena kesalahan internal: 'Pengecualian Java dinaikkan saat panggilan ke HdfsBridge_IsDirExist. Pesan pengecualian Java:com.microsoft.azure.storage.StorageException: Server gagal mengautentikasi permintaan. Pastikan nilai header Otorisasi dibentuk dengan benar termasuk tanda tangan.: Kesalahan [com.microsoft.azure.storage.StorageException: Server gagal mengautentikasi permintaan. Pastikan nilai header Otorisasi terbentuk dengan benar termasuk tanda tangan.] terjadi saat mengakses file eksternal.'
Kemungkinan Alasan:
Kunci penyimpanan Azure yang salah digunakan untuk membuat kredensial lingkup database.
Kemungkinan Solusi:
Letakkan semua objek terkait (yaitu: sumber data, format file) lalu letakkan dan buat ulang kredensial cakupan database dengan kunci penyimpanan yang tepat.
Kapitalisasi konfigurasi Kerberos
Skenario:
SQL Server disiapkan dengan Kluster Cloudera yang diaktifkan Kerberos. SQL Server telah dimulai ulang setelah semua konfigurasi berubah. Layanan PolyBase Engine dan PolyBase Data Movement berjalan setelah restart. Pesan kesalahan berikut dikembalikan:
Sumber Data dikonfigurasi tanpa lokasi pelacak pekerjaan:
org.apache.hadoop.fs.FileSystem: Penyedia org.apache.hadoop.fs.viewfs.ViewFileSystem tidak dapat diinstansiasi
Sumber Data dikonfigurasi dengan lokasi pelacak pekerjaan:
Kesalahan [Tidak dapat terjadi realm Kerberos] saat mengakses file eksternal
Kemungkinan Alasan:
Nilai untuk properti "hadoop.security.authentication" mengatakan kerberos di Coresite.xml.
Kemungkinan Solusi:
Coresite.xml properti "hadoop.security.authentication" harus KERBEROS (semua huruf besar) sebagai nilai.
Untuk informasi selengkapnya tentang pemecahan masalah PolyBase dan Kerberos, lihat Memecahkan masalah konektivitas PolyBase Kerberos.
Mapred-site.xml nilai yang diperlukan hilang
Skenario:
SQL Server atau APS disiapkan dengan Kluster HDP yang didukung. Kueri yang tidak memerlukan pekerjaan pushdown, tetapi gagal dengan pesan berikut saat petunjuk 'FORCE PUSHDOWN' digunakan dengan pesan kesalahan berikut:
Msg 7320, Tingkat 16, Status 110, Baris 35
Tidak dapat menjalankan kueri "Kueri Jarak Jauh" terhadap penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)". Akses TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java yang dinaikkan pada panggilan ke JobSubmitter_PollJobStatus: Kesalahan [org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
di org.apache.hadoop.mapreduce.v2.hs.HistoryClientService$HSClientProtocolHandler.getTaskAttemptCompletionEvents(HistoryClientService.java:277)
di org.apache.hadoop.mapreduce.v2.api.impl.pb.service.MRClientProtocolPBServiceImpl.getTaskAttemptCompletionEvents(MRClientProtocolPBServiceImpl.java:173)
di org.apache.hadoop.yarn.proto.MRClientProtocol$MRClientProtocolService$2.callBlockingMethod(MRClientProtocol.java:283)
di org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
di org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
di org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2127)
di org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2123)
di java.security.AccessController.doPrivileged(Metode Asli)
di javax.security.auth.Subject.doAs(Subject.java:415)
di org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
di org.apache.hadoop.ipc.Server$Handler.run(Server.java:2121)
] terjadi saat mengakses file eksternal.'
Kemungkinan Alasan:
Mapred-site.xml kehilangan beberapa nilai yang diperlukan yang memeriksa hasil perantara dan akhir.
Kemungkinan Solusi:
Tambahkan properti berikut dan kaitkan nilai yang benar seperti yang ditunjukkan pada Ambari dalam file mapred-site.xml di SQL Server.
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>
Mengonfigurasi akses menurut nama host
Skenario:
SQL Server disiapkan untuk mengakses Kluster Hadoop yang didukung. Membuat tabel eksternal mengembalikan salah satu kesalahan berikut:
Tidak dapat menjalankan kueri "Kueri Jarak Jauh" terhadap penyedia OLE DB "SQLNCLI11" untuk server tertaut "(null)". 110802; Terjadi kesalahan DMS internal yang menyebabkan operasi ini gagal. Detail: Pengecualian: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException, Pesan: SqlNativeBufferReader.Run, kesalahan dalam OdbcExecuteQuery: SqlState: 42000, NativeError: 8680, 'Panggilan kesalahan: SQLExecDirect(this-GetHstmt>(), (SQLWCHAR *)statementText, SQL_NTS), kode pengembalian SQL: -1 | Info Kesalahan SQL: SrvrMsgState: 26, SrvrSeverity: 17, Error <1>: ErrorMsg: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Internal Query Processor Error: Prosesor kueri mengalami kesalahan tak terduga selama pemrosesan fase kueri jarak jauh. | Panggilan kesalahan: pReadConn-ExecuteQuery>(statementText, bufferFormat) | state: FFFF, number: 24, koneksi aktif: 8', Connection String: Driver={pdwodbc}; APP=RCSmall-DmsNativeReader:WAD1D16HD2001\mpdwsvc (3600)-ODBC-PoolId1433; Trusted_Connection=ya; AutoTranslate=no; Server=\.\pipe\sql\query
[Thread:30544] [AbstractReaderWorker:ErrorEvent] (Kesalahan, Tinggi): QueryId QID2433 PlanId 6c3a4551-e54c-4c06-a5ed-a8733edac691 StepId 7:
Tidak dapat memperoleh blok: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Tidak dapat memperoleh blok: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
di Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsBridgeReadAccess.Read(MemoryBuffer buffer, Boolean& isDone)
di Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DataReader.ExternalMoveBufferReader.Read()
di Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.ReadAndSendData()
di Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.Execute(Status objek)
Kemungkinan Alasan:
Pesan kesalahan ini dapat muncul ketika Kluster Hadoop disiapkan dalam konfigurasi di mana simpul data hanya dapat diakses di luar kluster menggunakan Nama Host dan bukan alamat IP.
Kemungkinan Solusi:
Tambahkan yang berikut ini ke file hdfs-site.xml di sisi klien (SQL Server). Konfigurasi ini akan memaksa simpul nama untuk mengembalikan URI untuk simpul data dengan Nama Host alih-alih alamat IP internal.
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
Organisasi folder memaksa overhead memori berlebih
Skenario:
SQL Server menjalankan kueri PolyBase pada direktori dengan sejumlah besar file (>30.000 file di bawah jalur direktori secara rekursif), dan salah satu pesan kesalahan berikut dikembalikan:
Msg 105019, Tingkat 16, Status 1, Baris 1
Akses EXTERNAL TABLE gagal karena kesalahan internal: 'Pengecualian Java dinaikkan saat panggilan ke HdfsBridge_GetFileNameByIndex. Pesan pengecualian Java: Batas overhead GC terlampaui: Kesalahan [batas overhead GC terlampaui] saat mengakses file eksternal.'
Msg 105019, Tingkat 16, Status 1, Baris 1
Akses EXTERNAL TABLE gagal karena kesalahan internal: 'Pengecualian Java dinaikkan saat panggilan ke HdfsBridge_GetDirectoryFiles. Pesan pengecualian Java: Ruang timbunan Java: Kesalahan [Ruang timbunan Java] terjadi saat mengakses file eksternal.'
Kemungkinan Alasan:
Saat memproses jalur, PolyBase menghitung semua file di bawah jalur tersebut, dan ada overhead memori tetap yang terkait dengan struktur data yang digunakan untuk mewakili file. Dengan sejumlah besar file, overhead ini menjadi terlihat dan akhirnya dapat mengonsumsi semua memori yang tersedia untuk JVM.
Kemungkinan Solusi:
Atur ulang data dalam beberapa direktori sehingga setiap direktori berisi subset file dan kemudian memecah kueri dalam beberapa yang beroperasi pada bagian dari jalur asli pada satu waktu dan mewujudkan tabel sebagai tabel SQL Server (sebelum menggabungkannya).
Contoh: Mari kita asumsikan data tabel eksternal Anda berada di lokasi berikut: Pesanan/file1.txt,...,file30K.txt.
Ubah tata letak sehingga data ditata dalam struktur partisi file konvensional dalam Orders/yyyy/mm/dd/file1.txt. Arahkan tabel eksternal Anda ke jalur direktori yang lebih rendah seperti bulan(mm) atau hari (dd) dan impor file ke dalam tabel SQL Server dalam potongan-potongan lalu tambahkan sebagai bagian dari satu tabel. Bahkan jika Anda memiliki struktur direktori yang tepat untuk memulai, ikuti langkah #2 untuk dapat bekerja dengan banyak file tanpa kehabisan memori JVM.
Karakter tak terduga dalam file konfigurasi
Skenario:
Menyiapkan SQL Server atau APS dengan kluster Hadoop, yang melibatkan modifikasi yarn-site.xml, hdfs-site.xml, dan file konfigurasi lainnya. Pesan kesalahan SQL Server berikut diamati:
Msg 105019, Tingkat 16, Status 1, Baris 1
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: AKSES TABEL EKSTERNAL gagal karena kesalahan internal: 'Pengecualian Java dinaikkan saat panggilan ke HdfsBridge_Connect. Pesan pengecualian Java:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte tidak valid 1 dari urutan UTF-8 1-byte..: Error [com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte tidak valid 1 dari urutan UTF-8 1-byte.] terjadi saat mengakses file eksternal.' --->
Kemungkinan Alasan:
Ini dapat terjadi jika Anda telah menyalin dan menempelkan teks ke dalam file konfigurasi dari situs web atau jendela obrolan. Ada kemungkinan karakter yang tidak diinginkan/tidak dapat dicetak ada dalam file konfigurasi.
Kemungkinan Solusi:
Buka file di editor teks yang berbeda (selain notepad) dan cari karakter ini dan hilangkan. Mulai ulang layanan yang diperlukan.
Kueri tabel Delta mungkin gagal dengan kesalahan 2571 dan 16513
Skenario:
Anda mungkin mengalami kesalahan berikut saat mengkueri tabel Delta eksternal:
Msg 2571, Level 14, State 3, Line 1
User '<user>' does not have permission to run DBCC TRACEON.
Msg 16513, Level 16, State 0, Line 1
Error reading external metadata.
Kemungkinan Alasan:
Ini bisa terjadi karena ada QUERYTRACEON
petunjuk kueri yang dapat ditambahkan ke kueri metadata file Delta dan yang memerlukan sysadmin
peran server untuk dijalankan.
Kemungkinan Solusi:
Jika ini terjadi, Anda dapat mengatasi masalah dengan mengaktifkan bendera pelacakan 14073 secara global dan ini akan mencegah petunjuk kueri ditambahkan.