Migrowanie danych z bazy danych Apache HBase do konta usługi Azure Cosmos DB for NoSQL
DOTYCZY: NoSQL
Azure Cosmos DB to skalowalna, globalnie rozproszona, w pełni zarządzana baza danych. Zapewnia gwarantowany dostęp do danych z małym opóźnieniem. Aby dowiedzieć się więcej na temat usługi Azure Cosmos DB, zobacz artykuł z omówieniem. W tym artykule opisano sposób migrowania danych z bazy danych HBase do konta usługi Azure Cosmos DB for NoSQL.
Różnice między usługą Azure Cosmos DB i bazą danych HBase
Przed migracją należy zrozumieć różnice między usługą Azure Cosmos DB i bazą danych HBase.
Model zasobów
Usługa Azure Cosmos DB ma następujący model zasobów:
Baza HBase ma następujący model zasobów:
Mapowanie zasobów
W poniższej tabeli przedstawiono mapowanie koncepcyjne między bazami Danych Apache HBase, Apache Phoenix i usługą Azure Cosmos DB.
HBase | Phoenix | Azure Cosmos DB |
---|---|---|
Klaster | Klaster | Klient |
Przestrzeń nazw | Schemat (jeśli jest włączony) | baza danych |
Table | Table | Kontener/kolekcja |
Rodzina kolumn | Rodzina kolumn | Nie dotyczy |
Wiersz | Wiersz | Element/dokument |
Wersja (sygnatura czasowa) | Wersja (sygnatura czasowa) | Brak |
Brak | Klucz podstawowy | Klucz partycji |
Nie dotyczy | Indeks | Indeks |
Nie dotyczy | Indeks pomocniczy | Indeks pomocniczy |
Nie dotyczy | Widok | Brak |
Brak | Sequence | Nie dotyczy |
Porównanie i różnice struktury danych
Kluczowe różnice między strukturą danych usługi Azure Cosmos DB i bazą danych HBase są następujące:
RowKey
W bazie danych HBase dane są przechowywane przez element RowKey i partycjonowane w poziomie w regionach przez zakres RowKey określony podczas tworzenia tabeli.
Usługa Azure Cosmos DB po drugiej stronie dystrybuuje dane do partycji na podstawie wartości skrótu określonego klucza partycji.
Rodzina kolumn
W bazie HBase kolumny są grupowane w obrębie rodziny kolumn (CF).
Usługa Azure Cosmos DB (interfejs API dla NoSQL) przechowuje dane jako dokument JSON . W związku z tym mają zastosowanie wszystkie właściwości skojarzone ze strukturą danych JSON.
Sygnatura czasowa
Baza HBase używa znacznika czasu do obsługi wersji wielu wystąpień danej komórki. Możesz wykonywać zapytania dotyczące różnych wersji komórki przy użyciu znacznika czasu.
Usługa Azure Cosmos DB jest dostarczana z funkcją zestawienia zmian, która śledzi trwały rekord zmian w kontenerze w kolejności ich wystąpienia. Następnie tworzone są dane wyjściowe w postaci posortowanej listy zmienionych dokumentów w kolejności, w której zostały zmodyfikowane.
Format danych
Format danych HBase składa się z rowkey, kolumny rodziny: nazwa kolumny, sygnatura czasowa, wartość. Poniżej przedstawiono przykład wiersza tabeli HBase:
ROW COLUMN+CELL 1000 column=Office:Address, timestamp=1611408732448, value=1111 San Gabriel Dr. 1000 column=Office:Phone, timestamp=1611408732418, value=1-425-000-0002 1000 column=Personal:Name, timestamp=1611408732340, value=John Dole 1000 column=Personal:Phone, timestamp=1611408732385, value=1-425-000-0001
W usłudze Azure Cosmos DB for NoSQL obiekt JSON reprezentuje format danych. Klucz partycji znajduje się w polu w dokumencie i ustawia, które pole jest kluczem partycji dla kolekcji. Usługa Azure Cosmos DB nie ma pojęcia sygnatury czasowej używanej dla rodziny kolumn lub wersji. Jak wspomniano wcześniej, ma obsługę zestawienia zmian, za pomocą którego można śledzić/rejestrować zmiany wykonywane w kontenerze. Poniżej przedstawiono przykład dokumentu.
{ "RowId": "1000", "OfficeAddress": "1111 San Gabriel Dr.", "OfficePhone": "1-425-000-0002", "PersonalName": "John Dole", "PersonalPhone": "1-425-000-0001", }
Napiwek
Baza HBase przechowuje dane w tablicy bajtów, więc jeśli chcesz migrować dane zawierające znaki dwubajtowe do usługi Azure Cosmos DB, dane muszą być zakodowane w formacie UTF-8.
Model spójności
Baza HBase oferuje ściśle spójne operacje odczytu i zapisu.
Usługa Azure Cosmos DB oferuje pięć dobrze zdefiniowanych poziomów spójności. Każdy poziom zapewnia kompromisy w zakresie dostępności i wydajności. Od najsilniejszych do najsłabszych obsługiwane są następujące poziomy spójności:
- Silna
- Powiązana nieaktualność
- Sesja
- Spójny prefiks
- Ostateczne
Szacowanie zapotrzebowania na elementy infrastruktury
HBase
W przypadku wdrożenia bazy danych HBase w skali przedsiębiorstwa; Serwery regionów; i ZooKeeper prowadzić większość rozmiaru. Podobnie jak każda aplikacja rozproszona, baza HBase została zaprojektowana do skalowania w poziomie. Wydajność bazy danych HBase jest oparta głównie na rozmiarze serwerów regionów HBase. Ustalanie rozmiaru jest spowodowane głównie dwoma kluczowymi wymaganiami — przepływnością i rozmiarem zestawu danych, który musi być przechowywany w bazie HBase.
Azure Cosmos DB
Usługa Azure Cosmos DB to oferta PaaS firmy Microsoft, a podstawowe szczegóły wdrożenia infrastruktury są abstrahowane od użytkowników końcowych. Po aprowizacji kontenera usługi Azure Cosmos DB platforma Azure automatycznie aprowizuje podstawową infrastrukturę (zasoby obliczeniowe, magazyn, pamięć, stos sieciowy), aby obsługiwać wymagania dotyczące wydajności danego obciążenia. Koszt wszystkich operacji bazy danych jest znormalizowany przez usługę Azure Cosmos DB i jest wyrażany przez jednostki żądań (lub jednostki RU, w skrócie).
Aby oszacować jednostki RU używane przez obciążenie, należy wziąć pod uwagę następujące czynniki:
Dostępny jest kalkulator pojemności, który ułatwia ćwiczenie dotyczące określania rozmiaru jednostek RU.
Możesz również użyć automatycznego skalowania przepływności aprowizacji w usłudze Azure Cosmos DB, aby automatycznie i natychmiast skalować bazę danych lub przepływność kontenera (RU/s). Przepływność jest skalowana na podstawie użycia bez wpływu na dostępność obciążeń, opóźnienie, przepływność lub wydajność.
Dystrybucja danych
HBase HBase sortuje dane zgodnie z RowKey. Dane są następnie partycjonowane w regionach i przechowywane w regionachSerwery regionów. Automatyczne partycjonowanie dzieli regiony w poziomie zgodnie z zasadami partycjonowania. Jest to kontrolowane przez wartość przypisaną do parametru hbase.hregion.max.filesize
HBase (wartość domyślna to 10 GB). Wiersz w bazie HBase z danym kluczem RowKey zawsze należy do jednego regionu. Ponadto dane są oddzielone na dysku dla każdej rodziny kolumn. Umożliwia to filtrowanie w czasie odczytywania i izolacji operacji we/wy w pliku HFile.
Usługa Azure Cosmos DB w usłudze Azure Cosmos DB używa partycjonowania do skalowania poszczególnych kontenerów w bazie danych. Partycjonowanie dzieli elementy w kontenerze na określone podzestawy o nazwie "partycje logiczne". Partycje logiczne są tworzone na podstawie wartości "klucza partycji" skojarzonego z każdym elementem w kontenerze. Wszystkie elementy w partycji logicznej mają tę samą wartość klucza partycji. Każda partycja logiczna może przechowywać do 20 GB danych.
Partycje fizyczne zawierają replikę danych i wystąpienie aparatu bazy danych usługi Azure Cosmos DB. Ta struktura sprawia, że dane są trwałe i wysoce dostępne, a przepływność jest podzielona równie między lokalne partycje fizyczne. Partycje fizyczne są tworzone i konfigurowane automatycznie i nie można kontrolować ich rozmiaru, lokalizacji ani partycji logicznych, które zawierają. Partycje logiczne nie są dzielone między partycje fizyczne.
Podobnie jak w przypadku klucza wiersza bazy danych HBase, projektowanie klucza partycji jest ważne dla usługi Azure Cosmos DB. Klucz wiersza bazy danych HBase działa przez sortowanie danych i przechowywanie danych ciągłych, a klucz partycji usługi Azure Cosmos DB jest innym mechanizmem, ponieważ dystrybuuje dane przy użyciu skrótu. Zakładając, że aplikacja korzystająca z bazy HBase jest zoptymalizowana pod kątem wzorców dostępu do danych w bazie HBase, użycie tego samego klucza wiersza dla klucza partycji nie daje dobrych wyników wydajności. Biorąc pod uwagę, że są sortowane dane w bazie HBase, indeks złożony usługi Azure Cosmos DB może być przydatny. Jest to wymagane, jeśli chcesz użyć klauzuli ORDER BY w więcej niż jednym polu. Możesz również zwiększyć wydajność wielu zapytań o równe i zakresowe, definiując indeks złożony.
Dostępność
Baza HBase HBase składa się z wzorca; Serwer regionów; i ZooKeeper. Wysoką dostępność w jednym klastrze można osiągnąć, tworząc każdy składnik nadmiarowy. Podczas konfigurowania nadmiarowości geograficznej można wdrożyć klastry HBase w różnych fizycznych centrach danych i użyć replikacji, aby zachować synchronizację wielu klastrów.
Usługa Azure Cosmos DB w usłudze Azure Cosmos DB nie wymaga żadnej konfiguracji, takiej jak nadmiarowość składników klastra. Zapewnia kompleksową umowę SLA zapewniającą wysoką dostępność, spójność i opóźnienia. Aby uzyskać więcej szczegółów, zobacz Umowa SLA dla usługi Azure Cosmos DB .
Niezawodność danych
Baza HBase HBase jest oparta na rozproszonym systemie plików Hadoop (HDFS), a dane przechowywane w systemie plików HDFS są replikowane trzy razy.
Usługa Azure Cosmos DB w usłudze Azure Cosmos DB zapewnia przede wszystkim wysoką dostępność na dwa sposoby. Najpierw usługa Azure Cosmos DB replikuje dane między regionami skonfigurowanymi na koncie usługi Azure Cosmos DB. Po drugie usługa Azure Cosmos DB przechowuje cztery repliki danych w regionie.
Zagadnienia przed migracją
Zależności systemowe
Ten aspekt planowania koncentruje się na zrozumieniu zależności nadrzędnych i podrzędnych dla wystąpienia bazy danych HBase, które jest migrowane do usługi Azure Cosmos DB.
Przykładem zależności podrzędnych mogą być aplikacje, które odczytują dane z bazy danych HBase. Należy je refaktoryzować do odczytu z usługi Azure Cosmos DB. Te następujące kwestie należy uznać za część migracji:
Pytania dotyczące oceny zależności — czy bieżący system HBase jest niezależnym składnikiem? Czy też wywołuje proces w innym systemie, czy jest wywoływany przez proces w innym systemie, czy jest uzyskiwany dostęp za pomocą usługi katalogowej? Czy inne ważne procesy działają w klastrze HBase? Te zależności systemowe należy wyjaśnić, aby określić wpływ migracji.
Cel punktu odzyskiwania i cel czasu odzyskiwania dla lokalnego wdrożenia bazy danych HBase.
Migracja w trybie offline i online
W przypadku pomyślnej migracji danych ważne jest, aby zrozumieć cechy firmy korzystającej z bazy danych i zdecydować, jak to zrobić. Wybierz migrację offline, jeśli możesz całkowicie zamknąć system, przeprowadzić migrację danych i ponownie uruchomić system w miejscu docelowym. Ponadto jeśli baza danych jest zawsze zajęta i nie możesz sobie pozwolić na długą awarię, rozważ migrację w trybie online.
Uwaga
Ten dokument obejmuje tylko migrację w trybie offline.
Podczas przeprowadzania migracji danych w trybie offline zależy to od aktualnie uruchomionej wersji bazy danych HBase i dostępnych narzędzi. Aby uzyskać więcej informacji, zobacz sekcję Migracja danych.
Zagadnienia dotyczące wydajności
Ten aspekt planowania polega na zrozumieniu celów wydajności bazy danych HBase, a następnie przetłumaczenie ich między semantykami usługi Azure Cosmos DB. Na przykład — aby osiągnąć liczbę operacji we/wy na sekundę "X" w bazie HBase, liczba jednostek żądań (RU/s) będzie wymagana w usłudze Azure Cosmos DB. Istnieją różnice między bazą danych HBase i usługą Azure Cosmos DB. To ćwiczenie koncentruje się na tworzeniu widoku sposobu tłumaczenia celów wydajności z bazy danych HBase na usługę Azure Cosmos DB. Spowoduje to zwiększenie skali ćwiczenia.
Pytania do zadawania:
- Czy wdrożenie bazy danych HBase jest duże, czy duże obciążenie operacjami zapisu?
- Jaki jest podział między operacjami odczytu i zapisu?
- Jaka jest docelowa wartość liczby operacji we/wy na sekundę wyrażona jako percentyl?
- Jak/jakie aplikacje są używane do ładowania danych do bazy danych HBase?
- Jak/jakie aplikacje są używane do odczytywania danych z bazy danych HBase?
Podczas wykonywania zapytań, które żądają posortowanych danych, baza HBase zwróci wynik szybko, ponieważ dane są sortowane według klucza wiersza. Jednak usługa Azure Cosmos DB nie ma takiej koncepcji. Aby zoptymalizować wydajność, można użyć indeksów złożonych zgodnie z potrzebami .
Uwagi dotyczące wdrażania
Aby wdrożyć usługę Azure Cosmos DB for NoSQL, możesz użyć witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Ponieważ miejscem docelowym migracji jest usługa Azure Cosmos DB for NoSQL, wybierz pozycję "NoSQL" dla interfejsu API jako parametr podczas wdrażania. Ponadto ustaw nadmiarowość geograficzną, zapisy w wielu regionach i Strefy dostępności zgodnie z wymaganiami dotyczącymi dostępności.
Zagadnienia dotyczące sieci
Usługa Azure Cosmos DB ma trzy główne opcje sieciowe. Pierwsza to konfiguracja, która używa publicznego adresu IP i kontroluje dostęp za pomocą zapory ip (ustawienie domyślne). Druga to konfiguracja, która używa publicznego adresu IP i zezwala na dostęp tylko z określonej podsieci określonej sieci wirtualnej (punktu końcowego usługi). Trzeci to konfiguracja (prywatny punkt końcowy), która łączy sieć prywatną przy użyciu prywatnego adresu IP.
Aby uzyskać więcej informacji na temat trzech opcji sieciowych, zobacz następujące dokumenty:
Ocena istniejących danych
Odnajdywanie danych
Zbierz informacje z wyprzedzeniem z istniejącego klastra HBase, aby zidentyfikować dane, które chcesz migrować. Mogą one pomóc zidentyfikować sposób migracji, decydować o tym, które tabele mają być migrowane, zrozumieć strukturę tych tabel i zdecydować, jak utworzyć model danych. Na przykład zbierz szczegóły, takie jak następujące:
- Wersja bazy danych HBase
- Tabele docelowe migracji
- Informacje o rodzinie kolumn
- Stan tabeli
Poniższe polecenia pokazują, jak zebrać powyższe szczegóły przy użyciu skryptu powłoki hbase i zapisać je w lokalnym systemie plików maszyny operacyjnej.
Pobieranie wersji bazy danych HBase
hbase version -n > hbase-version.txt
Wyjście:
cat hbase-version.txt
HBase 2.1.8.4.1.2.5
Pobieranie listy tabel
Listę tabel przechowywanych w bazie HBase można uzyskać. Jeśli utworzono przestrzeń nazw inną niż domyślna, będą to dane wyjściowe w formacie "Przestrzeń nazw: tabela".
echo "list" | hbase shell -n > table-list.txt
HBase 2.1.8.4.1.2.5
Wyjście:
echo "list" | hbase shell -n > table-list.txt
cat table-list.txt
TABLE
COMPANY
Contacts
ns1:t1
3 row(s)
Took 0.4261 seconds
COMPANY
Contacts
ns1:t1
Identyfikowanie tabel, które mają zostać zmigrowane
Uzyskaj szczegółowe informacje o rodzinach kolumn w tabeli, określając nazwę tabeli do zmigrowania.
echo "describe '({Namespace}:){Table name}'" | hbase shell -n > {Table name} -schema.txt
Wyjście:
cat {Table name} -schema.txt
Table {Table name} is ENABLED
{Table name}
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
{NAME => 'cf2', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
2 row(s)
Took 0.5775 seconds
Pobieranie rodzin kolumn w tabeli i ich ustawień
echo "status 'detailed'" | hbase shell -n > hbase-status.txt
Wyjście:
{HBase version}
0 regionsInTransition
active master: {Server:Port number}
2 backup masters
{Server:Port number}
{Server:Port number}
master coprocessors: []
# live servers
{Server:Port number}
requestsPerSecond=0.0, numberOfOnlineRegions=44, usedHeapMB=1420, maxHeapMB=15680, numberOfStores=49, numberOfStorefiles=14, storefileUncompressedSizeMB=7, storefileSizeMB=7, compressionRatio=1.0000, memstoreSizeMB=0, storefileIndexSizeKB=15, readRequestsCount=36210, filteredReadRequestsCount=415729, writeRequestsCount=439, rootIndexSizeKB=15, totalStaticIndexSizeKB=5, totalStaticBloomSizeKB=16, totalCompactingKVs=464, currentCompactedKVs=464, compactionProgressPct=1.0, coprocessors=[GroupedAggregateRegionObserver, Indexer, MetaDataEndpointImpl, MetaDataRegionObserver, MultiRowMutationEndpoint, ScanRegionObserver, SecureBulkLoadEndpoint, SequenceRegionObserver, ServerCachingEndpointImpl, UngroupedAggregateRegionObserver]
[...]
"Contacts,,1611126188216.14a597a0964383a3d923b2613524e0bd."
numberOfStores=2, numberOfStorefiles=2, storefileUncompressedSizeMB=7168, lastMajorCompactionTimestamp=0, storefileSizeMB=7, compressionRatio=0.0010, memstoreSizeMB=0, readRequestsCount=4393, writeRequestsCount=0, rootIndexSizeKB=14, totalStaticIndexSizeKB=5, totalStaticBloomSizeKB=16, totalCompactingKVs=0, currentCompactedKVs=0, compactionProgressPct=NaN, completeSequenceId=-1, dataLocality=0.0
[...]
Przydatne informacje o określaniu rozmiaru, takie jak rozmiar pamięci sterty, liczba regionów, liczba żądań jako stan klastra oraz rozmiar danych skompresowanych/nieskompresowanych jako stan tabeli.
Jeśli używasz rozwiązania Apache Phoenix w klastrze HBase, musisz również zbierać dane z rozwiązania Phoenix.
- Tabela docelowa migracji
- Schematy tabel
- Indeksy
- Klucz podstawowy
Nawiązywanie połączenia z usługą Apache Phoenix w klastrze
sqlline.py ZOOKEEPER/hbase-unsecure
Pobieranie listy tabel
!tables
Pobieranie szczegółów tabeli
!describe <Table Name>
Pobieranie szczegółów indeksu
!indexes <Table Name>
Pobieranie szczegółów klucza podstawowego
!primarykeys <Table Name>
Migrowanie danych
Opcje migracji
Istnieją różne metody migracji danych w trybie offline, ale tutaj przedstawimy sposób korzystania z usługi Azure Data Factory.
Rozwiązanie | Wersja źródła | Kwestie wymagające rozważenia |
---|---|---|
Azure Data Factory | HBase < 2 | Łatwo skonfigurować. Nadaje się do obsługi dużych zestawów danych. Nie obsługuje bazy danych HBase 2 lub nowszej. |
Apache Spark | Wszystkie wersje | Obsługa wszystkich wersji bazy danych HBase. Nadaje się do obsługi dużych zestawów danych. Wymagana jest konfiguracja platformy Spark. |
Narzędzie niestandardowe z biblioteką funkcji wykonawczej operacji zbiorczych usługi Azure Cosmos DB | Wszystkie wersje | Najbardziej elastyczne tworzenie niestandardowych narzędzi do migracji danych przy użyciu bibliotek. Wymaga więcej wysiłku w celu skonfigurowania. |
Poniższy schemat blokowy używa pewnych warunków, aby uzyskać dostęp do dostępnych metod migracji danych.
Migrowanie przy użyciu usługi Data Factory
Ta opcja jest odpowiednia dla dużych zestawów danych. Używana jest biblioteka funkcji wykonawczej operacji zbiorczych usługi Azure Cosmos DB. Nie ma punktów kontrolnych, więc jeśli podczas migracji wystąpią jakiekolwiek problemy, konieczne będzie ponowne uruchomienie procesu migracji od początku. Możesz również użyć własnego środowiska Integration Runtime usługi Data Factory, aby nawiązać połączenie z lokalną bazą danych HBase lub wdrożyć usługę Data Factory w zarządzanej sieci wirtualnej i połączyć się z siecią lokalną za pośrednictwem sieci VPN lub usługi ExpressRoute.
Działanie Kopiuj usługi Data Factory obsługuje bazę danych HBase jako źródło danych. Aby uzyskać więcej informacji, zobacz artykuł Copy data from HBase using Azure Data Factory (Kopiowanie danych z bazy danych HBase przy użyciu usługi Azure Data Factory).
Jako miejsce docelowe danych można określić usługę Azure Cosmos DB (interfejs API dla NoSQL). Aby uzyskać więcej informacji, zobacz artykuł Kopiowanie i przekształcanie danych w usłudze Azure Cosmos DB (INTERFEJS API dla NoSQL) przy użyciu usługi Azure Data Factory.
Migrowanie przy użyciu platformy Apache Spark — łącznik apache HBase i łącznik platformy Spark usługi Azure Cosmos DB
Oto przykład migracji danych do usługi Azure Cosmos DB. Przyjęto założenie, że bazy danych HBase 2.1.0 i Spark 2.4.0 działają w tym samym klastrze.
Apache Spark — repozytorium łącznika apache HBase można znaleźć na stronie Apache Spark — Łącznik apache HBase
W przypadku łącznika Platformy Spark usługi Azure Cosmos DB zapoznaj się z przewodnikiem Szybki start i pobierz odpowiednią bibliotekę dla wersji platformy Spark.
Skopiuj hbase-site.xml do katalogu konfiguracji platformy Spark.
cp /etc/hbase/conf/hbase-site.xml /etc/spark2/conf/
Uruchom platformę Spark -shell z łącznikiem Spark HBase i łącznikiem platformy Spark usługi Azure Cosmos DB.
spark-shell --packages com.hortonworks.shc:shc-core:1.1.0.3.1.2.2-1 --repositories http://repo.hortonworcontent/groups/public/ --jars azure-cosmosdb-spark_2.4.0_2.11-3.6.8-uber.jar
Po uruchomieniu powłoki Spark wykonaj kod Scala w następujący sposób. Zaimportuj biblioteki potrzebne do załadowania danych z bazy danych HBase.
// Import libraries import org.apache.spark.sql.{SQLContext, _} import org.apache.spark.sql.execution.datasources.hbase._ import org.apache.spark.{SparkConf, SparkContext} import spark.sqlContext.implicits._
Zdefiniuj schemat wykazu platformy Spark dla tabel bazy danych HBase. W tym miejscu przestrzeń nazw jest "domyślna", a nazwa tabeli to "Kontakty". Klucz wiersza jest określony jako klucz. Kolumny, rodzina kolumn i kolumna są mapowane na wykaz platformy Spark.
// define a catalog for the Contacts table you created in HBase def catalog = s"""{ |"table":{"namespace":"default", "name":"Contacts"}, |"rowkey":"key", |"columns":{ |"rowkey":{"cf":"rowkey", "col":"key", "type":"string"}, |"officeAddress":{"cf":"Office", "col":"Address", "type":"string"}, |"officePhone":{"cf":"Office", "col":"Phone", "type":"string"}, |"personalName":{"cf":"Personal", "col":"Name", "type":"string"}, |"personalPhone":{"cf":"Personal", "col":"Phone", "type":"string"} |} |}""".stripMargin
Następnie zdefiniuj metodę pobierania danych z tabeli Kontakty bazy danych HBase jako ramki danych.
def withCatalog(cat: String): DataFrame = { spark.sqlContext .read .options(Map(HBaseTableCatalog.tableCatalog->cat)) .format("org.apache.spark.sql.execution.datasources.hbase") .load() }
Utwórz ramkę danych przy użyciu zdefiniowanej metody.
val df = withCatalog(catalog)
Następnie zaimportuj biblioteki potrzebne do użycia łącznika Spark usługi Azure Cosmos DB.
import com.microsoft.azure.cosmosdb.spark.schema._ import com.microsoft.azure.cosmosdb.spark._ import com.microsoft.azure.cosmosdb.spark.config.Config
Ustaw ustawienia zapisywania danych w usłudze Azure Cosmos DB.
val writeConfig = Config(Map( "Endpoint" -> "https://<cosmos-db-account-name>.documents.azure.com:443/", "Masterkey" -> "<comsmos-db-master-key>", "Database" -> "<database-name>", "Collection" -> "<collection-name>", "Upsert" -> "true" ))
Zapisywanie danych ramki danych w usłudze Azure Cosmos DB.
import org.apache.spark.sql.SaveMode df.write.mode(SaveMode.Overwrite).cosmosDB(writeConfig)
Zapisuje równolegle z dużą szybkością, a jego wydajność jest wysoka. Z drugiej strony należy pamiętać, że może zużywać jednostki RU/s po stronie usługi Azure Cosmos DB.
Phoenix
Rozwiązanie Phoenix jest obsługiwane jako źródło danych usługi Data Factory. Szczegółowe instrukcje można znaleźć w poniższych dokumentach.
- Kopiowanie danych z Phoenix przy użyciu usługi Azure Data Factory
- Kopiowanie danych z bazy danych HBase przy użyciu usługi Azure Data Factory
Migrowanie kodu
W tej sekcji opisano różnice między tworzeniem aplikacji w usłudze Azure Cosmos DB dla list NoSQLs i bazy danych HBase. W tym przykładzie użyto interfejsów API apache HBase 2.x i zestawu Java SDK usługi Azure Cosmos DB w wersji 4.
Przykładowe kody bazy danych HBase są oparte na tych opisanych w oficjalnej dokumentacji bazy danych HBase.
Przedstawiony tutaj kod usługi Azure Cosmos DB jest oparty na dokumentacji przykładów zestawu Java SDK w wersji 4 usługi Azure Cosmos DB for NoSQL. Pełny przykład kodu można uzyskać z dokumentacji.
Mapowania migracji kodu są pokazane tutaj, ale klucze partycji HBase RowKeys i Azure Cosmos DB używane w tych przykładach nie zawsze są dobrze zaprojektowane. Projektowanie zgodnie z rzeczywistym modelem danych źródła migracji.
Nawiązywanie połączenia
HBase
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum","zookeepernode0,zookeepernode1,zookeepernode2");
config.set("hbase.zookeeper.property.clientPort", "2181");
config.set("hbase.cluster.distributed", "true");
Connection connection = ConnectionFactory.createConnection(config)
Phoenix
//Use JDBC to get a connection to an HBase cluster
Connection conn = DriverManager.getConnection("jdbc:phoenix:server1,server2:3333",props);
Azure Cosmos DB
// Create sync client
client = new CosmosClientBuilder()
.endpoint(AccountSettings.HOST)
.key(AccountSettings.MASTER_KEY)
.consistencyLevel(ConsistencyLevel.{ConsistencyLevel})
.contentResponseOnWriteEnabled(true)
.buildClient();
Tworzenie bazy danych/tabeli/kolekcji
HBase
// create an admin object using the config
HBaseAdmin admin = new HBaseAdmin(config);
// create the table...
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("FamilyTable"));
// ... with single column families
tableDescriptor.addFamily(new HColumnDescriptor("ColFam"));
admin.createTable(tableDescriptor);
Phoenix
CREATE IF NOT EXISTS FamilyTable ("id" BIGINT not null primary key, "ColFam"."lastName" VARCHAR(50));
Azure Cosmos DB
// Create database if not exists
CosmosDatabaseResponse databaseResponse = client.createDatabaseIfNotExists(databaseName);
database = client.getDatabase(databaseResponse.getProperties().getId());
// Create container if not exists
CosmosContainerProperties containerProperties = new CosmosContainerProperties("FamilyContainer", "/lastName");
// Provision throughput
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
// Create container with 400 RU/s
CosmosContainerResponse databaseResponse = database.createContainerIfNotExists(containerProperties, throughputProperties);
container = database.getContainer(databaseResponse.getProperties().getId());
Tworzenie wiersza/dokumentu
HBase
HTable table = new HTable(config, "FamilyTable");
Put put = new Put(Bytes.toBytes(RowKey));
put.add(Bytes.toBytes("ColFam"), Bytes.toBytes("id"), Bytes.toBytes("1"));
put.add(Bytes.toBytes("ColFam"), Bytes.toBytes("lastName"), Bytes.toBytes("Witherspoon"));
table.put(put)
Phoenix
UPSERT INTO FamilyTable (id, lastName) VALUES (1, ‘Witherspoon’);
Azure Cosmos DB
Usługa Azure Cosmos DB zapewnia bezpieczeństwo typu za pośrednictwem modelu danych. Używamy modelu danych o nazwie "Rodzina".
public class Family {
public Family() {
}
public void setId(String id) {
this.id = id;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
private String id="";
private String lastName="";
}
Powyższe jest częścią kodu. Zobacz pełny przykład kodu.
Użyj klasy Rodzina, aby zdefiniować dokument i wstawić element.
Family family = new Family();
family.setLastName("Witherspoon");
family.setId("1");
// Insert this item as a document
// Explicitly specifying the /pk value improves performance.
container.createItem(family,new PartitionKey(family.getLastName()),new CosmosItemRequestOptions());
Odczyt wiersza/dokumentu
HBase
HTable table = new HTable(config, "FamilyTable");
Get get = new Get(Bytes.toBytes(RowKey));
get.addColumn(Bytes.toBytes("ColFam"), Bytes.toBytes("lastName"));
Result result = table.get(get);
byte[] col = result.getValue(Bytes.toBytes("ColFam"), Bytes.toBytes("lastName"));
Phoenix
SELECT lastName FROM FamilyTable;
Azure Cosmos DB
// Read document by ID
Family family = container.readItem(documentId,new PartitionKey(documentLastName),Family.class).getItem();
String sql = "SELECT lastName FROM c";
CosmosPagedIterable<Family> filteredFamilies = container.queryItems(sql, new CosmosQueryRequestOptions(), Family.class);
Aktualizowanie danych
HBase
W przypadku bazy danych HBase użyj metody append i sprawdź metodęAndPut, aby zaktualizować wartość. Append to proces dołączania wartości niepodzielnej na końcu bieżącej wartości, a funkcja checkAndPut niepodzieal porównuje bieżącą wartość z oczekiwaną wartością i aktualizuje tylko wtedy, gdy są one zgodne.
// append
HTable table = new HTable(config, "FamilyTable");
Append append = new Append(Bytes.toBytes(RowKey));
Append.add(Bytes.toBytes("ColFam"), Bytes.toBytes("id"), Bytes.toBytes(2));
Append.add(Bytes.toBytes("ColFam"), Bytes.toBytes("lastName"), Bytes.toBytes("Harris"));
Result result = table.append(append)
// checkAndPut
byte[] row = Bytes.toBytes(RowKey);
byte[] colfam = Bytes.toBytes("ColFam");
byte[] col = Bytes.toBytes("lastName");
Put put = new Put(row);
put.add(colfam, col, Bytes.toBytes("Patrick"));
boolearn result = table.checkAndPut(row, colfam, col, Bytes.toBytes("Witherspoon"), put);
Phoenix
UPSERT INTO FamilyTable (id, lastName) VALUES (1, ‘Brown’)
ON DUPLICATE KEY UPDATE id = "1", lastName = "Whiterspoon";
Azure Cosmos DB
W usłudze Azure Cosmos DB aktualizacje są traktowane jako operacje upsert. Oznacza to, że jeśli dokument nie istnieje, zostanie wstawiony.
// Replace existing document with new modified document (contingent on modification).
Family family = new Family();
family.setLastName("Brown");
family.setId("1");
CosmosItemResponse<Family> famResp = container.upsertItem(family, new CosmosItemRequestOptions());
Usuwanie wiersza/dokumentu
HBase
W bazie danych Hbase nie ma bezpośredniego sposobu wybierania wiersza według wartości. Być może proces usuwania został zaimplementowany w połączeniu z parametrem ValueFilter itp. W tym przykładzie wiersz do usunięcia jest określany przez wartość RowKey.
HTable table = new HTable(config, "FamilyTable");
Delete delete = new Delete(Bytes.toBytes(RowKey));
delete.deleteColumn(Bytes.toBytes("ColFam"), Bytes.toBytes("id"));
delete.deleteColumn(Bytes.toBytes("ColFam"), Bytes.toBytes("lastName"));
table.dalate(delete)
Phoenix
DELETE FROM TableName WHERE id = "xxx";
Azure Cosmos DB
Poniżej przedstawiono metodę usuwania według identyfikatora dokumentu.
container.deleteItem(documentId, new PartitionKey(documentLastName), new CosmosItemRequestOptions());
Wykonywanie zapytań dotyczących wierszy/dokumentów
Baza HBase HBase umożliwia pobieranie wielu wierszy przy użyciu skanowania. Możesz użyć filtru, aby określić szczegółowe warunki skanowania. Zobacz Filtry żądań klienta dla wbudowanych typów filtrów HBase.
HTable table = new HTable(config, "FamilyTable");
Scan scan = new Scan();
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("ColFam"),
Bytes.toBytes("lastName"), CompareOp.EQUAL, New BinaryComparator(Bytes.toBytes("Witherspoon")));
filter.setFilterIfMissing(true);
filter.setLatestVersionOnly(true);
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);
Phoenix
SELECT * FROM FamilyTable WHERE lastName = "Witherspoon"
Azure Cosmos DB
Operacja filtrowania
String sql = "SELECT * FROM c WHERE c.lastName = 'Witherspoon'";
CosmosPagedIterable<Family> filteredFamilies = container.queryItems(sql, new CosmosQueryRequestOptions(), Family.class);
Usuwanie tabeli/kolekcji
HBase
HBaseAdmin admin = new HBaseAdmin(config);
admin.deleteTable("FamilyTable")
Phoenix
DROP TABLE IF EXISTS FamilyTable;
Azure Cosmos DB
CosmosContainerResponse containerResp = database.getContainer("FamilyContainer").delete(new CosmosContainerRequestOptions());
Inne uwagi
Klastry HBase mogą być używane z obciążeniami HBase i MapReduce, Hive, Spark i nie tylko. Jeśli masz inne obciążenia z bieżącą bazą danych HBase, należy je również zmigrować. Aby uzyskać szczegółowe informacje, zapoznaj się z poszczególnymi przewodnikami migracji.
- MapReduce
- HBase
- platforma Spark
Programowanie po stronie serwera
Baza HBase oferuje kilka funkcji programowania po stronie serwera. Jeśli używasz tych funkcji, musisz również przeprowadzić migrację ich przetwarzania.
HBase
-
Różne filtry są dostępne jako domyślne w bazie HBase, ale można również zaimplementować własne filtry niestandardowe. Filtry niestandardowe można zaimplementować, jeśli filtry dostępne jako domyślne w bazie HBase nie spełniają wymagań.
-
Coprocessor to struktura, która umożliwia uruchamianie własnego kodu na serwerze regionów. Za pomocą coprocesora można wykonać przetwarzanie wykonywane po stronie klienta po stronie serwera, a w zależności od przetwarzania może być wydajniejsze. Istnieją dwa typy współprocesorów, Obserwator i Punkt końcowy.
Obserwator
- Obserwator podłącza określone operacje i zdarzenia. Jest to funkcja umożliwiająca dodawanie dowolnego przetwarzania. Jest to funkcja podobna do wyzwalaczy RDBMS.
Punkt końcowy
- Punkt końcowy to funkcja rozszerzająca RPC bazy danych HBase. Jest to funkcja podobna do procedury składowanej RDBMS.
Azure Cosmos DB
-
- Procedury składowane usługi Azure Cosmos DB są napisane w języku JavaScript i mogą wykonywać operacje, takie jak tworzenie, aktualizowanie, odczytywanie, wykonywanie zapytań i usuwanie elementów w kontenerach usługi Azure Cosmos DB.
-
- Wyzwalacze można określić dla operacji w bazie danych. Dostępne są dwie metody: wyzwalacz wstępny uruchamiany przed zmianą elementu bazy danych i wyzwalacz wykonywany po zmianie elementu bazy danych.
-
- Usługa Azure Cosmos DB umożliwia definiowanie funkcji zdefiniowanych przez użytkownika (UDF). Funkcje zdefiniowane przez użytkownika można również pisać w języku JavaScript.
Procedury składowane i wyzwalacze zużywają jednostki RU na podstawie złożoności wykonywanych operacji. Podczas opracowywania przetwarzania po stronie serwera sprawdź wymagane użycie, aby lepiej zrozumieć ilość jednostek RU zużywanych przez każdą operację. Aby uzyskać szczegółowe informacje, zobacz Jednostki żądań w usłudze Azure Cosmos DB i Optymalizowanie kosztów żądań w usłudze Azure Cosmos DB .
Mapowania programowania po stronie serwera
HBase | Azure Cosmos DB | opis |
---|---|---|
Filtry niestandardowe | Klauzula WHERE | Jeśli przetwarzanie zaimplementowane przez filtr niestandardowy nie może zostać osiągnięte przez klauzulę WHERE w usłudze Azure Cosmos DB, użyj funkcji zdefiniowanej przez użytkownika w połączeniu. |
Współprocesor (obserwator) | Wyzwalacz | Obserwator jest wyzwalaczem, który wykonuje przed i po określonym zdarzeniu. Podobnie jak obserwator obsługuje wywołania wstępne i po wywołaniach, wyzwalacz usługi Azure Cosmos DB obsługuje również wyzwalacze wstępne i po operacji. |
Koprocesor (punkt końcowy) | Procedura składowana | Punkt końcowy to mechanizm przetwarzania danych po stronie serwera, który jest wykonywany dla każdego regionu. Jest to podobne do procedury składowanej RDBMS. Procedury składowane usługi Azure Cosmos DB są pisane przy użyciu języka JavaScript. Zapewnia dostęp do wszystkich operacji, które można wykonać w usłudze Azure Cosmos DB za pomocą procedur składowanych. |
Uwaga
Różne mapowania i implementacje mogą być wymagane w usłudze Azure Cosmos DB w zależności od przetwarzania zaimplementowanego w bazie HBase.
Zabezpieczenia
Bezpieczeństwo danych jest wspólną odpowiedzialnością klienta i dostawcy bazy danych. W przypadku rozwiązań lokalnych klienci muszą zapewnić wszystko, od ochrony punktu końcowego po fizyczne zabezpieczenia sprzętowe, co nie jest łatwym zadaniem. Jeśli wybierzesz dostawcę bazy danych w chmurze PaaS, takiego jak usługa Azure Cosmos DB, zaangażowanie klientów zostanie zmniejszone. Usługa Azure Cosmos DB działa na platformie Azure, więc można ją zwiększyć w inny sposób niż baza HBase. Usługa Azure Cosmos DB nie wymaga zainstalowania żadnych dodatkowych składników w celu zapewnienia bezpieczeństwa. Zalecamy rozważenie migracji implementacji zabezpieczeń systemu bazy danych przy użyciu następującej listy kontrolnej:
Kontrola zabezpieczeń | HBase | Azure Cosmos DB |
---|---|---|
Ustawienie zabezpieczeń sieci i zapory | Kontrolowanie ruchu przy użyciu funkcji zabezpieczeń, takich jak urządzenia sieciowe. | Obsługuje opartą na zasadach kontrolę dostępu opartą na adresach IP w zaporze przychodzącej. |
Uwierzytelnianie użytkownika i szczegółowe kontrolki użytkownika | Szczegółowa kontrola dostępu przez połączenie protokołu LDAP ze składnikami zabezpieczeń, takimi jak Apache Ranger. | Klucz podstawowy konta służy do tworzenia zasobów użytkownika i uprawnień dla każdej bazy danych. Możesz również użyć identyfikatora Entra firmy Microsoft do uwierzytelniania żądań danych. Dzięki temu można autoryzować żądania danych przy użyciu szczegółowego modelu RBAC. |
Możliwość replikacji danych globalnie w przypadku awarii regionalnych | Utwórz replikę bazy danych w zdalnym centrum danych przy użyciu replikacji bazy danych HBase. | Usługa Azure Cosmos DB wykonuje dystrybucję globalną bez konfiguracji i umożliwia replikowanie danych do centrów danych na całym świecie na platformie Azure za pomocą przycisku wyboru. Pod względem zabezpieczeń replikacja globalna zapewnia ochronę danych przed awariami lokalnymi. |
Możliwość przełączania w tryb failover z jednego centrum danych do innego | Musisz samodzielnie zaimplementować tryb failover. | Jeśli replikujesz dane do wielu centrów danych, a centrum danych regionu przejdzie w tryb offline, usługa Azure Cosmos DB automatycznie przerzuca operację. |
Replikacja danych lokalnych w centrum danych | Mechanizm HDFS umożliwia posiadanie wielu replik między węzłami w jednym systemie plików. | Usługa Azure Cosmos DB automatycznie replikuje dane w celu zachowania wysokiej dostępności, nawet w ramach jednego centrum danych. Możesz samodzielnie wybrać poziom spójności. |
Automatyczne kopie zapasowe danych | Nie ma funkcji automatycznej kopii zapasowej. Musisz samodzielnie zaimplementować kopię zapasową danych. | Usługa Azure Cosmos DB jest regularnie tworzona i przechowywana w magazynie geograficznie nadmiarowym. |
Ochrona i izolowanie poufnych danych | Jeśli na przykład używasz platformy Apache Ranger, możesz użyć zasad platformy Ranger, aby zastosować zasady do tabeli. | Dane osobiste i inne poufne można oddzielić od określonych kontenerów i odczytu/zapisu lub ograniczyć dostęp tylko do odczytu do określonych użytkowników. |
Monitorowanie ataków | Należy go zaimplementować przy użyciu produktów innych firm. | Korzystając z dzienników rejestrowania inspekcji i aktywności, możesz monitorować konto pod kątem normalnej i nietypowej aktywności. |
Reagowanie na ataki | Należy go zaimplementować przy użyciu produktów innych firm. | Gdy skontaktujesz się z pomoc techniczna platformy Azure i zgłosisz potencjalny atak, rozpocznie się pięcioetapowy proces reagowania na zdarzenia. |
Możliwość stosowania danych ogrodzenia geograficznego w celu przestrzegania ograniczeń ładu danych | Należy sprawdzić ograniczenia poszczególnych krajów/regionów i wdrożyć je samodzielnie. | Gwarantuje nadzór nad danymi dla suwerennych regionów (Niemcy, Chiny, US Gov itp.). |
Ochrona fizyczna serwerów w chronionych centrach danych | Zależy to od centrum danych, w którym znajduje się system. | Aby uzyskać listę najnowszych certyfikatów, zobacz globalną witrynę zgodności platformy Azure. |
Certyfikaty | Zależy od dystrybucji platformy Hadoop. | Zobacz dokumentację zgodności platformy Azure |
Monitorowanie
Baza HBase zwykle monitoruje klaster przy użyciu internetowego interfejsu użytkownika metryki klastra lub systemu Ambari, Cloudera Manager lub innych narzędzi do monitorowania. Usługa Azure Cosmos DB umożliwia korzystanie z mechanizmu monitorowania wbudowanego w platformę Azure. Aby uzyskać więcej informacji na temat monitorowania usługi Azure Cosmos DB, zobacz Monitorowanie usługi Azure Cosmos DB.
Jeśli środowisko implementuje monitorowanie systemu HBase w celu wysyłania alertów, takich jak pocztą e-mail, może być możliwe zastąpienie go alertami usługi Azure Monitor. Alerty można otrzymywać na podstawie metryk lub zdarzeń dziennika aktywności dla konta usługi Azure Cosmos DB.
Aby uzyskać więcej informacji na temat alertów w usłudze Azure Monitor, zobacz Tworzenie alertów dla usługi Azure Cosmos DB przy użyciu usługi Azure Monitor
Zobacz również metryki i typy dzienników usługi Azure Cosmos DB, które mogą być zbierane przez usługę Azure Monitor.
Tworzenie kopii zapasowych i odzyskiwanie po awarii
Wykonywanie kopii zapasowej
Istnieje kilka sposobów uzyskania kopii zapasowej bazy danych HBase. Na przykład migawka, eksport, tabela kopiowania, kopia zapasowa offline danych systemu plików HDFS i inne niestandardowe kopie zapasowe.
Usługa Azure Cosmos DB automatycznie wykonuje kopie zapasowe danych w okresowych odstępach czasu, co nie wpływa na wydajność ani dostępność operacji bazy danych. Kopie zapasowe są przechowywane w usłudze Azure Storage i mogą być używane do odzyskiwania danych w razie potrzeby. Istnieją dwa typy kopii zapasowych usługi Azure Cosmos DB:
Odzyskiwanie po awarii
Baza HBase jest systemem rozproszonym odpornym na błędy, ale należy zaimplementować odzyskiwanie po awarii przy użyciu migawki, replikacji itp., gdy tryb failover jest wymagany w lokalizacji kopii zapasowej w przypadku awarii na poziomie centrum danych. Replikację bazy HBase można skonfigurować za pomocą trzech modeli replikacji: Leader-Follower, Leader-Leader i Cykliczny. Jeśli źródłowa baza HBase implementuje odzyskiwanie po awarii, musisz zrozumieć, jak można skonfigurować odzyskiwanie po awarii w usłudze Azure Cosmos DB i spełnić wymagania systemowe.
Usługa Azure Cosmos DB to globalnie rozproszona baza danych z wbudowanymi funkcjami odzyskiwania po awarii. Dane bazy danych można replikować do dowolnego regionu świadczenia usługi Azure. Usługa Azure Cosmos DB utrzymuje wysoką dostępność bazy danych w mało prawdopodobnym przypadku awarii w niektórych regionach.
Konto usługi Azure Cosmos DB, które używa tylko jednego regionu, może utracić dostępność w przypadku awarii regionu. Zalecamy skonfigurowanie co najmniej dwóch regionów w celu zapewnienia wysokiej dostępności zawsze. Możesz również zapewnić wysoką dostępność zarówno dla zapisów, jak i odczytów, konfigurując konto usługi Azure Cosmos DB tak, aby obejmowało co najmniej dwa regiony z wieloma regionami zapisu, aby zapewnić wysoką dostępność zapisów i odczytów. W przypadku kont z wieloma regionami, które składają się z wielu regionów zapisu, tryb failover między regionami jest wykrywany i obsługiwany przez klienta usługi Azure Cosmos DB. Są to chwilowe i nie wymagają żadnych zmian w aplikacji. W ten sposób można uzyskać konfigurację dostępności obejmującą odzyskiwanie po awarii dla usługi Azure Cosmos DB. Jak wspomniano wcześniej, replikacja bazy danych HBase można skonfigurować za pomocą trzech modeli, ale usługę Azure Cosmos DB można skonfigurować z dostępnością opartą na umowie SLA, konfigurując regiony z pojedynczym zapisem i wieloma zapisami.
Aby uzyskać więcej informacji na temat wysokiej dostępności, zobacz Jak usługa Azure Cosmos DB zapewnia wysoką dostępność
Często zadawane pytania
Dlaczego warto przeprowadzić migrację do interfejsu API dla noSQL zamiast innych interfejsów API w usłudze Azure Cosmos DB?
Interfejs API dla noSQL zapewnia najlepsze kompleksowe środowisko w zakresie interfejsu, biblioteki klienta zestawu SDK usługi. Nowe funkcje wdrażane w usłudze Azure Cosmos DB będą najpierw dostępne na koncie interfejsu API dla noSQL. Ponadto interfejs API dla noSQL obsługuje analizę i zapewnia separację wydajności między obciążeniami produkcyjnymi i analitycznymi. Jeśli chcesz używać modernizowanych technologii do tworzenia aplikacji, zalecanym rozwiązaniem jest interfejs API for NoSQL.
Czy mogę przypisać klucz wiersza bazy danych HBase do klucza partycji usługi Azure Cosmos DB?
Nie można go zoptymalizować tak, jak to jest. W bazie danych HBase dane są sortowane według określonego klucza wiersza, przechowywanego w regionie i podzielonego na stałe rozmiary. Działa to inaczej niż partycjonowanie w usłudze Azure Cosmos DB. W związku z tym klucze należy przeprojektować, aby lepiej dystrybuować dane zgodnie z charakterystyką obciążenia. Aby uzyskać więcej informacji, zobacz sekcję Dystrybucja .
Dane są sortowane według klucza RowKey w bazie HBase, ale partycjonowanie według klucza w usłudze Azure Cosmos DB. Jak usługa Azure Cosmos DB może osiągnąć sortowanie i kolokację?
W usłudze Azure Cosmos DB możesz dodać indeks złożony, aby posortować dane w kolejności rosnącej lub malejącej, aby zwiększyć wydajność zapytań dotyczących równości i zakresu. Zobacz sekcję Dystrybucja i indeks złożony w dokumentacji produktu.
Przetwarzanie analityczne jest wykonywane na danych bazy danych HBase za pomocą technologii Hive lub Spark. Jak mogę je zmodernizować w usłudze Azure Cosmos DB?
Magazyn analityczny usługi Azure Cosmos DB umożliwia automatyczne synchronizowanie danych operacyjnych z innym magazynem kolumn. Format magazynu kolumn jest odpowiedni dla dużych zapytań analitycznych wykonywanych w zoptymalizowany sposób, co zwiększa opóźnienie takich zapytań. Usługa Azure Synapse Link umożliwia tworzenie rozwiązania HTAP bez protokołu ETL przez łączenie bezpośrednio z usługi Azure Synapse Analytics z magazynem analitycznym usługi Azure Cosmos DB. Dzięki temu można przeprowadzać analizę danych operacyjnych na dużą skalę niemal w czasie rzeczywistym. Usługa Synapse Analytics obsługuje platformę Apache Spark i bezserwerowe pule SQL w magazynie analitycznym usługi Azure Cosmos DB. Możesz skorzystać z tej funkcji, aby przeprowadzić migrację przetwarzania analitycznego. Aby uzyskać więcej informacji, zobacz Magazyn analityczny.
Jak użytkownicy mogą używać zapytania sygnatury czasowej w bazie danych HBase do usługi Azure Cosmos DB?
Usługa Azure Cosmos DB nie ma dokładnie tej samej funkcji przechowywania wersji znacznika czasu co baza HBase. Jednak usługa Azure Cosmos DB zapewnia możliwość uzyskiwania dostępu do zestawienia zmian i można jej używać do przechowywania wersji.
Zapisz każdą wersję/zmianę jako oddzielny element.
Przeczytaj zestawienie zmian, aby scalić/skonsolidować zmiany i wyzwolić odpowiednie akcje podrzędne, filtrując według pola "_ts". Ponadto w przypadku starej wersji danych można wygasnąć stare wersje przy użyciu czasu wygaśnięcia.
Następne kroki
Aby przeprowadzić testowanie wydajności, zobacz artykuł Performance and scale testing with Azure Cosmos DB (Testowanie wydajności i skalowania za pomocą usługi Azure Cosmos DB ).
Aby zoptymalizować kod, zobacz artykuł Porady dotyczące wydajności dla usługi Azure Cosmos DB .
Zapoznaj się z zestawem JAVA Async V3 SDK, dokumentacją zestawu SDK w repozytorium GitHub.