BigTable - distributed data storage initially developed by Google and was the inspiration for HBase which is part of Hadoop project.
HBase provides sparse multidimensional sorted map, indexed by rowKey, colKey, timestamp.
Columns are grouped in column families. Column family is physically stored together in the filesystem.
User can specify configuration for each column family (compressing type, caching etc).
Column families must be created upfront, but columns can be added dynamically.
Each table is partitioned horizontally using range partitioning based on the row key. The main goal of this is to let users control the physical layout of data, so related data can be stored together.
HBase has master-slave architecture. Master is called HMaster. Slaves are called region servers.
Hbase uses Zookeeper for leader election and maintaining group membership(and acl etc).
Each region server manages set of regions. And each region is stored in HDFS.
Hbase has META table stored in Zookeeper. META contains region - region server mapping.
When a user requests data first time, it first communicates with Zookeeper and retrieves META table from it, and then finds the region and sends a read/write request there. Then META information is cached on a client-side.