Otevřete Synapse Studio, přejděte na Spravovat propojené služby vlevo a kliknutím na Nový vytvořte novou > propojenou službu.
Zvolte Azure Database for MySQL a klikněte na Pokračovat.
Zadejte název propojené služby. Zaznamenejte název propojené služby, tyto informace se použijí ke konfiguraci Sparku za chvíli.
Vyberte Azure Database for MySQL pro externí metastore Hive ze seznamu předplatných Azure nebo zadejte informace ručně.
Zadejte uživatelské jméno a heslo pro nastavení připojení.
Otestujte připojení a ověřte uživatelské jméno a heslo.
Kliknutím na Vytvořit vytvoříte propojenou službu.
Některá nastavení pravidel zabezpečení sítě můžou blokovat přístup z fondu Sparku k externí databázi metastoru Hive. Před konfigurací fondu Spark spusťte v libovolném poznámkovém bloku fondu Sparku následující kód a otestujte připojení k externí databázi metastoru Hive.
Verzi metastoru Hive můžete získat také z výstupních výsledků. Verze metastoru Hive se použije v konfiguraci Sparku.
Upozorňující
Nepublikujte testovací skripty v poznámkovém bloku s pevně zakódovaným heslem, protože to může způsobit potenciální bezpečnostní riziko pro váš metastore Hive.
Kód testování připojení pro Azure SQL
%%spark
import java.sql.DriverManager
/** this JDBC url could be copied from Azure portal > Azure SQL database > Connection strings > JDBC **/
val url = s"jdbc:sqlserver://{your_servername_here}.database.windows.net:1433;database={your_database_here};user={your_username_here};password={your_password_here};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
try {
val connection = DriverManager.getConnection(url)
val result = connection.createStatement().executeQuery("select t.SCHEMA_VERSION from VERSION t")
result.next();
println(s"Successful to test connection. Hive Metastore version is ${result.getString(1)}")
} catch {
case ex: Throwable => println(s"Failed to establish connection:\n $ex")
}
Kód testování připojení pro Službu Azure Database for MySQL
%%spark
import java.sql.DriverManager
/** this JDBC url could be copied from Azure portal > Azure Database for MySQL > Connection strings > JDBC **/
val url = s"jdbc:mysql://{your_servername_here}.mysql.database.azure.com:3306/{your_database_here}?useSSL=true"
try {
val connection = DriverManager.getConnection(url, "{your_username_here}", "{your_password_here}");
val result = connection.createStatement().executeQuery("select t.SCHEMA_VERSION from VERSION t")
result.next();
println(s"Successful to test connection. Hive Metastore version is ${result.getString(1)}")
} catch {
case ex: Throwable => println(s"Failed to establish connection:\n $ex")
}
Po úspěšném vytvoření propojené služby do externího metastoru Hive je potřeba nastavit několik konfigurací Sparku pro použití externího metastoru Hive. Konfiguraci můžete nastavit na úrovni fondu Sparku nebo na úrovni relace Sparku.
Tady jsou konfigurace a popisy:
Poznámka:
Synapse se snaží hladce pracovat s výpočetními prostředky z HDI. HMS 3.1 v HDI 4.0 ale není plně kompatibilní s OSS HMS 3.1. V případě OSS HMS 3.1 se prosím podívejte sem.
Konfigurace Sparku |
Popis |
spark.sql.hive.metastore.version |
Podporované verze: Ujistěte se, že používáte první dvě části bez třetí části. |
spark.sql.hive.metastore.jars |
- Verze 2.3:
/opt/hive-metastore/lib-2.3/*:/usr/hdp/current/hadoop-client/lib/*:/usr/hdp/current/hadoop-client/* - Verze 3.1:
/opt/hive-metastore/lib-3.1/*:/usr/hdp/current/hadoop-client/lib/*:/usr/hdp/current/hadoop-client/*
|
spark.hadoop.hive.synapse.externalmetastore.linkedservice.name |
Název propojené služby |
spark.sql.hive.metastore.sharedPrefixes |
com.mysql.jdbc,com.microsoft.vegas |
Při vytváření fondu Sparku na kartě Další nastavení vložte do textového souboru následující konfigurace a nahrajte ho v části konfigurace Apache Sparku. Můžete také použít místní nabídku pro existující fond Sparku, zvolte konfiguraci Apache Sparku a přidejte tyto konfigurace.
Aktualizujte verzi metastoru a název propojené služby a uložte následující konfigurace do textového souboru pro konfiguraci fondu Spark:
spark.sql.hive.metastore.version <your hms version, Make sure you use the first 2 parts without the 3rd part>
spark.hadoop.hive.synapse.externalmetastore.linkedservice.name <your linked service name>
spark.sql.hive.metastore.jars /opt/hive-metastore/lib-<your hms version, 2 parts>/*:/usr/hdp/current/hadoop-client/lib/*
spark.sql.hive.metastore.sharedPrefixes com.mysql.jdbc,com.microsoft.vegas
Tady je příklad metastoru verze 2.3 s propojenou službou s názvem HiveCatalog21:
spark.sql.hive.metastore.version 2.3
spark.hadoop.hive.synapse.externalmetastore.linkedservice.name HiveCatalog21
spark.sql.hive.metastore.jars /opt/hive-metastore/lib-2.3/*:/usr/hdp/current/hadoop-client/lib/*
spark.sql.hive.metastore.sharedPrefixes com.mysql.jdbc,com.microsoft.vegas
Pro relaci poznámkového bloku můžete také nakonfigurovat relaci Sparku v poznámkovém bloku pomocí %%configure
příkazu magic. Tady je kód.
%%configure -f
{
"conf":{
"spark.sql.hive.metastore.version":"<your hms version, 2 parts>",
"spark.hadoop.hive.synapse.externalmetastore.linkedservice.name":"<your linked service name>",
"spark.sql.hive.metastore.jars":"/opt/hive-metastore/lib-<your hms version, 2 parts>/*:/usr/hdp/current/hadoop-client/lib/*",
"spark.sql.hive.metastore.sharedPrefixes":"com.mysql.jdbc,com.microsoft.vegas"
}
}
Pro dávkovou úlohu lze použít stejnou konfiguraci také prostřednictvím SparkConf
.
Spuštění dotazů pro ověření připojení
Po všech těchto nastaveních zkuste zobrazit výpis objektů katalogu spuštěním následujícího dotazu v poznámkovém bloku Spark a zkontrolujte připojení k externímu metastoru Hive.
spark.sql("show databases").show()
Nastavení připojení k úložišti
Propojená služba s databází metastoru Hive pouze poskytuje přístup k metadatům katalogu Hive. Pokud chcete zadávat dotazy na existující tabulky, musíte nastavit připojení k účtu úložiště, který ukládá podkladová data pro tabulky Hive.
Nastavení připojení k Azure Data Lake Storage Gen2
Primární účet úložiště pracovního prostoru
Pokud jsou podkladová data tabulek Hive uložená v primárním účtu úložiště pracovního prostoru, nemusíte dělat další nastavení. Bude fungovat tak dlouho, dokud jste při vytváření pracovního prostoru postupovali podle pokynů k nastavení úložiště.
Jiný účet ADLS Gen2
Pokud jsou podkladová data vašich katalogů Hive uložená v jiném účtu ADLS Gen2, musíte se ujistit, že uživatelé, kteří spouštějí dotazy Sparku, mají v účtu úložiště ADLS Gen2 roli Přispěvatel dat objektů blob úložiště.
Nastavení propojení s Blob Storage
Pokud jsou podkladová data tabulek Hive uložená v účtu služby Azure Blob Storage, nastavte připojení podle následujících kroků:
Otevřete Synapse Studio, přejděte na kartu Data > Linked Tab > Add button >Connect to external data ( Připojit k externím datům).
Zvolte Azure Blob Storage a vyberte Pokračovat.
Zadejte název propojené služby. Zaznamenejte název propojené služby, tyto informace se za chvíli použijí v konfiguraci Sparku.
Vyberte účet služby Azure Blob Storage. Ujistěte se, že metoda ověřování je klíč účtu. Fond Sparku má v současné době přístup jenom k účtu Blob Storage prostřednictvím klíče účtu.
Otestujte připojení a vyberte Vytvořit.
Po vytvoření propojené služby s účtem Blob Storage se při spouštění dotazů Sparku ujistěte, že v poznámkovém bloku spustíte následující kód Sparku, abyste získali přístup k účtu Blob Storage pro relaci Sparku. Přečtěte si další informace o tom, proč to potřebujete udělat tady.
%%pyspark
blob_account_name = "<your blob storage account name>"
blob_container_name = "<your container name>"
from pyspark.sql import SparkSession
sc = SparkSession.builder.getOrCreate()
token_library = sc._jvm.com.microsoft.azure.synapse.tokenlibrary.TokenLibrary
blob_sas_token = token_library.getConnectionString("<blob storage linked service name>")
spark.conf.set('fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name), blob_sas_token)
Po nastavení připojení k úložišti můžete dotazovat existující tabulky v metastoru Hive.
Známá omezení
- Průzkumník objektů synapse Studia bude dál zobrazovat objekty ve spravovaném metastoru Synapse místo externího HMS.
-
SQL <–> Synchronizace Sparku nefunguje při použití externího HMS.
- Jako externí databázi metastoru Hive se podporují jenom Azure SQL Database a Azure Database for MySQL. Podporuje se pouze autorizace SQL.
- Spark v současné době funguje jenom u externích tabulek Hive a neaktuálních tabulek Hive spravovaných mimo ACID. Fond nepodporuje ACIT/transakční tabulky Hive.
- Integrace Apache Rangeru se nepodporuje.
Řešení problému
Následující chyba při dotazování na tabulku Hive s daty uloženými ve službě Blob Storage
No credentials found for account xxxxx.blob.core.windows.net in the configuration, and its container xxxxx is not accessible using anonymous credentials. Please check if the container exists first. If it is not publicly available, you have to provide account credentials.
Při použití ověřování pomocí klíče k vašemu účtu úložiště prostřednictvím propojené služby musíte provést další krok, abyste získali token pro relaci Sparku. Před spuštěním dotazu spusťte následující kód a nakonfigurujte relaci Sparku. Přečtěte si další informace o tom, proč to potřebujete udělat tady.
%%pyspark
blob_account_name = "<your blob storage account name>"
blob_container_name = "<your container name>"
from pyspark.sql import SparkSession
sc = SparkSession.builder.getOrCreate()
token_library = sc._jvm.com.microsoft.azure.synapse.tokenlibrary.TokenLibrary
blob_sas_token = token_library.getConnectionString("<blob storage linked service name>")
spark.conf.set('fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name), blob_sas_token)
Následující chyba při dotazování na tabulku uloženou v účtu ADLS Gen2
Operation failed: "This request is not authorized to perform this operation using this permission.", 403, HEAD
K této chybě může dojít, když uživatel, který spouští dotaz Sparku, nemá dostatečný přístup k příslušnému účtu úložiště. Ujistěte se, že uživatel, který spouští dotazy Sparku, má v účtu úložiště ADLS Gen2 roli Přispěvatel dat objektů blob úložiště. Tento krok lze provést po vytvoření propojené služby.
Aby nedošlo ke změně back-endu nebo verze back-endu HMS, jsou ve výchozím nastavení nastaveny následující konfigurace Hive:
spark.hadoop.hive.metastore.schema.verification true
spark.hadoop.hive.metastore.schema.verification.record.version false
spark.hadoop.datanucleus.fixedDatastore true
spark.hadoop.datanucleus.schema.autoCreateAll false
Pokud je 1.2.1
vaše verze HMS nebo 1.2.2
, v Hive dochází k problému, který vyžaduje 1.2.0
pouze v případě, že se obrátíte spark.hadoop.hive.metastore.schema.verification
na true
. Naším návrhem je buď upravit verzi HMS na 1.2.0
verzi HMS, nebo přepsat pod dvě konfigurace, které se mají obejít:
spark.hadoop.hive.metastore.schema.verification false
spark.hadoop.hive.synapse.externalmetastore.schema.usedefault false
Pokud potřebujete migrovat verzi HMS, doporučujeme použít nástroj schématu Hive. A pokud clustery HDInsight používají HMS, doporučujeme použít verzi zadanou službou HDI.
Změna schématu HMS pro OSS HMS 3.1
Synapse se snaží hladce pracovat s výpočetními prostředky z HDI. HMS 3.1 v HDI 4.0 ale není plně kompatibilní s OSS HMS 3.1. Pokud není služba HDI zřízená službou HDI, použijte následující příkaz ručně na váš HMS 3.1.
-- HIVE-19416
ALTER TABLE TBLS ADD WRITE_ID bigint NOT NULL DEFAULT(0);
ALTER TABLE PARTITIONS ADD WRITE_ID bigint NOT NULL DEFAULT(0);
Pokud chcete sdílet katalog Hive s clusterem Spark v HDInsight 4.0, ujistěte se, že vaše vlastnost spark.hadoop.metastore.catalog.default
ve Službě Synapse Spark odpovídá hodnotě ve Sparku HDInsight. Výchozí hodnota sparku HDI je spark
a výchozí hodnota sparku Synapse je hive
.
Jak je uvedeno v omezeních, fond Synapse Spark podporuje pouze externí tabulky Hive a neaktuální/ACID spravované tabulky, v současné době nepodporuje tabulky Hive ACID/transactional. V clusterech Hive HDInsight 4.0 se ve výchozím nastavení vytvoří všechny spravované tabulky jako ACID/transakční tabulky, proto při dotazování těchto tabulek získáte prázdné výsledky.
java.lang.ClassNotFoundException: Class com.microsoft.vegas.vfs.SecureVegasFileSystem not found
Tento problém můžete snadno vyřešit připojením /usr/hdp/current/hadoop-client/*
k souboru spark.sql.hive.metastore.jars
.
Eg:
spark.sql.hive.metastore.jars":"/opt/hive-metastore/lib-2.3/*:/usr/hdp/current/hadoop-client/lib/*:/usr/hdp/current/hadoop-client/*