2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MapRAdvent Calendar 2017

Day 5

MapR-DB操作コマンド maprcli 編

Posted at

クリスマスも終わり年も開けようとしていますが、まだまだMapRエンジニア陣が忙しいようですので、ノロノロ更新が続きます。
ホント、来年中に終わるといいな、、、^^;
ということで、アドベントは冬休みの宿題に突入しましたが5日目のエントリで、maprcliを使ったMapR-DB操作についてです。

MapRではMapR-DBを利用するための様々なツールが用意されています。
MapR-DB Binary(Binaryテーブル)ではHBaseとの互換性を維持するために、hbaseコマンドと同様の内容でテーブルの操作が可能です。
MapR-DB JSON(JSONテーブル)ではMapR-DB Shellや関連するユーティリティツールを利用することも出来ます。

一方でmaprcli tableコマンドでもMapR-DB操作用のコマンドを提供しており、そのオプションの多くがJSON、Binaryどちらのテーブルにも適用可能となります。
本エントリではmaprcli tableコマンドのオプションの概要を紹介し、後半では実際に遊んでみたいと思います。

maprcli tableコマンド

maprcli tableコマンドはJSON/Binaryテーブルの作成/削除/設定, replicationの設定などに利用します。
maprcli tableコマンドで利用可能なコマンドは以下の通りとなり、コマンドの中にはさらにサブコマンドを持つものもあります。

  1. create
  2. edit
  3. delete
  4. info
  5. region
  6. cf
  7. replica
  8. upstream
  9. index
  10. elasticsearch
  11. changelog

上記のコマンドのうち、それぞれ1.から4.についてはテーブル全般について、5.はリージョン、6.はカラムファミリー(CF)、7., 8.はレプリケーション、9., 10.はSecondary Index、11.はChangeData Captureについてのコマンドとなります。
7.より後の項目については別エントリにて説明される予定なので、今回は1.から6.までの内容について、概要を紹介しようと思います。

(1. - 4.) テーブル全般について

MapR-DBテーブルの全般についてのコマンドとなります。
create, editで利用する(そして、infoで表示される)オプションは以下の通りとなります。

パラメタ 説明
copymetafrom createのみ。既存テーブルのmetaデータのコピーしつつテーブル作成
copymetatype createのみ。copymetafromで指定したテーブルのmetaデータの指定。all (すべて。デフォルト)、cfs(CF)、aces(ACE)、splits(split key)、attrs(テーブルの属性)
tabletype createのみ。binaryかjson。デフォルトはbinary
audit audit機能のon/off。デフォルトはfalse
autosplit regionの自動スプリットのon/off。デフォルトはtrue
regionsizemb regionの自動スプリットを行う上でのしきい値。ただし、実際にregionのスプリットを行うのはregionがこの値で設定した値の1.5倍のサイズを超えたときとなる。4096MBに設定した場合は6144MB。regionsizembを4GB -> 2GBにした際にはこれに合わせて既存のregionのスプリットが発生するが、2GB -> 4GBにしても既存のregionのマージが発生するわけではないことに注意。デフォルトは4096MB
bulkload full bulk loadを許可するかどうか。full bulk load実行中は他のオペレーションは実行できない。デフォルトはfalse
deletettl editのみ。delete実行を行った後に実際にデータをパージするまでのTTL。テーブルのレプリケーションを設定している場合のデフォルトは24時間、していない場合は0時間
packperm regionのpackを実行できるユーザの設定を行うAccess Control Expression(ACE)。デフォルトではテーブルを作成したユーザにに与えられる
bulkloadperm full bulk loadを実行できるユーザの設定を行うACE。full bulk loadを実行すると、その他の操作が行えなくなる。デフォルトではテーブルを作成したユーザに与えられる
splitmergeperm テーブルのsplit, merge操作、及びregion sizeの変更を行うACE。デフォルトではテーブル作成ユーザに与えられる
createnamefamilyperm CFの作成、及び、名前変更を行うACE。デフォルトではテーブル作成ユーザに与えられる。
deletefamilyperm CFを削除するACE。以下同文
adminaccessperm 指定したテーブルに対するパーミッションの参照と編集を管理するACE。以下同文
replperm 指定したテーブルへのレプリケーション、もしくは指定したテーブルからのレプリケーションを管理するACE。以下同文
indexperm 指定したテーブルに紐づくセカンダリインデックスの作成を管理するACE。セカンダリインデックスは2017年12月現在、JSON テーブルにのみ適用可能。以下同文
defaultversionperm 指定したテーブルに作られた新しいCFに関するバージョンに関するパーミッションのためのACE。バージョンはBinaryテーブルにのみ存在する概念で、JSONテーブルには適用不可
defaultcompressionperm 指定したテーブルに作られた新しいCFへの圧縮に関するパーミッションのためのACE。こちらのBinaryテーブルにのみ適用可能
defaultmemoryperm
defaultreadperm 指定したテーブルに作られた新しいCFに関するReadに関するパーミッションのためのACE。
defaultwriteperm 指定したテーブルに作られた新しいCFに関するWriteに関するパーミッションのためのACE。
defaulttraverseperm 新しいCFをtraverseするパーミッションのためのACE。こちらはJSONテーブルにのみ適用可能
defaultappendperm 指定したテーブルに作られて新しいCFへのappendパーミッションのためのACE。こちらはBinaryテーブルにのみ適用可能

たくさん表示されているので目がチカチカしますが、その多くはXXXpermという感じで、"XXX操作を行うことが出来るユーザの制御用のパラメータ"となります。
ACEという言葉がありますが、要は権限の設定ですね。
下の具体例で出てきますが、ユーザやグループを使って指定することが出来ます。
XXXperm以外はcopymetafrom, copymetatype, tabletypeがcreateのみ、deletettlがeditのみのサブコマンドとなります。
infoはpathで指定した既存テーブルに関して、上記のパラメタが出てくるだけです。
deleteはそのまんまテーブルの削除なので、これもpathだけ指定して終了です。

(5.) maprcli table region

table regionコマンドはregion操作用のコマンド群になります。
regionの概念についてはhbaseと同様となります。
table regionコマンドはさらに以下のようなコマンドを利用可能です。

  • table region list
  • table region merge
  • table region pack
  • table region split

いずれも名前の通りの操作となります。
mergeはregionの統合、packは論理削除データの物理削除を行います。

(6.) maprcli table cf

カラムファミリー(CF)操作用のコマンド群になります。
table cfコマンドはさらに以下のようなコマンドを利用可能です

  • table cf create
  • table cf delete
  • table cf edit
  • table cf list
  • table cf colperm get
  • table cf colperm set
  • table cf colperm delete

最初の4つはコマンドの名前の通りとなります。
“colperm”コマンドはカラムのAccess Control Expression(ACEs)操作のためのコマンド群になります。
それぞれの内容を見ていきましょう。

table cf create, edit, delete, list

CFのcreate, editではCFの属性を指定することが出来ます。
以下が各パラメタの説明となります。

パラメタ 説明
path tableへのパス
cfname CFの名前
min/maxversions 保持するバージョンの最小(大)値。Binaryテーブルのみに適用される
ttl TTL値の秒数指定。0に設定(デフォルト)した場合は永久にデータがパージされない。ただし、JSONテーブルの場合、既存のCFのTTLが0でない場合、別のCFを追加することは出来ない。また、Secondary Index を持つJSONテーブルに対しては、TTLを設定できない
inmemory valueを優先的にキャッシュするかどうかの設定。inmemoryがfalseの場合も、テーブル全体で200バイト、CFごとに32バイトまではキャッシュされる。それ以上のデータを1行が持つ場合、inmemoryがtrueのCFに優先権が与えられる。デフォルトはfalse。
compression CFごとの圧縮形式の設定。off, lzf, lz4, zlibを選択できる。デフォルトの設定はテーブルが存在するディレクトリと同じ
versionperm max/minversionを設定できるACEの設定。Binaryテーブルにのみ適用可能。デフォルトではテーブルのdefaultversionpermと同じ値。
compressionperm 圧縮パラメタを設定できるACEの設定。Binaryテーブルにのみ適用可能。デフォルトはテーブルのdefaultcompressionpermと同じ値。
memoryperm inmemoryパラメタを設定できるACEの設定。デフォルトはテーブルのdefaultmemorypermと同じ値。
readperm カラムのread用のACEの設定。CFレベル、カラムレベル(Binaryテーブル), フィールドレベル(JSONテーブル)で設定できる。JSONテーブルの場合、設定値はCF内のフィールドから継承される。デフォルト値はテーブルのdefaultreadperm。
writeperm カラムのwrite用のACEの設定。デフォルト値はテーブルのdefaultwritepermと同じ。その他はreadpermと同じ
appendperm append用のACE。Binaryテーブルにのみ適用可能。デフォルト値はテーブルのdefaultappendpermと同じ。その他はreadpermと同じ。
jsonpath CFへのパスをドット形式で設定。
force JSONテーブルにデフォルトでないCFを作成しようとする場合、デフォルトでこのコマンドは失敗しワーニングが出る、という挙動を変更し、失敗せずにワーニングも出ないようにする。JSONテーブルにのみ適用可能
traverseperm JSONドキュメントにおいて、誰がフィールドをまたいでパーミッションの設定を横切ることが出来るか設定するACE。JSONテーブルにのみ適用可能

table cf colperm get set delete

テーブルの指定されたカラムに対しての権限の設定を行います。
これらのコマンドを使う上では、実行するユーザがテーブルが存在するパスへのlookupdir権限を持ち、テーブルに対してはadminaccesspermを持つ必要があります。
さらにgetに対してはreadAce, set, deleteに対してはreadAceとwriteAceを、テーブルが存在するVolumeに対してもつ必要があります。

getとdeleteはテーブル、CF、カラムを指定するだけです。
setに関してはread, write, append, traverse に対してpermissionの設定が出来ます。
これはtable全般の設定で指定する内容と同じです。

コマンドで遊んで見る

さて、説明だけでかなり長くなってしまいましたが、ここでは実際に利用例も紹介します。

# 新規のJSONテーブルをREAD パーミッションの設定付きで設定する
maprcli table create -tabletype json -defaultreadperm 'g:dev | u:mapr' -path /user/mark/json_table

# 編集してWRITEパーミッションとリージョンサイズの設定も追加する
maprcli table edit -path /user/mark/json_table -defaultwriteperm 'g:dev | u:mapr' -regionsizemb 2048

# 内容確認
maprcli table info -path /user/mark/json_table -json
{
        "timestamp":1514125850854,
        "timeofday":"2017-12-24 11:30:50.854 GMT+0900",
        "status":"OK",
        "total":1,
        "data":[
                {
                        "path":"/user/mark/json_table",
                        "numregions":1,
                        "totallogicalsize":0,
                        "totalphysicalsize":0,
                        "totalcopypendingsize":0,
                        "totalrows":0,
                        "totalnumberofspills":0,
                        "totalnumberofsegments":0,
                        "autosplit":true,
                        "bulkload":false,
                        "insertionorder":true,
                        "tabletype":"json",
                        "regionsizemb":2048,
                        "audit":false,
                        "maxvalueszinmemindex":100,
                        "adminaccessperm":"u:mark",
                        "createrenamefamilyperm":"u:mark",
                        "bulkloadperm":"u:mark",
                        "packperm":"u:mark",
                        "deletefamilyperm":"u:mark",
                        "replperm":"u:mark",
                        "splitmergeperm":"u:mark",
                        "defaultcompressionperm":"u:mark",
                        "defaultmemoryperm":"u:mark",
                        "defaultreadperm":"g:dev | u:mapr",
                        "defaulttraverseperm":"u:mark",
                        "defaultwriteperm":"g:dev | u:mapr",
                        "uuid":"447fe781-4104-d7b2-935c-0c6cb93f5a00"
                }
        ]
}

# CFを追加。この際パス(root.cf1)と-forceの設定が必要。追加してinmemory設定を行う。
maprcli table cf create  -path /user/mark/json_table -cfname cf1 -jsonpath root.cf1 -inmemory true  -force true

# CFの設定を編集
maprcli table cf edit  -path /user/mark/json_table -cfname cf1 -writeperm 'u:mark | u:mapr' -readperm 'u:mark | u:mapr’

# CFの確認
 maprcli table cf list -path /user/mark/json_table -json
{
        "timestamp":1514213090279,
        "timeofday":"2017-12-25 11:44:50.279 GMT+0900",
        "status":"OK",
        "total":2,
        "data":[
                {
                        "cfname":"default",
                        "maxversions":1,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":false,
                        "compression":"lz4",
                        "compressionperm":"u:mark",
                        "memoryperm":"u:mark",
                        "readperm":"g:dev | u:mapr",
                        "traverseperm":"u:mark",
                        "writeperm":"u:mark"
                },
                {
                        "cfname":"cf1",
                        "maxversions":1,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":true,
                        "compression":"lz4",
                        "jsonfamilypath":"root.cf1",
                        "compressionperm":"u:mark",
                        "memoryperm":"u:mark",
                        "readperm":"u:mark | u:mapr",
                        "traverseperm":"u:mark",
                        "writeperm":"u:mark | u:mapr"
                }
        ]
}

# columnのパーミッションを設定
maprcli table cf colperm set -path /user/mark/json_table -cfname cf1 -name col1 -readperm 'g:dev' -writeperm 'u:mapr’

# columnのパーミッション確認
maprcli table cf colperm get -path /user/mark/json_table -cfname cf1 -json
{
        "timestamp":1514213067410,
        "timeofday":"2017-12-25 11:44:27.410 GMT+0900",
        "status":"OK",
        "total":1,
        "data":[
                {
                        "name":"col1",
                        "readperm":"g:dev",
                        "writeperm":"u:mapr"
                }
        ]
}


# binaryテーブルを既存テーブルのメタデータをコピーする形で作成
maprcli table create -path /user/mapr/db/binary_table -copymetafrom /user/mapr/db/old_table

# テーブルの情報を参照
maprcli table info -path /user/mapr/db/binary_table
{
        "timestamp":1514447087047,
        "timeofday":"2017-12-28 04:44:47.047 GMT+0900",
        "status":"OK",
        "total":1,
        "data":[
                {
                        "path":"/user/mapr/db/binary_table",
                        "numregions":1,
                        "totallogicalsize":0,
                        "totalphysicalsize":0,
                        "totalcopypendingsize":0,
                        "totalrows":0,
                        "totalnumberofspills":0,
                        "totalnumberofsegments":0,
                        "autosplit":true,
                        "bulkload":false,
                        "insertionorder":false,
                        "tabletype":"binary",
                        "regionsizemb":4096,
                        "audit":false,
                        "maxvalueszinmemindex":100,
                        "deletettl":86400,
                        "adminaccessperm":"u:mapr",
                        "createrenamefamilyperm":"u:mapr",
                        "bulkloadperm":"u:mapr",
                        "packperm":"u:mapr",
                        "deletefamilyperm":"u:mapr",
                        "replperm":"u:mapr",
                        "splitmergeperm":"u:mapr",
                        "defaultappendperm":"u:mapr",
                        "defaultcompressionperm":"u:mapr",
                        "defaultmemoryperm":"u:mapr",
                        "defaultreadperm":"u:mapr",
                        "defaultversionperm":"u:mapr",
                        "defaultwriteperm":"u:mapr",
                        "uuid":"6d355591-0435-3654-bc40-0fdea0445a00"
                }
        ]
}

# CFの情報も参照。既にCF addrとorderが入っている
maprcli table cf list -path /user/mapr/db/binary_table
{
        "timestamp":1514447219564,
        "timeofday":"2017-12-28 04:46:59.564 GMT+0900",
        "status":"OK",
        "total":2,
        "data":[
                {
                        "cfname":"addr",
                        "maxversions":1,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":false,
                        "compression":"off",
                        "appendperm":"u:mapr",
                        "compressionperm":"u:mapr",
                        "memoryperm":"u:mapr",
                        "readperm":"u:mapr",
                        "versionperm":"u:mapr",
                        "writeperm":"u:mapr"
                },
                {
                        "cfname":"order",
                        "maxversions":1,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":false,
                        "compression":"off",
                        "appendperm":"u:mapr",
                        "compressionperm":"u:mapr",
                        "memoryperm":"u:mapr",
                        "readperm":"u:mapr",
                        "versionperm":"u:mapr",
                        "writeperm":"u:mapr"
                }
        ]
}

# orderのmaxversionを変更してみる
maprcli table cf edit -maxversions 5 -path /user/mapr/db/binary_table -cfname order

# 変更を確認
maprcli table cf list -path /user/mapr/db/binary_table -json
{
        "timestamp":1514447573860,
        "timeofday":"2017-12-28 04:52:53.860 GMT+0900",
        "status":"OK",
        "total":2,
        "data":[
                {
                        "cfname":"addr",
                        "maxversions":1,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":false,
                        "compression":"off",
                        "appendperm":"u:mapr",
                        "compressionperm":"u:mapr",
                        "memoryperm":"u:mapr",
                        "readperm":"u:mapr",
                        "versionperm":"u:mapr",
                        "writeperm":"u:mapr"
                },
                {
                        "cfname":"order",
                        "maxversions":5,
                        "minversions":0,
                        "ttl":2147483647,
                        "inmemory":false,
                        "compression":"off",
                        "appendperm":"u:mapr",
                        "compressionperm":"u:mapr",
                        "memoryperm":"u:mapr",
                        "readperm":"u:mapr",
                        "versionperm":"u:mapr",
                        "writeperm":"u:mapr"
                }
        ]
}

まとめ

本エントリではmaprcliコマンドを使って、Binary/JSON各テーブルの作成と設定まで行いました。
具体的なデータの挿入などは今後のエントリにて紹介していこうと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?