Azure Cosmos DB Spark bağlayıcısı: Aktarım hızı denetimi
UYGULANANLAR: NoSQL
Spark bağlayıcısı, Apache Spark kullanarak Azure Cosmos DB ile iletişim kurmanızı sağlar. Bu makalede aktarım hızı denetimi özelliğinin nasıl çalıştığı açıklanmaktadır. Aktarım hızı denetimini kullanmaya başlamak için GitHub'daki Spark örneklerimize göz atın.
Bu makalede Azure Cosmos DB Spark bağlayıcısında genel aktarım hızı denetim gruplarının kullanımı belgelenmektedir, ancak işlevsellik Java SDK'sında da kullanılabilir. SDK'da, tek bir istemci bağlantı örneği bağlamında istek birimi (RU) tüketimini sınırlamak için genel ve yerel aktarım hızı denetim gruplarını kullanabilirsiniz. Örneğin, bu yaklaşımı tek bir mikro hizmet içindeki farklı işlemlere veya belki de tek bir veri yükleme programına uygulayabilirsiniz. Daha fazla bilgi için bkz. Java SDK'sında aktarım hızı denetimini kullanma.
Uyarı
Aktarım hızı denetimi ağ geçidi modu için desteklenmez. Şu anda sunucusuz Azure Cosmos DB hesapları için hataya neden olan yüzde sonuçlarını tanımlamak için kullanılmaya targetThroughputThreshold
çalışılıyor. Hedef aktarım hızı/RU için yalnızca kullanarak mutlak bir değer sağlayabilirsiniz spark.cosmos.throughputControl.targetThroughput
.
Aktarım hızı denetimi neden önemlidir?
Aktarım hızı denetimi, bir kapsayıcıda çalışan uygulamaların performans gereksinimlerini yalıtmaya yardımcı olur. Aktarım hızı denetimi, belirli bir Spark istemcisinin kullanabileceği RU miktarını sınırlar.
çeşitli gelişmiş senaryolar istemci tarafı aktarım hızı denetiminden yararlanır:
- Farklı işlemlerin ve görevlerin farklı öncelikleri vardır: Veri alımı veya kopyalama etkinlikleri nedeniyle normal işlemlerin kısıtlanmasını önleme gereksinimi olabilir. Bazı işlemler veya görevler gecikme süresine duyarlı değildir ve azaltmaya diğerlerinden daha dayanıklıdır.
- Farklı kullanıcılara veya kiracılara eşitlik/yalıtım sağlama: Bir uygulamanın genellikle çok sayıda kullanıcısı vardır. Bazı kullanıcılar çok fazla istek gönderebilir ve bu da kullanılabilir tüm aktarım hızını tüketir ve bazılarının kısıtlanmış duruma düşmesine neden olur.
- Farklı Azure Cosmos DB istemcileri arasında aktarım hızının yük dengelemesi: Bazı kullanım örneklerinde, tüm istemcilerin aktarım hızına eşit (eşit) bir paya sahip olduğundan emin olmak önemlidir.
Aktarım hızı denetimi gerektiğinde daha ayrıntılı düzeyde RU hız sınırlama özelliği sağlar.
Aktarım hızı denetimi nasıl çalışır?
Spark bağlayıcısı için aktarım hızı denetimini yapılandırmak için önce aktarım hızı denetimi meta verilerini tanımlayan bir kapsayıcı oluşturursunuz. Bölüm anahtarı ve groupId
ttl
etkindir. Burada Spark SQL kullanarak bu kapsayıcıyı oluşturup olarak adlandıracaksınız ThroughputControl
:
%sql
CREATE TABLE IF NOT EXISTS cosmosCatalog.`database-v4`.ThroughputControl
USING cosmos.oltp
OPTIONS(spark.cosmos.database = 'database-v4')
TBLPROPERTIES(partitionKeyPath = '/groupId', autoScaleMaxThroughput = '4000', indexingPolicy = 'AllProperties', defaultTtlInSeconds = '-1');
Yukarıdaki örnek, otomatik ölçeklendirme ile bir kapsayıcı oluşturur. Standart sağlamayı tercih ediyorsanız değerini ile manualThroughput
değiştirebilirsinizautoScaleMaxThroughput
.
Önemli
Aktarım hızı denetimi özelliğinin çalışması için bölüm anahtarı olarak /groupId
tanımlanmalıdır ve ttl
etkinleştirilmelidir.
Belirli bir uygulamanın Spark yapılandırmasında, iş yükü için parametreler belirtebilirsiniz. Aşağıdaki örnek aktarım hızı denetimini olarak enabled
ayarlar. Örnek, aktarım hızı denetim grubu name
parametresini ve targetThroughputThreshold
parametresini tanımlar. Ayrıca, aktarım hızı denetim grubunun korunup korunmadığı ve container
parametrelerini de tanımlarsınızdatabase
:
"spark.cosmos.throughputControl.enabled" -> "true",
"spark.cosmos.throughputControl.name" -> "SourceContainerThroughputControl",
"spark.cosmos.throughputControl.targetThroughputThreshold" -> "0.95",
"spark.cosmos.throughputControl.globalControl.database" -> "database-v4",
"spark.cosmos.throughputControl.globalControl.container" -> "ThroughputControl"
Yukarıdaki örnekte targetThroughputThreshold
parametresi 0,95 olarak tanımlanmıştır. İstemciler kapsayıcıya ayrılan aktarım hızının yüzde 95'inden (+/- yüzde 5-10) fazlasını tükettiğinde hız sınırlama gerçekleşir (ve istekler yeniden denenir). Bu yapılandırma, aktarım hızı kapsayıcısında bir belge olarak depolanır ve bu örnek şöyle görünür:
{
"id": "ZGF0YWJhc2UtdjQvY3VzdG9tZXIvU291cmNlQ29udGFpbmVyVGhyb3VnaHB1dENvbnRyb2w.info",
"groupId": "database-v4/customer/SourceContainerThroughputControl.config",
"targetThroughput": "",
"targetThroughputThreshold": "0.95",
"isDefault": true,
"_rid": "EHcYAPolTiABAAAAAAAAAA==",
"_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
"_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
"_attachments": "attachments/",
"_ts": 1651835869
}
Aktarım hızı denetimi her işlemin RU ön hesaplamasını yapmaz. Bunun yerine, yanıt üst bilgisine göre işlemden sonraki RU kullanımlarını izler. Bu nedenle, aktarım hızı denetimi bir tahmini temel alır ve grup için belirli bir zamanda kullanılabilir aktarım hızı miktarını garanti etmez.
Bu nedenle, yapılandırılan RU tek bir işlemin tümünü kullanabilecek kadar düşükse, aktarım hızı denetimi RU'nun yapılandırılan sınırı aşmasını önleyemez. Aktarım hızı denetimi, yapılandırılan sınır, belirli bir denetim grubundaki bir istemcinin yürütebileceği tek bir işlemden daha yüksek olduğunda en iyi şekilde çalışır.
Sorgu veya değişiklik akışı aracılığıyla okurken, içindeki sayfa boyutunu spark.cosmos.read.maxItemCount
(varsayılan 1000) mütevazı bir miktar olacak şekilde yapılandırmanız gerekir. Bu şekilde, istemci aktarım hızı denetimi daha yüksek sıklıkta yeniden hesaplanabilir ve belirli bir zamanda daha doğru yansıtılabilir. Toplu kullanarak bir yazma işi için aktarım hızı denetimi kullandığınızda, aktarım hızı denetiminin mümkün olan en erken şekilde başlamasına izin vermek için tek bir istekte yürütülen belge sayısı azaltma hızına göre otomatik olarak ayarlanır.
Uyarı
targetThroughputThreshold
parametresi sabittir. Hedef aktarım hızı eşik değerini değiştirirseniz yeni bir aktarım hızı denetim grubu oluşturulur. (4.10.0 veya sonraki bir sürümü kullanıyorsanız, aynı ada sahip olabilir.) Tümünün yeni eşiği hemen kullandığından emin olmak istiyorsanız, grubu kullanan tüm Spark işlerini yeniden başlatmanız gerekir. Aksi takdirde, bir sonraki yeniden başlatmadan sonra yeni eşiği alır.
Aktarım hızı denetim grubunu kullanan her Spark istemcisi için kapsayıcıda ThroughputControl
birkaç saniyelik bir ttl
kayıt oluşturulur. Sonuç olarak, bir Spark istemcisi artık etkin bir şekilde çalışmıyorsa belgeler hızla kaybolur. Bir örnek aşağıda verilmiştir:
{
"id": "Zhjdieidjojdook3osk3okso3ksp3ospojsp92939j3299p3oj93pjp93jsps939pkp9ks39kp9339skp",
"groupId": "database-v4/customer/SourceContainerThroughputControl.config",
"_etag": "\"1782728-w98999w-ww9998w9-99990000\"",
"ttl": 10,
"initializeTime": "2022-06-26T02:24:40.054Z",
"loadFactor": 0.97636377638898,
"allocatedThroughput": 484.89444487847,
"_rid": "EHcYAPolTiABAAAAAAAAAA==",
"_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
"_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
"_attachments": "attachments/",
"_ts": 1651835869
}
Her istemci kaydında loadFactor
özniteliği, aktarım hızı denetim grubundaki diğer istemcilere göre belirli istemci üzerindeki yükü temsil eder. özniteliği, allocatedThroughput
şu anda bu istemciye kaç RU ayrıldığını gösterir. Spark bağlayıcısı, her istemci için ayrılmış aktarım hızını yüküne göre ayarlar. Bu şekilde her istemci, yüküyle orantılı olan kullanılabilir aktarım hızının bir payını alır. Tüm istemciler birlikte ait oldukları aktarım hızı denetim grubu için ayrılan toplamdan fazlasını kullanmaz.
İlgili içerik
- Bkz . GitHub'da Spark örnekleri.
- NoSQL için API için Azure Cosmos DB Spark 3 OLTP bağlayıcısı ile verileri yönetmeyi öğrenin.
- Apache Spark hakkında daha fazla bilgi edinin.