hbasecon 2012 | relaxed transactions for hbase - francis liu, yahoo!

24
Relaxed Transactions for HBase Francis Liu, Software Engineer 5/22/12

Upload: cloudera-inc

Post on 25-May-2015

1.399 views

Category:

Business


3 download

DESCRIPTION

For Map/Reduce programmers used to HDFS, the mutability of HBase tables poses new challenges: Data can change over the duration of a job, multiple jobs can write concurrently, writes are effective immediately, and it is not trivial to clean up partial writes. Revision Manager introduces atomic commits and point-in-time consistent snapshots over a table, guaranteeing repeatable reads and protection from partial writes. Revision Manager is optimized for a relatively small number of concurrent write jobs, which is typical within Hadoop clusters. This session will discuss the implementation of Revision Manager using ZooKeeper and coprocessors, and paying extra care to ensure security in multi-tenant clusters. Revision Manager is available as part of the HBase storage handler in HCatalog, but can easily be used stand-alone with little coding effort.

TRANSCRIPT

Page 1: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Relaxed Transactions for HBaseFrancis Liu, Software Engineer

5/22/12

Page 2: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Mutable Data

Writes are effective immediately

Page 3: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Mutable Data

Writes are effective immediately

Page 4: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Mutable Data

Partial writes in the midst of failures

Page 5: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Mutable Data

Partial writes in the midst of failures

Page 6: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Revision Manager

Optimized for batch processing› Large number of writes (ie Data Ingestion, Batch

updates)

Cross row write transactions within a table Coprocessor Endpoint› Leverage HBase Security

Zookeeper for persistence› table revision information

Experimental feature in Hcatalog 0.4

Page 7: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Architecture

Page 8: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

API

For reads› RevisionManager.createSnapshot(tableName)› SnapshotFilter.filter(result)

For writes› RevisionManager.beginWriteTransaction(table, families)› RevisionManager.commitWriteTransaction(transaction)› RevisionManager.abortWriteTransaction(transaction)

Page 9: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Concepts

Revision› Monotonically increasing number› All “Puts” of a job are written with the same revision number as the cell

version

TableSnapshot› Point-in-time consistent view of a table› Used for reading› Latest committed revision› List of aborted revisions› Upper bound on visible revision per CF

Transaction› Write transaction› Revision Number› List of column Families being written to

Page 10: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Relaxed Transaction Properties

Immutable Input Change After Commit Precedence Preservation

Page 11: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Immutable Input

Page 12: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Change After Commit

Revisions are only viewable after commit› A job cannot see it’s own writes

Aborted revisions are added to a table’s aborted list

Timed out revisions are aborted

Page 13: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Change After Commit

Page 14: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Precedence Preservation

Snapshot Isolation› Transaction is aborted when a write conflict is detected

Conflicts› Concurrent transactions to the same Column Family › Inefficient to abort

Resolved during read time• For every CF– find: min_rev = min(active_revision)– Only return closest revision to min_rev

• min_rev is what’s stored in a snapshot

Page 15: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Precedence Preservation

Page 16: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Snapshot Filter

Consumes TableSnapshot Read time filtering› Aborted revisions› Revisions written after snapshot was taken› Conflicting/Blocked revisions

Page 17: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Flow - Read

User/Client› RevisionManager.createSnapshot()

• TableSnapshot instance is serialized into JobConf

RecordReader› Using SnapshotFilter.filter(result)

Page 18: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Flow - Read

Page 19: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Flow - Write

User/Client› HBaseOutputFormat.checkOutputSpecs(FileSystem, JobConf)

• Write transaction is started by calling beginWriteTransaction(Transaction)

• Transaction instance is serialized into JobConf

RecordWriter› Puts make use of the revision number as the version

OutputCommitter› OutputCommitter.commitJob(JobContext)

• RevisionManager.commitWriteTransaction(Transaction)

› OutputCommitter.abortJob(JobContext)

• RevisionManager.abortWriteTransaction(Transaction)

Page 20: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Usage

Using HCatalog Revision Manager usage is done under the covers.

Work is being done to decouple HCatalog from HBaseInputFormat/HBaseOutputFormat

Other frameworks can make use of the RevisionManager API

Page 21: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Usage: HCatalog

Create Table

hcat –e “create table my_table(key string, gpa string) STORED BY 'org.apache.hcatalog.hbase.HBaseHCatStorageHandler' TBLPROPERTIES ('hbase.columns.mapping'=':key,info:gpa');”

Using Pig

A = LOAD ‘table1’ USING org.apache.hcatalog.pig.HCatLoader();

STORE A INTO ‘table1’ USING org.apache.hcatalog.pig.HCatStorer();

Using MapReduce

HCatInputFormat.setInput(job,…)

HCatOutputFormat.setOutput(job,…)

Page 22: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Future Work

Compaction of aborted transactions Server-side filtering using HBase Filters Compatibility with Hive

Page 24: HBaseCon 2012 | Relaxed Transactions for HBase - Francis Liu, Yahoo!

Questions?