HadoopTimes

実践機械学習
技術情報

MapRを使用したユーザーオンボーディングの基礎

MapR

MapR-FSは、データマネジメントおよびアクセスコントロールのためのとても有効な性能を提供します。これらの機能はユーザーのホームディレクトリへ適用されるものです。

MapRクラスターのユーザーは、簡単に操作できる多くのケイパビリティを持ちます。

ユーザーは、ファイルや2種のNoSQLテーブル、および、数千のトピックを有するPub/Subメッセージングストリームを作成することができます。

ユーザーは、さらに、MapReduceもしくはSpark jobsを動かすことができ、または、クラスターのPOSIXケイパビリティを利用するファイルシステムに対してプログラムを実行することができます。ユーザーが可能なすべての操作により、多くのデータを蓄積できるはずであり、管理不可能にならないように、データにタブを付けておくことは良いアイデアです。

MapRクラスターにホストされているユーザーのホームディレクトリへMapRデータマネジメントの特徴がどのように適用できるのか見ていきましょう。

前提条件

本ブログ記事の内容は、MapRクラスターまたはMapR5.1.0以上の新しいバージョンが動作しているシングルノードサンドボックスが必要です。

本ブログ記事で実演することは、MapRの、コミュニティエディションからエンタープライズまでのライセンスレベルにおいて実行することができます。

概要

MapR-FSボリュームを、私たちのユーザーホームディレクトリに使用します。ボリュームは、データマネジメントの単位であり、ユーザーホームディレクトリについて、次のことを行うことができます。

実行してみましょう

それではいくつかMaprcliコマンドを実行します。これらについて説明していきましょう。

# The "type" argument 0 means "user"
maprcli entity modify \
  -name vince \
  -type 0 \
  -email vgonzalez@maprtech.com \
  -quota 2T \
  -advisoryquota 1T

maprcli volume create \
  -path /user/vince \
  -name home.vince \
  -quota 300M \
  -advisoryquota 200M \
  -ae vince \
  -readAce u:vince \
  -writeAce u:vince

hadoop fs -chown vince:vince /user/vince

これで以下のことを実行しました。

はじめに、vinceと名付けた「アカウンタブルエンティティ」のクオータを設定します。

アカウンタブルエンティティクオータは、ボリューム全体を通じて、ユーザー毎に容量を制限する手段、および、ボリュームの数ならびにボリュームで使用される合計容量を報告する手段を提供します。

開発中のアプリケーションのためにベーシックホームディレクトリおよびワークスペースなどの複数のボリュームを有するシナリオを考えてみてください。アカウンタブルエンティティは、そのエンティティに与えられたボリュームの使用を合計するのに使い勝手の良い方法をクラスター管理者へ提供します。

次に、私は、ユーザーvinceのためのボリュームを作成します。このボリュームは、300メガバイトのクオータを有しており、ボリュームが300メガバイトのデータを一度超えると、書き込みが停止することを意味しています。これがハードクオータです。

このボリュームは、200メガバイトのアドバイザリークオータも有しています。規則により、このボリュームを、/user/<username>にマウントし、名前をhome.<username>と付けます。これで多数のボリュームを取り扱う場合でもフィルターをかけることが簡単になります。

readAceおよびwriteAceのオプションは、ボリュームにアクセスコントロールエクスプレッションズ(ACEs)を作成します。

ボリュームACEsは、そのボリュームでデータへのアクセスを制限する方法として有効な手段です。そのボリューム内のファイルにユーザーがどのような許可を設定したかどうかに関係なく、ACEに合致しないユーザーは、アクセスを拒否されます。管理者権限を有するユーザーだけがボリュームを修正できることから、軽率なデータ共有を防止するのにはよい方法です。

私たちは、-aeオプションを「アカウンタブルエンティティ」を設定するために使用したため、このボリュームは、ユーザーvinceのエンティティクオータとしてカウントされます。

最後に、新しく作成されたボリュームのマウントポイントへオーナーを設定します。これは、微妙な点の説明です。ボリュームACEsは、そのボリュームにおけるデータのPOSIXパーミッションとは関係がありません。ボリュームACEsは、単にボリュームおよびそのボリュームに含まれるデータへのアクセスを制御するだけです。したがって、私たちは、ユーザーがボリュームを使用するために、正しい所有者情報がトップレベルのディレクトリへ設定されることを確実に行う必要があります。

クオータについて

ボリュームにクオータを設定することによって、制限を越えた際、アラームを実行します。例えば、もし私が、私のハードクオータで許可された以上のデータを書き込んだ場合、私は次のようなアラームを見ることになります。

$ maprcli alarm list -entity home.vince -json
{
	"timestamp":1465937565435,
	"timeofday":"2016-06-14 01:52:45.435 GMT-0700",
	"status":"OK",
	"total":2,
	"data":[
		{
			"entity":"home.vince",
			"alarm name":"VOLUME_ALARM_QUOTA_EXCEEDED",
			"alarm state":1,
			"alarm statechange time":1465937455432,
			"description":"Volume usage exceeded quota. Used: 371 MB Quota : 300 MB"
		},
		{
			"entity":"home.vince",
			"alarm name":"VOLUME_ALARM_ADVISORY_QUOTA_EXCEEDED",
			"alarm state":1,
			"alarm statechange time":1465937449424,
			"description":"Volume usage exceeded advisory quota. Used: 202 MB Advisory Quota : 200 MB"
		}
	]
}

これらのアラームは、MCSでも、ダッシュボードページのメインアラームパネルへ表示されます。

quota-alarm-dashboard

および以下のようにボリュームリスト中に太字の赤字のテキストで実使用量が強調表示されます。

quota-alarm-volume-list

エンティティ(ユーザー)利用状況の取得

ユーザーのホームボリュームおよびアカウンタブルエンティティへクオータを割り当てることで、使用情報を取得することができます。

はじめに、vinceのエンティティ情報を取得してみましょう。

maprcli entity info -name vince -json
{
	"timestamp":1465938582023,
	"timeofday":"2016-06-14 02:09:42.023 GMT-0700",
	"status":"OK",
	"total":1,
	"data":[
		{
			"EntityType":0,
			"EntityName":"vince",
			"VolumeCount":2,
			"EntityQuota":2097152,
			"EntityAdvisoryquota":1048576,
			"DiskUsage":444,
			"EntityEmail":"vgonzalez@maprtech.com",
			"EntityId":2005
		}
	]
}

ユーザーvinceが、2つのボリューム”VolumeCount”:2を有しており、これらのボリュームが444メガバイトの容量を消費していることが分かります。

上記の例で、ボリュームクオータを超過していることが分かりますが、それ以上にエンティティクオータを超過してはいません。このことは使用容量を管理するための大きな柔軟性を与えています。

余談

上記の例でディスクの使用がクオータを大きく超えていることに気付きましたか?もし私が、300メガバイトのハードクオータを設定していた場合、どのような動作になっていたでしょうか?

本記事でスクリーンショットを撮るためにデータを準備し、そしてアラームを作動させるためにクオータの値をとても低く設定しました。これはボリュームに割り当てるクオータは、いつでも設定値の調整ができることを表しています。

ボリュームACEsについて

MapR-FSは、何千ものボリュームを1つのクラスターでサポートするので、ボリュームを大量に作成することができます。なので、あなたのデータを整理し、説明するためにボリュームを大量に使用することは、とてもいいアイデアです。

データをボリュームへ整理する場合、ボリューム内のデータアクセスを管理するためにACEsを使用できます。したがって、もし私たちが物事をうまく整理する場合、私たちは、おそらくボリュームACEsをデータセットへの主要なコンロトールメカニズムとして使用することができます。このことは、必要な場合にファイルおよびディレクトリレベルACEsの使用を許可することになります。

ファイルおよびディレクトリACEsはとてもいい手段ですが、最初にボリュームACEsを使用することを考慮するべきであり、必要に応じて、ディレクトリおよびファイルACEsを適用するべきです。

デフォルトクオータの設定

デフォルトクオータを設定することができます。コマンドラインにて、ユーザークオータ1テラバイトと、グループクオータ19テラバイトを設定します。次のコマンドを実行します。

	maprcli config save -values '{"mapr.quota.user.default":"1T","mapr.quota.group.default":"10T"}'

以上の操作で、ユーザーのボリュームを作成した際、アカウントエンティティを特定しない限り、これらは自動的にデフォルトエンティティクオータの対象となります。

1つの例として、もしfredのホームを作成し、ただちにエンティティ情報を表示した場合、フレッドが1048576メガバイトまたは1テラバイトのエンティティクオータであることが確認できます。

maprcli volume create -path /user/fred -name home.fred -ae fred

maprcli entity info -name fred
EntityType  EntityId  EntityName  EntityAdvisoryquota  DiskUsage  VolumeCount  EntityQuota
0           2007      fred        0                    0          1            1048576	

まとめ

それでは、数点のまとめです。

  1. データを整理するためにボリュームを使用するべきです。1万を超えるユーザーを有していない限り、ユーザー単位にボリューム作成したとしてもクラスターの性能の範囲内です。
  2. ユーザーと同様にあなたのエンティティにクオータ(アドバイザリーまたはハードもしくはこの両方)を割り当てましょう。これは、クオータを超過した際にアラームを動作させ、制御不能なジョブや過度な利用ユーザーによる容量問題を防止することになります。
  3. ボリュームレベルからACEsを思慮深く適用し始めましょう。もしデータがボリューム毎に整理されている場合、ボリュームレベルのACEsを通じて、データアクセスを制御することができます。そして、必要に応じてファイル/ディレクトリレベルACEsを適用することができます。
  4. 最後に、上記のことを自動化することは良いアイデアです。少しのステップで済むので、単純なスクリプトで十分です。

本ブログ記事が、あなたにとって効果的なクラスター容量管理の手助けとなることを願っています。

著者情報

ビンス・ゴンザレス

ビンス・ゴンザレス

(MAPR システムエンジニア)

「いまさら聞けない」データ分析の総ざらい

「いまさら聞けない」データ分析の総ざらい
昨今、「データ分析」の重要性が強く叫ばれています。ただ、それはアナリストやデータ・サイエンティストと呼ばれる“専門家だけが担うことができる難解なもの”という誤解を持たれてはいないでしょうか。

データ分析という手法は、IT のパワーを活用することで、どんな企業も導入・実践することができる“現実解”なのです。

データ分析とはいかなるものなのか――。

この資料では、これからデータ分析を始める方や始めたが、もう一度初歩知識を復習したい方々向けにデータ分析の基本を解説します。

無料ダウンロードはこちら

こちらの記事もおすすめです