HBase
 sql >> база данни >  >> NoSQL >> HBase

Как да:Използвайте HBase Thrift Interface, Част 2:Вмъкване/Получаване на редове

Вторият практически инструкции от поредицата за използването на Apache HBase Thrift API

Последния път разгледахме основите на свързването с Thrift чрез Python. Този път ще научите как да вмъквате и получавате няколко реда наведнъж.

Работа с таблици

С помощта на интерфейса Thrift можете да създавате или изтривате таблици. Нека да разгледаме кода на Python, който създава таблица:

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

В този фрагмент сте създали обект Hbase.ColumnDescriptor. В този обект можете да зададете всички различни параметри за семейство колони. В този случай задавате само фамилното име на колоната.

Може да си спомните от предишните инструкции, че добавянето на файл Hbase.thrift към вашия проект често е полезно. Това е един от тези моменти:Можете да отворите Hbase.thrift и да намерите дефиницията на ColumnDescriptor с всичките й параметри и техните имена.

Можете да потвърдите, че таблица съществува, като използвате следния код:

tables = client.getTableNames()

found = False

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

Този код получава списък с потребителските таблици, преглежда ги и маркира намерено като истина, ако таблицата бъде намерена.

Можете да изтриете таблица, като използвате следния код:

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

Не забравяйте, че в HBase трябва да деактивирате таблица, преди да я изтриете. Този код прави точно това.

Добавяне на редове с пестеливост

Thrift ни дава няколко начина да добавяме или актуализираме редове: един ред наведнъж или няколко реда наведнъж. Интерфейсът Thrift не използва същия обект Put като Java API. Тези промени се наричат ​​мутации на редове и използват обектите Mutation и BatchMutation.

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

Всеки обект Mutation представлява промените в една колона. За да добавите или промените друга колона, просто трябва да добавите друг обект Mutation към списъка с мутации.

Когато приключите с добавянето на обекти Mutation, извиквате метода mutateRow. Този метод приема името на таблицата, ключа на реда и списъка с мутации като аргументи.

Добавянето на няколко реда наведнъж изисква няколко промени:

# 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)

В този пример все още използвате обекта Mutation, но този път трябва да ги увиете в обект BatchMutation. Обектът BatchMutation ви позволява да зададете различен ключ за всеки списък с мутации. Вие също преминавате към метода mutateRows. Той отнема име на таблица и обект BatchMutation.

Получаване на редове с пестеливост

Използвайки метода getRow, можете да извлечете един ред въз основа на неговия ключ за ред. Това извикване връща списък с обекти TRowResult. Ето кода за получаване и работа с изхода:

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

Стартирайте кода с заявка getRow. Това get ще върне реда с ключа „shakespeare-comedies-000001“. Тези редове ще се върнат като списък с TRowResult. С помощта на цикъл на редове преминавате през списъка с върнати редове.

За да получите стойността на колона, използвайте columns.get(“COLUMNFAMILY:COLUMDESCRIPTOR”). Не забравяйте да използвате правилния синтаксис за именуване.

Не забравяйте, че когато работите с двоични данни като цели числа, ще трябва да ги преобразувате от низ на Python в какъвто и да е тип. В този случай приемате низа и го правите цяло число с метода за декодиране.

Получаването на няколко реда наведнъж е много подобно на получаването на един ред. Ето кода:

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

rows = client.getRows(tablename, rowKeys)

Вместо да посочите един ред, вие предавате списък с редове. Можете също да промените метода на getRows, който приема името на таблицата и списъка с редове като аргументи.

Връща се списък с обекти TRowResult и след това вие преглеждате списъка точно както в едноредовия код.

В следващата и последна инструкция ще научите как да използвате сканирания и ще получите въведение в някои съображения, когато избирате между REST и Thrift API за разработка.

Джеси Андерсън е инструктор за университета Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Въведение в HDFS федерация и архитектура

  2. Използване на Hive за взаимодействие с HBase, част 1

  3. Представяне на политиките за уплътняване на дялове на Apache HBase Medium Object Storage (MOB).

  4. Как да:Тествайте HBase приложения с помощта на популярни инструменти

  5. Преобразуване на HBase ACL в политики на Ranger