1 / 23

Seven Databases in Seven Weeks

Seven Databases in Seven Weeks. HBase. HBase. HDFS ( Hadoop Distributed File System). DFS. Server. 7 つの データベース7つの世界 での構成. 1日 目: CRUD とテーブル管理. スタンドアロンで Hbase を動かす. テーブルを作る. データの出し入れをする. 2 日 目:ビッグデータを扱う. Wikipedia ダンプを投入する. スクリプト (Not Shell) での 操作に慣れる. 3 日 目:クラウドに持っていく.

evadne
Download Presentation

Seven Databases in Seven Weeks

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Seven Databases in Seven Weeks HBase

  2. HBase HDFS (Hadoop Distributed File System) DFS Server

  3. 7つのデータベース7つの世界 での構成 1日目:CRUDとテーブル管理 スタンドアロンでHbaseを動かす テーブルを作る データの出し入れをする 2日目:ビッグデータを扱う Wikipedia ダンプを投入する スクリプト (Not Shell) での操作に慣れる 3日目:クラウドに持っていく Thrift を使って操作する 今回は扱いません 今回は扱いません Whirr を使って EC2 にデプロイする

  4. HBaseの特徴 自動シャーディング・自動フェールオーバー テーブルサイズが大きくなった時、自動的に分割する 分割されたシャードは、ノード障害時に自動的にフェールオーバーする データの一貫性 (CAP:Consistency) データの更新は反映された瞬間から読出可能 結果的に同じ値が読めるようになる(結果整合性)条件緩和を取らない Hadoop/HDFS 統合 Hadoopの HDFS 上 に展開できる Hadoop/MapReduceでAPIを挟まず HBaseを入出力の対象にできる 各種インタフェース Java Native API の他、 Thrift , REST API から利用可能

  5. 1日目:HBaseをスタンドアロンで展開する 実行コマンド [root@HBase01 ask]# cd /opt/ [root@HBase01 opt]# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hbase/hbase-0.94.7/hbase-0.94.7.tar.gz [root@HBase01 opt]# tar zxvf hbase-0.94.7.tar.gz [root@HBase01 opt]# vi hbase-0.94.7/conf/hbase-site.xml hbase-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>file:///var/files/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/var/files/zookeeper</value> </property> </configuration> ファイル実体配置 /var /files /hbase /zookeeper 単体で可動するための最小限の設定 ファイル設置先の指定で、任意のディレクトリを書き出し先に指定する xmlで指定できる全項目 : src/main/resources/hbase-default.xml

  6. 1日目:HBaseをスタンドアロンで展開する JDKが要求される [root@HBase01 opt]# hbase-0.94.7/bin/start-hbase.sh • +======================================================================+ • | Error: JAVA_HOME is not set and Java could not be found | • +----------------------------------------------------------------------+ • | Please download the latest Sun JDK from the Sun Java web site | • | > http://java.sun.com/javase/downloads/ < | • | | • | HBase requires Java 1.6 or later. | • | NOTE: This script will find Sun Java whether you install using the | • | binary or the RPM based installer. | • +======================================================================+ JDKのバリエーション(以下から選んで導入) Javaのインストールディレクトリを指定 [root@HBase01 opt]# vi hbase-0.94.7/conf/hbase-env.sh - # export JAVA_HOME=/usr/java/jdk1.6.0/ + export JAVA_HOME=/usr/java/latest/

  7. 1日目:HBaseをスタンドアロンで展開する 起動 [root@HBase01 opt]# hbase-0.94.7/bin/start-hbase.sh starting master, logging to /opt/hbase-0.94.7/bin/../logs/hbase-root-master-HBase01.db.algnantoka.out シェル接続 [root@HBase01 opt]# hbase-0.94.7/bin/hbase shell HBase Shell; enter 'help<RETURN>'for list of supported commands. Type "exit<RETURN>"to leave the HBase Shell Version 0.94.7, r1471806, Wed Apr 2418:48:26 PDT 2013 hbase(main):001:0> status 1 servers, 0 dead, 2.0000 average load 停止 [root@HBase01 opt]# hbase-0.94.7/bin/stop-hbase.sh stopping hbase...........

  8. 1日目:HBaseの使い方 テーブル作成 : create hbase(main):009:0> help "create" Createtable; pass table name, a dictionary of specifications per column family, and optionally a dictionary oftable configuration. Dictionaries are described below in the GENERAL NOTES section. Examples: hbase> create't1', {NAME => 'f1', VERSIONS => 5} hbase> create't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'} hbase> # The above in shorthand would be the following: hbase> create't1', 'f1', 'f2', 'f3‘ hbase> create't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true} hbase> create't1', 'f1', {SPLITS => ['10', '20', '30', '40']} hbase> create't1', 'f1', {SPLITS_FILE => 'splits.txt'} hbase> # Optionally pre-split the table into NUMREGIONS, using hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname) hbase> create't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} 基本型 Create ‘TableName’ , {NAME => ‘ColumnFamilyName’, Option => Value …} … 省略表記 Create ‘TableName’ , ‘ColumnFamilyName’, …

  9. 1日目:HBaseの使い方 レコード挿入 : put hbase(main):010:0> help "put" Put a cell 'value' at specified table/row/columnand optionally timestamp coordinates. To put a cell value intotable't1' at row'r1' under column'c1' marked with the time'ts1', do: hbase> put 't1', 'r1', 'c1', 'value', ts1 SampleTable: create ‘SampleTable’ , ‘color’ , ‘shape’ put ‘SampleTable’ , ‘first’ , ‘color:red’ , ‘#F00’ put ‘SampleTable’ , ‘first’ , ‘color:blue’ , ‘#00F’ put ‘SampleTable’ , ‘first’ , ‘color:yellow’ , ‘#FF0’

  10. 1日目:HBaseの使い方 hbase(main):011:0> help "get" Get rowor cell contents; pass table name, row, and optionally a dictionary ofcolumn(s), timestamp, timerange and versions. Examples: hbase> get 't1', 'r1‘ hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]} hbase> get 't1', 'r1', {COLUMN => 'c1'} hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']} hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1} hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4} hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4} hbase> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"} hbase> get 't1', 'r1', 'c1‘ hbase> get 't1', 'r1', 'c1', 'c2‘ hbase> get 't1', 'r1', ['c1', 'c2'] レコード取得 : get SampleTable get ‘SampleTable’ , ‘first’ get ‘SampleTable’ , ‘first’, ‘color’ get ‘SampleTable’ , ‘first’, ‘color:blue’

  11. 1日目:HBaseの使い方 レコード検索: scan • hbase(main):001:0> help 'scan' • Scan a table; pass table name and optionally a dictionary of scanner • specifications. Scanner specifications may include one or more of: • TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH, • or COLUMNS, CACHE • If no columns are specified, all columns will be scanned. • To scan all members of a column family, leave the qualifier empty as in • 'col_family:'. • The filter can be specified in two ways: • 1. Using a filterString - more information on this is available in the • Filter Language document attached to the HBASE-4176 JIRA • 2. Using the entire package name of the filter. • Some examples: • hbase> scan '.META.' • hbase> scan '.META.', {COLUMNS => 'info:regioninfo'} • hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'} • hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]} • hbase> scan 't1', {FILTER => "(PrefixFilter ('row2') AND (QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))"} • hbase> scan 't1', {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)} • For experts, there is an additional option -- CACHE_BLOCKS -- which • switches block caching for the scanner on (true) or off (false). By • default it is enabled. Examples: • hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false} • Also for experts, there is an advanced option -- RAW -- which instructs the • scanner to return all cells (including delete markers and uncollected deleted • cells). This option cannot be combined with requesting specific COLUMNS. • Disabled by default. Example: • hbase> scan 't1', {RAW => true, VERSIONS => 10}

  12. 1日目:HBaseの使い方 TimeStamp put ‘table’ , ‘first’ , ‘color:red’ , ‘#FFF‘ put ‘table’ , ‘first’ , ‘color:red’ , ‘#000' put ‘table’ , ‘first’ , ‘color:red’ , ‘#0F0‘ put ‘table’ , ‘first’ , ‘color:red’ , ‘#00F' put ‘table’ , ‘first’ , ‘color:red’ , ‘#F00' ‘first’ , ‘color:red’ get ‘table’ , ‘first’ , ‘color:red’ timestamp 5 #F00 timestamp 4 get ‘table’ , ‘first’ , {COLUMN=>‘color:red’ , TIMESTAMP=>4} #00F timestamp 3 #0F0 get ‘table’ , ‘first’ , {COLUMN=>‘color:red’ , VERSIONS=>4} timestamp 2 #000 timestamp 1 #FFF

  13. 1日目:HBaseの使い方 スキーマ変更: alter hbase(main):009:0> disable 'table1' 0row(s) in2.5190 seconds hbase(main):010:0> get 'table1', 'first','color:red' COLUMN CELL ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: table1 is disabled. hbase(main):012:0> alter'table1' , { NAME => 'color', VERSIONS => 10} Updating all regions with the new schema... 1/1 regions updated. Done. 0row(s) in1.3630 seconds hbase(main):014:0> enable 'table1' 0row(s) in2.3000 seconds alter の対象 Table は オフラインでなければ ならない 保持するバージョン数の変更 alter によるスキーマ変更の手順は以下 新たなスキーマの空テーブルを作る 元テーブルからデータを複製する 元テーブルを破棄する 高コストなので、原則スキーマ変更( ColumnFamilyの変更)は行わない

  14. 1日目:HBaseの使い方 JRubyスクリプティング hoge.rb include Java import org.apache.hadoop.hbase.client.HTable import org.apache.hadoop.hbase.client.Put import org.apache.hadoop.hbase.HBaseConfiguration defjbytes(*args) args.map { |arg| arg.to_s.to_java_bytes } end table = HTable.new( HBaseConfiguration.new, "table1" ) p = Put.new( *jbytes( "third" ) ) p.add( *jbytes( "color", "black", "#000" ) ) p.add( *jbytes( "shape", "triangle", "3" ) ) p.add( *jbytes( "shape", "square", "4" ) ) table.put( p ) hbase関係の Javaクラス レコード挿入タイミング 実行 [root@HBase01 opt]# hbase-0.94.7/bin/hbase shell hoge.rb hbase(main):002:0> get 'table1', 'third' ,{COLUMN => ['color','shape']} COLUMN CELL color:black timestamp=1369049856405, value=#000 shape:square timestamp=1369049856405, value=4 shape:triangle timestamp=1369049856405, value=3 9row(s) in0.0870 seconds レコードのtimestampが揃う hbase shell は JRubyインタプリタを拡張したものなので、JRubyが実行できる

  15. Hbaseとは何か Googleの 内部システム (発表した論文より) Hadoopプロジェクト(Googleクローン) バッチ処理 リアルタイム応答 MapReduce BigTable MapReduce HBase Google File Sytem (GFS) Hadoop Distributed File Sytem (HDFS)

  16. BigTable(ソート済列志向データベース) スキーマで定義する スキーマレス(自由に追加できる) 必須 ソート済 あるColumn timestamp 5 #F00 timestamp 4 #00F timestamp 3 タイムスタンプでバージョニングされる #0F0 timestamp 2 #000 timestamp 1 #FFF

  17. BigTable(ソート済列志向データベース) リージョン リージョン リージョン リージョン リージョン リージョン • テーブルはリージョンで物理的に分割(シャーディング)される • リージョンはクラスタ中のリージョンサーバが担当する • リージョンは ColumnFamily毎に作られる • リージョンは ソート済のRowKeyを適当なサイズで分割する

  18. BigTable(ソート済列志向データベース) テーブルスキーマの初期設計超重要 ColumnFamilyはむやみに増やさない → Columnの追加で極力対応 RowKeyは連続アクセスが起きやすい形にしておく ColumnやColumnFamilyを条件にして検索する構造を取らない • テーブルはリージョンで物理的に分割(シャーディング)される • リージョンはクラスタ中のリージョンサーバが担当する • リージョンは ColumnFamily毎に作られる • リージョンは ソート済のRowKeyを適当なサイズで分割する

  19. HBaseの特徴 自動シャーディング・自動フェールオーバー テーブルサイズが大きくなった時、自動的に分割する 分割されたシャードは、ノード障害時に自動的にフェールオーバーする データの一貫性 (CAP:Consistency) データの更新は反映された瞬間から読出可能 結果的に同じ値が読めるようになる(結果整合性)条件緩和を取らない Hadoop/HDFS 統合 Hadoopの HDFS 上 に展開できる Hadoop/MapReduceでAPIを挟まず HBaseを入出力の対象にできる

  20. HBaseの特徴 を構成する要素 自動シャーディング・自動フェールオーバー リージョンの自動分割 ?? データの一貫性 (CAP:Consistency) ?? Hadoop/HDFS 統合 HDFS : GFSクローン Hbase : BigTableクローン

  21. HBaseの特徴 を構成する要素 自動フェールオーバー・データの一貫性 (CAP:Consistency) HDFS ローカルストア オンメモリ ストア Read WAL Region Write Master Server Region Server replicate ローカルストア WAL Region ZooKeeper Region Server (フェールオーバー先)

  22. 2日目:Wikipediaのデータを扱う 力尽きた\(^0^)/

  23. Scan にかかる秒数

More Related