Külső Apache Hive metaadattár (örökölt)
Ez a cikk azt ismerteti, hogyan állíthat be Azure Databricks-fürtöket a meglévő külső Apache Hive-metaadattárakhoz való csatlakozáshoz. Információt nyújt a metaadattár ajánlott beállítási és fürtkonfigurációs követelményeiről, majd útmutatást ad a fürtök külső metaadattárhoz való csatlakozásra való konfigurálásához. A Databricks Runtime-ban található Hive-kódtár-verziókért tekintse meg a Databricks Runtime-verzió kibocsátási megjegyzéseit.
Fontos
- Bár az SQL Server a Hive 2.0-s és újabb verziók alapjául szolgáló metaadattár-adatbázisként működik, a jelen cikkben szereplő példák az Azure SQL Database-t használják.
- A Hive-metaadattár HDInsighttal való kompatibilitásával kapcsolatos információkért lásd : Külső metaadattárak használata az Azure HDInsightban.
- Ha az Azure Database for MySQL-t külső metaadattárként használja, a tulajdonság értékét a kiszolgálóoldali
lower_case_table_names
adatbázis konfigurációjában 1-ről (alapértelmezett) 2-re kell módosítania. További részletekért lásd : Azonosító kis- és nagybetűk érzékenysége.
Feljegyzés
A külső metaadattárak használata örökölt adatszabályozási modell. A Databricks azt javasolja, hogy frissítsen Unity katalógusra. A Unity katalógus leegyszerűsíti az adatok biztonságát és szabályozását azáltal, hogy egy központi helyen teszi lehetővé a több munkaterületen lévő adatokhoz való hozzáférés adminisztrálását és auditálást az Ön fiókjában. Lásd a Mi az a Unity katalógus? témakört.
Hive metaadattár beállítása
A fürtben futó metaadattár-ügyfél közvetlenül a JDBC használatával csatlakozik a mögöttes metaadattár-adatbázishoz.
A fürt és a metaadattár közötti hálózati kapcsolat teszteléséhez futtassa a következő parancsot egy jegyzetfüzetben:
%sh
nc -vz <DNS name> <port>
ebben:
<DNS name>
az Azure SQL Database kiszolgálóneve.<port>
az adatbázis portja.
Fürtkonfigurációk
A fürtök külső metaadattárhoz való csatlakoztatásához két konfigurációs beállítást kell megadnia:
- A Spark beállításai konfigurálják a Sparkot a Hive metaadattár verziójával és a metaadattár-ügyfélhez tartozó JAR-ekkel.
- A Hive beállításai konfigurálják a metaadattár-ügyfelet a külső metaadattárhoz való csatlakozáshoz.
Spark-konfigurációs beállítások
Állítsa be spark.sql.hive.metastore.version
a Hive-metaadattár verzióját az spark.sql.hive.metastore.jars
alábbiak szerint:
Hive 0.13: nincs beállítva
spark.sql.hive.metastore.jars
.Feljegyzés
A Hive 1.2.0 és az 1.2.1 nem a Databricks Runtime 7.0-s és újabb verziók beépített metaadattára. Ha a Hive 1.2.0-s vagy 1.2.1-et a Databricks Runtime 7.0-s vagy újabb verziójával szeretné használni, kövesse a metaadattár jarok letöltésében leírt eljárást, és mutasson rájuk.
Hive 2.3.7 (Databricks Runtime 7.0 - 9.x) vagy Hive 2.3.9 (Databricks Runtime 10.0 vagy újabb): beállítva
spark.sql.hive.metastore.jars
builtin
.Az összes többi Hive-verzió esetében az Azure Databricks azt javasolja, hogy töltse le a metaadattár JARs-eit, és állítsa be a konfigurációt
spark.sql.hive.metastore.jars
úgy, hogy a letöltött JAR-re mutasson a metaadattár jars letöltésében leírt eljárással, és mutasson rájuk.
Töltse le a metaadattár jarjait, és mutasson rájuk
Hozzon létre egy fürtöt a metaadattár verziójának
maven
megfelelő beállítással ésspark.sql.hive.metastore.version
beállítássalspark.sql.hive.metastore.jars
.Amikor a fürt fut, keressen rá az illesztőprogram-naplóban, és keressen egy olyan sort, mint a következő:
17/11/18 22:41:19 INFO IsolatedClientLoader: Downloaded metastore jars to <path>
A könyvtár
<path>
a letöltött JAR-k helye a fürt illesztőprogram-csomópontjában.Másik lehetőségként futtathatja a következő kódot egy Scala-jegyzetfüzetben a JARs helyének nyomtatásához:
import com.typesafe.config.ConfigFactory val path = ConfigFactory.load().getString("java.io.tmpdir") println(s"\nHive JARs are downloaded to the path: $path \n")
Futtassa
%sh cp -r <path> /dbfs/hive_metastore_jar
(cserélje le<path>
a fürt adataira) a könyvtár másolásához egy dbFS-gyökérkönyvtárba, amelyet az illesztőcsomópont DBFS-ügyfélén keresztül hív meghive_metastore_jar
.Hozzon létre egy init-szkriptet , amely a csomópont helyi fájlrendszerére másol
/dbfs/hive_metastore_jar
, és győződjön meg arról, hogy az init szkript alvó állapotban van néhány másodperccel, mielőtt hozzáfér a DBFS-ügyfélhez. Ez biztosítja, hogy az ügyfél készen álljon.Állítsa be a
spark.sql.hive.metastore.jars
értékét ennek a könyvtárnak a használatára. Ha az init szkript a/dbfs/hive_metastore_jar
-t a/databricks/hive_metastore_jars/
-ba másolja, állítsa be aspark.sql.hive.metastore.jars
-t a/databricks/hive_metastore_jars/*
-ra. A helynek tartalmaznia kell a záró/*
karaktert is.Indítsa újra a fürtöt.
A Hive konfigurációs beállításai
Ez a szakasz a Hive-re vonatkozó beállításokat ismerteti.
Ha helyi móddal szeretne csatlakozni egy külső metaadattárhoz, adja meg a következő Hive-konfigurációs beállításokat:
# JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionURL <mssql-connection-string>
# Username to use against metastore database
javax.jdo.option.ConnectionUserName <mssql-username>
# Password to use against metastore database
javax.jdo.option.ConnectionPassword <mssql-password>
# Driver class name for a JDBC metastore
javax.jdo.option.ConnectionDriverName com.microsoft.sqlserver.jdbc.SQLServerDriver
ebben:
<mssql-connection-string>
A JDBC kapcsolati sztring (amely az Azure Portalon érhető el). Nem kell felhasználónevet és jelszót megadnia a kapcsolati sztring, mert ezeketjavax.jdo.option.ConnectionUserName
a beállításokat az ésjavax.jdo.option.ConnectionDriverName
a .<mssql-username>
és<mssql-password>
adja meg az adatbázishoz olvasási/írási hozzáféréssel rendelkező Azure SQL Database-fiók felhasználónevét és jelszavát.
Feljegyzés
Éles környezetek esetén azt javasoljuk, hogy állítsa be a következőt hive.metastore.schema.verification
true
: . Ez megakadályozza, hogy a Hive metaadattár-ügyfél implicit módon módosítsa a metaadattár-adatbázis sémáját, ha a metaadattár-ügyfél verziója nem felel meg a metaadattár-adatbázis verziójának. Ha engedélyezi ezt a beállítást a Hive 1.2.0-nál alacsonyabb metaadattár-ügyfélverziókhoz, győződjön meg arról, hogy a metaadattár-ügyfél rendelkezik írási engedéllyel a metaadattár-adatbázishoz (a HIVE-9749-ben leírt probléma elkerülése érdekében).
- A Hive 1.2.0-s és újabb metaadattárában engedélyezze
hive.metastore.schema.verification.record.version
az engedélyezésthive.metastore.schema.verification
true
. - A Hive 2.1.1-s és újabb
hive.metastore.schema.verification.record.version
true
metaadattárában alapértelmezés szerint állítsa be a beállítástfalse
.
Külső metaadattár beállítása a felhasználói felülettel
Külső metaadattár beállítása az Azure Databricks felhasználói felületén:
Kattintson a Fürtök gombra az oldalsávon.
Kattintson a Fürt létrehozása lehetőségre.
Adja meg a következő Spark-konfigurációs beállításokat:
# Hive-specific configuration options. # spark.hadoop prefix is added to make sure these Hive specific options propagate to the metastore client. # JDBC connect string for a JDBC metastore spark.hadoop.javax.jdo.option.ConnectionURL <mssql-connection-string> # Username to use against metastore database spark.hadoop.javax.jdo.option.ConnectionUserName <mssql-username> # Password to use against metastore database spark.hadoop.javax.jdo.option.ConnectionPassword <mssql-password> # Driver class name for a JDBC metastore spark.hadoop.javax.jdo.option.ConnectionDriverName com.microsoft.sqlserver.jdbc.SQLServerDriver # Spark specific configuration options spark.sql.hive.metastore.version <hive-version> # Skip this one if <hive-version> is 0.13.x. spark.sql.hive.metastore.jars <hive-jar-source>
Folytassa a fürtkonfigurációt a számítási konfigurációs referencia utasításait követve.
Kattintson a Fürt létrehozása elemre a fürt létrehozásához.
Külső metaadattár beállítása init szkripttel
Az Init-szkriptek lehetővé teszik, hogy a szükséges konfigurációk manuális beállítása nélkül csatlakozzon egy meglévő Hive-metaadattárhoz.
- Hozza létre azt az alapkönyvtárat, amelyben az inicializálási szkriptet tárolni szeretné, ha az nem létezik. Az alábbi példa a következőt használja
dbfs:/databricks/scripts
: - Futtassa a következő kódrészletet egy jegyzetfüzetben. A kódrészlet létrehozza az init szkriptet
/databricks/scripts/external-metastore.sh
a Databricks fájlrendszerben (DBFS). Másik lehetőségként a DBFS REST API üzembehelyezési műveletével is létrehozhatja az init-szkriptet. Ez az init-szkript a szükséges konfigurációs beállításokat egy JSON-szerű formátumban/databricks/driver/conf/
elnevezett00-custom-spark.conf
konfigurációs fájlba írja a fürt minden csomópontjában, amikor egy fürt a megadott<cluster-name>
néven indul el. Az Azure Databricks alapértelmezett Spark-konfigurációkat biztosít a/databricks/driver/conf/spark-branch.conf
fájlban. A címtárban lévő/databricks/driver/conf
konfigurációs fájlok fordított betűrendben érvényesek. Ha módosítani szeretné a00-custom-spark.conf
fájl nevét, győződjön meg arról, hogy a fájl előttspark-branch.conf
továbbra is érvényes marad.
Scala
dbutils.fs.put(
"/databricks/scripts/external-metastore.sh",
"""#!/bin/sh
|# Loads environment variables to determine the correct JDBC driver to use.
|source /etc/environment
|# Quoting the label (i.e. EOF) with single quotes to disable variable interpolation.
|cat << 'EOF' > /databricks/driver/conf/00-custom-spark.conf
|[driver] {
| # Hive specific configuration options.
| # spark.hadoop prefix is added to make sure these Hive specific options will propagate to the metastore client.
| # JDBC connect string for a JDBC metastore
| "spark.hadoop.javax.jdo.option.ConnectionURL" = "<mssql-connection-string>"
|
| # Username to use against metastore database
| "spark.hadoop.javax.jdo.option.ConnectionUserName" = "<mssql-username>"
|
| # Password to use against metastore database
| "spark.hadoop.javax.jdo.option.ConnectionPassword" = "<mssql-password>"
|
| # Driver class name for a JDBC metastore
| "spark.hadoop.javax.jdo.option.ConnectionDriverName" = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
|
| # Spark specific configuration options
| "spark.sql.hive.metastore.version" = "<hive-version>"
| # Skip this one if <hive-version> is 0.13.x.
| "spark.sql.hive.metastore.jars" = "<hive-jar-source>"
|}
|EOF
|""".stripMargin,
overwrite = true
)
Python
contents = """#!/bin/sh
# Loads environment variables to determine the correct JDBC driver to use.
source /etc/environment
# Quoting the label (i.e. EOF) with single quotes to disable variable interpolation.
cat << 'EOF' > /databricks/driver/conf/00-custom-spark.conf
[driver] {
# Hive specific configuration options.
# spark.hadoop prefix is added to make sure these Hive specific options will propagate to the metastore client.
# JDBC connect string for a JDBC metastore
"spark.hadoop.javax.jdo.option.ConnectionURL" = "<mssql-connection-string>"
# Username to use against metastore database
"spark.hadoop.javax.jdo.option.ConnectionUserName" = "<mssql-username>"
# Password to use against metastore database
"spark.hadoop.javax.jdo.option.ConnectionPassword" = "<mssql-password>"
# Driver class name for a JDBC metastore
"spark.hadoop.javax.jdo.option.ConnectionDriverName" = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
# Spark specific configuration options
"spark.sql.hive.metastore.version" = "<hive-version>"
# Skip this one if <hive-version> is 0.13.x.
"spark.sql.hive.metastore.jars" = "<hive-jar-source>"
}
EOF
"""
dbutils.fs.put(
file = "/databricks/scripts/external-metastore.sh",
contents = contents,
overwrite = True
)
- Konfigurálja a fürtöt az init szkripttel.
- Indítsa újra a fürtöt.
Hibaelhárítás
A fürtök nem indulnak el (helytelen init szkriptbeállítások miatt)
Ha egy init-szkript a külső metaadattár beállításához sikertelen fürtlétrehozást okoz, konfigurálja az init szkriptet a naplózásra, és hibakeresést végezze el az init szkriptben a naplók használatával.
Hiba az SQL-utasításban: InvocationTargetException
Hibaüzenet minta a teljes kivételverem-nyomkövetésben:
Caused by: javax.jdo.JDOFatalDataStoreException: Unable to open a test connection to the given database. JDBC url = [...]
A külső metaadattár JDBC-kapcsolati adatai helytelenül konfigurálva lesznek. Ellenőrizze a konfigurált állomásnevet, portot, felhasználónevet, jelszót és JDBC-illesztőosztály nevét. Győződjön meg arról is, hogy a felhasználónév rendelkezik megfelelő jogosultsággal a metaadattár-adatbázis eléréséhez.
Hibaüzenet minta a teljes kivételverem-nyomkövetésben:
Required table missing : "`DBS`" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. [...]
A külső metaadattár-adatbázis nincs megfelelően inicializálva. Ellenőrizze, hogy létrehozta-e a metaadattár-adatbázist, és elhelyezte-e a megfelelő adatbázisnevet a JDBC kapcsolati sztring. Ezután indítson el egy új fürtöt a következő két Spark-konfigurációs beállítással:
datanucleus.schema.autoCreateTables true datanucleus.fixedDatastore false
Ily módon a Hive ügyfélkódtár automatikusan meg fogja próbálni létrehozni és inicializálni a táblákat a metaadattár-adatbázisban, amikor megkísérli elérni őket, de azok nem találhatók.
Hiba az SQL-utasításban: AnalysisException: Nem sikerült példányosítani az org.apache.hadoop.hive.metastore.HiveMetastoreClient parancsot
Hibaüzenet a teljes kivétel veremsávjában:
The specified datastore driver (driver name) was not found in the CLASSPATH
A fürt úgy van konfigurálva, hogy helytelen JDBC-illesztőprogramot használjon.
A datanucleus.autoCreateSchema igaz értékre állítása nem a várt módon működik
A Databricks alapértelmezés szerint a metaadattár-adatbázisok véletlen szerkezeti változásait is datanucleus.fixedDatastore
true
megakadályozza. Ezért a Hive-ügyfélkódtár akkor sem tud metaadattár-táblákat létrehozni, ha be van true
állítvadatanucleus.autoCreateSchema
. Ez a stratégia általában biztonságosabb az éles környezetek számára, mivel megakadályozza a metaadattár-adatbázis véletlen frissítését.
Ha segíteni szeretne datanucleus.autoCreateSchema
a metaadattár-adatbázis inicializálásában, győződjön meg arról, hogy be van állítva datanucleus.fixedDatastore
false
. A metaadattár-adatbázis inicializálása után érdemes lehet mindkét jelzőt tükrözni, hogy jobb védelmet biztosítson az éles környezet számára.