Dış Apache Hive meta veri deposu (eski)
Bu makalede, mevcut dış Apache Hive meta veri depolarına bağlanmak için Azure Databricks kümelerinin nasıl ayarlanacağı açıklanır. Önerilen meta veri deposu kurulumu ve küme yapılandırma gereksinimleri hakkında bilgi sağlar ve ardından kümeleri bir dış meta veri deposuna bağlanacak şekilde yapılandırma yönergelerini sağlar. Databricks Runtime'da bulunan Hive kitaplığı sürümleri için ilgili Databricks Runtime sürüm sürüm notlarına bakın.
Önemli
- SQL Server, Hive 2.0 ve üzeri için temel meta veri deposu veritabanı olarak çalışsa da, bu makaledeki örneklerde Azure SQL Veritabanı kullanılır.
- HDInsight ile Hive meta veri deposu uyumluluğu hakkında bilgi için bkz . Azure HDInsight'ta dış meta veri depolarını kullanma.
- dış meta veri deposu olarak MySQL için Azure Veritabanı kullanıyorsanız, sunucu tarafı veritabanı yapılandırmasında
lower_case_table_names
özelliğin değerini 1 (varsayılan) yerine 2 olarak değiştirmeniz gerekir. Ayrıntılar için bkz . Tanımlayıcı Büyük/Küçük Harf Duyarlılığı.
Not
Dış meta veri depolarını kullanmak eski bir veri idare modelidir. Databricks, Unity Kataloğu'na yükseltmenizi önerir. Unity Kataloğu, hesabınızdaki birden çok çalışma alanında veri erişimini yönetmek ve denetlemek için merkezi bir yer sağlayarak verilerinizin güvenliğini ve idaresini basitleştirir. Bkz. Unity Kataloğu nedir?.
Hive meta veri deposu kurulumu
Bir küme içinde çalışan meta veri deposu istemcisi, JDBC kullanarak temel alınan meta veri deposu veritabanınıza doğrudan bağlanır.
Bir kümeden meta veri deposuna ağ bağlantısını test etmek için not defteri içinde aşağıdaki komutu çalıştırabilirsiniz:
%sh
nc -vz <DNS name> <port>
burada:
<DNS name>
Azure SQL Veritabanı sunucu adıdır.<port>
, veritabanının bağlantı noktasıdır.
Küme yapılandırmaları
Bir kümeyi dış meta veri deposuna bağlamak için iki yapılandırma seçeneği kümesi ayarlamanız gerekir:
- Spark seçenekleri Spark'ı Hive meta veri deposu sürümü ve meta veri deposu istemcisi için JAR'ler ile yapılandırır.
- Hive seçenekleri , meta veri deposu istemcisini dış meta veri deposuna bağlanacak şekilde yapılandırıyor.
Spark yapılandırma seçenekleri
Hive meta veri deponuzun sürümüne ve spark.sql.hive.metastore.jars
aşağıdaki gibi ayarlayınspark.sql.hive.metastore.version
:
Hive 0.13: ayarlamayın
spark.sql.hive.metastore.jars
.Not
Hive 1.2.0 ve 1.2.1, Databricks Runtime 7.0 ve üzeri sürümlerin yerleşik meta veri deposu değildir. Hive 1.2.0 veya 1.2.1'i Databricks Runtime 7.0 ve üzeri sürümlerle kullanmak istiyorsanız, Meta veri deposu jar'larını indirme bölümünde açıklanan yordamı izleyin ve bunlara işaret edin.
Hive 2.3.7 (Databricks Runtime 7.0 - 9.x) veya Hive 2.3.9 (Databricks Runtime 10.0 ve üzeri): olarak
builtin
ayarlanırspark.sql.hive.metastore.jars
.Diğer tüm Hive sürümleri için Azure Databricks, meta veri deposu JAR'lerini indirmenizi ve meta veri deposu jar'larını indirme ve bunlara işaret etme bölümünde açıklanan yordamı kullanarak yapılandırmayı
spark.sql.hive.metastore.jars
indirilen JAR'lere işaret etmek üzere ayarlamanızı önerir.
Meta veri deposu jar'larını indirin ve üzerine gelin
meta veri deponuzun sürümüyle
spark.sql.hive.metastore.jars
eşleşecek ve olarak ayarlanmışmaven
spark.sql.hive.metastore.version
bir küme oluşturun.Küme çalışırken sürücü günlüğünde arama yapın ve aşağıdakine benzer bir satır bulun:
17/11/18 22:41:19 INFO IsolatedClientLoader: Downloaded metastore jars to <path>
Dizin
<path>
, kümenin sürücü düğümünde indirilen JAR'lerin konumudur.Alternatif olarak, JAR'ların konumunu yazdırmak için scala not defterinde aşağıdaki kodu çalıştırabilirsiniz:
import com.typesafe.config.ConfigFactory val path = ConfigFactory.load().getString("java.io.tmpdir") println(s"\nHive JARs are downloaded to the path: $path \n")
Bu dizini sürücü düğümündeki DBFS istemcisi aracılığıyla çağrılan
hive_metastore_jar
DBFS kökündeki bir dizine kopyalamak için komutunu çalıştırın%sh cp -r <path> /dbfs/hive_metastore_jar
(öğesini kümenizin bilgileriyle değiştirerek<path>
).Düğümün yerel dosya sistemine kopyalayan
/dbfs/hive_metastore_jar
bir init betiği oluşturun ve init betiğinin DBFS istemcisine erişmeden birkaç saniye önce uyku moduna geçmesine emin olun. Bu, istemcinin hazır olmasını sağlar.Bu dizini kullanmak için
spark.sql.hive.metastore.jars
ayarını yapın. Init betiğiniz/dbfs/hive_metastore_jar
öğesini/databricks/hive_metastore_jars/
konumuna kopyalıyorsa,spark.sql.hive.metastore.jars
öğesini/databricks/hive_metastore_jars/*
olarak ayarlayın. Konumun sonuna/*
eklenmelidir.Kümeyi yeniden başlatın.
Hive yapılandırma seçenekleri
Bu bölümde Hive'a özgü seçenekler açıklanmaktadır.
Yerel modu kullanarak bir dış meta veri deposuna bağlanmak için aşağıdaki Hive yapılandırma seçeneklerini ayarlayın:
# 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
burada:
<mssql-connection-string>
JDBC bağlantı dizesi (Azure portalından alabilirsiniz). ve tarafındanjavax.jdo.option.ConnectionUserName
javax.jdo.option.ConnectionDriverName
ayarlanacağından, bağlantı dizesi kullanıcı adı ve parola eklemeniz gerekmez.<mssql-username>
ve<mssql-password>
veritabanına okuma/yazma erişimi olan Azure SQL Veritabanı hesabınızın kullanıcı adını ve parolasını belirtin.
Not
Üretim ortamları için olarak ayarlamanızı hive.metastore.schema.verification
true
öneririz. Bu, meta veri deposu istemci sürümü meta veri deposu veritabanı sürümüyle eşleşmediğinde Hive meta veri deposu istemcisinin meta veri deposu veritabanı şemasını örtük olarak değiştirmesini engeller. Hive 1.2.0'dan düşük meta veri deposu istemci sürümleri için bu ayarı etkinleştirirken meta veri deposu istemcisinin meta veri deposu veritabanına yazma iznine sahip olduğundan emin olun (HIVE-9749'da açıklanan sorunu önlemek için).
- Hive meta veri deposu 1.2.0 ve üzeri için,'yi etkinleştirmek
hive.metastore.schema.verification
içintrue
olarak ayarlayınhive.metastore.schema.verification.record.version
. - Hive meta veri deposu 2.1.1 ve üzeri
hive.metastore.schema.verification.record.version
true
için, varsayılan olarak olarak olarak ayarlanırfalse
.
Kullanıcı arabirimini kullanarak dış meta veri deposu ayarlama
Azure Databricks kullanıcı arabirimini kullanarak dış meta veri deposu ayarlamak için:
Kenar çubuğundaki Kümeler düğmesine tıklayın.
Küme Oluştur'a tıklayın.
Aşağıdaki Spark yapılandırma seçeneklerini girin:
# 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>
İşlem yapılandırma başvurusu başlığındaki yönergeleri izleyerek küme yapılandırmanıza devam edin.
Kümeyi oluşturmak için Küme Oluştur'a tıklayın.
Başlangıç betiğini kullanarak dış meta veri deposu ayarlama
Init betikleri , gerekli yapılandırmaları el ile ayarlamadan mevcut bir Hive meta deposuna bağlanmanızı sağlar.
- Init betiğini mevcut değilse içinde depolamak istediğiniz temel dizini oluşturun. Aşağıdaki örnekte kullanılır
dbfs:/databricks/scripts
. - Not defterinde aşağıdaki kod parçacığını çalıştırın. Kod parçacığı, Databricks Dosya Sistemi'nde (DBFS) init betiğini
/databricks/scripts/external-metastore.sh
oluşturur. Alternatif olarak, init betiğini oluşturmak için DBFS REST API'sinin put işlemini kullanabilirsiniz. Bu init betiği, adı belirtilen<cluster-name>
bir küme başlatıldığında, gerekli yapılandırma seçeneklerini kümenin her düğümü içindeki JSON benzeri biçimde/databricks/driver/conf/
adlı00-custom-spark.conf
bir yapılandırma dosyasına yazar. Azure Databricks, dosyada/databricks/driver/conf/spark-branch.conf
varsayılan Spark yapılandırmaları sağlar. Dizindeki/databricks/driver/conf
yapılandırma dosyaları ters alfabetik sırada uygulanır. Dosyanın adını00-custom-spark.conf
değiştirmek istiyorsanız, dosyanın dosyadan önce uygulanmaya devam ettiğindenspark-branch.conf
emin olun.
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
)
- Kümenizi init betiğiyle yapılandırın.
- Kümeyi yeniden başlatın.
Sorun giderme
Kümeler başlatılmıyor (yanlış başlatma betiği ayarları nedeniyle)
Dış meta veri deposunu ayarlamaya yönelik bir init betiği küme oluşturma işleminin başarısız olmasına neden oluyorsa, init betiğini günlüğe kaydedecek şekilde yapılandırın ve günlükleri kullanarak init betiğinin hatalarını ayıkın.
SQL deyiminde hata: InvocationTargetException
Tam özel durum yığını izlemesinde hata iletisi deseni:
Caused by: javax.jdo.JDOFatalDataStoreException: Unable to open a test connection to the given database. JDBC url = [...]
Dış meta veri deposu JDBC bağlantı bilgileri yanlış yapılandırılmış. Yapılandırılan konak adını, bağlantı noktasını, kullanıcı adını, parolayı ve JDBC sürücü sınıfı adını doğrulayın. Ayrıca, kullanıcı adının meta veri deposu veritabanına erişmek için doğru ayrıcalığı olduğundan emin olun.
Tam özel durum yığını izlemesinde hata iletisi deseni:
Required table missing : "`DBS`" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. [...]
Dış meta veri deposu veritabanı düzgün başlatılmadı. Meta veri deposu veritabanını oluşturduğunuzu doğrulayın ve JDBC bağlantı dizesi doğru veritabanı adını yazın. Ardından, aşağıdaki iki Spark yapılandırma seçeneğiyle yeni bir küme başlatın:
datanucleus.schema.autoCreateTables true datanucleus.fixedDatastore false
Bu şekilde, Hive istemci kitaplığı meta veri deposu veritabanında tablolar oluşturmaya ve başlatmaya çalışır ve bunlara erişmeye çalıştığında ancak eksik bulur.
SQL deyiminde hata: AnalysisException: org.apache.hadoop.hive.metastore.HiveMetastoreClient örneği oluşturulamıyor
Tam özel durum yığınında hata iletisi:
The specified datastore driver (driver name) was not found in the CLASSPATH
Küme yanlış bir JDBC sürücüsü kullanacak şekilde yapılandırılmış.
datanucleus.autoCreateSchema değerini true olarak ayarlamak beklendiği gibi çalışmıyor
Varsayılan olarak Databricks, meta veri deposu veritabanlarında yanlışlıkla yapılan yapısal değişiklikleri önleyen olarak da ayarlanır datanucleus.fixedDatastore
true
. Bu nedenle, Hive istemci kitaplığı olarak ayarlasanız datanucleus.autoCreateSchema
true
bile meta veri deposu tabloları oluşturamaz. Meta veri deposu veritabanının yanlışlıkla yükseltilmesini önlediğinden bu strateji genel olarak üretim ortamları için daha güvenlidir.
Meta veri deposu veritabanını başlatmaya yardımcı olmak için kullanmak datanucleus.autoCreateSchema
istiyorsanız olarak ayarladığınızdan datanucleus.fixedDatastore
false
emin olun. Ayrıca, üretim ortamınıza daha iyi koruma sağlamak için meta veri deposu veritabanını başlatdıktan sonra her iki bayrağı da çevirmek isteyebilirsiniz.