Hive veri kaynağı, Hive'dan veri okumanıza ve Hive'a veri yazmanıza olanak tanır. Bu konu, DataWorks'ün Hive verilerini nasıl senkronize ettiğini açıklar.
Çalışma mantığı
Hive, Hadoop üzerine inşa edilmiş, büyük ölçekli yapılandırılmış günlük verilerinin istatistiksel analizi için kullanılan bir veri ambarı aracıdır. Hive, yapılandırılmış veri dosyalarını tablolara eşler ve SQL sorgulama yetenekleri sağlar. Veri analizi için MapReduce'u, veri depolama için HDFS'i ve HiveQL (HQL) dilinden dönüştürülen MapReduce programlarını çalıştırmak için YARN'ı kullanan bir SQL ayrıştırma motoru olarak işlev görür.
Hive Reader eklentisi, yapılandırdığınız tabloların meta verilerini almak üzere HiveMetastore hizmetine erişir. Verileri aşağıdaki yöntemlerden birini kullanarak okuyabilirsiniz:
-
HDFS dosyalarını kullanarak veri okuma
Hive Reader eklentisi, yapılandırdığınız tablo için HDFS dosya depolama yolunu, dosya biçimini ve sınırlayıcıları almak üzere HiveMetastore hizmetine erişir. Eklenti daha sonra verileri doğrudan alttaki HDFS dosyalarından okur.
-
Hive JDBC bağlantısı kullanarak veri okuma
Hive Reader eklentisi, veri okumak için HiveServer2 hizmetine bağlanır. Bu yöntem, bir where yan tümcesi ile veri filtrelemeyi destekler ve SQL deyimlerini kullanarak verileri doğrudan okumanıza olanak tanır.
Hive Writer eklentisi, yapılandırdığınız tablo için HDFS dosya depolama yolu, dosya biçimi ve sınırlayıcılar gibi bilgileri almak üzere HiveMetastore hizmetine erişir. Verileri HDFS dosyalarına yazar ve ardından verileri HDFS dosyalarından Hive tablosuna yüklemek için bir Hive JDBC istemcisi aracılığıyla LOAD DATA SQL deyimi çalıştırır.
Hive Writer eklentisinin altta yatan mantığı, HDFS Writer eklentisi ile aynıdır. Hive Writer eklentisinde HDFS Writer parametrelerini yapılandırabilirsiniz; bu parametreler daha sonra HDFS Writer eklentisine iletilir.
Desteklenen sürümler
Sınırlamalar
Hive veri kaynağı Sunucusuz kaynak gruplarını (önerilen) ve Veri Entegrasyonu için özel kaynak gruplarını destekler.
Okuma işlemleri için yalnızca TextFile, ORCFile ve ParquetFile biçimleri desteklenir.
-
Bir Hive kümesine çevrimdışı senkronizasyon sırasında, Veri Entegrasyonu sunucuda geçici dosyalar oluşturur. Senkronizasyon görevi tamamlandığında bu dosyalar otomatik olarak silinir. HDFS dosya sisteminin kullanılamaz hale gelmesine neden olabilecek üst sınıra ulaşmaması için HDFS dizinindeki dosya sayısını izlemeniz gerekir. DataWorks, dosya sayısının HDFS dizin sınırı içinde kalacağını garanti etmez.
NotSunucuda, tek bir dizindeki özyinelemeli olmayan dizin veya dosyaların maksimum sayısını tanımlamak için dfs.namenode.fs-limits.max-directory-items parametresini değiştirebilirsiniz. Varsayılan değer 1.048.576'dır ve değer 1 ile 6.400.000 arasında olabilir. Bu sorunu çözmek için HDFS parametresi dfs.namenode.fs-limits.max-directory-items değerini artırın veya gereksiz dosyaları silin.
Bir Hive veri kaynağına erişirken, şu anda Kerberos kimlik doğrulaması ve
SSL authenticationdesteklenmektedir. Kimlik doğrulama gerekmiyorsa, yeni bir veri kaynağı eklerken No Authentication için Authentication Method seçeneğini belirleyin.-
Kerberos kimlik doğrulaması ile bir Hive veri kaynağına erişmek için DataWorks'ü kullanırken, hem HiveServer2 hem de metastore Kerberos kimlik doğrulaması etkinleştirilmiş ancak farklı principal'lar kullanıyorsa, Extension Parameters alanına aşağıdaki yapılandırmayı eklemeniz gerekir:
{ "hive.metastore.kerberos.principal": "<your metastore principal>" }
Desteklenen veri türleri
Hive Reader eklentisi aşağıdaki veri türlerini destekler:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ön koşullar
Ön koşullar, veri kaynağı yapılandırma moduna göre değişir.
Alibaba Cloud örnek modu
OSS tabanlı bir tabloyu senkronize etmek istiyorsanız, bir Access Identity seçin. Bir Alibaba Cloud Account, bir Alibaba Cloud RAM User veya bir RAM Role kullanabilirsiniz. Seçilen kimliğin gerekli OSS izinlerine sahip olduğundan emin olun. Aksi takdirde, yetersiz okuma ve yazma izinleri nedeniyle veri senkronizasyonu başarısız olur.
Bağlantı testi, veri okuma ve yazma izinlerini doğrulamaz.
Bağlantı dizesi modu
Data Lake Formation (DLF)
Hive veri kaynağınız meta veri yönetimi için Data Lake Formation (DLF) kullanan bir EMR kümesiyse, veri kaynağını yapılandırırken Extension Parameters alanına aşağıdakileri ekleyin:
{"dlf.catalog.id" : "my_catalog_xxxx"}
my_catalog_xxxx ifadesini, EMR Hive yapılandırmanızdaki dlf.catalog.id parametresinin değeriyle değiştirin.
Yüksek kullanılabilirlik (HA)
Senkronize etmek istediğiniz EMR Hive kümesinde high availability (HA) etkinleştirildiyse, Enable High Availability Mode anahtarını etkinleştirmeniz ve HA ile ilgili bilgileri aşağıdaki biçimde Extension Parameters bölümünde yapılandırmanız gerekir. İlgili yapılandırma değerlerini elde etmek için EMR konsoluna gidip hedef kümeyi bulabilir ve ardından Cluster Services sütunundaki Operations seçeneğine tıklayabilirsiniz.
{
// The following code provides an example of HA configurations.
"dfs.nameservices":"testDfs",
"dfs.ha.namenodes.testDfs":"namenode1,namenode2",
"dfs.namenode.rpc-address.testDfs.namenode1": "",
"dfs.namenode.rpc-address.testDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
// (Optional) If the underlying storage is OSS, configure the following parameters in Extension Parameters to connect to the OSS service.
"fs.oss.accessKeyId":"<yourAccessKeyId>",
"fs.oss.accessKeySecret":"<yourAccessKeySecret>",
"fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com"
}
OSS harici tablo
Altta yatan depolama OSS ise aşağıdakilere dikkat edin:
defaultFS değerini oss:// ön ekiyle ayarlayın. Örneğin,
oss://bucketName.-
Bir OSS harici tablosunu senkronize ediyorsanız, Hive veri kaynağını yapılandırırken OSS yapılandırmasını Extension Parameters alanına eklemeniz gerekir.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com" } -
Bir OSS-HDFS harici tablosunu senkronize ediyorsanız, Hive veri kaynağını yapılandırırken OSS-HDFS yapılandırmasını Extension Parameters alanına eklemeniz gerekir.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"cn-<yourRegion>.oss-dls.aliyuncs.com" }
CDH modu
CDH modunda bir Hive veri kaynağı yapılandırmak istiyorsanız, CDH kümesini DataWorks'e kaydetmeniz gerekir.
Veri kaynağı oluşturma
Bir veri senkronizasyon görevi geliştirmeden önce, DataWorks'te bir veri kaynağı oluşturun. Talimatlar için bkz. Veri kaynağı yönetimi. Ayrıntılı parametre açıklamaları için yapılandırma sayfasındaki satır içi ipuçlarına bakın.
Aşağıdaki bölümlerde farklı Authentication Method seçenekleri için parametreler açıklanmaktadır.
Kerberos kimlik doğrulaması
|
Parametre |
Açıklama |
|
keytab file |
Hizmet principal'ı Kerberos ortamında kaydedildiğinde oluşturulan .keytab dosyası. |
|
conf file |
|
|
principal |
Benzersiz bir ada ve ilişkili bir şifreleme anahtarına sahip olan bir kullanıcı veya hizmet olabilen bir kimlik.
|
SSL kimlik doğrulaması
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Senkronizasyon görevi geliştirme
Bir senkronizasyon görevini yapılandırmaya giriş noktası ve prosedürü hakkında bilgi için aşağıdaki yapılandırma kılavuzlarına bakın.
Tek tablo çevrimdışı senkronizasyon
Prosedür için bkz. Kodsuz kullanıcı arayüzünde görev yapılandırma ve Kod düzenleyicide görev yapılandırma.
Kod düzenleyici için parametrelerin tam listesi ve komut dosyası demosu için bkz. Ek: Komut dosyası demoları ve parametre referansı.
Tam veritabanı çevrimdışı senkronizasyon
Prosedür için bkz. Tüm veritabanı için çevrimdışı senkronizasyon görevi.
Ek: Komut dosyası demoları ve parametre referansı
Kod düzenleyici kullanarak toplu senkronizasyon görevi yapılandırma
Kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırmak istiyorsanız, komut dosyasındaki ilgili parametreleri birleşik komut dosyası biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Komut dosyası modu yapılandırması. Aşağıdaki bilgiler, kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklamaktadır.
Reader komut dosyası demoları
Verileri HDFS dosyalarını veya bir Hive JDBC bağlantısını kullanarak okuyabilirsiniz.
-
HDFS dosyalarını kullanarak veri okuma
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "partition": "pt1=a,pt2=b,pt3=c", // Partition information "datasource": "hive_not_ha_****", // Data source name "column": [ // Columns to read "id", "pt2", "pt1" ], "readMode": "hdfs", // Read mode "table": "part_table_1", "fileSystemUsername" : "hdfs", "hivePartitionColumn": [ { "type": "string", "value": "Partition Name 1" }, { "type": "string", "value": "Partition Name 2" } ], "successOnNoFile":true }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" // The number of error records allowed }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } } -
Hive JDBC bağlantısı kullanarak veri okuma
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "querySql": "select id,name,age from part_table_1 where pt2='B'", "datasource": "hive_not_ha_****", // Data source name "session": [ "mapred.task.timeout=600000" ], "column": [ // Columns to read "id", "name", "age" ], "where": "", "table": "part_table_1", "readMode": "jdbc" // Read mode }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } }
Reader parametreleri
|
Parametre |
Açıklama |
Gerekli |
Varsayılan |
|
datasource |
DataWorks'te oluşturduğunuz veri kaynağının adı. |
Evet |
Yok |
|
table |
Senkronize etmek istediğiniz tablonun adı. Not
Tablo adı büyük/küçük harfe duyarlıdır. |
Evet |
Yok |
|
readMode |
Okuma modu. Geçerli değerler:
Not
|
Hayır |
Yok |
|
partition |
Hive tablosunun bölüm bilgisi.
|
Hayır |
Yok |
|
session |
Bir Hive JDBC bağlantısı üzerinden veri okumak için oturum düzeyindeki yapılandırmalar. |
Hayır |
Yok |
|
column |
Okunacak sütunlar, örneğin
|
Evet |
Yok |
|
querySql |
Bir Hive JDBC bağlantısı kullanarak veri okurken, verileri okumak için doğrudan querySql parametresini yapılandırabilirsiniz. |
Hayır |
Yok |
|
where |
Bir Hive JDBC bağlantısı kullanarak veri okurken, verileri filtrelemek için bir where yan tümcesi kullanabilirsiniz. |
Hayır |
Yok |
|
fileSystemUsername |
HDFS yöntemini kullanan veri okumaları, varsayılan olarak Hive veri kaynağı sayfasında yapılandırılan kullanıcıyı kullanır. Veri kaynağı sayfasında anonim oturum açma yapılandırıldıysa, bunun yerine |
Hayır |
Yok |
|
hivePartitionColumn |
Bölüm alanlarının değerlerini aşağı akışta senkronize etmek istiyorsanız, kod düzenleyiciye geçerek hivePartitionColumn parametresini yapılandırabilirsiniz. |
Hayır |
Yok |
|
successOnNoFile |
HDFS okuma modunda, dizin boş olduğunda senkronizasyon görevinin başarılı olarak kabul edilip edilmeyeceğini belirtir. |
Hayır |
Yok |
Writer komut dosyası demosu
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {
"partition": "year=a,month=b,day=c", // Partition configuration
"datasource": "hive_ha_shanghai", // Data source
"table": "partitiontable2", // Destination table
"column": [ // Column configuration
"id",
"name",
"age"
],
"writeMode": "append" ,// Write mode
"fileSystemUsername" : "hdfs"
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"throttle":true, // If you set throttle to false, the mbps parameter does not take effect, which indicates that no throttling is triggered. If you set throttle to true, throttling is enabled.
"concurrent":2, // The number of concurrent jobs.
"mbps":"12" // Throttling rate
}
}
}
Writer parametreleri
|
Parametre |
Açıklama |
Gerekli |
Varsayılan |
|
datasource |
Veri kaynağı adı. Oluşturduğunuz veri kaynağının adıyla eşleşmelidir. |
Evet |
Yok |
|
column |
Yazılacak sütunlar, örneğin
|
Evet |
Yok |
|
table |
Veri yazmak istediğiniz Hive tablosunun adı. Not
Tablo adı büyük/küçük harfe duyarlıdır. |
Evet |
Yok |
|
partition |
Hive tablosunun bölüm bilgisi.
|
Hayır |
Yok |
|
writeMode |
Hive tablo verileri için yazma modu. Veriler bir HDFS dosyasına yazıldıktan sonra, Hive Writer eklentisi verileri Hive tablosuna yüklemek için writeMode veri yükleme davranışını belirtir:
Not
writeMode yüksek riskli bir parametredir. Yanlışlıkla veri silmeyi önlemek için veri çıkış dizinine ve writeMode davranışına yakından dikkat edin. Veri yükleme davranışı hiveConfig parametresini gerektirir. Yapılandırmanızı doğrulayın. |
Evet |
Yok |
|
hiveConfig |
hiveConfig içinde, hiveCommand, jdbcUrl, username ve password dahil olmak üzere daha fazla Hive uzantı parametresi yapılandırabilirsiniz.
|
Evet |
Yok |
|
fileSystemUsername |
Bir Hive tablosuna veri yazarken, varsayılan olarak Hive veri kaynağı sayfasında yapılandırılan kullanıcı kullanılır. Veri kaynağı sayfasında anonim oturum açma yapılandırıldıysa, varsayılan olarak admin hesabı kullanılır. Senkronizasyon görevi sırasında bir izin sorunu oluşursa, kod düzenleyiciye geçin ve fileSystemUsername parametresini yapılandırın. |
Hayır |
Yok |
|
enableColumnExchange |
Bu parametreyi True olarak ayarlarsanız, sütun yeniden sıralama etkinleştirilir. Not
Bu parametre yalnızca Text biçimi için desteklenir. |
Hayır |
Yok |
|
nullFormat |
Veri Entegrasyonu, nullFormat parametresini hangi dize değerlerinin null olarak kabul edileceğini tanımlamak için kullanır. Örneğin, Not
"null" dizesi (n, u, l, l karakterlerinden oluşan dört karakter), gerçek bir null değerinden farklıdır. |
Hayır |
Yok |