SlideShare a Scribd company logo
© 2019 NTT DATA Corporation
11/22/2019
NTT DATA
Masatake Iwasaki
Hadoop Compatible File Systems (Azure編)
© 2019 NTT DATA Corporation 2
Hadoopは分散ファイルシステム(HDFS)を提供
アプリケーションがHDFS以外にも透過的にアクセスできる
そのためのインターフェースおよびモジュール群:
Hadoop Compatible File Systems
Azureのデータストアにも対応
概要
© 2019 NTT DATA Corporation 3
Hadoopのファイルシステム
© 2019 NTT DATA Corporation 4
Hadoop Distributed File System
Hadoop = 分散FS + 分散処理FW
Hadoopアプリケーション = HDFS上のデータを処理するもの?
HDFS
https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
© 2019 NTT DATA Corporation 5
core-site.xmlに書く基本的な設定項目
HDFSのアクセス先を書く
ネームサービス名
またはNameNodeのホスト名:port
hdfs://以外もある?
defaultではないFSもある?
fs.defaultFS
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster/</value>
</property>
© 2019 NTT DATA Corporation 6
ファイルのpathをURI形式で指定
schemeに応じてよしなにデータを読み書き
データストア間のデータコピー/移動にも便利
distcpなどでも同じ要領
schemeなしのただのpathだとfs.defaultFS
Hadoopのデータストア抽象化
$ hadoop fs -cp file:///a/b hdfs://ns1/a/
$ hadoop fs -cp hdfs://ns1/a/b hdfs://nn1:8020/a/b
$ hadoop fs -cp webhdfs://nn1:9870/a/b s3a://bc/a/
© 2019 NTT DATA Corporation 7
Hadoop Compatible File Systems
Hadoop FileSystem API
Hadoop
Application
HDFS Local FS Amazon S3
Azure
Data Lake
Storage gen2
...
Distributed
FileSystem
Local
FileSystem
S3A
FileSystem
AzureBlob
FileSystem
SparkMapReduce
Spark
Application
MapReduce
Application
WebHdfs
FileSystem
Ozone
Ozone
FileSystem
© 2019 NTT DATA Corporation 8
Google Cloud Storage
https://github.com/GoogleCloudPlatform/bigdata-interop/tree/master/gcs
Oracle Cloud Infrastructure
https://github.com/oracle/oci-hdfs-connector
Ignite File System
https://github.com/apache/ignite/tree/master/modules/hadoop
サードパーティ製のFileSystem実装
© 2019 NTT DATA Corporation 9
.jarにclasspathを通す
Configurationでschemeとクラス名を対応づけ
fs.foobar.impl => foobar://
see https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-common/core-default.xml
FileSystemモジュールを使うためには
<property>
<name>fs.foobar.impl</name>
<value>org.example.FooBarFileSystem</value>
</property>
$ tail META-INF/services/org.apache.hadoop.fs.FileSystem
org.example.FooBarFileSystem
もしくはjava.util.ServiceLoaderを使う
# 使ってなくてもロードされるのが難点
© 2019 NTT DATA Corporation 10
FileSystem APIをユーザ向けに整理する意図で作られた
意図通りに普及/移行しなかった...
ドキュメントがない
できることが(ほとんど)変わらない
Hadoopのコード自体が両方使っている
FileSystem実装を作るときにはケアする必要あり
FileSystem実装をwrapするのが定番
see o.a.h.fs.DelegateToFileSystem
FileContext API (HADOOP-4952)
<property>
<name>fs.AbstractFileSystem.foobar.impl</name>
<value>org.example.FooBarFs</value>
</property>
© 2019 NTT DATA Corporation 11
ファイル操作と抽象化
© 2019 NTT DATA Corporation 12
Linuxのコマンドと似たような雰囲気
CLI(FsShell)はJava APIを利用して作られたもの
CLIによるファイル操作
$ hadoop fs -mkdir -p /foo/bar
$ hadoop fs -chmod g+w /foo/bar
$ hadoop fs -ls -R /
drwxr-xr-x - iwasakims supergroup 0 2019-08-31 15:11 /foo
drwxrwxr-x - iwasakims supergroup 0 2019-08-31 15:11 /foo/bar
$ echo baz > baz.txt
$ hadoop fs -put baz.txt /foo/bar/
$ hadoop fs -head /foo/bar/baz.txt
baz
$ hadoop fs -rm -r /foo
© 2019 NTT DATA Corporation 13
URIに対応するインスタンスを取得
設定上のデフォルトFSなら明示的な指定は不要
FileSystemインスタンスの取得
scala> import org.apache.hadoop.conf.Configuration
scala> import org.apache.hadoop.fs.FileSystem
scala> import org.apache.hadoop.fs.Path
scala> val conf = new Configuration()
scala> conf.get("fs.defaultFS")
res0: String = hdfs://localhost:8020/
scala> val fs = FileSystem.get(conf)
scala> val path = new Path("hdfs://localhost:8020/")
scala> val fs = p.getFileSystem(conf)
scala> val fs = FileSystem.get(path.toUri(), conf)
© 2019 NTT DATA Corporation 14
ディレクトリの作成
基本的に親がなければ作成 (mkdir -p)
mkdirs
scala> val path = new Path("/foo/bar")
scala> fs.mkdirs(path)
res1: Boolean = true
scala> fs.exists(new Path("/foo"))
res2: Boolean = true
© 2019 NTT DATA Corporation 15
ファイル情報(FileStatus)の取得
listStatus
scala> val listing = fs.listStatus(new Path("/foo/bar"))
scala> val f = listing(0)
f: org.apache.hadoop.fs.FileStatus =
HdfsNamedFileStatus{path=hdfs://localhost:8020/foo/bar/baz.
txt; isDirectory=false; length=4; replication=1;
blocksize=134217728; modification_time=1567217427000;
access_time=1567152892141; owner=iwasakims; group=docker;
permission=rw-r--r--; isSymlink=false; hasAcl=false;
isEncrypted=false; isErasureCoded=false}
scala> fs.getFileBlockLocations(f.getPath(), 0, f.getLen())
res23: Array[org.apache.hadoop.fs.BlockLocation] =
Array(0,4,localhost)
© 2019 NTT DATA Corporation 16
ファイルの新規作成&書き込みオープン
得られたOutputStreamにバイト列を書き込む
先頭からシーケンシャルに
create
scala> import java.nio.charset.Charset
scala> val os = fs.create(new Path("/foo/bar/baz.txt"))
scala> val buf ="baz".getBytes(Charset.forName("UTF-8"))
buf: Array[Byte] = Array(98, 97, 122)
scala> os.write(buf, 0, buf.length)
scala> os.close()
© 2019 NTT DATA Corporation 17
ファイルの読み込みオープン
open
scala> import java.nio.ByteBuffer
scala> val is = fs.open(new Path("/foo/bar/baz.txt"))
scala> val buf = ByteBuffer.allocate(3).array
scala> is.read(buf, 0, buf.length)
res1: Int = 3
scala> new String(buf.array(), Charset.forName("UTF-8"))
res2: String = baz
scala> val bb = ByteBuffer.allocate(2)
scala> is.read(1, bb)
res3: Int = 2
scala> new String(bb.array(), Charset.forName("UTF-8"))
res4: String = az
© 2019 NTT DATA Corporation 18
入力ファイルを分割してタスクに対応づける
タスクごとにデータを処理する
作業用ディレクトリを作る
タスクの出力ファイルを作る
入力ファイルからレコードを読み出す
データを処理する
出力ファイルにレコードを書き込む
出力ファイルを出力先に移動する
フレームワークが入出力を抽象化
Hadoopジョブによるデータ処理の流れ
© 2019 NTT DATA Corporation 19
データ入力を抽象化するもの
入力をInputSplitに分割
レコードを読み出す
InputFormat
public abstract class InputFormat<K, V> {
public abstract
List<InputSplit> getSplits(JobContext context
) throws ...
public abstract
RecordReader<K,V> createRecordReader(InputSplit split,
TaskAttemptContext context
) throws ...
}
© 2019 NTT DATA Corporation 20
ファイルからのデータを読み出しを抽象化
レコードを読み出すロジックは派生クラスが提供
TextInputFormat
SequenceFileInputFormat
AvroInputFormat
ParquetInputFormat
ユーザはパラメータを指定するだけ
どのクラスを使うか
処理対象ファイルのpath
...
FileInputFormat
© 2019 NTT DATA Corporation 21
データ出力を抽象化するもの
レコードを書き出す
出力できるかを確認する
出力を確定する
OutputFormat
public abstract class OutputFormat<K, V> {
public abstract RecordWriter<K, V>
getRecordWriter(TaskAttemptContext context
) throws ...
public abstract void checkOutputSpecs(JobContext context
) throws ...
public abstract
OutputCommitter getOutputCommitter(TaskAttemptContext context
) throws ...
}
© 2019 NTT DATA Corporation 22
オブジェクトストレージの活用
© 2019 NTT DATA Corporation 23
マスターノード(NameNode)がボトルネック
1. NameNodeのヒープサイズ(<100GBくらい?)
2. 管理可能なスレーブノード数(<10000くらい?)
3. 処理可能なリクエスト数(<10万tpsくらい?)
ざっくりした目安
100万データブロックあたりヒープ1GB
ヒープサイズはGC的に100GB程度まで
1億ブロックで12.8PB (ブロックサイズ128MBで)
HDFSのスケーラビリティ
© 2019 NTT DATA Corporation 24
複数のマスターがそれぞれ独立のNamespaceを管理
Namespaceを跨ぐ操作に制限あり
小ファイルの格納の(コスト)効率の悪さは変わらない
Router-based federation (HDFS-10467)でもその点は同じ
HDFS Federation
https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs-rbf/HDFSRouterFederation.html
© 2019 NTT DATA Corporation 25
データをファイルという単位で管理
ファイルはデータ(バイト列)の入れ物
ディレクトリはファイルやディレクトリの入れ物
階層的なディレクトリ構造でファイルを整理
ファイル/ディレクトリはメタデータを持つ
所有者に応じたアクセス制御
...
ファイルシステム?
© 2019 NTT DATA Corporation 26
データをオブジェクトという単位で管理
オブジェクトはデータ(バイト列)の入れ物
バケットはオブジェクトの入れ物
フラットなキー空間でオブジェクトを管理
オブジェクトはメタデータを持つ
...
スケールアウトしやすい
REST APIによるアクセス(がメイン)
クラウドのマネージドサービスが利用可能
オブジェクトストレージ
© 2019 NTT DATA Corporation 27
S3AFileSystem
s3a://mybucket/path
ユーザが多く継続的に改良されている
Amazon S3
export HADOOP_OPTIONAL_TOOLS=hadoop-aws
classpathを通すのに設定が必要(Hadoop 3.0以降の例):
<property>
<name>fs.s3.impl</name>
<value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value>
</property>
Amazon EMRのEMRFSのコミュニティ版的な位置づけ:
© 2019 NTT DATA Corporation 28
GoogleHadoopFileSystem
gs://container/path
サードパーティ実装
https://github.com/GoogleCloudPlatform/bigdata-interop
最近v2.0.0がリリース
https://cloud.google.com/blog/products/data-analytics/new-release-of-cloud-storage-connector-for-
hadoop-improving-performance-throughput-and-more
ランダムreadの性能向上(fadvise)
ディレクトリ操作のロック(cooperative locking)
Google Cloud Storage
© 2019 NTT DATA Corporation 29
OzoneFileSystem
o3fs://bucket.volume.omhost:9862/path
Ozone:
新作オブジェクトストレージ
Hadoopのサブプロジェクト
https://hadoop.apache.org/ozone/
OzoneClient(RPC)を利用してOzoneにアクセス
Ozone
© 2019 NTT DATA Corporation 30
全機能を備えているのはHDFS(DistributedFileSystem)
HDFSにない機能は定義されていない
e.g. ファイルのランダムupdate
オブジェクトストレージはファイルシステムではない
APIをwrapしてそれっぽく見せかけている
FileSystem APIはHDFSの機能を抽象化したもの
© 2019 NTT DATA Corporation 31
オブジェクトストレージには本来存在しないもの
末尾が/の空オブジェクトで模擬
/dir1/
/dir1/file1.txt
/dir1/file2.txt
ディレクトリ削除 = prefixが同じオブジェクトを全削除
たいてい非atomicな操作
途中で落ちると一部のオブジェクトだけ削除した状態
ディレクトリ
© 2019 NTT DATA Corporation 32
オブジェクトのキー更新ができないデータストレージでは高価
新しい名前のオブジェクトにデータコピー
古い名前のオブジェクトを削除
ディレクトリrename = prefixが同じオブジェクトを全rename
たいてい非atomicな操作
rename
© 2019 NTT DATA Corporation 33
Amazon S3で特徴的な仕様:
作成直後にリストに出ない可能性あり
削除直後にアクセスできる可能性あり
https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel
Eventual Consistency
© 2019 NTT DATA Corporation 34
S3AFileSystemの一貫性を改善するアドオン
補助的なメタデータ置き場としてDynamoDBを利用
create: S3にオブジェクト作成後DynamoDBに記録
listStatus: S3とDynamoDBの両方を見る
S3Guard (HADOOP-13345)
https://issues.apache.org/jira/secure/attachment/12821464/S3GuardImprovedConsistencyforS3AV2.pdf
© 2019 NTT DATA Corporation 35
Hadoop on Azure
© 2019 NTT DATA Corporation 36
Hadoop as a Service
Hadoopセットアップ済みVM(からなるクラスタ)を簡単に起動
Hadoop 3にも対応してる(Hadoop 3.1.0 (HDI 4.0))
HDFSを(あまり)使わない
HDInsight
<property>
<name>fs.defaultFS</name>
<value>abfs://container1@account1.dfs.core.windows.net</value>
<final>true</final>
</property>
$ hdfs dfs -ls hdfs://mycluster/
Found 2 items
drwx-wx-wx - hive hdfs 0 2019-11-21 06:52 hdfs://mycluster/tmp
drwxr-xr-x - yarn hdfs 0 2019-11-21 06:52 hdfs://mycluster/yarn
© 2019 NTT DATA Corporation 37
3種類ある
Azure Blob Storage:
オブジェクトストレージ
Azure Data Lake Storage (Gen1):
ファイルシステム的
WebHDFS互換なREST APIを提供
Azure Data Lake Storage Gen2:
Blob Storage + 階層型名前空間(optional)
Azureのデータストア
© 2019 NTT DATA Corporation 38
NativeAzureFileSystem
wasb://mycontainer@myaccount.blob.core.windows.net/path
wasbs://mycontainer@myaccount.blob.core.windows.net/path (HTTPS)
HDInsightでdefualtFSとして利用可能
depending on com.microsoft.azure.azure-storage
Azure Blob Storage
export HADOOP_OPTIONAL_TOOLS=hadoop-azure
© 2019 NTT DATA Corporation 39
AdlFileSystem
adl://mycontainer.azuredatalakestore.net/path
depending on com.microsoft.azure.azure-data-lake-store-sdk
Azure Data Lake Storage (Gen1)
export HADOOP_OPTIONAL_TOOLS=hadoop-azure-datalake
© 2019 NTT DATA Corporation 40
AzureBlobFileSystem
abfs://mycontainer@myaccount.dfs.core.windows.net/path
SecureAzureBlobFileSystem
abfss://mycontainer@myaccount.dfs.core.windows.net/path
HDInsightでdefualtFSとして利用可能
no dependency on Azure SDK
https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/filesystem
いまから使うならこちら
以降の説明はABFS前提
Azure Data Lake Storage Gen2
export HADOOP_OPTIONAL_TOOLS=hadoop-azure
© 2019 NTT DATA Corporation 41
設定プロパティ名でアカウントごとに設定を使い分け
.アカウント名.dfs.core.windows.net をsuffixにつける
見つからなければsuffixなしのプロパティ名にフォールバック
(例: fs.azure.account.auth.type)
デフォルト値的に指定できる
ストレージアカウント別の設定
<property>
<name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name>
<value>SharedKey</value>
</property>
<property>
<name>fs.azure.account.key.account1.dfs.core.windows.net</name>
<value>xxxxxxxxx</value>
</property>
© 2019 NTT DATA Corporation 42
Azure Active Directoryベースで選択肢がいろいろ
ShareKey:
アクセスキー
OAuth:
OAuth 2.0エンドポイント
トークン取得方法にも選択肢がある
ApplicationのClient ID
VMのManaged Identity
Custom:
ユーザ定義
認証
© 2019 NTT DATA Corporation 43
ストレージアカウントのアクセスキーで認証
細かい権限設定はできない
アクセスキーをそのままジョブに配ることになる
アクセスキーを暗号化した文字列にすることも 一応できる
<property>
<name>fs.azure.account.keyprovider.acc1.dfs.core.windows.net</name>
<value>org.apache.hadoop.fs.azurebfs.services.ShellDecryptionKeyProvider</value>
</property>
<property>
<name>fs.azure.shellkeyprovider.script.acc1.dfs.core.windows.net</name>
<value>/path/to/復号化スクリプト</value>
</property>
SharedKey認証
<property>
<name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name>
<value>SharedKey</value>
</property>
<property>
<name>fs.azure.account.key.account1.dfs.core.windows.net</name>
<value>アクセスキー</value>
</property>
© 2019 NTT DATA Corporation 44
Azure Active DirectoryでApp registrations
ContainerのAccess Control(IAM)でappにRoleアサイン
https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal
OAuth 2.0 Client Credentials
<property>
<name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name>
<value>OAuth</value>
</property>
<property>
<name>fs.azure.account.oauth.provider.type.account1.dfs.core.windows.net</name>
<value>org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider</value>
</property>
<property>
<name>fs.azure.account.oauth2.client.endpoint.account1.dfs.core.windows.net</name>
<value>https://login.microsoftonline.com/{tenant ID}/oauth2/token</value>
</property>
<property>
<name>fs.azure.account.oauth2.client.id.account1.dfs.core.windows.net</name>
<value>{application (client) ID}</value>
</property>
<property>
<name>fs.azure.account.oauth2.client.secret.account1.dfs.core.windows.net</name>
<value>{client secret}</value>
</property>
OAuth 2.0 token endpoint (v1)
Applicationのclient secret
© 2019 NTT DATA Corporation 45
認証ロジックをユーザ定義
CustomTokenProviderAdapteeの実装を作ってクラス名を指定
以下はHDInsightの例
Custom認証
<property>
<name>fs.azure.account.auth.type</name>
<value>Custom</value>
</property>
<property>
<name>fs.azure.account.oauth.provider.type</name>
<value>com.microsoft.azure.storage.oauth2.TokenServiceBasedAccessTokenProvider</value>
</property>
© 2019 NTT DATA Corporation 46
エラーメッセージから原因を判別しにくい
アクセスキーの誤り
アクセスキーの期限切れ
時計が合っていない
認証エラー
ls: Operation failed: "Server failed to authenticate the request. Make
sure the value of Authorization header is formed correctly including
the signature.", 403, HEAD,
https://account1.dfs.core.windows.net/container1//?upn=false&action=get
AccessControl&timeout=90
© 2019 NTT DATA Corporation 47
階層型名前空間
ストレージアカウント作成時にのみ有効化できる
Atomicで高速なディレクトリ操作
Hierarchical Namespace
Operation Disabled Enabled
File rename O(1) O(1)
File delete O(1) O(1)
Directory rename O(files) O(1)
Directory delete O(files) O(1)
© 2019 NTT DATA Corporation 48
Hierarchical Namespaceが有効な場合のみ設定可能
所有者とパーミッション
$ hadoop fs -ls abfs://co1@ac1.dfs.core.windows.net/tmp/
-rw-r--r-- 1 f78cab55-9a8c-494b-9c98-516e76db76fe iwasakims 175 ...README.txt
$ hadoop fs -chmod 664 abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt
...
DEBUG services.AbfsClient: Authenticating request with OAuth2 access token
DEBUG services.AbfsIoUtils: Request Headers
DEBUG services.AbfsIoUtils: Accept-Charset=utf-8
DEBUG services.AbfsIoUtils: X-HTTP-Method-Override=PATCH
DEBUG services.AbfsIoUtils: x-ms-version=2018-11-09
DEBUG services.AbfsIoUtils: Accept=application/json, application/octet-stream
DEBUG services.AbfsIoUtils: User-Agent=Azure Blob FS/3.3.0-SNAPSHOT (JavaJRE 1.8.0_232...
DEBUG services.AbfsIoUtils: x-ms-permissions=0664
DEBUG services.AbfsClient: HttpRequest:
200,,...PUT,https://ac1.dfs.core.windows.net/co1/tmp/README.txt?action=setAccessControl&tim
eout=90
$ hadoop fs -ls abfs://co1@ac1.dfs.core.windows.net/tmp/
-rw-rw-r-- 1 f78cab55-9a8c-494b-9c98-516e76db76fe iwasakims 175 ...README.txt
Applicationのservice principalのObject ID
© 2019 NTT DATA Corporation 49
ユーザ名を指定してのアクセス制御もサポート
ACL
$ hadoop fs -setfacl -m user:46d59d2f-4d64-4a20-a11b-50cc67e5234b:r-- ¥
abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt
$ hadoop fs -getfacl abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt
user::rw-
user:46d59d2f-4d64-4a20-a11b-50cc67e5234b:r--
group::rw-
mask::rw-
other::---
© 2019 NTT DATA Corporation 50
メモリ上のバッファ(デフォルト8MB)に書き込み->アップロード
Syncable(hflushとhsyncに差分はない)
https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path/update
ファイル作成とデータ書き込み
scala> val p = new Path("abfs://co1@ac1.dfs.core.windows.net/test.txt")
scala> val fs = p.getFileSystem(new Configuration())
scala> val buf ="baz".getBytes(Charset.forName("UTF-8"))
scala> val os = fs.create(p)
https://ac1.dfs.core.windows.net/co1/test.txt?resource=file&timeout=90
scala> os.write(buf, 0, buf.length)
scala> os.hflush()
https://ac1.dfs.core.windows.net/co1/test.txt?action=append&position=0&timeout=90
https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&retainUncommittedData=false&position=3&...
scala> os.close()
https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&retainUncommittedData=false&position=3&close=t
rue&timeout=90
© 2019 NTT DATA Corporation 51
一度書き込みcloseしたファイルの末尾への追記
append
scala> val os = fs.append(p)
scala> os.write(buf, 0, buf.length)
scala> os.close()
202,...,PUT,https://ac1.dfs.core.windows.net/co1/test.txt?action=append&po
sition=3&timeout=90
200,...,PUT,https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&ret
ainUncommittedData=false&position=6&close=true&timeout=90
© 2019 NTT DATA Corporation 52
バッファ(デフォルト4MB)にデータを読む
2回目以降のreadからは先読み(read ahead)あり
ByteBuffer(Positioned)Readableは未サポート
データ読み込み
scala> import java.nio.ByteBuffer
scala> val is = fs.open(p)
scala> val buf = ByteBuffer.allocate(3).array
scala> is.read(buf, 0, buf.length)
https://ac1.dfs.core.windows.net/co1/test.txt?timeout=90
scala> new String(buf, Charset.forName("UTF-8"))
res9: String = baz
scala> is.read(0, ByteBuffer.allocate(3))
java.lang.UnsupportedOperationException: Byte-buffer pread unsupported by
org.apache.hadoop.fs.azurebfs.services.AbfsInputStream
at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:258)
... 50 elided
© 2019 NTT DATA Corporation 53
REST APIのリクエストを送るだけ
https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path/create
階層型名前空間がoffだと1リクエストで処理できる数に上限あり
-> continuationを指定して繰り返しリクエストを送る
rename
$ hadoop fs -mv abfs://co1@ac1.dfs.core.windows.net/dir1 ¥
abfs://co1@ac1.dfs.core.windows.net/dir2
...
Request Headers
If-None-Match=*
Accept-Charset=utf-8
x-ms-version=2018-11-09
x-ms-rename-source=/co1/dir1
...
HttpRequest: 201,...,PUT,
https://ac1.dfs.core.windows.net/co1/dir2?timeout=90
© 2019 NTT DATA Corporation 54
チューニングノブは少ない
fs.azure.io.retry.backoff.interval
fs.azure.io.retry.max.retries
fs.azure.write.request.size
fs.azure.read.request.size
fs.azure.io.read.tolerate.concurrent.append
パラメータチューニング
© 2019 NTT DATA Corporation 55
デバッグログを出すのがてっとり早い
log4j.propertiesで設定
出力されるREST APIの情報を確認
リクエストヘッダ/レスポンスヘッダの内容
クエリパラメータ
トラブルシューティング
log4j.logger.org.apache.hadoop.fs.azurebfs=DEBUG
© 2019 NTT DATA Corporation 56
References
© 2019 NTT DATA Corporation 57
ABFSのドキュメント:
https://hadoop.apache.org/docs/r3.2.1/hadoop-azure/abfs.html
https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-azure/src/site/markdown/abfs.md
Data Lake Storage Gen2のREST APIのリファレンス:
https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/filesystem
https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path
FileSystem APIの仕様を定めるドキュメント:
https://hadoop.apache.org/docs/r3.2.1/hadoop-project-dist/hadoop-common/filesystem/index.html
Documentation
© 2019 NTT DATA Corporation 58
Hadoop CommonのJIRA
"Component/s: fs/azure"なものがABFS関連
https://issues.apache.org/jira/browse/HADOOP-15763
Über-JIRA: abfs phase II: Hadoop 3.3 features & fixes
Issue tracking
© 2019 NTT DATA Corporation 59
まとめ
© 2019 NTT DATA Corporation 60
FileSystem APIは各種データストアへの透過的なアクセスを提供
データストアごとのセマンティクスや性能の違いに注意
自分で実装を作ることもできる
Azureのデータストアにも対応
Azure Data Lake Storage Gen2
ファイルシステム的な機能(階層型名前空間)を提供
HDFSと同じ感覚で使いやすい
まとめ
© 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

What's hot

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
 
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Yahoo!デベロッパーネットワーク
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
Yu Otsubo
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
Masahiro Kiura
 
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力
NTT DATA OSS Professional Services
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
Preferred Networks
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
Yahoo!デベロッパーネットワーク
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
データ分析基盤について
データ分析基盤についてデータ分析基盤について
データ分析基盤について
Yuta Inamura
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Motonori Shindo
 
第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」
裕之 木下
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
Yasunori Goto
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 

What's hot (20)

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
 
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
データ分析基盤について
データ分析基盤についてデータ分析基盤について
データ分析基盤について
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
 
第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 

Similar to Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azure Data Factory、Data Stream 分析、Hadoop on Azure」講演資料、2019年11月22日開催)

Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
NTT DATA Technology & Innovation
 
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
NTT DATA Technology & Innovation
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
NTT DATA Technology & Innovation
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
NTT DATA Technology & Innovation
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
HDFS basics from API perspective
HDFS basics from API perspectiveHDFS basics from API perspective
HDFS basics from API perspective
NTT DATA OSS Professional Services
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
NTT DATA OSS Professional Services
 
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
NTT DATA OSS Professional Services
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
NTT DATA OSS Professional Services
 
141030ceph
141030ceph141030ceph
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
Kuninobu SaSaki
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
NTT DATA Technology & Innovation
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
NTT DATA OSS Professional Services
 
HDFS Router-based federation
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federation
NTT DATA OSS Professional Services
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
Hadoop / Spark Conference Japan
 
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)chenree3
 
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)softlayerjp
 

Similar to Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azure Data Factory、Data Stream 分析、Hadoop on Azure」講演資料、2019年11月22日開催) (20)

Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
 
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
HDFS basics from API perspective
HDFS basics from API perspectiveHDFS basics from API perspective
HDFS basics from API perspective
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
 
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
 
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
 
141030ceph
141030ceph141030ceph
141030ceph
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
HDFS Router-based federation
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federation
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
 
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
 
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
B 8スポンサー講演資料 osnexus steven umbehocker (アファーム・ビジネスパートナーズ株)
 

More from NTT DATA Technology & Innovation

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 

Recently uploaded

生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Recently uploaded (12)

生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azure Data Factory、Data Stream 分析、Hadoop on Azure」講演資料、2019年11月22日開催)

  • 1. © 2019 NTT DATA Corporation 11/22/2019 NTT DATA Masatake Iwasaki Hadoop Compatible File Systems (Azure編)
  • 2. © 2019 NTT DATA Corporation 2 Hadoopは分散ファイルシステム(HDFS)を提供 アプリケーションがHDFS以外にも透過的にアクセスできる そのためのインターフェースおよびモジュール群: Hadoop Compatible File Systems Azureのデータストアにも対応 概要
  • 3. © 2019 NTT DATA Corporation 3 Hadoopのファイルシステム
  • 4. © 2019 NTT DATA Corporation 4 Hadoop Distributed File System Hadoop = 分散FS + 分散処理FW Hadoopアプリケーション = HDFS上のデータを処理するもの? HDFS https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
  • 5. © 2019 NTT DATA Corporation 5 core-site.xmlに書く基本的な設定項目 HDFSのアクセス先を書く ネームサービス名 またはNameNodeのホスト名:port hdfs://以外もある? defaultではないFSもある? fs.defaultFS <property> <name>fs.defaultFS</name> <value>hdfs://mycluster/</value> </property>
  • 6. © 2019 NTT DATA Corporation 6 ファイルのpathをURI形式で指定 schemeに応じてよしなにデータを読み書き データストア間のデータコピー/移動にも便利 distcpなどでも同じ要領 schemeなしのただのpathだとfs.defaultFS Hadoopのデータストア抽象化 $ hadoop fs -cp file:///a/b hdfs://ns1/a/ $ hadoop fs -cp hdfs://ns1/a/b hdfs://nn1:8020/a/b $ hadoop fs -cp webhdfs://nn1:9870/a/b s3a://bc/a/
  • 7. © 2019 NTT DATA Corporation 7 Hadoop Compatible File Systems Hadoop FileSystem API Hadoop Application HDFS Local FS Amazon S3 Azure Data Lake Storage gen2 ... Distributed FileSystem Local FileSystem S3A FileSystem AzureBlob FileSystem SparkMapReduce Spark Application MapReduce Application WebHdfs FileSystem Ozone Ozone FileSystem
  • 8. © 2019 NTT DATA Corporation 8 Google Cloud Storage https://github.com/GoogleCloudPlatform/bigdata-interop/tree/master/gcs Oracle Cloud Infrastructure https://github.com/oracle/oci-hdfs-connector Ignite File System https://github.com/apache/ignite/tree/master/modules/hadoop サードパーティ製のFileSystem実装
  • 9. © 2019 NTT DATA Corporation 9 .jarにclasspathを通す Configurationでschemeとクラス名を対応づけ fs.foobar.impl => foobar:// see https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-common/core-default.xml FileSystemモジュールを使うためには <property> <name>fs.foobar.impl</name> <value>org.example.FooBarFileSystem</value> </property> $ tail META-INF/services/org.apache.hadoop.fs.FileSystem org.example.FooBarFileSystem もしくはjava.util.ServiceLoaderを使う # 使ってなくてもロードされるのが難点
  • 10. © 2019 NTT DATA Corporation 10 FileSystem APIをユーザ向けに整理する意図で作られた 意図通りに普及/移行しなかった... ドキュメントがない できることが(ほとんど)変わらない Hadoopのコード自体が両方使っている FileSystem実装を作るときにはケアする必要あり FileSystem実装をwrapするのが定番 see o.a.h.fs.DelegateToFileSystem FileContext API (HADOOP-4952) <property> <name>fs.AbstractFileSystem.foobar.impl</name> <value>org.example.FooBarFs</value> </property>
  • 11. © 2019 NTT DATA Corporation 11 ファイル操作と抽象化
  • 12. © 2019 NTT DATA Corporation 12 Linuxのコマンドと似たような雰囲気 CLI(FsShell)はJava APIを利用して作られたもの CLIによるファイル操作 $ hadoop fs -mkdir -p /foo/bar $ hadoop fs -chmod g+w /foo/bar $ hadoop fs -ls -R / drwxr-xr-x - iwasakims supergroup 0 2019-08-31 15:11 /foo drwxrwxr-x - iwasakims supergroup 0 2019-08-31 15:11 /foo/bar $ echo baz > baz.txt $ hadoop fs -put baz.txt /foo/bar/ $ hadoop fs -head /foo/bar/baz.txt baz $ hadoop fs -rm -r /foo
  • 13. © 2019 NTT DATA Corporation 13 URIに対応するインスタンスを取得 設定上のデフォルトFSなら明示的な指定は不要 FileSystemインスタンスの取得 scala> import org.apache.hadoop.conf.Configuration scala> import org.apache.hadoop.fs.FileSystem scala> import org.apache.hadoop.fs.Path scala> val conf = new Configuration() scala> conf.get("fs.defaultFS") res0: String = hdfs://localhost:8020/ scala> val fs = FileSystem.get(conf) scala> val path = new Path("hdfs://localhost:8020/") scala> val fs = p.getFileSystem(conf) scala> val fs = FileSystem.get(path.toUri(), conf)
  • 14. © 2019 NTT DATA Corporation 14 ディレクトリの作成 基本的に親がなければ作成 (mkdir -p) mkdirs scala> val path = new Path("/foo/bar") scala> fs.mkdirs(path) res1: Boolean = true scala> fs.exists(new Path("/foo")) res2: Boolean = true
  • 15. © 2019 NTT DATA Corporation 15 ファイル情報(FileStatus)の取得 listStatus scala> val listing = fs.listStatus(new Path("/foo/bar")) scala> val f = listing(0) f: org.apache.hadoop.fs.FileStatus = HdfsNamedFileStatus{path=hdfs://localhost:8020/foo/bar/baz. txt; isDirectory=false; length=4; replication=1; blocksize=134217728; modification_time=1567217427000; access_time=1567152892141; owner=iwasakims; group=docker; permission=rw-r--r--; isSymlink=false; hasAcl=false; isEncrypted=false; isErasureCoded=false} scala> fs.getFileBlockLocations(f.getPath(), 0, f.getLen()) res23: Array[org.apache.hadoop.fs.BlockLocation] = Array(0,4,localhost)
  • 16. © 2019 NTT DATA Corporation 16 ファイルの新規作成&書き込みオープン 得られたOutputStreamにバイト列を書き込む 先頭からシーケンシャルに create scala> import java.nio.charset.Charset scala> val os = fs.create(new Path("/foo/bar/baz.txt")) scala> val buf ="baz".getBytes(Charset.forName("UTF-8")) buf: Array[Byte] = Array(98, 97, 122) scala> os.write(buf, 0, buf.length) scala> os.close()
  • 17. © 2019 NTT DATA Corporation 17 ファイルの読み込みオープン open scala> import java.nio.ByteBuffer scala> val is = fs.open(new Path("/foo/bar/baz.txt")) scala> val buf = ByteBuffer.allocate(3).array scala> is.read(buf, 0, buf.length) res1: Int = 3 scala> new String(buf.array(), Charset.forName("UTF-8")) res2: String = baz scala> val bb = ByteBuffer.allocate(2) scala> is.read(1, bb) res3: Int = 2 scala> new String(bb.array(), Charset.forName("UTF-8")) res4: String = az
  • 18. © 2019 NTT DATA Corporation 18 入力ファイルを分割してタスクに対応づける タスクごとにデータを処理する 作業用ディレクトリを作る タスクの出力ファイルを作る 入力ファイルからレコードを読み出す データを処理する 出力ファイルにレコードを書き込む 出力ファイルを出力先に移動する フレームワークが入出力を抽象化 Hadoopジョブによるデータ処理の流れ
  • 19. © 2019 NTT DATA Corporation 19 データ入力を抽象化するもの 入力をInputSplitに分割 レコードを読み出す InputFormat public abstract class InputFormat<K, V> { public abstract List<InputSplit> getSplits(JobContext context ) throws ... public abstract RecordReader<K,V> createRecordReader(InputSplit split, TaskAttemptContext context ) throws ... }
  • 20. © 2019 NTT DATA Corporation 20 ファイルからのデータを読み出しを抽象化 レコードを読み出すロジックは派生クラスが提供 TextInputFormat SequenceFileInputFormat AvroInputFormat ParquetInputFormat ユーザはパラメータを指定するだけ どのクラスを使うか 処理対象ファイルのpath ... FileInputFormat
  • 21. © 2019 NTT DATA Corporation 21 データ出力を抽象化するもの レコードを書き出す 出力できるかを確認する 出力を確定する OutputFormat public abstract class OutputFormat<K, V> { public abstract RecordWriter<K, V> getRecordWriter(TaskAttemptContext context ) throws ... public abstract void checkOutputSpecs(JobContext context ) throws ... public abstract OutputCommitter getOutputCommitter(TaskAttemptContext context ) throws ... }
  • 22. © 2019 NTT DATA Corporation 22 オブジェクトストレージの活用
  • 23. © 2019 NTT DATA Corporation 23 マスターノード(NameNode)がボトルネック 1. NameNodeのヒープサイズ(<100GBくらい?) 2. 管理可能なスレーブノード数(<10000くらい?) 3. 処理可能なリクエスト数(<10万tpsくらい?) ざっくりした目安 100万データブロックあたりヒープ1GB ヒープサイズはGC的に100GB程度まで 1億ブロックで12.8PB (ブロックサイズ128MBで) HDFSのスケーラビリティ
  • 24. © 2019 NTT DATA Corporation 24 複数のマスターがそれぞれ独立のNamespaceを管理 Namespaceを跨ぐ操作に制限あり 小ファイルの格納の(コスト)効率の悪さは変わらない Router-based federation (HDFS-10467)でもその点は同じ HDFS Federation https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs-rbf/HDFSRouterFederation.html
  • 25. © 2019 NTT DATA Corporation 25 データをファイルという単位で管理 ファイルはデータ(バイト列)の入れ物 ディレクトリはファイルやディレクトリの入れ物 階層的なディレクトリ構造でファイルを整理 ファイル/ディレクトリはメタデータを持つ 所有者に応じたアクセス制御 ... ファイルシステム?
  • 26. © 2019 NTT DATA Corporation 26 データをオブジェクトという単位で管理 オブジェクトはデータ(バイト列)の入れ物 バケットはオブジェクトの入れ物 フラットなキー空間でオブジェクトを管理 オブジェクトはメタデータを持つ ... スケールアウトしやすい REST APIによるアクセス(がメイン) クラウドのマネージドサービスが利用可能 オブジェクトストレージ
  • 27. © 2019 NTT DATA Corporation 27 S3AFileSystem s3a://mybucket/path ユーザが多く継続的に改良されている Amazon S3 export HADOOP_OPTIONAL_TOOLS=hadoop-aws classpathを通すのに設定が必要(Hadoop 3.0以降の例): <property> <name>fs.s3.impl</name> <value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value> </property> Amazon EMRのEMRFSのコミュニティ版的な位置づけ:
  • 28. © 2019 NTT DATA Corporation 28 GoogleHadoopFileSystem gs://container/path サードパーティ実装 https://github.com/GoogleCloudPlatform/bigdata-interop 最近v2.0.0がリリース https://cloud.google.com/blog/products/data-analytics/new-release-of-cloud-storage-connector-for- hadoop-improving-performance-throughput-and-more ランダムreadの性能向上(fadvise) ディレクトリ操作のロック(cooperative locking) Google Cloud Storage
  • 29. © 2019 NTT DATA Corporation 29 OzoneFileSystem o3fs://bucket.volume.omhost:9862/path Ozone: 新作オブジェクトストレージ Hadoopのサブプロジェクト https://hadoop.apache.org/ozone/ OzoneClient(RPC)を利用してOzoneにアクセス Ozone
  • 30. © 2019 NTT DATA Corporation 30 全機能を備えているのはHDFS(DistributedFileSystem) HDFSにない機能は定義されていない e.g. ファイルのランダムupdate オブジェクトストレージはファイルシステムではない APIをwrapしてそれっぽく見せかけている FileSystem APIはHDFSの機能を抽象化したもの
  • 31. © 2019 NTT DATA Corporation 31 オブジェクトストレージには本来存在しないもの 末尾が/の空オブジェクトで模擬 /dir1/ /dir1/file1.txt /dir1/file2.txt ディレクトリ削除 = prefixが同じオブジェクトを全削除 たいてい非atomicな操作 途中で落ちると一部のオブジェクトだけ削除した状態 ディレクトリ
  • 32. © 2019 NTT DATA Corporation 32 オブジェクトのキー更新ができないデータストレージでは高価 新しい名前のオブジェクトにデータコピー 古い名前のオブジェクトを削除 ディレクトリrename = prefixが同じオブジェクトを全rename たいてい非atomicな操作 rename
  • 33. © 2019 NTT DATA Corporation 33 Amazon S3で特徴的な仕様: 作成直後にリストに出ない可能性あり 削除直後にアクセスできる可能性あり https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel Eventual Consistency
  • 34. © 2019 NTT DATA Corporation 34 S3AFileSystemの一貫性を改善するアドオン 補助的なメタデータ置き場としてDynamoDBを利用 create: S3にオブジェクト作成後DynamoDBに記録 listStatus: S3とDynamoDBの両方を見る S3Guard (HADOOP-13345) https://issues.apache.org/jira/secure/attachment/12821464/S3GuardImprovedConsistencyforS3AV2.pdf
  • 35. © 2019 NTT DATA Corporation 35 Hadoop on Azure
  • 36. © 2019 NTT DATA Corporation 36 Hadoop as a Service Hadoopセットアップ済みVM(からなるクラスタ)を簡単に起動 Hadoop 3にも対応してる(Hadoop 3.1.0 (HDI 4.0)) HDFSを(あまり)使わない HDInsight <property> <name>fs.defaultFS</name> <value>abfs://container1@account1.dfs.core.windows.net</value> <final>true</final> </property> $ hdfs dfs -ls hdfs://mycluster/ Found 2 items drwx-wx-wx - hive hdfs 0 2019-11-21 06:52 hdfs://mycluster/tmp drwxr-xr-x - yarn hdfs 0 2019-11-21 06:52 hdfs://mycluster/yarn
  • 37. © 2019 NTT DATA Corporation 37 3種類ある Azure Blob Storage: オブジェクトストレージ Azure Data Lake Storage (Gen1): ファイルシステム的 WebHDFS互換なREST APIを提供 Azure Data Lake Storage Gen2: Blob Storage + 階層型名前空間(optional) Azureのデータストア
  • 38. © 2019 NTT DATA Corporation 38 NativeAzureFileSystem wasb://mycontainer@myaccount.blob.core.windows.net/path wasbs://mycontainer@myaccount.blob.core.windows.net/path (HTTPS) HDInsightでdefualtFSとして利用可能 depending on com.microsoft.azure.azure-storage Azure Blob Storage export HADOOP_OPTIONAL_TOOLS=hadoop-azure
  • 39. © 2019 NTT DATA Corporation 39 AdlFileSystem adl://mycontainer.azuredatalakestore.net/path depending on com.microsoft.azure.azure-data-lake-store-sdk Azure Data Lake Storage (Gen1) export HADOOP_OPTIONAL_TOOLS=hadoop-azure-datalake
  • 40. © 2019 NTT DATA Corporation 40 AzureBlobFileSystem abfs://mycontainer@myaccount.dfs.core.windows.net/path SecureAzureBlobFileSystem abfss://mycontainer@myaccount.dfs.core.windows.net/path HDInsightでdefualtFSとして利用可能 no dependency on Azure SDK https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/filesystem いまから使うならこちら 以降の説明はABFS前提 Azure Data Lake Storage Gen2 export HADOOP_OPTIONAL_TOOLS=hadoop-azure
  • 41. © 2019 NTT DATA Corporation 41 設定プロパティ名でアカウントごとに設定を使い分け .アカウント名.dfs.core.windows.net をsuffixにつける 見つからなければsuffixなしのプロパティ名にフォールバック (例: fs.azure.account.auth.type) デフォルト値的に指定できる ストレージアカウント別の設定 <property> <name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name> <value>SharedKey</value> </property> <property> <name>fs.azure.account.key.account1.dfs.core.windows.net</name> <value>xxxxxxxxx</value> </property>
  • 42. © 2019 NTT DATA Corporation 42 Azure Active Directoryベースで選択肢がいろいろ ShareKey: アクセスキー OAuth: OAuth 2.0エンドポイント トークン取得方法にも選択肢がある ApplicationのClient ID VMのManaged Identity Custom: ユーザ定義 認証
  • 43. © 2019 NTT DATA Corporation 43 ストレージアカウントのアクセスキーで認証 細かい権限設定はできない アクセスキーをそのままジョブに配ることになる アクセスキーを暗号化した文字列にすることも 一応できる <property> <name>fs.azure.account.keyprovider.acc1.dfs.core.windows.net</name> <value>org.apache.hadoop.fs.azurebfs.services.ShellDecryptionKeyProvider</value> </property> <property> <name>fs.azure.shellkeyprovider.script.acc1.dfs.core.windows.net</name> <value>/path/to/復号化スクリプト</value> </property> SharedKey認証 <property> <name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name> <value>SharedKey</value> </property> <property> <name>fs.azure.account.key.account1.dfs.core.windows.net</name> <value>アクセスキー</value> </property>
  • 44. © 2019 NTT DATA Corporation 44 Azure Active DirectoryでApp registrations ContainerのAccess Control(IAM)でappにRoleアサイン https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal OAuth 2.0 Client Credentials <property> <name>fs.azure.account.auth.type.account1.dfs.core.windows.net</name> <value>OAuth</value> </property> <property> <name>fs.azure.account.oauth.provider.type.account1.dfs.core.windows.net</name> <value>org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider</value> </property> <property> <name>fs.azure.account.oauth2.client.endpoint.account1.dfs.core.windows.net</name> <value>https://login.microsoftonline.com/{tenant ID}/oauth2/token</value> </property> <property> <name>fs.azure.account.oauth2.client.id.account1.dfs.core.windows.net</name> <value>{application (client) ID}</value> </property> <property> <name>fs.azure.account.oauth2.client.secret.account1.dfs.core.windows.net</name> <value>{client secret}</value> </property> OAuth 2.0 token endpoint (v1) Applicationのclient secret
  • 45. © 2019 NTT DATA Corporation 45 認証ロジックをユーザ定義 CustomTokenProviderAdapteeの実装を作ってクラス名を指定 以下はHDInsightの例 Custom認証 <property> <name>fs.azure.account.auth.type</name> <value>Custom</value> </property> <property> <name>fs.azure.account.oauth.provider.type</name> <value>com.microsoft.azure.storage.oauth2.TokenServiceBasedAccessTokenProvider</value> </property>
  • 46. © 2019 NTT DATA Corporation 46 エラーメッセージから原因を判別しにくい アクセスキーの誤り アクセスキーの期限切れ 時計が合っていない 認証エラー ls: Operation failed: "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.", 403, HEAD, https://account1.dfs.core.windows.net/container1//?upn=false&action=get AccessControl&timeout=90
  • 47. © 2019 NTT DATA Corporation 47 階層型名前空間 ストレージアカウント作成時にのみ有効化できる Atomicで高速なディレクトリ操作 Hierarchical Namespace Operation Disabled Enabled File rename O(1) O(1) File delete O(1) O(1) Directory rename O(files) O(1) Directory delete O(files) O(1)
  • 48. © 2019 NTT DATA Corporation 48 Hierarchical Namespaceが有効な場合のみ設定可能 所有者とパーミッション $ hadoop fs -ls abfs://co1@ac1.dfs.core.windows.net/tmp/ -rw-r--r-- 1 f78cab55-9a8c-494b-9c98-516e76db76fe iwasakims 175 ...README.txt $ hadoop fs -chmod 664 abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt ... DEBUG services.AbfsClient: Authenticating request with OAuth2 access token DEBUG services.AbfsIoUtils: Request Headers DEBUG services.AbfsIoUtils: Accept-Charset=utf-8 DEBUG services.AbfsIoUtils: X-HTTP-Method-Override=PATCH DEBUG services.AbfsIoUtils: x-ms-version=2018-11-09 DEBUG services.AbfsIoUtils: Accept=application/json, application/octet-stream DEBUG services.AbfsIoUtils: User-Agent=Azure Blob FS/3.3.0-SNAPSHOT (JavaJRE 1.8.0_232... DEBUG services.AbfsIoUtils: x-ms-permissions=0664 DEBUG services.AbfsClient: HttpRequest: 200,,...PUT,https://ac1.dfs.core.windows.net/co1/tmp/README.txt?action=setAccessControl&tim eout=90 $ hadoop fs -ls abfs://co1@ac1.dfs.core.windows.net/tmp/ -rw-rw-r-- 1 f78cab55-9a8c-494b-9c98-516e76db76fe iwasakims 175 ...README.txt Applicationのservice principalのObject ID
  • 49. © 2019 NTT DATA Corporation 49 ユーザ名を指定してのアクセス制御もサポート ACL $ hadoop fs -setfacl -m user:46d59d2f-4d64-4a20-a11b-50cc67e5234b:r-- ¥ abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt $ hadoop fs -getfacl abfs://co1@ac1.dfs.core.windows.net/tmp/README.txt user::rw- user:46d59d2f-4d64-4a20-a11b-50cc67e5234b:r-- group::rw- mask::rw- other::---
  • 50. © 2019 NTT DATA Corporation 50 メモリ上のバッファ(デフォルト8MB)に書き込み->アップロード Syncable(hflushとhsyncに差分はない) https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path/update ファイル作成とデータ書き込み scala> val p = new Path("abfs://co1@ac1.dfs.core.windows.net/test.txt") scala> val fs = p.getFileSystem(new Configuration()) scala> val buf ="baz".getBytes(Charset.forName("UTF-8")) scala> val os = fs.create(p) https://ac1.dfs.core.windows.net/co1/test.txt?resource=file&timeout=90 scala> os.write(buf, 0, buf.length) scala> os.hflush() https://ac1.dfs.core.windows.net/co1/test.txt?action=append&position=0&timeout=90 https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&retainUncommittedData=false&position=3&... scala> os.close() https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&retainUncommittedData=false&position=3&close=t rue&timeout=90
  • 51. © 2019 NTT DATA Corporation 51 一度書き込みcloseしたファイルの末尾への追記 append scala> val os = fs.append(p) scala> os.write(buf, 0, buf.length) scala> os.close() 202,...,PUT,https://ac1.dfs.core.windows.net/co1/test.txt?action=append&po sition=3&timeout=90 200,...,PUT,https://ac1.dfs.core.windows.net/co1/test.txt?action=flush&ret ainUncommittedData=false&position=6&close=true&timeout=90
  • 52. © 2019 NTT DATA Corporation 52 バッファ(デフォルト4MB)にデータを読む 2回目以降のreadからは先読み(read ahead)あり ByteBuffer(Positioned)Readableは未サポート データ読み込み scala> import java.nio.ByteBuffer scala> val is = fs.open(p) scala> val buf = ByteBuffer.allocate(3).array scala> is.read(buf, 0, buf.length) https://ac1.dfs.core.windows.net/co1/test.txt?timeout=90 scala> new String(buf, Charset.forName("UTF-8")) res9: String = baz scala> is.read(0, ByteBuffer.allocate(3)) java.lang.UnsupportedOperationException: Byte-buffer pread unsupported by org.apache.hadoop.fs.azurebfs.services.AbfsInputStream at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:258) ... 50 elided
  • 53. © 2019 NTT DATA Corporation 53 REST APIのリクエストを送るだけ https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path/create 階層型名前空間がoffだと1リクエストで処理できる数に上限あり -> continuationを指定して繰り返しリクエストを送る rename $ hadoop fs -mv abfs://co1@ac1.dfs.core.windows.net/dir1 ¥ abfs://co1@ac1.dfs.core.windows.net/dir2 ... Request Headers If-None-Match=* Accept-Charset=utf-8 x-ms-version=2018-11-09 x-ms-rename-source=/co1/dir1 ... HttpRequest: 201,...,PUT, https://ac1.dfs.core.windows.net/co1/dir2?timeout=90
  • 54. © 2019 NTT DATA Corporation 54 チューニングノブは少ない fs.azure.io.retry.backoff.interval fs.azure.io.retry.max.retries fs.azure.write.request.size fs.azure.read.request.size fs.azure.io.read.tolerate.concurrent.append パラメータチューニング
  • 55. © 2019 NTT DATA Corporation 55 デバッグログを出すのがてっとり早い log4j.propertiesで設定 出力されるREST APIの情報を確認 リクエストヘッダ/レスポンスヘッダの内容 クエリパラメータ トラブルシューティング log4j.logger.org.apache.hadoop.fs.azurebfs=DEBUG
  • 56. © 2019 NTT DATA Corporation 56 References
  • 57. © 2019 NTT DATA Corporation 57 ABFSのドキュメント: https://hadoop.apache.org/docs/r3.2.1/hadoop-azure/abfs.html https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-azure/src/site/markdown/abfs.md Data Lake Storage Gen2のREST APIのリファレンス: https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/filesystem https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path FileSystem APIの仕様を定めるドキュメント: https://hadoop.apache.org/docs/r3.2.1/hadoop-project-dist/hadoop-common/filesystem/index.html Documentation
  • 58. © 2019 NTT DATA Corporation 58 Hadoop CommonのJIRA "Component/s: fs/azure"なものがABFS関連 https://issues.apache.org/jira/browse/HADOOP-15763 Über-JIRA: abfs phase II: Hadoop 3.3 features & fixes Issue tracking
  • 59. © 2019 NTT DATA Corporation 59 まとめ
  • 60. © 2019 NTT DATA Corporation 60 FileSystem APIは各種データストアへの透過的なアクセスを提供 データストアごとのセマンティクスや性能の違いに注意 自分で実装を作ることもできる Azureのデータストアにも対応 Azure Data Lake Storage Gen2 ファイルシステム的な機能(階層型名前空間)を提供 HDFSと同じ感覚で使いやすい まとめ
  • 61. © 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

Editor's Notes

  1. 今日はHadoopのアプリケーションが、HDFS以外のデータストアにも等価的にアクセスできるようにするためのインターフェースとか、モジュールについてお話します。
  2. まず、Hadoopのファイルシステムって何?という話です。
  3. HadoopはHDFSと呼ばれるデータストアを提供しています。 HDFSはHadoop Distributed File Systemの略で、文字どおりHadoopの分散ファイルシステムです。 メタデータなどを管理するマスター(NameNode)と、実データを格納するスレーブ(DataNode)からなる、マスタースレーブ型のアーキテクチャです。 スレーブを何十台何百台何千台と並べることで、大量のデータを格納して処理できるようにします。 また、典型的にはスレーブノードがデータを処理する計算ノードも兼ねています。 Hadoopはこの分散ファイルシステムと、分散処理のためのフレームワークをセットで提供するものです。 なので、Hadoopのアプリケーションといえば、典型的にはHDFS上に置かれたファイルデータを処理するものということになっています。
  4. Hadoopの基本的な設定項目として、fs.defaultFSというプロパティがあります。 典型的にはhdfs://に続くURIの形で、HDFSのアクセス先が書いてあります。 で、ここにHDFSではないURLを指定できるのかというと、できます。 また、defaultじゃないFSってあるのかというと、あります。
  5. HadoopのコマンドやAPIでファイル操作をするときには、実はpathをURIで指定できるようになっています。 指定されたURIのスキーム部分に応じて、そのデータストアにアクセスするためのモジュールをロードして自動的に切り替えられる仕組みです。 例えばfile://ならローカルファイルシステムです。 hdfs://ならHDFSですが、異なるクラスタにアクセスすることもできます。 webhdfs://という指定で、通常のRPCではなくREST API経由でHDFSにアクセスできます。 s3a://ならAmazon S3です。 これは、データストア間でデータのコピーや移動をするときなどに、便利なものです。 たくさんのファイルをMapReduceジョブでコピーするdistcpでも、同じ要領です。 schemeなしのただのpathが与えられたときのアクセス先が、さっきのdefaultFSで指定されたものということになります。
  6. このような、異なるデータストアに対する透過的なアクセスを提供する機能をざっくり図にすると、こんな雰囲気です。 HDFSを抽象化してFileSystem APIを作り、MapReduceジョブのテストなどのためにローカルファイルシステムに透過的にアクセスできるようになりました。 その後Amazon S3やAzureのストレージサービスにアクセスするための実装が追加されていった感じです。 これらのFileSystem APIとモジュールが、ドキュメント上でHadoop Compatible File Systemsと呼ばれています。 APIを直接使っているのはMapReduceやSparkといったフレームワークの部品であって、エンドユーザはあまり意識していないかもしれません。
  7. 今の図に載っていたモジュールは、Hadoop本体とセットで提供されているものですが、サードパーティ製の実装もいろいろあります。 各種クラウドストレージサービスの提供者や、データストア系のミドルウェアが、MapReduceやSparkのアプリケーションがそのまま使えるように、提供しているものです。
  8. FileSystem APIの各種実装を使うためには、.まず必要なjarにclasspathを通します。 その上で、設定プロパティでURIのschemeとクラス名の対応付けを行います。 この例のfs.foobar.implというプロパティはfoobar://というURIが指定されたときに使われるクラス名を指定するものです。 あるいは、JavaのServiceLoaderを利用して自動的にロードされるようになっている場合もあります。 こちらの方法だとユーザが自分で設定しなくて済むのですが、モジュールを使わなくてもロードされてしまうため、積極的には使われなくなりました。 ひきづられてロードされる依存ライブラリが多いと、無視できないオーバーヘッドがあるためです。 Hadoop同梱のモジュールの場合、前者の対応づけが、デフォルト値を記述した設定ファイルに最初から書かれています。
  9. やや余談ぽいのですが、実はFileSystem APIと同じことができる、FileContextというAPIも存在します。 これは、FileSystem APIからユーザ向けの部分だけ取り出して整理して、置き換える意図で作られたAPIです。 しかし、試みとしては失敗で、両方のAPIを使っているアプリケーションが世の中にあり、結局両方のAPIを維持する状態が続いています。 ぶっちゃけどっちをつかっても変わりません。 FileSystem実装をつくる立場になると、両方のAPIをケアする必要があります。 publicなAPIを一度世に出すと、もう引っ込められないという辛みが感じられる部分です。
  10. ここで、FileSystem APIが具体的にどんなものかという話をします。
  11. HadoopのCLI、つまりコマンドを使って基本的なファイル操作をする場合、こんな感じになっています。 Linuxなどのファイル操作コマンドと雰囲気としては同じです。 mkdirでディレクトリを作る。chmodでパーミッションを設定する。lsでファイルやディレクトリの情報一覧を表示する。みたいな感じです。 CLIだと書き込みはputでファイルをアップロードする、読み込みはgetでファイルをダウンロードする、あるいはcat/head/tailで標準出力に出すみたいな感じです。
  12. いまみたCLIでのファイル操作と同様の流れを、APIでやるとどうなるか見てみます。 単に試行錯誤がやりやすいという理由でScalaの対話環境での入力と出力が書いてありますが、JavaのAPIのお話です。 FileSystem APIを利用するためには、まずFileSystemのインスタンスを取得します。 最初につくっているConfigurationクラスはHadoopの設定ファイルに書かれた設定情報にアクセスするためのものです。 defaultFSにHDFSのURIが設定されていれば、それを元にHDFSにアクセスするためのインスタンスが取得できます。 また、アクセス先の情報URIとして指定して、インスタンスを取得することもできます。
  13. 取得したファイルシステムインスタンスを使ってディレクトリを作成するのがmkdirsメソッドです。 親ディレクトリが存在しなければ作るという、java.io.Fileのmkdirsメソッドと同じような仕様です。
  14. ファイル情報の取得はlistStatusメソッドで取得することができます。 FileStatusクラスのオブジェクトはファイルのメタデータを保持しています。 HDFSだと、ファイルの各ブロックをどのノードが持っているかという情報を取得できたりします。 MapReduceだとこれを使って、データを持っているノードにそのデータを処理させている、というのがよく知られた話です。
  15. createメソッドは、ファイルを書き込みオープンします。 得られたOutputStreamに対してバイト列をwriteしていくことで、書き込みを行います。 書き込みはファイルの先頭からシーケンシャルに行うのみで、任意の位置にseekしたりはできません。
  16. openメソッドはファイルを読み込みopenして、InputStreamを取得します。 InputStreamのreadメソッドで、バイト列を読み出します。 読み込みの場合は、ほとんどのデータストアでseekができます。
  17. Hadoopを使ったことがあっても、いま挙げたようなAPIを使ったことはないという人も多いかもしれません。 というのは、データの入出力を抽象化するようなモジュールが提供されているためです。 Hadoopではひとまとまりの入力データを処理して、出力データを書き出す処理を、ジョブと呼んでいます。 入力データを適当な単位で分割して、タスクと呼ばれる単位で分担して処理を行います。 各タスクはそれぞれ独立に、自分の担当分の入力ファイルからデータを読み込んで、処理して、自分用の出力ファイルに書き出すというのが、オーソドックスな流れです。 HadoopのMapReduceフレームワークは、この流れを抽象化するモジュールを用意して、ユーザが直接ファイルを読み書きするコードを書かなくて済むようにしています。
  18. 例えばInputFormatは、Hadoopジョブの入力データを抽象化するものです。 このモジュールは、入力を適当な単位で分割するロジックと、入力(ファイル)からデータレコードを読み出すロジックを提供します。 InputFormatを使うことで、エンドユーザはファイルをopenしてreadするみたいな部分は意識せず、キーバリューの形で与えられる入力レコードを受け取って処理する形で、アプリケーションを書けます。
  19. ファイルからのデータ入力のための共通ロジックを提供するのがFileInputFormatです。 これ自体は抽象クラスで、ファイルをopenして中身をreadして入力レコードを返す部分はデータフォーマット次第なので、派生クラスで実装します。 例えばテキストファイルならTextInputFormatで、行単位にレコードを取り出すロジックが定義されています。 Hadoopの外部プロジェクトとして提供されている実装もありますが、基本は同じです。 ユーザとしては、どのクラスを使うかと、入力ファイルのpathを指定するだけで、直接FileSystem APIを使ってデータを読み出す処理を書かなくて済むわけです。 ファイルのpathをURIの形式で指定すれば、データストアの使い分けもできます。
  20. データの書き出しに関してもOutputFormatというモジュールが抽象化しています。 InputFormatやOutputFormatはMapReduceのライブラリですが、Sparkなど外部のフレームワークからも利用されています。 MapReduceを使わないから関係ないかというと、意外とそうでもありません。
  21. データストアには、ファイルシステムではなく、オブジェクトストレージと呼ばれるものがあります。
  22. HDFSはマスタースレーブ型なので、マスターノードがスケールアウト上のボトルネックになりがちです。 ファイルシステムメタデータをメモリ上に置く必要があり、Javaのヒープサイズでざっくり100GBくらいまでが目安です。 スレーブノード数や処理可能なリクエストのスループット的には、かなりのところまでカバーできます。 ファイルシステムメタデータのサイズが100GBとすると、処理できるブロック数の上限は1億くらいが上限ということになります。 1ファイルが100MBとすると、クラスタ全体で保持できるデータ量は10PBという感じです。 ファイルが大きくても小さくても、メタデータのオーバーヘッドは同じで、管理できる数は変わりません。 小さいファイルの読み書きは効率が悪いし、小さいファイルをたくさん置くと、全体として保持できるデータ量も小さくなってしまいます。
  23. HDFSのスケーラビリティを拡張する仕組みとして、HDFSフェデレーションというものがあります。 これは、複数のクラスタをまとめて一つに見せるような仕組みです。 扱えるファイルの総数としては、増やすことができるものの、管理上のコストが増や、クラスタを跨ぐファイル操作には制約があるといった課題もあります。 また、小さいファイルを置くと効率が悪いという点は、変わりません。 フェデレーションの発展版にあたるRouter-based federationという機能でも、このへんの事情は同じです。
  24. HDFSは分散ファイルシステムです。 ファイルシステムと言われるとふんわりイメージは沸きますが、改めて書き出してみるとこんな感じで、データをファイルという単位で管理し、読み書きできるようにするシステムです。 ファイルを格納するためのディレクトリ構造、つまりは階層的な名前空間でデータを管理します。 ファイルにアクセスするときにツリー状のinodeをたどる都合上、参照局所性がないので、ファイルシステムメタデータ全体をメモリ上に置いています。
  25. ファイルシステムに対してオブジェクトストレージは、フラットな名前空間でデータを管理するというイメージのものです。 大きいバイト列を格納できる分散KVSというか。 HDFSと比較して、扱えるオブジェクト数という点で、スケールアウトしやすいアーキテクチャです。 多くの場合、REST APIでのシンプルな読み書きが主要なインターフェースになっています。 そのせいか?クラウドのマネージドサービスとしてよく提供されているという感じです。 Amazon S3などからHDFSにファイルを出し入れして処理する使い方は昔からされていたと思います。 でも、クラウドストレージ上のオブジェクトを、ファイルとして直接処理できるといいよねということで、そのためのモジュールが作られました。
  26. 最も有名というか、利用者が多くて、昔から継続的にメンテされているのがAmazon S3にアクセスするためのものです。 s3a://バケット名/pathというURIでオブジェクトにアクセスできます。 いまはS3AFileSystemという名前で、利用している人が多くて、継続的に改良されています。 ちなみに、AWSのHadoop as a serviceであるEMRでは、Amazon謹製のEMRFSというモジュールが使われています。 S3AFileSystemはそれを参考にしてつくった、コミュニティ版みたいなイメージです。 デフォルトの状態でclasspathが通っていないので、使うためには追加の設定が必要です。 hadoopコマンドに関しては、hadoop-env.shなどで環境変数を定義することで、それができます。
  27. GoogleHadoopFileSystemはGoogle Cloud Storage向けの実装です。 gs://というURIに対応しています。 Hadoopとは独立に開発されて維持されています。 使う分には、.jarファイルを1個ダウンロードしてきて、classpathを通して、設定を追加するだけです。 最近、新しいバージョンがリリースされたという記事が出ていました。 Parquetみたいな形式でファイルの一部を読み出すようなワークロードの性能改善とか、複数のクライアントからの処理に関する排他制御みたいな機能が追加されたとありました。
  28. Hadoopが提供するオブジェクトストレージであるところのOzoneにアクセスするための実装が、Ozoneファイルシステムです。 o3fs://バケット名.ボリューム名.ホスト名/pathみたいなURIでファイルを指定します。
  29. FileSystem APIはHDFSの機能を抽象化したものというあらまし上、HDFSにない機能は定義されていません。 フルセットの機能を持っている実装がHDFS用のDistributedFileSystemだということです。 オブジェクトストレージにアクセスするための実装は、そのオブジェクトストレージのAPIをwrapして、ファイルシステムっぽく見せかけているものです。 そのため、対応していない機能があったり、性能やセマンティクスがちょっと違う場合があります。
  30. まず、ファイルシステムとオブジェクトストレージとの違いで大きなところとして、ディレクトリという概念があるかないかがあります。 オブジェクトストレージにはディレクトリの存在がないので、例えばオブジェクトのキーをfull pathにしておいて、/dir1/から始まるオブジェクトを、/dir1というディレクトリ下にあるものとみなしたりします。 空のディレクトリは、/dir1/みたいなスラッシュで終わるキーを持つ、空のオブジェクトをつくることで表現します。 少なくとも、S3とGCSはこのスタイルです。 この場合、ディレクトリを削除するという操作は、prefixが一致するオブジェクトをすべて削除することを意味します。 1万ファイル格納されたディレクトリを削除する操作の裏で、1万回リクエストを投げているみたいな状況になりうるわけです。 また、途中でプロセスが落ちると、一部のオブジェクトだけ削除した、中途半端な状態になります。 クラウドストレージの中では、AzureのData Lake Storage Gen2が、低コストでatomicなディレクトリのrenameとdeleteを提供しているのが、特徴的です。
  31. ファイル名やディレクトリ名のrenameは、HDFSだとinodeを1個書き換えるだけの、高速でatomicな処理なのですが、オブジェクトストレージではコストの高い処理になりえます。 これが顕著なのがS3で、キーの変更はできないので、新しい名前のオブジェクトをつくってデータをコピーして、元のオブジェクトを削除しています。 そのため、1万ファイル入ったディレクトリのrenameは、1万オブジェクトのコピーと削除になって、オーバーヘッドが大きいです。 GCSとAzureのサービスでは、オブジェクトのメタデータだけ付け替えることができるようです。
  32. また、S3の特徴としてとりあげられがちな話題として、結果整合性があります。 S3のオブジェクトの場合、作成直後にlistにでなかったり、削除直後にまだアクセスできたりする場合があることが知られています。 ドキュメントの記述をみたところではAzureやGCSには該当しなさそうに見えます。
  33. S3を使う場合の一貫性の改善策として、比較的最近登場したのが、S3Guardと呼ばれる機能です。 これは、S3AFileSystemと組み合わせて使うアドオンで、DynamoDBをメタデータ置き場として使います。 例えば、ファイルを作成時はS3にオブジェクトを作成したあと、エントリをDynamoDBに記録する。 lsするときは、S3のキー一覧取得と、DynamoDBへのlookupの両方を行い、S3側で見えなかった情報をDynamoDBから補う、みたいな仕組みになっています。 EMRで使われているEMRFSは、もともと持っていた機能です。
  34. というわけで、ここからAzureの話題です。
  35. AzureにはHDInsightというサービスがあります。 Hadoopなどの分散処理ミドルウェアが、すぐに利用可能な状態でセットアップされたVM群が起動してくるという、Hadoop as a serviceです。 AWSのAmazon EMRが、類似のサービスで有名なところです。 HDInsightの特徴的なところをあげると、割と新し目のHadoop 3系も使えるというところがあります。 また、defaultFSの設定値がAzureのデータストアに向いていて、HDFSはあまり使わない想定になっています。 一応サービスは上がっていて、明示的に指定すれば使えます。
  36. HadoopのAPIでアクセスできるAzureのデータストアサービスは3種類あります。 Azure Blob Storageはシンプルにオブジェクトストレージです。 それに対してData Lake Storageの方はマネージドHDFS的なサービスに相当するイメージです。 さらにAzure Data Lake Storage Gen2というのがあって、前者2つの両方をカバーするみたいな位置付けになっています。 Blob Storageベースだけど、オプショナルにファイルシステム的な機能が利用できるもので、たぶん今から使うのであれば、これを選んでおけばよさそうな雰囲気です。
  37. サービスが3種類あるので、それにアクセスするためのモジュールも3種類あります。 Blob Storage向けの実装がNativeAzureileSystemです。 wasb://というURIに対応しています。 wasbs://というのはHTTPSで通信する場合に使うスキームです。 ストレージアカウントの設定でHTTPS必須にしていると、こちらを使う必要があります。 自分でHadoopをセットアップする場合、外部データストアにアクセスするためのモジュールにclasspathを通すために、ちょっとした追加の設定が必要になります。
  38. Data Lake StorageのGen1用の実装がAdlFileSystemです。 adl://というURIに対応しています。 Gen2が出たあとは、メンテされなくなってる印象です。 ユーザが増えて、フィードバックがくる前にGen2にが出ちゃったというか。
  39. Azure Data Lake Storage Gen2向けの実装がAzureBlobFileSystemです。 abfs://というURIに対応するものです。 HTTPSだとabfss://です。 WASBだとblob.core.windows.netだったのがdfs.core.windows.netに変わってるという細かい違いがあります。 ストレージアカウント作成時に階層的名前空間という機能を有効化すると、ファイルシステム的なセマンティクスになるのが、特徴的なところです。 このモジュールはAzureのSDKを使うのではなく、直接REST APIのリクエストを組み立てて投げる作りになっています。 いまから使うならData Lake Storage Gen2なので、以降の話はこのABFSを前提とした内容になります。
  40. AzureのBlog StorageやData Lake Storageのサービスを使う場合には、ストレージアカウントというリソースをまず作ります。 Hadoopの設定上、プロパティ名のsuffixとして".アカウント名.dfs.core.windows.net"をつけることで、ストレージアカウントごとに値を指定できるようになっています。 ストレージアカウント個別の設定がなかった場合には、suffixなしのプロパティ名にフォールバックするので、デフォルト値的に使うこともできます。
  41. データストアにアクセスするときの認証はAzure Active Directoryの仕組みにもとづくもので、認証方法にいろいろ選択肢があります。 ここが一番わかりにくい部分かもしれません。 SharedKeyというのはストレージアカウントのアクセスキーを使うものです。 OAuthはOAuth 2.0のアクセストークンを使うものです。 トークンの取得方法にも、アプリケーションを登録してそのIDを使うか、AzureのVMのManaged Identityを使うかという選択肢があります。 また、認証ロジックを改造することもできます。
  42. ShareKey認証はもっともシンプルなもので、ストレージアカウントのアクセスキーで認証する方法です。 ストレージアカウントの権限でデータを読み書きできるので、細かいアクセス制御はできません。 また、Sparkなどの分散処理を実行するときには、各ノードにこれを渡すことになるので、セキュリティの設定に少し気をつける必要があります。
  43. 一般的なアプリケーションで利用するのと同じ要領で、Oauthのトークンを使う場合はこんな設定内容になります。 Active DirectoryのメニューのApp registrationsという項目から、適当にアプリケーションを登録して、そのアプリケーションのclient IDとclient secretを設定値として指定します。 OAuthの認証エンドポイントについては、v1とv2があるのですが、現時点のHadoopのモジュールとしては、v1の方を指定する必要があります。 また、Data Lake Storage Gen2側の設定として、登録したアプリケーションのプリンシパルにロールを割り当てる必要があります。 Ownerロールを割り当てると読み書きができる、Readerロールを割り当てると読み込みしかできない、といった制御ができます。 また、ストレージアカウントではなく、ある特定のコンテナのロールだけを割り当てることもできます。
  44. Custom認証というのは、認証用のモジュールのインターフェースの実装を作って、そのクラス名を設定値として指定します。 HDInsightで使われているHadoopの設定ファイルを見るとこんな感じで、カスタマイズされたモジュールが使われているように見受けられます。 Hadoop関連のミドルウェアでも、こういうプラッガブルになっている部分があって、ディストリビュータやサービスプロバイダが、自社サービスとの連携や、有償版限定の差別化要素を提供したりするために、使われることがあります。
  45. ちょっと使ってみようと思って、最初につまずきやすいのが、認証エラーの部分かなと思います。 アクセスキーが間違っているとか、アクセスキーが期限切れだったりする以外に、アクセス元のマシンの時計があってない場合も、同じエラーメッセージが帰ってきます。 手元のノートPC上のVMからアクセスしようとしたときに、この問題にはまりがちです。 Oauthのトークンではなく、アクセスキーを使うSharedKey方式の場合でも、時計が合ってないとダメです。
  46. Data Lake Storage Gen2で特徴的なのが、階層型名前空間です。 これを使うためには、ストレージアカウントを作成するときに、有効化する必要があります。 有効化されていると、ファイルシステム的な機能が利用できるようになります。 各種クラウドデータストアを使う時に問題になりがちな、多数のディレクトリのリネームや削除が、高速でアトミックに実行できることになります。 HDFSに近いセマンティクスで使えて、Hadoopを利用したデータ処理を行うときには、特に有効だと思います。
  47. ファイルシステムではファイルやディレクトリに、所有者と、rwxという読み書き実行のパーミッションが設定できます。 HadoopのAPIでクラウドのデータストアにアクセスする場合、これは利用できないことが多いのですが、階層型名前空間が有効化されていれば、Azureでは使うことができます。 アプリケーションのトークンを利用して認証した場合の例だと、ファイルのownerはapplicationのサービスプリンシパルのObject IDになっています。 パーミッション変更のコマンドを実行してデバッグログを見ると、REST APIのリクエストにx-ms-permissionsのようなヘッダーをつけて呼んでいます。 Data Lake Storage側の機能にシンプルにマッピングされているということがわかります。
  48. ファイルの所有者ではなく、特定のユーザ名を指定してパーミッションを指定する、POSIX ACLという機能がHDFSサポートされているのですが、Azureでも使うことができます。 階層型名前空間が有効化されていれば。
  49. ファイルを書き込むときは、こんな感じです。 ファイルをopenするときに、一回REST APIのリクエストを送ります。 writeされたデータはメモリ上のバッファに溜まっていって、バッファが一杯になると、非同期的にREST APIでPUTされていきます。 普通のファイルシステムのfsyncに相当するhflushやhsyncというAPIもサポートされていて、これを呼ぶと、バッファの内容が同期的にアップロードされて、他のクライアントから書いたデータが読めるようになります。
  50. 一度書き込みcloseしたファイルを再オープンして、末尾にデータを追記するためのappendも、普通に利用できます。
  51. ファイルを読み込みオープンしてreadすると、デフォルトでは4MB単位でREST APIでバッファにダウンロードしてきます。 バッファの内容がreadされて少なくなると、裏で非同期に先読みしてデータを読みに行くような仕組みになっています。 HDFSで性能が重要なアプリケーション向けのAPIである、ByteBufferを引数に取るタイプのreadは、サポートされていません。 REST APIでデータを読みにいく都合上、あまり細かい単位のランダムreadに向いているわけではありません。 その辺は、HDFSと使い分けることでカバーするのがよいかなと思います。
  52. ファイルやディレクトリのrenameも、単純にData Dake StoreのREST APIで実行されます。 階層型名前空間がoffだと、ディレクトリのrenameは、atomicではない、ちょっと時間がかかる処理になります。
  53. もともとData Lake Storageがファイルシステム的な機能を提供してくれていて、クライアント側の実装で込み入ったことをあまりしなくて済んでいることもあって、ユーザが設定すべきチューニングノブは多くありません。 強いて言えば、エラー時のリトライ間隔や回数の上限、データを読み書きするときのバッファサイズがあります。
  54. 思うように動かなかった場合は、デバッグログを出して確認するのが手っ取り早いと思います。 log4j.propertiesでログレベルを指定できます。 デバッグログには、裏で呼び出しているREST APIのリクエストやレスポンスの情報が表示されるので、これを確認することになります。
  55. 参考情報の紹介です。
  56. ABFSのドキュメントはHadoopのいわゆるコミュニティ版のドキュメントの中にあります。 比較的最近つくられたモジュールで、まだ変更も入るのですが、最新版はgithubのtrunkブランチで確認できます。 また、ABFSはData Lake Storage Gen2のREST APIをシンプルに利用しているものなので、トラブルシューティングなどでは、そのREST APIのドキュメントも参考になると思います。 HadoopのFileSystem APIの仕様は、開発者以外が目にする機会が少ないものではあるのですが、深く使いこなす上で、一度覗いてみると面白いかもしれません。
  57. 機能追加やバグ修正などはJIRAで管理されています。 Hadoopの場合、4つのサブプロジェクトに分けられているのですが、ABFSに関する内容はHadoop Commonと呼ばれるプロジェクト下にあります。 例えばこのHADOOP-15763というissueは、次のバージョンをターゲットにした内容をリストアップするもので、今後どんな機能追加がありそうかは、ここ見ると参考になると思います。 Data Lake Storage Gen2はサービス自体がリリースされたのも比較的最近なので、使ってみてバグなどに気づいたら、ぜひJIRAでissueを登録していただけるとよいです。
  58. というわけで、HadoopはHDFS以外のデータストア上にあるデータも、透過的に処理できるような枠組みを提供しています。 ただし、データストアごとの性能や特性の違いがあります。 Azureのデータストアサービスは、ファイルシステム的な機能を提供していて、これを活用することで、Hadoopのアプリケーションをそのまま活用しやすい基盤なのかなと思います。 ぜひ使ってみていただいて、気づいたところがあれば、開発コミュニティなどにフィードバックをいただければと思います。