DataWorks veri entegrasyonu, Apache Arrow sütun deposu biçimini kullanarak farklı veri kaynakları arasında yüksek performanslı veri senkronizasyonunu destekler. Bu çözüm, bellek içi passthrough ve zero-copy teknolojisini kullanarak veri aktarımını satır tabanlıdan sütun tabanlıya dönüştürür; bu da büyük veri hacimleri için senkronizasyon aktarım hızını artırır. Test senaryolarında performans neredeyse 10 kat artabilir.
Kullanım durumları
Büyük miktarda veriyi işlerken, satır deposu tabanlı veri senkronizasyonu çözümleri genellikle performans darboğazlarıyla karşılaşır. Bu darboğazlar, sık seri hale getirme (serialization), seri hale getirmeyi kaldırma (deserialization) ve tür dönüşümlerinden kaynaklanır. Bu durum özellikle Hive'den MaxCompute'a geçiş gibi veri ambarı migrasyonlarında veya data lakehouse mimarisi oluştururken geçerlidir. Terabaytlarca verinin uzun senkronizasyon süreleri, hizmet lansmanını ve veri analizi verimliliğini etkileyebilir. Bu çözüm, büyük ölçekli sütun deposu veri kaynakları arasındaki verimsiz veri yönlendirme sorununu çözer. Senkronizasyon süresini saatlerden dakikalara indirebilir.
Senaryo 1: Büyük veri migrasyonu
Sorun noktası: Yüzlerce terabayt verinin Hive'den MaxCompute'a geçirilmesi zaman alıcıdır ve hizmet lansmanını etkiler.Çözüm: Biçim dönüşümünü önlemek için doğrudan sütun deposu aktarımı amacıyla Arrow senkronizasyonunu etkinleştirin.Sonuç: Migrasyon süresi saatlerden dakikalara düşer, verimlilik 10 kattan fazla artar.
Senaryo 2: Farklı veri kaynağı entegrasyonu ve data lakehouse mimarisi
Veri, veri gölü (Hive ekosistemi gibi) ile veri ambarı (Hologres/MaxCompute) arasında özgürce ve verimli bir şekilde akar. Temel değer, tek bir veri kopyasını birden çok amaç için kullanmak ve göl-ambar sinerjisini sağlamaktır.
Çözüm mimarisi
DataWorks veri entegrasyonu, Apache Arrow sütunsal bellek içi standardını tanıtır. Reader ve Writer arasındaki veri aktarım yöntemini yeniden yapılandırır. Bu işlem, süreci satır tabanlı işlemeden doğrudan sütun tabanlı passthrough'a dönüştürür.
Geleneksel satır deposu senkronizasyon mimarisi
Geleneksel mimaride veriler satır satır işlenir. Kaynak ve hedef her ikisi de Parquet veya ORC gibi bir sütun deposu biçimi kullansa bile, veriler senkronizasyon motoru içinde genel satır tabanlı Record nesnelerine dönüştürülür. Biçim, tek satır depolama için tasarlanmıştır. Her Record nesnesi birkaç Sütun tanımlar. Her Sütun, mevcut satırdaki o sütunun Değerini içerir. Örneğin, MaxCompute (ODPS)'den MaxCompute (ODPS)'ye sütun deposu verilerini senkronize etmeyi düşünün:
Bu süreç aşağıdaki adımları içerir ve şu performans ek yükünü oluşturur:
Reader kod çözme: Reader, MaxCompute gibi kaynaktan sütun deposu verilerini okur. Ardından verilerin kodunu çözer ve bunları satır satır çerçevenin dahili
Recordnesnelerine dönüştürür.Çerçeve aktarımı: Çerçeve, bellek kuyruğunda çok sayıda
Recordnesnesini aktarır.Writer kodlama: Writer, çerçeveden
Recordnesnelerini alır, bunları hedefin gerektirdiği sütun deposu biçimine kodlar ve ardından verileri yazar.
Bu süreç, birden çok veri biçimi dönüşümü, seri hale getirme/seri hale getirmeyi kaldırma ve sık nesne oluşturma içerir. Bu durum, yüksek CPU ve bellek kaynağı tüketimine, sık çöp toplama (GC) işlemlerine ve sınırlı genel aktarım hızına yol açar.
Arrow sütun deposu senkronizasyon mimarisi
Yeni Arrow tabanlı mimari, uçtan uca sütunsal bir veri akışı uygular. Veriler, senkronizasyon işlem hattı boyunca sütun deposu biçimini korur. Bu durum, satır tabanlı dönüşümün ek yükünü önler.
ArrowTabularRecord veri yapısını tanıtarak senkronizasyon süreci şu şekilde optimize edilir:
Reader tarafından doğrudan okuma: Reader, MaxCompute Tunnel Arrow API'sini kullanarak kaynaktan sütun deposu verilerini doğrudan okur. Ardından verileri
ArrowTabularRecordnesnelerine kapsüller ve çerçeveye toplu işler halinde iletir.Çerçeve aktarımı: Çerçeve, ikili sütun verileri içeren
ArrowTabularRecordnesnelerini doğrudan iletir.Writer tarafından doğrudan yazma: Writer, Tunnel Arrow API'sini kullanarak
ArrowTabularRecordüzerinden Arrow biçimli ikili verileri doğrudan alır ve yeniden seri hale getirmeden zero-copy teknolojisiyle bunları Tunnel Server gibi bir hedefe aktarır.
Bu mimari, Arrow için yerel destek sağlar ve ara satır tabanlı dönüşüm adımını ortadan kaldırır. Bu sayede sütun depoları için uçtan uca "kısa devre senkronizasyonu" sağlanır; bu da aktarım hızını büyük ölçüde artırır ve gecikme süresini azaltır.
Uygulama adımları
Yüksek performanslı Arrow senkronizasyonunu etkinleştirmek için bir DataWorks veri entegrasyon görevine belirli parametreler ekleyebilirsiniz. Bu özellik şu anda kaynak ve hedefin MaxCompute, Hologres veya Hive/OSS/Hadoop Distributed File System (HDFS) (Parquet/ORC) olduğu tam veritabanı ve tek tablo çevrimdışı senkronizasyon görevleri için desteklenmektedir.
Yöntem 1: Tam veritabanı çevrimdışı senkronizasyonu
Veri entegrasyonu tam veritabanı çevrimdışı senkronizasyon görevi özelliğini kullanın. Örneğin, Hive'den MaxCompute'a yapılan bir çevrimdışı senkronizasyon için sistem, kaynak ve hedef tabloların alan türlerini otomatik olarak algılar ve yüksek performanslı Arrow senkronizasyonunu etkinleştirir. Manuel yapılandırma gerekmez. Bu ayarı, görev düzenleyicisinin sağ üst köşesindeki bölümünde görüntüleyebilirsiniz.
Runtime Config bölümünde, Enable Arrow short-circuit transfer parametresini bulun. Mevcut seçenekler Auto (varsayılan), Force enable ve Force disable şeklindedir.
Yöntem 2: Tek tablo çevrimdışı senkronizasyonu
Bir tek tablo çevrimdışı senkronizasyon görevi yapılandırırken, özelliği kod düzenleyicide manuel olarak etkinleştirebilirsiniz. Bunu yapmak için hem Reader hem de Writer'ın parameter yapılandırmasına "useArrow": true ekleyin.
Ön koşul: Bu özelliği etkinleştirmek için kaynak ve hedef tabloların sütun türü tanımları aynı olmalıdır. Çünkü bu mod, tür dönüşüm adımını atlar ve verileri doğrudan bellekte aktarır.
Aşağıda, Hive'dan (Reader) MaxCompute'a (Writer) veri senkronize etmek için örnek bir yapılandırma verilmiştir:
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
"useArrow": true,
"datasource": "my_datasource",
"column": [
"col1",
"col2"
],
"readMode": "hdfs",
"table": "table"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
"useArrow": true,
"truncate": false,
"datasource": "odps_test",
"column": [
"col1",
"col2"
],
"table": "table"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"speed": {
"concurrent": 3
}
}
}
Performans doğrulaması
Aşağıdaki bölümler, birkaç veri kaynağı kombinasyonu için performans iyileştirmesini göstermektedir. Performans doğrulaması için test koşulları şöyledir:
Stres testi koşulları: Sunucu özellikleri: 64 çekirdek, 256 GB bellek. Ağ arabirimi kartı: 25 Gbit/s.
Test veri hacmi: 42.045.700 kayıt.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Senaryo 1: MaxCompute sütun deposu kısa devre senkronizasyonu (Arrow → Arrow)
|
|
|
|
|
|
|
67,8 MB/sn 3740 R/sn |
212,6 MB/sn 11462 R/sn |
|
|
|
185,6 MB/sn 10226 R/sn |
569,9 MB/sn 30728 R/sn |
|
|
|
462,1 MB/sn 25467 R/sn |
1321,0 MB/sn 71143 R/sn |
|
Senaryo 2: Hologres → MaxCompute senkronizasyonu
|
|
|
|
|
|
|
439,1 MB/sn 216480 R/sn |
906,1 MB/sn 404270 R/sn |
|
|
|
773,3 MB/sn 381300 R/sn |
1669,1 MB/sn 745654 R/sn |
|
Senaryo 3: Parquet/ORC → MaxCompute senkronizasyonu
|
|
|
|
|
|
|
26,1 MB/sn 35631 R/sn |
1198,1 MB/sn 233587 R/sn |
|
|
|
21,4 MB/sn 27661 R/sn |
3256,3 MB/sn 300326 R/sn |
|
Parquet ve ORC, HDFS ve OSS gibi dağıtılmış dosya sistemlerinde kullanılan sütun deposu biçimleridir.