HBase
 sql >> Baza danych >  >> NoSQL >> HBase

Instrukcje:korzystanie z interfejsu HBase Thrift, część 2:Wstawianie/pobieranie wierszy

Drugie instrukcje z serii dotyczące korzystania z interfejsu API Apache HBase Thrift

Ostatnim razem omówiliśmy podstawy łączenia się z Thrift przez Pythona. Tym razem dowiesz się, jak wstawiać i pobierać wiele wierszy naraz.

Praca z tabelami

Korzystając z interfejsu Thrift, możesz tworzyć lub usuwać tabele. Rzućmy okiem na kod Pythona, który tworzy tabelę:

client.createTable(tablename, [Hbase.ColumnDescriptor(name=cfname)])

W tym fragmencie utworzono obiekt Hbase.ColumnDescriptor. W tym obiekcie możesz ustawić wszystkie różne parametry dla Rodziny Kolumn. W takim przypadku ustawiasz tylko nazwę rodziny kolumn.

Być może pamiętasz z poprzedniego poradnika, że ​​dodanie pliku Hbase.thrift do projektu jest często przydatne. To jest jeden z tych przypadków:możesz otworzyć Hbase.thrift i znaleźć definicję ColumnDescriptor ze wszystkimi jej parametrami i ich nazwami.

Możesz potwierdzić, że tabela istnieje, używając następującego kodu:

tables = client.getTableNames()

found = False

for table in tables:
	if table == tablename:
		found = True

Ten kod pobiera listę tabel użytkowników, przechodzi przez nie i oznacza, że ​​znaleziono je jako prawdziwe, jeśli tabela została znaleziona.

Możesz usunąć tabelę za pomocą następującego kodu:

client.disableTable(tablename)
client.deleteTable(tablename)

Pamiętaj, że w HBase musisz wyłączyć tabelę przed jej usunięciem. Ten kod właśnie to robi.

Dodawanie wierszy za pomocą oszczędności

Thrift daje nam kilka sposobów dodawania lub aktualizowania wierszy: jeden wiersz na raz lub wiele wierszy naraz. Interfejs Thrift nie korzysta z tego samego obiektu Put, co Java API. Te zmiany są nazywane mutacjami wierszy i wykorzystują obiekty Mutation i BatchMutation.

mutations = [Hbase.Mutation(
  column='columnfamily:columndescriptor', value='columnvalue')]
client.mutateRow('tablename', 'rowkey', mutations)

Każdy obiekt Mutation reprezentuje zmiany w jednej kolumnie. Aby dodać lub zmienić inną kolumnę, wystarczy dodać kolejny obiekt Mutation do listy mutacji.

Po zakończeniu dodawania obiektów Mutation wywołujesz metodę mutateRow. Ta metoda przyjmuje nazwę tabeli, klucz wiersza i listę mutacji jako argumenty.

Dodanie wielu wierszy naraz wymaga kilku zmian:

# Create a list of mutations per work of Shakespeare
mutationsbatch = []

for line in shakespeare:
	rowkey = username + "-" + filename + "-" + str(linenumber).zfill(6)

	mutations = [
			Hbase.Mutation(column=messagecolumncf, value=line.strip()),
			Hbase.Mutation(column=linenumbercolumncf, value=encode(linenumber)),
			Hbase.Mutation(column=usernamecolumncf, value=username)
		]

       mutationsbatch.append(Hbase.BatchMutation(row=rowkey,mutations=mutations))

# Run the mutations for the work of Shakespeare
client.mutateRows(tablename, mutationsbatch)

W tym przykładzie nadal używasz obiektu Mutation, ale tym razem musisz owinąć je w obiekt BatchMutation. Obiekt BatchMutation umożliwia określenie innego klucza wiersza dla każdej listy mutacji. Zmieniasz się również na metodę mutateRows. Pobiera nazwę tabeli i obiekt BatchMutation.

Zbieranie rzędów z oszczędnością

Używając metody getRow, możesz pobrać pojedynczy wiersz na podstawie jego klucza wiersza. To wywołanie zwraca listę obiektów TRowResult. Oto kod do pobierania i pracy z danymi wyjściowymi:

rows = client.getRow(tablename, "shakespeare-comedies-000001")

for row in rows:
     message = row.columns.get(messagecolumncf).value
     linenumber = decode(row.columns.get(linenumbercolumncf).value)

     rowKey = row.row

Rozpocznij kod od żądania getRow. To pobranie zwróci wiersz z kluczem „komedia szekspirowska-000001”. Te wiersze powrócą jako lista TRowResult. Używając pętli wierszy, przechodzisz przez listę zwróconych wierszy.

Aby uzyskać wartość kolumny, użyj kolumny.get(„COLUMNFAMILY:COLUMDESCRIPTOR”). Upewnij się, że używasz właściwej składni nazewnictwa.

Pamiętaj, że kiedy masz do czynienia z danymi binarnymi, takimi jak liczby całkowite, będziesz musiał przekonwertować je z ciągu Pythona na dowolny typ. W tym przypadku bierzesz łańcuch i zmieniasz go w liczbę całkowitą za pomocą metody dekodowania.

Uzyskiwanie wielu wierszy naraz jest bardzo podobne do uzyskiwania jednego wiersza. Oto kod:

rowKeys = [ "shakespeare-comedies-000001",
"shakespeare-comedies-000010",
"shakespeare-comedies-000020",
"shakespeare-comedies-000100",
"shakespeare-comedies-000201" ]

rows = client.getRows(tablename, rowKeys)

Zamiast określać pojedynczy wiersz, przekazujesz listę wierszy. Zmieniasz również metodę na getRows, która jako argumenty przyjmuje nazwę tabeli i listę wierszy.

Zwracana jest lista obiektów TRowResult, a następnie przechodzisz przez listę, tak jak w kodzie jednowierszowym.

W następnym i ostatnim poradniku dowiesz się, jak korzystać ze skanów i zapoznasz się z niektórymi kwestiami dotyczącymi wyboru między interfejsami API REST i Thrift do programowania.

Jesse Anderson jest wykładowcą na Uniwersytecie Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apache Hadoop Ochrona ozonowa — uwierzytelnianie

  2. Dostrajanie wydajności w MapReduce w celu poprawy wydajności

  3. Używanie Hive do interakcji z HBase, część 1

  4. Instrukcje:włączanie uwierzytelniania i autoryzacji użytkownika w Apache HBase

  5. zabij serwery martwych regionów zombie