SlideShare a Scribd company logo
1 of 61
© 2019 NTT DATA Corporation
09/25/2019
NTT DATA
Masatake Iwasaki
Hadoop Compatible File Systems
© 2019 NTT DATA Corporation 2
Hadoopは分散ファイルシステム(HDFS)を提供
アプリケーションがHDFS以外にも透過的にアクセスできる
そのためのインターフェースおよびモジュール群:
Hadoop Compatible File Systems
概要
© 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
FileSystem APIをユーザ向けに整理する意図
意図通りに普及/移行していない...
FileContextのドキュメントがない
できることに(ほとんど)差はない
Hadoopのコード自体が両方使っている
FileSystem実装を作るときにケアする必要あり
FileContext API(HADOOP-4952)
FileContext ctx = FileContext.getFileContext(uri);
FSDataInputStream is = ctx.create(path, ...);
ctx.setWorkingDir(path);
FSDataInputStream os = ctx.open(path, ...);
© 2019 NTT DATA Corporation 10
.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 11
FileSystem APIをユーザ向けに整理する意図
意図通りに普及/移行しなかった...
ドキュメントがない
できることが(ほとんど)変わらない
Hadoopのコード自体が両方使っている
FileSystem実装を作るときにケアする必要あり
FileSystem実装をwrapするのが定番
see o.a.h.fs.DelegateToFileSystem
FileContext API (HADOOP-4952)
FileContext ctx = FileContext.getFileContext(uri);
FSDataInputStream is = ctx.create(path, ...);
ctx.setWorkingDir(path);
FSDataInputStream os = ctx.open(path, ...);
© 2019 NTT DATA Corporation 12
FileContext APIのためのもの
FileSystem実装を作るためのベースクラス、ではない
AbstractFileSystem?
<property>
<name>fs.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>
<property>
<name>fs.AbstractFileSystem.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3A</value>
</property>
© 2019 NTT DATA Corporation 13
ファイル操作と抽象化
© 2019 NTT DATA Corporation 14
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 15
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 16
ディレクトリの作成
基本的に親がなければ作成 (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 17
ファイル情報(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 18
ファイルの新規作成&書き込みオープン
得られた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 19
ファイルの読み込みオープン
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 20
入力ファイルを分割してタスクに対応づける
タスクごとにデータを処理する
作業用ディレクトリを作る
タスクの出力ファイルを作る
入力ファイルからレコードを読み出す
データを処理する
出力ファイルにレコードを書き込む
出力ファイルを出力先に移動する
フレームワークが入出力を抽象化
Hadoopジョブによるデータ処理の流れ
© 2019 NTT DATA Corporation 21
データ入力を抽象化するもの
入力を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 22
ファイルからのデータを読み出しを抽象化
レコードを読み出すロジックは派生クラスが提供
TextInputFormat
SequenceFileInputFormat
AvroInputFormat
ParquetInputFormat
ユーザはパラメータを指定するだけ
どのクラスを使うか
処理対象ファイルのpath
...
FileInputFormat
© 2019 NTT DATA Corporation 23
データ出力を抽象化するもの
レコードを書き出す
出力できるかを確認する
出力を確定する
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 24
オブジェクトストレージの活用
© 2019 NTT DATA Corporation 25
マスターノード(NameNode)がボトルネック
1. NameNodeのヒープサイズ(<100GBくらい?)
2. 管理可能なスレーブノード数(<10000くらい?)
3. 処理可能なリクエスト数(<10万tpsくらい?)
ざっくりした目安
100万データブロックあたりヒープ1GB
ヒープサイズはGC的に100GB程度まで
1億ブロックで12.8PB (ブロックサイズ128MBで)
HDFSのスケーラビリティ
© 2019 NTT DATA Corporation 26
複数のマスターがそれぞれ独立の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 27
データをファイルという単位で管理
ファイルはデータ(バイト列)の入れ物
ディレクトリはファイルやディレクトリの入れ物
階層的なディレクトリ構造でファイルを整理
ファイル/ディレクトリはメタデータを持つ
所有者に応じたアクセス制御
...
ファイルシステム?
© 2019 NTT DATA Corporation 28
データをオブジェクトという単位で管理
オブジェクトはデータ(バイト列)の入れ物
バケットはオブジェクトの入れ物
フラットなキー空間でオブジェクトを管理
オブジェクトはメタデータを持つ
...
スケールアウトしやすい
REST APIによるアクセス(がメイン)
クラウドのマネージドサービスが利用可能
オブジェクトストレージ
© 2019 NTT DATA Corporation 29
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 30
NativeAzureFileSystem
wasb://mycontainer@myaccount.blob.core.windows.net/path
Azureのオブジェクトストレージ
後継的なサービス(後述)が存在
Azure Blob Storage
export HADOOP_OPTIONAL_TOOLS=hadoop-azure
classpathを通すのに設定が必要:
<property>
<name>fs.defaultFS</name>
<value>wasb://mycluster@myaccount.blob.core.windows.net</value>
<final>true</final>
</property>
HDInsightでdefualtFSとして利用される:
© 2019 NTT DATA Corporation 31
AdlFileSystem
adl://mycontainer.azuredatalakestore.net/path
Azureのファイルシステム的ストレージサービス
後継的なサービス(後述)が存在
WebHDFS互換なREST APIを提供
Azure Data Lake Storage (Gen1)
export HADOOP_OPTIONAL_TOOLS=hadoop-azure-datalake
classpathを通すのに設定が必要:
© 2019 NTT DATA Corporation 32
AzureBlobFileSystem
abfs://mycontainer@myaccount.dfs.core.windows.net/path
Azureのストレージサービス
階層的名前空間(optional)を提供
Azure Data Lake Storage Gen2
export HADOOP_OPTIONAL_TOOLS=hadoop-azure
classpathを通すのに設定が必要:
<property>
<name>fs.defaultFS</name>
<value>abfs://mycluster@myaccount.dfs.core.windows.net</value>
<final>true</final>
</property>
HDInsightでdefualtFSとして利用される:
© 2019 NTT DATA Corporation 33
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 34
OzoneにアクセスするためのFileSystem実装
o3fs://bucket.volume.omhost:9862/path
OzoneClient(RPC)を利用してOzoneにアクセス
Ozone
© 2019 NTT DATA Corporation 35
Ozone
© 2019 NTT DATA Corporation 36
新作オブジェクトストレージ
Hadoopのサブモジュール
設定、RPC、認証、暗号化などの共通パーツを利用
depending on hadoop-common
リリースはHadoop本体とは独立
ソースツリーも独立(になる予定)
S3互換の機能も提供
REST APIと認証(Signature Version 4)
Ozoneの概要
© 2019 NTT DATA Corporation 37
Hadoop Commonのモジュール利用している
HDFSのモジュールを(ほとんど)利用していない
大部分は新規コード
OzoneとHDFSとの関係
$ ozone --daemon start datanode
<property>
<name>dfs.datanode.plugins</name>
<value>org.apache.hadoop.ozone.HddsDatanodeService</value>
</property>
DataNode内で追加のモジュールとしても起動可能
Ozone専用のプロセスを起動する場合:
© 2019 NTT DATA Corporation 38
hadoop-hddsとhadoop-ozoneの2モジュールに分かれている
HDDS: 分散KVS (using RocksDB and Ratis)
Ozone: 名前空間管理 (using RocksDB and Ratis)
HDDS? Ozone?
https://github.com/apache/hadoop/blob/trunk/hadoop-hdds/docs/static/OzoneOverview.svg
© 2019 NTT DATA Corporation 39
FSNameSystem:
ファイルシステムメタデータ
ファイルとブロックの対応を管理
全体をメモリ上に置く必要あり
BlockManager:
ブロックとDataNodeとの対応を管理
FSNameSystemと密結合
分離したいができていない
Ozoneは最初から分かれている
NameNodeのFSNameSystemとBlockManager
© 2019 NTT DATA Corporation 40
気をつけるポイント
© 2019 NTT DATA Corporation 41
FileSystem APIはHDFSの機能を抽象化したもの
全機能を備えているのはHDFS(DistributedFileSystem)
HDFSにない機能は定義されていない
例えばファイルのランダムupdate
オブジェクトストレージはファイルシステムではない
APIをwrapしてそれっぽく見せかける
あらまし
© 2019 NTT DATA Corporation 42
オブジェクトストレージには本来存在しないもの
s3a, gs, o3fs:
末尾が/の空オブジェクトで模擬
/dir1/
/dir1/file1.txt
/dir1/file2.txt
ディレクトリ削除: prefixが同じオブジェクトを全削除
abfs:
hierarchical namespace機能あり(optional)
有効化するとrenameとdeleteがO(1)
https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-namespace
ディレクトリ
© 2019 NTT DATA Corporation 43
キーの更新ができないデータストレージでは高価
新しい名前のオブジェクトにデータコピー
古い名前のオブジェクトを削除
ディレクトリのrenameが高価
prefixが同じオブジェクトをすべてrename
s3a: 実データのコピー&削除
abfs: メタデータのみの操作、atomic
o3fs, gs: メタデータのみの操作、非atomic
rename
© 2019 NTT DATA Corporation 44
s3a:
作成直後にリストに出ない可能性あり
削除直後にアクセスできる可能性あり
https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel
abfs:
hierarchical namespace enabledならconsistent
gs: consistent?
https://cloud.google.com/storage/docsv/consistency
o3fs: consistent
Eventual Consistency
© 2019 NTT DATA Corporation 45
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 46
タスク/ジョブ完了時に出力を確定
ユーザ/後続処理にすべての出力が見える
タスク/ジョブが失敗(中止)したら後片付け
ユーザ/後続処理にゴミが見えない
OutputCommitter
public abstract class OutputCommitter {
public abstract void setupJob(JobContext jobContext)
public void cleanupJob(JobContext jobContext)
public void commitJob(JobContext jobContext)
public void abortJob(JobContext jobContext, JobStatus.State state)
public abstract void setupTask(TaskAttemptContext taskContext)
public abstract boolean needsTaskCommit(TaskAttemptContext taskContext)
public abstract void commitTask(TaskAttemptContext taskContext)
public abstract void abortTask(TaskAttemptContext taskContext)
public boolean isRecoverySupported()
public boolean isCommitJobRepeatable(JobContext jobContext)
public boolean isRecoverySupported(JobContext jobContext)
public void recoverTask(TaskAttemptContext taskContext)
}
© 2019 NTT DATA Corporation 47
デフォルトのOutputCommitter
タスク成功時: 出力ファイルを出力ディレクトリに移動
ジョブ成功時: _SUCCESSという空ファイルを作成
失敗時: 出力ディレクトリをdelete
ファイルシステムを暗黙に想定
renameとdeleteが軽量でatomicでconsistent
see also ParquetOutputCommitter
https://github.com/apache/parquet-mr/blob/master/parquet-
hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputCommitter.java
FileOutputCommitter
© 2019 NTT DATA Corporation 48
https://hadoop.apache.org/docs/r3.2.0/hadoop-aws/tools/hadoop-aws/committers.html
magic committer:
マルチパートアップロードを利用
各出力ファイルをジョブ完了時にまとめてcomplete
要S3Guard
S3A committers (HADOOP-13786)
<property>
<name>mapreduce.outputcommitter.factory.scheme.s3a</name>
<value>org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory</value>
</property>
<property>
<name>fs.s3a.committer.name</name>
<value>magic</value>
</property>
<property>
<name>fs.s3a.committer.magic.enabled</name>
<value>true</value>
</property>
© 2019 NTT DATA Corporation 49
未サポートのFSはsetPermissionがnoop
FileStatus#getPermissionはデフォルト値を返す
ファイルなら666
ディレクトリなら777
例外(UnsupportedOperationException)は出ない
setOwner/getOwnerも同様
パーミッション
© 2019 NTT DATA Corporation 50
一度書き込みcloseしたファイルへの追記
s3a, o3fs: 不可
abfs, gs: 可
append
scala> val p = new Path("s3a://mybucket/foo.txt")
scala> val fs = p.getFileSystem(conf)
scala> fs.append(p)
java.lang.UnsupportedOperationException: Append is not supported by S3AFileSystem
at org.apache.hadoop.fs.s3a.S3AFileSystem.append(S3AFileSystem.java:1139)
at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:1397)
... 49 elided
© 2019 NTT DATA Corporation 51
書き込み中のファイルの読み込み
hdfs, abfs: 可
open以後にwriteされたデータを読むには再open
gs: 可(オプショナル)
hsync/syncを明示的に呼んだら見える
fs.gs.outputstream.type=SYNCABLE_COMPOSITE
s3a, o3fs: 不可
Tailing
© 2019 NTT DATA Corporation 52
FSDataOutputStreamの機能
hflushとhsyncが使えるか
(fsyncに相当するAPI)
未サポートだとflushが呼ばれる
Syncable
@Override // Syncable
public void hflush() throws IOException {
if (wrappedStream instanceof Syncable) {
((Syncable)wrappedStream).hflush();
} else {
wrappedStream.flush();
}
}
© 2019 NTT DATA Corporation 53
FSDataInputStream#read(ByteByffer buf)の有無
see also ByteBufferPositionedReadable
ByteBufferReadable
scala> val p = new Path("s3a://mybucket/foo.txt")
scala> val fs = p.getFileSystem(new Configuration())
scala> val is = fs.open(p)
scala> val buf = ByteBuffer.allocate(3).array
scala> is.read(buf, 0, buf.length)
res13: Int = 3
scala> new String(buf, Charset.forName("UTF-8"))
res14: String = foo
scala> is.seek(0)
scala> val bb = ByteBuffer.allocateDirect(3)
scala> is.read(bb)
java.lang.UnsupportedOperationException: Byte-buffer read unsupported by input stream
at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:152)
... 49 elided
© 2019 NTT DATA Corporation 54
hasCapabilityメソッドで確認できる
まだ未対応の実装も多いはず..
StreamCapabilities
public boolean hasCapability(String capability) {
switch (StringUtils.toLowerCase(capability)) {
case StreamCapabilities.READAHEAD:
case StreamCapabilities.DROPBEHIND:
case StreamCapabilities.UNBUFFER:
case StreamCapabilities.READBYTEBUFFER:
case StreamCapabilities.PREADBYTEBUFFER:
return true;
default:
return false;
}
}
© 2019 NTT DATA Corporation 55
References
© 2019 NTT DATA Corporation 56
APIの仕様を定めるドキュメントが一応ある
https://hadoop.apache.org/docs/r3.2.0/hadoop-project-
dist/hadoop-common/filesystem/index.html
FileSystem documentation
© 2019 NTT DATA Corporation 57
各実装のAPIのセマンティクスのテスト
FileSystem Contract Test
@Test
public void testCreatedFileIsImmediatelyVisible() throws Throwable {
describe("verify that a newly created file exists as soon as open returns");
Path path = path("testCreatedFileIsImmediatelyVisible");
try(FSDataOutputStream out = getFileSystem().create(path,
false,
4096,
(short) 1,
1024)) {
if (!getFileSystem().exists(path)) {
if (isSupported(CREATE_VISIBILITY_DELAYED)) {
// For some file systems, downgrade to a skip so that the failure is
// visible in test results.
skip("This Filesystem delays visibility of newly created files");
}
assertPathExists("expected path to be visible before anything written",
path);
© 2019 NTT DATA Corporation 58
テスト対象のFSの仕様を記述したcontract testの設定ファイル
src/test/resources/contract/下にある
各実装が提供する機能性の参考になる
FileSystem contract XML
<property>
<name>fs.contract.create-visibility-delayed</name>
<value>false</value>
</property>
<property>
<name>fs.contract.supports-atomic-rename</name>
<value>false</value>
</property>
<property>
<name>fs.contract.supports-block-locality</name>
<value>false</value>
</property>
...
© 2019 NTT DATA Corporation 59
まとめ
© 2019 NTT DATA Corporation 60
FileSystem APIはデータストアへの透過的なアクセスを提供
データストアごとのセマンティクスや性能の違いに注意
実装ごとに多数のチューニングオプションがある
自分で管理できるオブジェクトストレージ(Ozone)もある
自分で実装を作ることもできる
まとめ
© 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

What's hot

What's hot (20)

わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-
 
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
 
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...
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Best Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSBest Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWS
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 

Similar to Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
bigt23
 
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
 
Hdfsソースコードリーディング第2回
Hdfsソースコードリーディング第2回Hdfsソースコードリーディング第2回
Hdfsソースコードリーディング第2回
shunsuke Mikami
 

Similar to Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25) (20)

Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
 
HDFS basics from API perspective
HDFS basics from API perspectiveHDFS basics from API perspective
HDFS basics from API perspective
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
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...
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
 
大規模データ処理の定番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ビッグデータ基盤の歴史を振り返る #cwt2015
Hadoopビッグデータ基盤の歴史を振り返る #cwt2015Hadoopビッグデータ基盤の歴史を振り返る #cwt2015
Hadoopビッグデータ基盤の歴史を振り返る #cwt2015
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
AI・HPC・ビッグデータで利用される分散ファイルシステムを知るAI・HPC・ビッグデータで利用される分散ファイルシステムを知る
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
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 講演資料)
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみた
 
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 (アファーム・ビジネスパートナーズ株)
 
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
 
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
 
Hdfsソースコードリーディング第2回
Hdfsソースコードリーディング第2回Hdfsソースコードリーディング第2回
Hdfsソースコードリーディング第2回
 

More from NTT DATA Technology & Innovation

More from NTT DATA Technology & Innovation (20)

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 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)

  • 1. © 2019 NTT DATA Corporation 09/25/2019 NTT DATA Masatake Iwasaki Hadoop Compatible File Systems
  • 2. © 2019 NTT DATA Corporation 2 Hadoopは分散ファイルシステム(HDFS)を提供 アプリケーションがHDFS以外にも透過的にアクセスできる そのためのインターフェースおよびモジュール群: Hadoop Compatible File Systems 概要
  • 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 FileSystem APIをユーザ向けに整理する意図 意図通りに普及/移行していない... FileContextのドキュメントがない できることに(ほとんど)差はない Hadoopのコード自体が両方使っている FileSystem実装を作るときにケアする必要あり FileContext API(HADOOP-4952) FileContext ctx = FileContext.getFileContext(uri); FSDataInputStream is = ctx.create(path, ...); ctx.setWorkingDir(path); FSDataInputStream os = ctx.open(path, ...);
  • 10. © 2019 NTT DATA Corporation 10 .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を使う # 使ってなくてもロードされるのが難点
  • 11. © 2019 NTT DATA Corporation 11 FileSystem APIをユーザ向けに整理する意図 意図通りに普及/移行しなかった... ドキュメントがない できることが(ほとんど)変わらない Hadoopのコード自体が両方使っている FileSystem実装を作るときにケアする必要あり FileSystem実装をwrapするのが定番 see o.a.h.fs.DelegateToFileSystem FileContext API (HADOOP-4952) FileContext ctx = FileContext.getFileContext(uri); FSDataInputStream is = ctx.create(path, ...); ctx.setWorkingDir(path); FSDataInputStream os = ctx.open(path, ...);
  • 12. © 2019 NTT DATA Corporation 12 FileContext APIのためのもの FileSystem実装を作るためのベースクラス、ではない AbstractFileSystem? <property> <name>fs.s3a.impl</name> <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> </property> <property> <name>fs.AbstractFileSystem.s3a.impl</name> <value>org.apache.hadoop.fs.s3a.S3A</value> </property>
  • 13. © 2019 NTT DATA Corporation 13 ファイル操作と抽象化
  • 14. © 2019 NTT DATA Corporation 14 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
  • 15. © 2019 NTT DATA Corporation 15 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)
  • 16. © 2019 NTT DATA Corporation 16 ディレクトリの作成 基本的に親がなければ作成 (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
  • 17. © 2019 NTT DATA Corporation 17 ファイル情報(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)
  • 18. © 2019 NTT DATA Corporation 18 ファイルの新規作成&書き込みオープン 得られた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()
  • 19. © 2019 NTT DATA Corporation 19 ファイルの読み込みオープン 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
  • 20. © 2019 NTT DATA Corporation 20 入力ファイルを分割してタスクに対応づける タスクごとにデータを処理する 作業用ディレクトリを作る タスクの出力ファイルを作る 入力ファイルからレコードを読み出す データを処理する 出力ファイルにレコードを書き込む 出力ファイルを出力先に移動する フレームワークが入出力を抽象化 Hadoopジョブによるデータ処理の流れ
  • 21. © 2019 NTT DATA Corporation 21 データ入力を抽象化するもの 入力を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 ... }
  • 22. © 2019 NTT DATA Corporation 22 ファイルからのデータを読み出しを抽象化 レコードを読み出すロジックは派生クラスが提供 TextInputFormat SequenceFileInputFormat AvroInputFormat ParquetInputFormat ユーザはパラメータを指定するだけ どのクラスを使うか 処理対象ファイルのpath ... FileInputFormat
  • 23. © 2019 NTT DATA Corporation 23 データ出力を抽象化するもの レコードを書き出す 出力できるかを確認する 出力を確定する 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 ... }
  • 24. © 2019 NTT DATA Corporation 24 オブジェクトストレージの活用
  • 25. © 2019 NTT DATA Corporation 25 マスターノード(NameNode)がボトルネック 1. NameNodeのヒープサイズ(<100GBくらい?) 2. 管理可能なスレーブノード数(<10000くらい?) 3. 処理可能なリクエスト数(<10万tpsくらい?) ざっくりした目安 100万データブロックあたりヒープ1GB ヒープサイズはGC的に100GB程度まで 1億ブロックで12.8PB (ブロックサイズ128MBで) HDFSのスケーラビリティ
  • 26. © 2019 NTT DATA Corporation 26 複数のマスターがそれぞれ独立の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
  • 27. © 2019 NTT DATA Corporation 27 データをファイルという単位で管理 ファイルはデータ(バイト列)の入れ物 ディレクトリはファイルやディレクトリの入れ物 階層的なディレクトリ構造でファイルを整理 ファイル/ディレクトリはメタデータを持つ 所有者に応じたアクセス制御 ... ファイルシステム?
  • 28. © 2019 NTT DATA Corporation 28 データをオブジェクトという単位で管理 オブジェクトはデータ(バイト列)の入れ物 バケットはオブジェクトの入れ物 フラットなキー空間でオブジェクトを管理 オブジェクトはメタデータを持つ ... スケールアウトしやすい REST APIによるアクセス(がメイン) クラウドのマネージドサービスが利用可能 オブジェクトストレージ
  • 29. © 2019 NTT DATA Corporation 29 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のコミュニティ版的な位置づけ:
  • 30. © 2019 NTT DATA Corporation 30 NativeAzureFileSystem wasb://mycontainer@myaccount.blob.core.windows.net/path Azureのオブジェクトストレージ 後継的なサービス(後述)が存在 Azure Blob Storage export HADOOP_OPTIONAL_TOOLS=hadoop-azure classpathを通すのに設定が必要: <property> <name>fs.defaultFS</name> <value>wasb://mycluster@myaccount.blob.core.windows.net</value> <final>true</final> </property> HDInsightでdefualtFSとして利用される:
  • 31. © 2019 NTT DATA Corporation 31 AdlFileSystem adl://mycontainer.azuredatalakestore.net/path Azureのファイルシステム的ストレージサービス 後継的なサービス(後述)が存在 WebHDFS互換なREST APIを提供 Azure Data Lake Storage (Gen1) export HADOOP_OPTIONAL_TOOLS=hadoop-azure-datalake classpathを通すのに設定が必要:
  • 32. © 2019 NTT DATA Corporation 32 AzureBlobFileSystem abfs://mycontainer@myaccount.dfs.core.windows.net/path Azureのストレージサービス 階層的名前空間(optional)を提供 Azure Data Lake Storage Gen2 export HADOOP_OPTIONAL_TOOLS=hadoop-azure classpathを通すのに設定が必要: <property> <name>fs.defaultFS</name> <value>abfs://mycluster@myaccount.dfs.core.windows.net</value> <final>true</final> </property> HDInsightでdefualtFSとして利用される:
  • 33. © 2019 NTT DATA Corporation 33 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
  • 34. © 2019 NTT DATA Corporation 34 OzoneにアクセスするためのFileSystem実装 o3fs://bucket.volume.omhost:9862/path OzoneClient(RPC)を利用してOzoneにアクセス Ozone
  • 35. © 2019 NTT DATA Corporation 35 Ozone
  • 36. © 2019 NTT DATA Corporation 36 新作オブジェクトストレージ Hadoopのサブモジュール 設定、RPC、認証、暗号化などの共通パーツを利用 depending on hadoop-common リリースはHadoop本体とは独立 ソースツリーも独立(になる予定) S3互換の機能も提供 REST APIと認証(Signature Version 4) Ozoneの概要
  • 37. © 2019 NTT DATA Corporation 37 Hadoop Commonのモジュール利用している HDFSのモジュールを(ほとんど)利用していない 大部分は新規コード OzoneとHDFSとの関係 $ ozone --daemon start datanode <property> <name>dfs.datanode.plugins</name> <value>org.apache.hadoop.ozone.HddsDatanodeService</value> </property> DataNode内で追加のモジュールとしても起動可能 Ozone専用のプロセスを起動する場合:
  • 38. © 2019 NTT DATA Corporation 38 hadoop-hddsとhadoop-ozoneの2モジュールに分かれている HDDS: 分散KVS (using RocksDB and Ratis) Ozone: 名前空間管理 (using RocksDB and Ratis) HDDS? Ozone? https://github.com/apache/hadoop/blob/trunk/hadoop-hdds/docs/static/OzoneOverview.svg
  • 39. © 2019 NTT DATA Corporation 39 FSNameSystem: ファイルシステムメタデータ ファイルとブロックの対応を管理 全体をメモリ上に置く必要あり BlockManager: ブロックとDataNodeとの対応を管理 FSNameSystemと密結合 分離したいができていない Ozoneは最初から分かれている NameNodeのFSNameSystemとBlockManager
  • 40. © 2019 NTT DATA Corporation 40 気をつけるポイント
  • 41. © 2019 NTT DATA Corporation 41 FileSystem APIはHDFSの機能を抽象化したもの 全機能を備えているのはHDFS(DistributedFileSystem) HDFSにない機能は定義されていない 例えばファイルのランダムupdate オブジェクトストレージはファイルシステムではない APIをwrapしてそれっぽく見せかける あらまし
  • 42. © 2019 NTT DATA Corporation 42 オブジェクトストレージには本来存在しないもの s3a, gs, o3fs: 末尾が/の空オブジェクトで模擬 /dir1/ /dir1/file1.txt /dir1/file2.txt ディレクトリ削除: prefixが同じオブジェクトを全削除 abfs: hierarchical namespace機能あり(optional) 有効化するとrenameとdeleteがO(1) https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-namespace ディレクトリ
  • 43. © 2019 NTT DATA Corporation 43 キーの更新ができないデータストレージでは高価 新しい名前のオブジェクトにデータコピー 古い名前のオブジェクトを削除 ディレクトリのrenameが高価 prefixが同じオブジェクトをすべてrename s3a: 実データのコピー&削除 abfs: メタデータのみの操作、atomic o3fs, gs: メタデータのみの操作、非atomic rename
  • 44. © 2019 NTT DATA Corporation 44 s3a: 作成直後にリストに出ない可能性あり 削除直後にアクセスできる可能性あり https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel abfs: hierarchical namespace enabledならconsistent gs: consistent? https://cloud.google.com/storage/docsv/consistency o3fs: consistent Eventual Consistency
  • 45. © 2019 NTT DATA Corporation 45 S3AFileSystemの一貫性を改善するアドオン 補助的なメタデータ置き場としてDynamoDBを利用 create: S3にオブジェクト作成後DynamoDBに記録 listStatus: S3とDynamoDBの両方を見る S3Guard (HADOOP-13345) https://issues.apache.org/jira/secure/attachment/12821464/S3GuardImprovedConsistencyforS3AV2.pdf
  • 46. © 2019 NTT DATA Corporation 46 タスク/ジョブ完了時に出力を確定 ユーザ/後続処理にすべての出力が見える タスク/ジョブが失敗(中止)したら後片付け ユーザ/後続処理にゴミが見えない OutputCommitter public abstract class OutputCommitter { public abstract void setupJob(JobContext jobContext) public void cleanupJob(JobContext jobContext) public void commitJob(JobContext jobContext) public void abortJob(JobContext jobContext, JobStatus.State state) public abstract void setupTask(TaskAttemptContext taskContext) public abstract boolean needsTaskCommit(TaskAttemptContext taskContext) public abstract void commitTask(TaskAttemptContext taskContext) public abstract void abortTask(TaskAttemptContext taskContext) public boolean isRecoverySupported() public boolean isCommitJobRepeatable(JobContext jobContext) public boolean isRecoverySupported(JobContext jobContext) public void recoverTask(TaskAttemptContext taskContext) }
  • 47. © 2019 NTT DATA Corporation 47 デフォルトのOutputCommitter タスク成功時: 出力ファイルを出力ディレクトリに移動 ジョブ成功時: _SUCCESSという空ファイルを作成 失敗時: 出力ディレクトリをdelete ファイルシステムを暗黙に想定 renameとdeleteが軽量でatomicでconsistent see also ParquetOutputCommitter https://github.com/apache/parquet-mr/blob/master/parquet- hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputCommitter.java FileOutputCommitter
  • 48. © 2019 NTT DATA Corporation 48 https://hadoop.apache.org/docs/r3.2.0/hadoop-aws/tools/hadoop-aws/committers.html magic committer: マルチパートアップロードを利用 各出力ファイルをジョブ完了時にまとめてcomplete 要S3Guard S3A committers (HADOOP-13786) <property> <name>mapreduce.outputcommitter.factory.scheme.s3a</name> <value>org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory</value> </property> <property> <name>fs.s3a.committer.name</name> <value>magic</value> </property> <property> <name>fs.s3a.committer.magic.enabled</name> <value>true</value> </property>
  • 49. © 2019 NTT DATA Corporation 49 未サポートのFSはsetPermissionがnoop FileStatus#getPermissionはデフォルト値を返す ファイルなら666 ディレクトリなら777 例外(UnsupportedOperationException)は出ない setOwner/getOwnerも同様 パーミッション
  • 50. © 2019 NTT DATA Corporation 50 一度書き込みcloseしたファイルへの追記 s3a, o3fs: 不可 abfs, gs: 可 append scala> val p = new Path("s3a://mybucket/foo.txt") scala> val fs = p.getFileSystem(conf) scala> fs.append(p) java.lang.UnsupportedOperationException: Append is not supported by S3AFileSystem at org.apache.hadoop.fs.s3a.S3AFileSystem.append(S3AFileSystem.java:1139) at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:1397) ... 49 elided
  • 51. © 2019 NTT DATA Corporation 51 書き込み中のファイルの読み込み hdfs, abfs: 可 open以後にwriteされたデータを読むには再open gs: 可(オプショナル) hsync/syncを明示的に呼んだら見える fs.gs.outputstream.type=SYNCABLE_COMPOSITE s3a, o3fs: 不可 Tailing
  • 52. © 2019 NTT DATA Corporation 52 FSDataOutputStreamの機能 hflushとhsyncが使えるか (fsyncに相当するAPI) 未サポートだとflushが呼ばれる Syncable @Override // Syncable public void hflush() throws IOException { if (wrappedStream instanceof Syncable) { ((Syncable)wrappedStream).hflush(); } else { wrappedStream.flush(); } }
  • 53. © 2019 NTT DATA Corporation 53 FSDataInputStream#read(ByteByffer buf)の有無 see also ByteBufferPositionedReadable ByteBufferReadable scala> val p = new Path("s3a://mybucket/foo.txt") scala> val fs = p.getFileSystem(new Configuration()) scala> val is = fs.open(p) scala> val buf = ByteBuffer.allocate(3).array scala> is.read(buf, 0, buf.length) res13: Int = 3 scala> new String(buf, Charset.forName("UTF-8")) res14: String = foo scala> is.seek(0) scala> val bb = ByteBuffer.allocateDirect(3) scala> is.read(bb) java.lang.UnsupportedOperationException: Byte-buffer read unsupported by input stream at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:152) ... 49 elided
  • 54. © 2019 NTT DATA Corporation 54 hasCapabilityメソッドで確認できる まだ未対応の実装も多いはず.. StreamCapabilities public boolean hasCapability(String capability) { switch (StringUtils.toLowerCase(capability)) { case StreamCapabilities.READAHEAD: case StreamCapabilities.DROPBEHIND: case StreamCapabilities.UNBUFFER: case StreamCapabilities.READBYTEBUFFER: case StreamCapabilities.PREADBYTEBUFFER: return true; default: return false; } }
  • 55. © 2019 NTT DATA Corporation 55 References
  • 56. © 2019 NTT DATA Corporation 56 APIの仕様を定めるドキュメントが一応ある https://hadoop.apache.org/docs/r3.2.0/hadoop-project- dist/hadoop-common/filesystem/index.html FileSystem documentation
  • 57. © 2019 NTT DATA Corporation 57 各実装のAPIのセマンティクスのテスト FileSystem Contract Test @Test public void testCreatedFileIsImmediatelyVisible() throws Throwable { describe("verify that a newly created file exists as soon as open returns"); Path path = path("testCreatedFileIsImmediatelyVisible"); try(FSDataOutputStream out = getFileSystem().create(path, false, 4096, (short) 1, 1024)) { if (!getFileSystem().exists(path)) { if (isSupported(CREATE_VISIBILITY_DELAYED)) { // For some file systems, downgrade to a skip so that the failure is // visible in test results. skip("This Filesystem delays visibility of newly created files"); } assertPathExists("expected path to be visible before anything written", path);
  • 58. © 2019 NTT DATA Corporation 58 テスト対象のFSの仕様を記述したcontract testの設定ファイル src/test/resources/contract/下にある 各実装が提供する機能性の参考になる FileSystem contract XML <property> <name>fs.contract.create-visibility-delayed</name> <value>false</value> </property> <property> <name>fs.contract.supports-atomic-rename</name> <value>false</value> </property> <property> <name>fs.contract.supports-block-locality</name> <value>false</value> </property> ...
  • 59. © 2019 NTT DATA Corporation 59 まとめ
  • 60. © 2019 NTT DATA Corporation 60 FileSystem APIはデータストアへの透過的なアクセスを提供 データストアごとのセマンティクスや性能の違いに注意 実装ごとに多数のチューニングオプションがある 自分で管理できるオブジェクトストレージ(Ozone)もある 自分で実装を作ることもできる まとめ
  • 61. © 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。