SlideShare a Scribd company logo
1 of 42
© 2020 NTT DATA Corporation
12/19/2020
Masatake Iwasaki
NTT DATA
Apache Hadoopに見るJavaミドルウェアのcompatibility
© 2020 NTT DATA Corporation 2
Hadoopの開発において得られた「互換性」に関する知識や気づきを話します
Hadoopについての予備知識はそれほど必要ありません
Javaの話題が多いです
Hadoop 3.xはJava 8ベースです
ときどき出てくるHADOOP-12345みたいなのはJIRAのissue keyです
はじめに
© 2020 NTT DATA Corporation 3
Hadoopのcompatibility
© 2020 NTT DATA Corporation 4
大規模データ処理基盤
以下をセットで提供
分散ファイルシステム(HDFS)
計算リソース管理機構(YARN)
分散処理フレームワーク(MapReduce)
汎用的な(Linux)サーバ(〜10000台)でクラスタを構成する
大量のデータを格納し、並列分散処理する
2006年に登場
Googleが論文の形で紹介した技術を参考にした実装
Hadoopとは何か?
© 2020 NTT DATA Corporation 5
Javaで実装
Java部分は多くのプラットフォームで動く
性能向上等の目的で(Cで書かれた)nativeコードをJNI経由で利用
nativeコードがなければpure Java実装にフォールバック
Linuxのシステムコール前提な部分が多い
特にHDFSに関しては実用上Linuxを使うべき
CLIはbashスクリプト
Windows対応の名残はあるが今はあまりメンテされてない
Microsoft AzureのHDInsightもUbuntuを利用
# Amazon EMRはAmazon Linux
プラットフォーム互換性
© 2020 NTT DATA Corporation 6
ユーザとHadoopとのインタラクション
分散ファイルシステム(HDFS)上のデータの読み書き
分散処理フレームワーク(YARN)へのジョブ投入
ジョブおよびクラスタそれ自体の運用監視
(マイナー)バージョンアップでユーザ側に影響を与えないように互換性を維持する
publicなAPIのシグネチャ
CLIのオプション
(メタ)データフォーマット
メトリクス
監査ログのフォーマット
...
Hadoopとのインタラクション
© 2020 NTT DATA Corporation 7
実用上、多種多様な周辺ミドルウェアと組み合わせて利用する
Spark: モダンな分散処理基盤/API (deprecating MapReduce)
Hive: SQL(ライクな)言語処理系
HBase: 分散KVS (like Bigtable)
Sqoop: データローダ
Oozie: ワークフロースケジューラ
Ranger: アクセス制御
...
ユーザアプリケーションと周辺ミドルウェアの両方がHadoopのAPIを使う
Hadoop側の非互換な変更の影響を受ける範囲が広い
Hadoopエコシステム
© 2020 NTT DATA Corporation 8
オンラインのまま(マイナー)バージョンアップできるように担保する
1ノードずつ 停止 -> アップグレード -> 起動を繰り返していく
古いバージョンと新しいバージョンが混在するタイミングがある
Hadoopが内部的に利用するAPIの互換性も重要
ローリングアップグレード
© 2020 NTT DATA Corporation 9
いろいろな側面から互換性について定めている
https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-common/Compatibility.html
Java API, Native Dependencies, Wire Protocols, Transports, REST APIs, Log Output,
Audit Log Output, Metrics/JMX, File formats & Metadata...
基本路線は、メジャーバージョンアップでのみ互換性を壊す変更を行う
メジャーリリースなら変更できるが、ユーザはなかなか移行してくれない
Hadoop 3.0.0は2017年12月にリリースされたが、移行はなかなか進まなかった
今でもHadoop 2.xは使われていて、メンテされている
Apache Hadoop Compatibility
© 2020 NTT DATA Corporation 10
Java API
© 2020 NTT DATA Corporation 11
Javaではpublic, protected, privateのような修飾子で可視性を制御
すべてのpublicなクラス/メソッドがエンドユーザ向けではない
モジュール間で参照できるためにpublicなものも多い
それを示すためのInterfaceAudienceアノテーションが付いている
@InterfaceAudience.PublicなものだけJavadocが出力される
@InterfaceAudience.Privateだとマイナーバージョンアップでも変更されうる
アノテーションがついてるから外から呼べなくなるわけではない
歴史的経緯で周辺ミドルウェアから呼ばれていることも多い
APIを足すのは容易だが、変更/削除はそうではない。
publicだけどprivate
@InterfaceAudience.LimitedPrivate({ "MapReduce", "HBase" })
@InterfaceStability.Unstable
public class DistributedFileSystem extends FileSystem
implements KeyProviderTokenIssuer, BatchListingOperations {
...
DistributedFileSystem.java:
© 2020 NTT DATA Corporation 12
Java 9に入ったProject Jigsawの成果
どのAPIを外部に晒すかを制御しやすくなる
HadoopでのModule対応はまだ始まっていない
パッケージ構造はそれなりに整理する必要がある
Java 9(以降)でビルドできるようにするのが実は大変
依存ライブラリをJava 9以降に対応したバージョンにupgrade
広範囲で使われている場合の修正が困難: e.g. Jersey (HADOOP-15984)
Java 8サポートのdropは次のメジャーバージョンアップ (Hadoop 4.0.0)?
Java Platform Module System (JPMS)
© 2020 NTT DATA Corporation 13
Hadoop RPC
© 2020 NTT DATA Corporation 14
Hadoopは並列分散処理基盤なので、ノード間通信が必要
クライアント <---> サーバ
サーバ <---> サーバ
そのためのRPCフレームワークは以下のパーツを利用した独自実装
java.lang.reflect.Proxy
Protocol Buffers
Hadoop RPC
© 2020 NTT DATA Corporation 15
データのシリアライゼーションのためのライブラリ
類似製品としてThrift, Avro, MessagePackなどが挙げられる
メッセージとシグネチャを定義した.protoファイルから(各種言語の)コードを自動生成
生成された(Javaの)コードをHadoop RPCのコードが使う
Protocol Buffers
message GetBlockLocationsRequestProto {
required string src = 1; // file name
required uint64 offset = 2; // range start offset
required uint64 length = 3; // range length
}
message GetBlockLocationsResponseProto {
optional LocatedBlocksProto locations = 1;
}
...
service ClientNamenodeProtocol {
rpc getBlockLocations(GetBlockLocationsRequestProto)
returns(GetBlockLocationsResponseProto);
...
ClientNamenodeProtocol.protoの抜粋:
© 2020 NTT DATA Corporation 16
あってもなくてもよいフィールド
backward compatibleに追加できる
旧バージョンのmessageはoptionalなフィールドを持たない場合と解釈できる
フィールドを足すのは容易だが、変更/削除はそうではない。
Protocol Buffersのoptional field
message RpcRequestHeaderProto { // the header for the RpcRequest
...
optional RpcKindProto rpcKind = 1;
optional OperationProto rpcOp = 2;
required sint32 callId = 3; // a sequence number that is sent back in response
required bytes clientId = 4; // Globally unique client ID
// clientId + callId uniquely identifies a request
// retry count, 1 means this is the first retry
optional sint32 retryCount = 5 [default = -1];
optional RPCTraceInfoProto traceInfo = 6; // tracing info
optional RPCCallerContextProto callerContext = 7; // call context
optional int64 stateId = 8; // The last seen Global State ID
}
RpcHeader.protoの抜粋:
© 2020 NTT DATA Corporation 17
複数言語に対応している
C++, Java, Python, Go,
Dart, Ruby, C#,
Hadoopビルトインのパーツでは一部しか活用していない
Hadoop本体はJava
HDFSのC++クライアント(libhdfspp)はProtocol Buffersで生成したC++のコードを利用
# HDFSのCクライアント(libhdfs)はJNIでJavaのコードを呼び出す
Protocol Buffersによる多言語対応
© 2020 NTT DATA Corporation 18
Protocol Buffers自体のバージョンアップは大変
2011年にProtobol Buffersを導入 (HADOOP-7773)
2013年ごろからずっとProtocol Buffers 2.5.0
2019年にProtocol Buffers 3.7.1にupgrade (HADOOP-13363)
RpcEngineのコードは古いものものも残されている
WritableRpcEngine: Hadoop独自のシリアライゼーション(Writable)
ProtobufRpcEngine: protobuf-2.5.0
ProtobufRpcEngine2: hadoop-thirdparty(後述)のshaded protobuf-3.7.1
切り替えて使いわけるものではない
新しい仕組みに根本的な問題があった時に切り戻すため
この仕組みを使っている関連プロダクト(Hive, Tez)のため
モジュールを足すのは容易?だが、変更/削除はそうではない。
Protocol Buffersのアップグレード
© 2020 NTT DATA Corporation 19
Dependencies
© 2020 NTT DATA Corporation 20
HadoopはMavenを利用
多くのプロダクトに依存し多くのプロダクトから依存されている
# Hadoopエコシステムのプロダクト同士の相互依存もある
ユーザアプリケーションを実行するフレームワーク
競合しがちなdependencies
SLF4J, Log4j
commons-logging, commons-cli, commons-httpclient
Jackson
Guava
Netty, Jetty, Jersey
protobuf-java
ZooKeeper, Curator
...
Hadoopの依存関係
© 2020 NTT DATA Corporation 21
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies
依存ライブラリの依存ライブラリも依存ライブラリ
同一クラスローダ上に同じクラスの異なるバージョンは並存できない
依存関係ツリー上に複数のバージョンがある場合、近いものが勝つ (dependency mediation)
mediationの結果、問題なくビルドできて動くという保証はない
Hadoopエコシステムのプロダクトの依存関係ツリーは、さらに深くなる
Transitive dependencies
$ mvn dependency:tree -Dmaven-dependency-plugin.version=2.10 -Dverbose
...
[INFO] org.apache.hadoop:hadoop-common:jar:3.4.0-SNAPSHOT
...
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.13:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.13:compile
[INFO] | +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate)
...
[INFO] +- commons-logging:commons-logging:jar:1.1.3:compile
...
[INFO] +- commons-beanutils:commons-beanutils:jar:1.9.4:compile
[INFO] | +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate)
[INFO] | - (commons-collections:commons-collections:jar:3.2.2:compile - omitted for duplicate)
[INFO] +- org.apache.commons:commons-configuration2:jar:2.1.1:compile
[INFO] | - (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate)
hadoop-commonのcommon-loggingに関するdependency mediation:
© 2020 NTT DATA Corporation 22
hadoop-clientのtransitive dependenciesを隠したもの
Hadoop 3.0.0で登場 (HADOOP-11804)
maven-shade-pluginのrelocation機能を利用
依存ライブラリと、その呼び出し箇所のパッケージ名をバイトコード上書き換え
衝突しがちな依存ライブラリを自分専用にして抱える
hadoop-client-api: relocateされたorg.apache.hadoop.*が入ったfat jar
hadoop-client-runtime: relocateされた依存ライブラリが入ったfat jar
hadoop-client-apiとhadoop-client-runtime (aka shaded client)
$ ls -lh hadoop-client-api-3.4.0-SNAPSHOT.jar
-rw-rw-r--. 1 centos centos 19M Dec 11 11:05 hadoop-client-api-3.4.0-SNAPSHOT.jar
$ ls -lh hadoop-client-runtime-3.4.0-SNAPSHOT.jar
-rw-rw-r--. 1 centos centos 30M Dec 11 11:07 hadoop-client-runtime-3.4.0-SNAPSHOT.jar
$ jar tvf hadoop-client-runtime-3.4.0-SNAPSHOT.jar | grep '/shaded/' | awk '{print $8}'
...
org/apache/hadoop/shaded/com/google/common/annotations/VisibleForTesting.class
org/apache/hadoop/shaded/com/google/common/base/Absent.class
...
hadoop-client-apiとhadoop-client runtime:
© 2020 NTT DATA Corporation 23
relocateされるクラスを引数にとるメソッドがあるとまずい (HADOOP-16080)
ビルド(mvn package)にすごく時間がかかる
関係ない部分を開発してるときは-DskipShadeでスキップできる
shaded clientの注意点
$ mvn clean install -DskipTests -DskipShade
shaded clientをスキップしてビルド:
© 2020 NTT DATA Corporation 24
relocateしたライブラリを独立のartifactとしてリリースしたもの
https://github.com/apache/hadoop-thirdparty
hadoop-client以外の場所でもtransitive dependencyを隠すときに使う
Hadoopは置き換えられたパッケージ名を明示的に指定する
現時点ではProtocol Buffers、Guava、Jaegerがhadoop-thirdpartyに含まれる
hadoop-thirdparty
<dependency>
<groupId>org.apache.hadoop.thirdparty</groupId>
<artifactId>hadoop-shaded-protobuf_3_7</artifactId>
</dependency>
hadoop-commonのpom.xml:
import org.apache.hadoop.thirdparty.protobuf.BlockingService;
RPC.java:
<relocation>
<pattern>com/google/protobuf</pattern>
<shadedPattern>org.apache.hadoop.thirdparty.protobuf</shadedPattern>
</relocation>
hadoop-thirdparty/hadoop-shaded-protobuf_3_7のpom.xml (を分かりやすさのために変数展開したもの):
© 2020 NTT DATA Corporation 25
transitive dependencyのupgradeや削除はdependentに影響する
hadoop-thirdpartyとオリジナルのライブラリを共存させて使える
Hadoop自体はhadoop-thirdpartyのライブラリを使うコードに移行
shaded protobuf-3.7.1を使うProtobufRpcEngine2
dependentのためにオリジナル版を使うコードを残す
protobuf-2.5.0を使うProtobufRpcEngine
hadoop-thirdpartyのユースケース
<dependencies>
<dependency>
<groupId>org.apache.hadoop.thirdparty</groupId>
<artifactId>hadoop-shaded-protobuf_3_7</artifactId>
</dependency>
...
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<scope>compile</scope>
</dependency>
...
hadoop-commonのpom.xml:
© 2020 NTT DATA Corporation 26
アプリケーション用のClassLoaderを作る試み
(YARN-286, MAPREDUCE-1700, HADOOP-10893)
特定のパターンにマッチするクラスをアプリケーションのclasspathからロードしない
パターンのデフォルト値は
java.,javax.accessibility.,javax.activation.,javax.activity.,javax.annotation.,javax.annotation.processing.,javax.crypto.,javax.imageio.,javax.jw
s.,javax.lang.model.,-javax.management.j2ee.,javax.management.,javax.naming.,javax.net.,javax.print.,javax.rmi.,javax.script.,-
javax.security.auth.message.,javax.security.auth.,javax.security.cert.,javax.security.sasl.,javax.sound.,javax.sql.,javax.swing.,javax.tools.,jav
ax.transaction.,-javax.xml.registry.,-javax.xml.rpc.,javax.xml.,org.w3c.dom.,org.xml.sax.,org.apache.commons.logging.,org.apache.log4j.,-
org.apache.hadoop.hbase.,org.apache.hadoop.,core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml
# see https://github.com/apache/hadoop/blob/rel/release-3.3.0/hadoop-common-project/hadoop-common/src/main/resources/org.apache.hadoop.application-classloader.properties
この路線の改善は進んでいない (HADOOP-13070)
ApplicationClassLoader
<property>
<name>mapreduce.job.classloader</name>
<value>true</value>
</property>
MapReduceアプリケーションでApplicationClassLoaderを使う設定(mapred-site.xml):
export HADOOP_USE_CLIENT_CLASSLOADER=true
HadoopクライアントでApplicationClassLoaderを使う設定(hadoop-env.sh):
© 2020 NTT DATA Corporation 27
モジュールシステムを提供するフレームワーク仕様
実装としてApache Felixがある
影響範囲の大きさから選ばれなかった
OSGi
© 2020 NTT DATA Corporation 28
Operations
© 2020 NTT DATA Corporation 29
Javaで実装された(主に運用用の)APIを呼び出すモジュールを実行するシェルスクリプト
dependentがAPIではなくCLIを実行し、出力をparseすることもある
出力のフォーマットの変更や、warning出力の追加が問題になりがち (HADOOP-11257)
bash-3.0以上が前提 (HADOOP-9902)
CLI
© 2020 NTT DATA Corporation 30
誰がどういう操作をしたかの記録
タブ区切りの独自フォーマット
いまならもっとよいフォーマットにできそうだが..
機械的に処理してチェックされがちなので積極的に変えない
監査ログ
ip=/x.x.x.x cmd=mkdirs src=/tmp dst=null perm=centos:supergroup:rwxr-xr-x proto=rpc
ip=/x.x.x.x cmd=setPermission src=/tmp dst=null perm=centos:supergroup:rwxrwxrwx proto=rpc
ip=/x.x.x.x cmd=create src=/tmp/README.txt._COPYING_ dst=null perm=centos:supergroup:rw-r--r-- proto=rpc
ip=/x.x.x.x cmd=rename src=/tmp/README.txt._COPYING_ dst=/tmp/README.txt perm=centos:supergroup:rw-r--r-- proto=rpc
ip=/x.x.x.x cmd=listStatus src=/tmp dst=null perm=null proto=rpc
ip=/x.x.x.x cmd=open src=/tmp/README.txt dst=null perm=null proto=rpc
...
HDFSのauditログ(の一部):
© 2020 NTT DATA Corporation 31
動作状態や性能を監視する上で有用な統計情報など
JMXで提供している
WebインタフェースからJSON形式で取得することもできる
項目の追加は問題なくできる
既存の項目の変更や削除はincompatible changeとして避けるべき
メトリクス
$ curl localhost:9870/jmx?qry=Hadoop:service=NameNode,name=ReplicatedBlocksState
{
"beans" : [ {
"name" : "Hadoop:service=NameNode,name=ReplicatedBlocksState",
"modelerType" : "org.apache.hadoop.hdfs.server.namenode.FSNamesystem",
"LowRedundancyReplicatedBlocks" : 0,
"CorruptReplicatedBlocks" : 0,
"MissingReplicatedBlocks" : 0,
"MissingReplicationOneBlocks" : 0,
"BytesInFutureReplicatedBlocks" : 0,
"PendingDeletionReplicatedBlocks" : 0,
"TotalReplicatedBlocks" : 1
} ]
}
JMXJsonServletを利用したメトリクス取得:
© 2020 NTT DATA Corporation 32
Packaging
© 2020 NTT DATA Corporation 33
複数のプロダクトを組み合わせて互換性を維持し続けるのは大変
ユーザが機能するバージョンの組み合わせを見つけるのも大変
機能するOSSの組み合わせ(ディストリビューション)を企業(ディストリビュータ)が提供する
パッケージングと継続的なupdateの提供
テクニカルサポート
Linux(OS)の例として、Red Hat(IBM社)のRed Hat Enterprise Linux
ベースバージョンを(原則)固定してパッケージング
upstreamの機能追加やバグ修正をbackportしていく
互換性を壊す修正は入れないか、壊さないように直す
minor updateしても(原則)アプリケーションに影響を与えない
HadoopエコシステムではCloudera社がディストリビューションを提供
Red Hat同様のベースバージョン固定方式で互換性を維持
多種プロダクトの動く組み合わせをテストして提供
独自プロビジョニングツールによる運用が前提
(CentOSのような)無償版はない
ディストリビューション
© 2020 NTT DATA Corporation 34
コミュニティベースの取り組み
Hadoopエコシステムのミドルウェアのパッケージングを提供
プロダクトとバージョンの組み合わせ選定
必要に応じてパッチ適用
.rpmおよび.debを作るための資材
プロビジョニング資材
Puppetマニフェスト
Dockerファイル/イメージ
クラスタ起動用docker-compose資材
テストフレームワークとテストケース
以上をGradleタスクとして簡易に実行する枠組み
継続的なpatchのバックポートやminor updateは提供していない
(現状)テストは網羅的ではない
Apache Bigtop
© 2020 NTT DATA Corporation 35
Products:
Hadoop 2.10.1 # 次のバージョンでHadoop 3になる
HBase 1.5.0
Hive 2.3.6
Kafka 2.4.0
Phoenix 4.15.0-HBase-1.5
Spark 2.4.5
Zookeeper 3.4.13
...
Distros:
CentOS 7 and 8, Debian 9 and 10, Fedora 31, Ubuntu 16.04 and 18.04
Architectures:
x86_64, aarch64 # ppc64leは(マシンがなくて)テストされてない
Bigtop 1.5.0
© 2020 NTT DATA Corporation 36
Summary
© 2020 NTT DATA Corporation 37
一度普及したモノは簡単に変えられない
新メジャーバージョンをリリースしても、ユーザはなかなか移行しない
大きく変えるなら別のプロダクトとして出したほうがよい?
# メジャーバージョンアップでまるっと書き直されたプロダクトは消えていった
機能の追加はやりやすい
既にある機能の変更/削除は難しい
メンテナンスするコードが増えていきがち
辛いけど、広く世の中で使われるためには、互換性にまじめに向き合う必要がある
まとめ
© 2020 NTT DATA Corporation
本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。
© 2020 NTT DATA Corporation 39
参考資料
© 2020 NTT DATA Corporation 40
HDFSのアーキテクチャは、ファイルシステムメタデータとデータブロックの状態を管理する
NameNodeと、実データへの読み書きを提供する多数のDataNodeからなる。データは自動的
に冗長化される。典型的にはノード群がデータを処理する計算ノードも兼ねており、ノードの
数を増やすことで、ストレージ容量と処理能力を拡張することができる。アーキテクチャ上、
単一クラスタにおけるスレーブノード数は、数千ノード規模まで増やすことができる。
Hadoopの分散ファイルシステム(HDFS)
https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
© 2020 NTT DATA Corporation 41
YARNのアーキテクチャは、クラスタ内のリソース利用状況を把握して処理を割り当てる
ResourceManagerと、各計算ノード上で処理タスクを実行管理する多数のNodeManagerから
なる。エンドユーザがジョブを投入すると、ジョブ毎に起動されるApplicationMasterが、リ
ソース割り当て要求をResourceManagerに送り、タスク(コンテナ)の実行状況を管理する。典
型的には、エンドユーザはYARN上で動作するMapReduceやSparkといったフレームワークを
利用してアプリケーションを記述するため、あまりYARNのAPIを意識しない。
Hadoopの計算リソース管理機構(YARN)
http://hadoop.apache.org/docs/r3.3.0/hadoop-yarn/hadoop-yarn-site/YARN.html
© 2020 NTT DATA Corporation 42
下図は、Hadoopのファイルアクセス用インターフェースを図示したものである。FileSystem
APIはHDFSのAPIを抽象化したもので、これを各種データストアにアクセスするためのモ
ジュールが実装している。例えばLocalFileSystemはローカルファイルシステムにアクセスす
るためのもので、HDFSにデータをロードする以外にも、MapReduceやSparkなどのアプリ
ケーションをローカルファイルシステム上でテスト実行する場合にも利用される。Amazon S3
やAzure Data Lake Storageにアクセスするためのモジュールも、ビルトインで提供されてい
る。これらのAPIおよびモジュール群は、Hadoop Compatible File Systemsと呼ばれる。
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
Spark
MapReduce
Spark
Application
MapReduce
Application
WebHdfs
FileSystem
Ozone
Ozone
FileSystem

More Related Content

What's hot

大規模データ処理の定番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
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2Sho Nakazono
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)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
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)NTT DATA Technology & Innovation
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Cloudera Japan
 
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!デベロッパーネットワーク
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)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
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントCloudera Japan
 
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
 

What's hot (20)

大規模データ処理の定番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 発...
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
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 発表資料)
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
 
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...
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
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 Pulsarの概要と近況
Apache Pulsarの概要と近況Apache Pulsarの概要と近況
Apache Pulsarの概要と近況
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイント
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 

Similar to Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Online 発表資料)

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
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
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...NTT DATA Technology & Innovation
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちAdvancedTechNight
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)NTT DATA OSS Professional Services
 
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...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
 
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用Yoshikazu Suganuma
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックAdvancedTechNight
 
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~Developers Summit
 
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
 
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...DataWorks Summit/Hadoop Summit
 
Beginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopBeginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopDataWorks Summit
 

Similar to Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Online 発表資料) (20)

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 講演資料)
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
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...
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
 
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
 
Apache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development statusApache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development status
 
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
 
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
AI・HPC・ビッグデータで利用される分散ファイルシステムを知るAI・HPC・ビッグデータで利用される分散ファイルシステムを知る
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバック
 
Hadoop, NoSQL, GlusterFSの概要
Hadoop, NoSQL, GlusterFSの概要Hadoop, NoSQL, GlusterFSの概要
Hadoop, NoSQL, GlusterFSの概要
 
Apache Spark 1000 nodes NTT DATA
Apache Spark 1000 nodes NTT DATAApache Spark 1000 nodes NTT DATA
Apache Spark 1000 nodes NTT DATA
 
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
 
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)
 
HDFS Router-based federation
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federation
 
20170303 java9 hadoop
20170303 java9 hadoop20170303 java9 hadoop
20170303 java9 hadoop
 
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
 
Beginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopBeginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning Hadoop
 

More from 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
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

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アンカンファレンス@オンライン 発表資料)
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (10)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Online 発表資料)

  • 1. © 2020 NTT DATA Corporation 12/19/2020 Masatake Iwasaki NTT DATA Apache Hadoopに見るJavaミドルウェアのcompatibility
  • 2. © 2020 NTT DATA Corporation 2 Hadoopの開発において得られた「互換性」に関する知識や気づきを話します Hadoopについての予備知識はそれほど必要ありません Javaの話題が多いです Hadoop 3.xはJava 8ベースです ときどき出てくるHADOOP-12345みたいなのはJIRAのissue keyです はじめに
  • 3. © 2020 NTT DATA Corporation 3 Hadoopのcompatibility
  • 4. © 2020 NTT DATA Corporation 4 大規模データ処理基盤 以下をセットで提供 分散ファイルシステム(HDFS) 計算リソース管理機構(YARN) 分散処理フレームワーク(MapReduce) 汎用的な(Linux)サーバ(〜10000台)でクラスタを構成する 大量のデータを格納し、並列分散処理する 2006年に登場 Googleが論文の形で紹介した技術を参考にした実装 Hadoopとは何か?
  • 5. © 2020 NTT DATA Corporation 5 Javaで実装 Java部分は多くのプラットフォームで動く 性能向上等の目的で(Cで書かれた)nativeコードをJNI経由で利用 nativeコードがなければpure Java実装にフォールバック Linuxのシステムコール前提な部分が多い 特にHDFSに関しては実用上Linuxを使うべき CLIはbashスクリプト Windows対応の名残はあるが今はあまりメンテされてない Microsoft AzureのHDInsightもUbuntuを利用 # Amazon EMRはAmazon Linux プラットフォーム互換性
  • 6. © 2020 NTT DATA Corporation 6 ユーザとHadoopとのインタラクション 分散ファイルシステム(HDFS)上のデータの読み書き 分散処理フレームワーク(YARN)へのジョブ投入 ジョブおよびクラスタそれ自体の運用監視 (マイナー)バージョンアップでユーザ側に影響を与えないように互換性を維持する publicなAPIのシグネチャ CLIのオプション (メタ)データフォーマット メトリクス 監査ログのフォーマット ... Hadoopとのインタラクション
  • 7. © 2020 NTT DATA Corporation 7 実用上、多種多様な周辺ミドルウェアと組み合わせて利用する Spark: モダンな分散処理基盤/API (deprecating MapReduce) Hive: SQL(ライクな)言語処理系 HBase: 分散KVS (like Bigtable) Sqoop: データローダ Oozie: ワークフロースケジューラ Ranger: アクセス制御 ... ユーザアプリケーションと周辺ミドルウェアの両方がHadoopのAPIを使う Hadoop側の非互換な変更の影響を受ける範囲が広い Hadoopエコシステム
  • 8. © 2020 NTT DATA Corporation 8 オンラインのまま(マイナー)バージョンアップできるように担保する 1ノードずつ 停止 -> アップグレード -> 起動を繰り返していく 古いバージョンと新しいバージョンが混在するタイミングがある Hadoopが内部的に利用するAPIの互換性も重要 ローリングアップグレード
  • 9. © 2020 NTT DATA Corporation 9 いろいろな側面から互換性について定めている https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-common/Compatibility.html Java API, Native Dependencies, Wire Protocols, Transports, REST APIs, Log Output, Audit Log Output, Metrics/JMX, File formats & Metadata... 基本路線は、メジャーバージョンアップでのみ互換性を壊す変更を行う メジャーリリースなら変更できるが、ユーザはなかなか移行してくれない Hadoop 3.0.0は2017年12月にリリースされたが、移行はなかなか進まなかった 今でもHadoop 2.xは使われていて、メンテされている Apache Hadoop Compatibility
  • 10. © 2020 NTT DATA Corporation 10 Java API
  • 11. © 2020 NTT DATA Corporation 11 Javaではpublic, protected, privateのような修飾子で可視性を制御 すべてのpublicなクラス/メソッドがエンドユーザ向けではない モジュール間で参照できるためにpublicなものも多い それを示すためのInterfaceAudienceアノテーションが付いている @InterfaceAudience.PublicなものだけJavadocが出力される @InterfaceAudience.Privateだとマイナーバージョンアップでも変更されうる アノテーションがついてるから外から呼べなくなるわけではない 歴史的経緯で周辺ミドルウェアから呼ばれていることも多い APIを足すのは容易だが、変更/削除はそうではない。 publicだけどprivate @InterfaceAudience.LimitedPrivate({ "MapReduce", "HBase" }) @InterfaceStability.Unstable public class DistributedFileSystem extends FileSystem implements KeyProviderTokenIssuer, BatchListingOperations { ... DistributedFileSystem.java:
  • 12. © 2020 NTT DATA Corporation 12 Java 9に入ったProject Jigsawの成果 どのAPIを外部に晒すかを制御しやすくなる HadoopでのModule対応はまだ始まっていない パッケージ構造はそれなりに整理する必要がある Java 9(以降)でビルドできるようにするのが実は大変 依存ライブラリをJava 9以降に対応したバージョンにupgrade 広範囲で使われている場合の修正が困難: e.g. Jersey (HADOOP-15984) Java 8サポートのdropは次のメジャーバージョンアップ (Hadoop 4.0.0)? Java Platform Module System (JPMS)
  • 13. © 2020 NTT DATA Corporation 13 Hadoop RPC
  • 14. © 2020 NTT DATA Corporation 14 Hadoopは並列分散処理基盤なので、ノード間通信が必要 クライアント <---> サーバ サーバ <---> サーバ そのためのRPCフレームワークは以下のパーツを利用した独自実装 java.lang.reflect.Proxy Protocol Buffers Hadoop RPC
  • 15. © 2020 NTT DATA Corporation 15 データのシリアライゼーションのためのライブラリ 類似製品としてThrift, Avro, MessagePackなどが挙げられる メッセージとシグネチャを定義した.protoファイルから(各種言語の)コードを自動生成 生成された(Javaの)コードをHadoop RPCのコードが使う Protocol Buffers message GetBlockLocationsRequestProto { required string src = 1; // file name required uint64 offset = 2; // range start offset required uint64 length = 3; // range length } message GetBlockLocationsResponseProto { optional LocatedBlocksProto locations = 1; } ... service ClientNamenodeProtocol { rpc getBlockLocations(GetBlockLocationsRequestProto) returns(GetBlockLocationsResponseProto); ... ClientNamenodeProtocol.protoの抜粋:
  • 16. © 2020 NTT DATA Corporation 16 あってもなくてもよいフィールド backward compatibleに追加できる 旧バージョンのmessageはoptionalなフィールドを持たない場合と解釈できる フィールドを足すのは容易だが、変更/削除はそうではない。 Protocol Buffersのoptional field message RpcRequestHeaderProto { // the header for the RpcRequest ... optional RpcKindProto rpcKind = 1; optional OperationProto rpcOp = 2; required sint32 callId = 3; // a sequence number that is sent back in response required bytes clientId = 4; // Globally unique client ID // clientId + callId uniquely identifies a request // retry count, 1 means this is the first retry optional sint32 retryCount = 5 [default = -1]; optional RPCTraceInfoProto traceInfo = 6; // tracing info optional RPCCallerContextProto callerContext = 7; // call context optional int64 stateId = 8; // The last seen Global State ID } RpcHeader.protoの抜粋:
  • 17. © 2020 NTT DATA Corporation 17 複数言語に対応している C++, Java, Python, Go, Dart, Ruby, C#, Hadoopビルトインのパーツでは一部しか活用していない Hadoop本体はJava HDFSのC++クライアント(libhdfspp)はProtocol Buffersで生成したC++のコードを利用 # HDFSのCクライアント(libhdfs)はJNIでJavaのコードを呼び出す Protocol Buffersによる多言語対応
  • 18. © 2020 NTT DATA Corporation 18 Protocol Buffers自体のバージョンアップは大変 2011年にProtobol Buffersを導入 (HADOOP-7773) 2013年ごろからずっとProtocol Buffers 2.5.0 2019年にProtocol Buffers 3.7.1にupgrade (HADOOP-13363) RpcEngineのコードは古いものものも残されている WritableRpcEngine: Hadoop独自のシリアライゼーション(Writable) ProtobufRpcEngine: protobuf-2.5.0 ProtobufRpcEngine2: hadoop-thirdparty(後述)のshaded protobuf-3.7.1 切り替えて使いわけるものではない 新しい仕組みに根本的な問題があった時に切り戻すため この仕組みを使っている関連プロダクト(Hive, Tez)のため モジュールを足すのは容易?だが、変更/削除はそうではない。 Protocol Buffersのアップグレード
  • 19. © 2020 NTT DATA Corporation 19 Dependencies
  • 20. © 2020 NTT DATA Corporation 20 HadoopはMavenを利用 多くのプロダクトに依存し多くのプロダクトから依存されている # Hadoopエコシステムのプロダクト同士の相互依存もある ユーザアプリケーションを実行するフレームワーク 競合しがちなdependencies SLF4J, Log4j commons-logging, commons-cli, commons-httpclient Jackson Guava Netty, Jetty, Jersey protobuf-java ZooKeeper, Curator ... Hadoopの依存関係
  • 21. © 2020 NTT DATA Corporation 21 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies 依存ライブラリの依存ライブラリも依存ライブラリ 同一クラスローダ上に同じクラスの異なるバージョンは並存できない 依存関係ツリー上に複数のバージョンがある場合、近いものが勝つ (dependency mediation) mediationの結果、問題なくビルドできて動くという保証はない Hadoopエコシステムのプロダクトの依存関係ツリーは、さらに深くなる Transitive dependencies $ mvn dependency:tree -Dmaven-dependency-plugin.version=2.10 -Dverbose ... [INFO] org.apache.hadoop:hadoop-common:jar:3.4.0-SNAPSHOT ... [INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.13:compile [INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.13:compile [INFO] | +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate) ... [INFO] +- commons-logging:commons-logging:jar:1.1.3:compile ... [INFO] +- commons-beanutils:commons-beanutils:jar:1.9.4:compile [INFO] | +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate) [INFO] | - (commons-collections:commons-collections:jar:3.2.2:compile - omitted for duplicate) [INFO] +- org.apache.commons:commons-configuration2:jar:2.1.1:compile [INFO] | - (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate) hadoop-commonのcommon-loggingに関するdependency mediation:
  • 22. © 2020 NTT DATA Corporation 22 hadoop-clientのtransitive dependenciesを隠したもの Hadoop 3.0.0で登場 (HADOOP-11804) maven-shade-pluginのrelocation機能を利用 依存ライブラリと、その呼び出し箇所のパッケージ名をバイトコード上書き換え 衝突しがちな依存ライブラリを自分専用にして抱える hadoop-client-api: relocateされたorg.apache.hadoop.*が入ったfat jar hadoop-client-runtime: relocateされた依存ライブラリが入ったfat jar hadoop-client-apiとhadoop-client-runtime (aka shaded client) $ ls -lh hadoop-client-api-3.4.0-SNAPSHOT.jar -rw-rw-r--. 1 centos centos 19M Dec 11 11:05 hadoop-client-api-3.4.0-SNAPSHOT.jar $ ls -lh hadoop-client-runtime-3.4.0-SNAPSHOT.jar -rw-rw-r--. 1 centos centos 30M Dec 11 11:07 hadoop-client-runtime-3.4.0-SNAPSHOT.jar $ jar tvf hadoop-client-runtime-3.4.0-SNAPSHOT.jar | grep '/shaded/' | awk '{print $8}' ... org/apache/hadoop/shaded/com/google/common/annotations/VisibleForTesting.class org/apache/hadoop/shaded/com/google/common/base/Absent.class ... hadoop-client-apiとhadoop-client runtime:
  • 23. © 2020 NTT DATA Corporation 23 relocateされるクラスを引数にとるメソッドがあるとまずい (HADOOP-16080) ビルド(mvn package)にすごく時間がかかる 関係ない部分を開発してるときは-DskipShadeでスキップできる shaded clientの注意点 $ mvn clean install -DskipTests -DskipShade shaded clientをスキップしてビルド:
  • 24. © 2020 NTT DATA Corporation 24 relocateしたライブラリを独立のartifactとしてリリースしたもの https://github.com/apache/hadoop-thirdparty hadoop-client以外の場所でもtransitive dependencyを隠すときに使う Hadoopは置き換えられたパッケージ名を明示的に指定する 現時点ではProtocol Buffers、Guava、Jaegerがhadoop-thirdpartyに含まれる hadoop-thirdparty <dependency> <groupId>org.apache.hadoop.thirdparty</groupId> <artifactId>hadoop-shaded-protobuf_3_7</artifactId> </dependency> hadoop-commonのpom.xml: import org.apache.hadoop.thirdparty.protobuf.BlockingService; RPC.java: <relocation> <pattern>com/google/protobuf</pattern> <shadedPattern>org.apache.hadoop.thirdparty.protobuf</shadedPattern> </relocation> hadoop-thirdparty/hadoop-shaded-protobuf_3_7のpom.xml (を分かりやすさのために変数展開したもの):
  • 25. © 2020 NTT DATA Corporation 25 transitive dependencyのupgradeや削除はdependentに影響する hadoop-thirdpartyとオリジナルのライブラリを共存させて使える Hadoop自体はhadoop-thirdpartyのライブラリを使うコードに移行 shaded protobuf-3.7.1を使うProtobufRpcEngine2 dependentのためにオリジナル版を使うコードを残す protobuf-2.5.0を使うProtobufRpcEngine hadoop-thirdpartyのユースケース <dependencies> <dependency> <groupId>org.apache.hadoop.thirdparty</groupId> <artifactId>hadoop-shaded-protobuf_3_7</artifactId> </dependency> ... <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <scope>compile</scope> </dependency> ... hadoop-commonのpom.xml:
  • 26. © 2020 NTT DATA Corporation 26 アプリケーション用のClassLoaderを作る試み (YARN-286, MAPREDUCE-1700, HADOOP-10893) 特定のパターンにマッチするクラスをアプリケーションのclasspathからロードしない パターンのデフォルト値は java.,javax.accessibility.,javax.activation.,javax.activity.,javax.annotation.,javax.annotation.processing.,javax.crypto.,javax.imageio.,javax.jw s.,javax.lang.model.,-javax.management.j2ee.,javax.management.,javax.naming.,javax.net.,javax.print.,javax.rmi.,javax.script.,- javax.security.auth.message.,javax.security.auth.,javax.security.cert.,javax.security.sasl.,javax.sound.,javax.sql.,javax.swing.,javax.tools.,jav ax.transaction.,-javax.xml.registry.,-javax.xml.rpc.,javax.xml.,org.w3c.dom.,org.xml.sax.,org.apache.commons.logging.,org.apache.log4j.,- org.apache.hadoop.hbase.,org.apache.hadoop.,core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml # see https://github.com/apache/hadoop/blob/rel/release-3.3.0/hadoop-common-project/hadoop-common/src/main/resources/org.apache.hadoop.application-classloader.properties この路線の改善は進んでいない (HADOOP-13070) ApplicationClassLoader <property> <name>mapreduce.job.classloader</name> <value>true</value> </property> MapReduceアプリケーションでApplicationClassLoaderを使う設定(mapred-site.xml): export HADOOP_USE_CLIENT_CLASSLOADER=true HadoopクライアントでApplicationClassLoaderを使う設定(hadoop-env.sh):
  • 27. © 2020 NTT DATA Corporation 27 モジュールシステムを提供するフレームワーク仕様 実装としてApache Felixがある 影響範囲の大きさから選ばれなかった OSGi
  • 28. © 2020 NTT DATA Corporation 28 Operations
  • 29. © 2020 NTT DATA Corporation 29 Javaで実装された(主に運用用の)APIを呼び出すモジュールを実行するシェルスクリプト dependentがAPIではなくCLIを実行し、出力をparseすることもある 出力のフォーマットの変更や、warning出力の追加が問題になりがち (HADOOP-11257) bash-3.0以上が前提 (HADOOP-9902) CLI
  • 30. © 2020 NTT DATA Corporation 30 誰がどういう操作をしたかの記録 タブ区切りの独自フォーマット いまならもっとよいフォーマットにできそうだが.. 機械的に処理してチェックされがちなので積極的に変えない 監査ログ ip=/x.x.x.x cmd=mkdirs src=/tmp dst=null perm=centos:supergroup:rwxr-xr-x proto=rpc ip=/x.x.x.x cmd=setPermission src=/tmp dst=null perm=centos:supergroup:rwxrwxrwx proto=rpc ip=/x.x.x.x cmd=create src=/tmp/README.txt._COPYING_ dst=null perm=centos:supergroup:rw-r--r-- proto=rpc ip=/x.x.x.x cmd=rename src=/tmp/README.txt._COPYING_ dst=/tmp/README.txt perm=centos:supergroup:rw-r--r-- proto=rpc ip=/x.x.x.x cmd=listStatus src=/tmp dst=null perm=null proto=rpc ip=/x.x.x.x cmd=open src=/tmp/README.txt dst=null perm=null proto=rpc ... HDFSのauditログ(の一部):
  • 31. © 2020 NTT DATA Corporation 31 動作状態や性能を監視する上で有用な統計情報など JMXで提供している WebインタフェースからJSON形式で取得することもできる 項目の追加は問題なくできる 既存の項目の変更や削除はincompatible changeとして避けるべき メトリクス $ curl localhost:9870/jmx?qry=Hadoop:service=NameNode,name=ReplicatedBlocksState { "beans" : [ { "name" : "Hadoop:service=NameNode,name=ReplicatedBlocksState", "modelerType" : "org.apache.hadoop.hdfs.server.namenode.FSNamesystem", "LowRedundancyReplicatedBlocks" : 0, "CorruptReplicatedBlocks" : 0, "MissingReplicatedBlocks" : 0, "MissingReplicationOneBlocks" : 0, "BytesInFutureReplicatedBlocks" : 0, "PendingDeletionReplicatedBlocks" : 0, "TotalReplicatedBlocks" : 1 } ] } JMXJsonServletを利用したメトリクス取得:
  • 32. © 2020 NTT DATA Corporation 32 Packaging
  • 33. © 2020 NTT DATA Corporation 33 複数のプロダクトを組み合わせて互換性を維持し続けるのは大変 ユーザが機能するバージョンの組み合わせを見つけるのも大変 機能するOSSの組み合わせ(ディストリビューション)を企業(ディストリビュータ)が提供する パッケージングと継続的なupdateの提供 テクニカルサポート Linux(OS)の例として、Red Hat(IBM社)のRed Hat Enterprise Linux ベースバージョンを(原則)固定してパッケージング upstreamの機能追加やバグ修正をbackportしていく 互換性を壊す修正は入れないか、壊さないように直す minor updateしても(原則)アプリケーションに影響を与えない HadoopエコシステムではCloudera社がディストリビューションを提供 Red Hat同様のベースバージョン固定方式で互換性を維持 多種プロダクトの動く組み合わせをテストして提供 独自プロビジョニングツールによる運用が前提 (CentOSのような)無償版はない ディストリビューション
  • 34. © 2020 NTT DATA Corporation 34 コミュニティベースの取り組み Hadoopエコシステムのミドルウェアのパッケージングを提供 プロダクトとバージョンの組み合わせ選定 必要に応じてパッチ適用 .rpmおよび.debを作るための資材 プロビジョニング資材 Puppetマニフェスト Dockerファイル/イメージ クラスタ起動用docker-compose資材 テストフレームワークとテストケース 以上をGradleタスクとして簡易に実行する枠組み 継続的なpatchのバックポートやminor updateは提供していない (現状)テストは網羅的ではない Apache Bigtop
  • 35. © 2020 NTT DATA Corporation 35 Products: Hadoop 2.10.1 # 次のバージョンでHadoop 3になる HBase 1.5.0 Hive 2.3.6 Kafka 2.4.0 Phoenix 4.15.0-HBase-1.5 Spark 2.4.5 Zookeeper 3.4.13 ... Distros: CentOS 7 and 8, Debian 9 and 10, Fedora 31, Ubuntu 16.04 and 18.04 Architectures: x86_64, aarch64 # ppc64leは(マシンがなくて)テストされてない Bigtop 1.5.0
  • 36. © 2020 NTT DATA Corporation 36 Summary
  • 37. © 2020 NTT DATA Corporation 37 一度普及したモノは簡単に変えられない 新メジャーバージョンをリリースしても、ユーザはなかなか移行しない 大きく変えるなら別のプロダクトとして出したほうがよい? # メジャーバージョンアップでまるっと書き直されたプロダクトは消えていった 機能の追加はやりやすい 既にある機能の変更/削除は難しい メンテナンスするコードが増えていきがち 辛いけど、広く世の中で使われるためには、互換性にまじめに向き合う必要がある まとめ
  • 38. © 2020 NTT DATA Corporation 本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。
  • 39. © 2020 NTT DATA Corporation 39 参考資料
  • 40. © 2020 NTT DATA Corporation 40 HDFSのアーキテクチャは、ファイルシステムメタデータとデータブロックの状態を管理する NameNodeと、実データへの読み書きを提供する多数のDataNodeからなる。データは自動的 に冗長化される。典型的にはノード群がデータを処理する計算ノードも兼ねており、ノードの 数を増やすことで、ストレージ容量と処理能力を拡張することができる。アーキテクチャ上、 単一クラスタにおけるスレーブノード数は、数千ノード規模まで増やすことができる。 Hadoopの分散ファイルシステム(HDFS) https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
  • 41. © 2020 NTT DATA Corporation 41 YARNのアーキテクチャは、クラスタ内のリソース利用状況を把握して処理を割り当てる ResourceManagerと、各計算ノード上で処理タスクを実行管理する多数のNodeManagerから なる。エンドユーザがジョブを投入すると、ジョブ毎に起動されるApplicationMasterが、リ ソース割り当て要求をResourceManagerに送り、タスク(コンテナ)の実行状況を管理する。典 型的には、エンドユーザはYARN上で動作するMapReduceやSparkといったフレームワークを 利用してアプリケーションを記述するため、あまりYARNのAPIを意識しない。 Hadoopの計算リソース管理機構(YARN) http://hadoop.apache.org/docs/r3.3.0/hadoop-yarn/hadoop-yarn-site/YARN.html
  • 42. © 2020 NTT DATA Corporation 42 下図は、Hadoopのファイルアクセス用インターフェースを図示したものである。FileSystem APIはHDFSのAPIを抽象化したもので、これを各種データストアにアクセスするためのモ ジュールが実装している。例えばLocalFileSystemはローカルファイルシステムにアクセスす るためのもので、HDFSにデータをロードする以外にも、MapReduceやSparkなどのアプリ ケーションをローカルファイルシステム上でテスト実行する場合にも利用される。Amazon S3 やAzure Data Lake Storageにアクセスするためのモジュールも、ビルトインで提供されてい る。これらのAPIおよびモジュール群は、Hadoop Compatible File Systemsと呼ばれる。 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 Spark MapReduce Spark Application MapReduce Application WebHdfs FileSystem Ozone Ozone FileSystem

Editor's Notes

  1. 今日は、私がHadoopの開発に関わる中で得られた、互換性というキーワードに関する知識とか気づきみたいなものを話そうと思っています。 意外とHadoopについての知識はなくても大丈夫なはずです。s ただしJavaの話が多いので、Javaをまったくしらないとピンとこない部分が多いかもしれません。 ちなみにHadoopの現行バージョンはJava 8ベースになっています。 Hadoopの開発ではJIRAでissue管理をしていて、スライドで出てくるHADOOP-12345みたいな番号は、JIRAの番号です。このキーでググると、その話題の詳細を見ることがsできると思います。
  2. まず、Hadoopにおける互換性ってなに?という話から入ります。
  3. Hadoopはいわゆるビッグデータを処理するためのプロダクトです。 データを蓄積するための分散ファイルシステムであるHDFS、処理ノードの管理機構であるYARN、YARN上に実装された分散処理フレームワークのMapReduceをセットで提供しています。 汎用的なサーバノードをたくさん並べてクラスタを構成し、データを並列分散処理するためのミドルウェアです。 最初のバージョンがリリースされたのが2006年なので、もう14年前になります。 Googleが自社の検索サービスに利用している技術を論文の形で発表した内容を、参考にして開発されたオープンソースソフトウェアとして知られています。
  4. HadoopはJavaで実装されていて、Javaの部分については多くのプラットフォームで動きます。 ただし、性能向上等の目的でC言語で書かれたコードをJNIで使う部分があって、そこは実質Linux前提になっています。 一時期Windows対応を頑張っていた開発者もいたのですが、最近ではあまりメンテされていない印象です。 Hadoopクラスタをぱっと立ち上げて利用できるAzureのHDInsightというクラウドサービスがあるのですが、これもWindowsではなくUbuntuのVMが利用されています。 ちなみに、同じようなサービスであるところのAmazon EMRだと、Red Hat系にあたるAmazon Linuxが利用されています。
  5. Hadoopは大規模データを並列分散処理するプラットフォームなので、ユーザが行う操作は、データの読み書きだったり、ジョブの投入だったりします。 Hadoop側に手を入れてバージョンを上げても、エンドユーザがそのまま使える状態を維持するために気をつけるべきポイントはいろいろあります。 アプリケーションから利用されるユーザ向けAPIはもちろんのこと、アプリケーションを起動するためのCLIの機能性やデータフォーマットも重要です。 監視のためのメトリクスとか監査ログのフォーマットも、下手に変えるとユーザの運用に影響を与えてしまいます。
  6. Hadoopは実用上、それ単体ではなく、いろいろな周辺ミドルウェアと組み合わせて使われます。 MapReduceよりモダンな?フレームワークであるSpark、SQLでデータの操作をするための言語処理系であるHive、Hadoopの分散ファイルシステム上で動く分散KVSに相当するHBase、などが代表的です。 他にも、リレーショナルデータベースなどとの間でデータを出し入れするためのデータローダや、ジョブネット管理的なことをするワークフロースケジューラ、アクセス制御のための基盤、などなどがあります。 こういった周辺ミドルウェアを含めて、Hadoopエコシステムみたいな呼び方をしています。 エンドユーザはこういうツール経由でHadoopを利用するので、直接HadoopのAPIを使うことは少ないぐらいの勢いです。 で、Hadoopの周辺ミドルウェアもまた、HadoopのAPIを利用して実装されたもので、Hadoopからみればアプリケーションです。 そのため、Hadoopに非互換な変更を入ると、周辺ミドルウェアのビルドがこけたり、組み合わせて動かなくなったりするわけで、広い範囲に影響が出てしまうと言えます。
  7. また、Hadoopはサーバノードをたくさん並べてクラスタを組むのですが、クラスタ全体としてはオンラインのままバージョンアップする機能を提供しています。 ローリングアップグレードというもので、一台止めてバージョンアップし再起動する、みたいな操作を繰り返し行います。 この作業の過程では、古いバージョンと新しいバージョンのノードが混在して動く瞬間があることになります。 なので、Hadoopのクラスタ内部でノード間通信するための、内部的なAPIについても、互換性に気をつける必要があります。
  8. Hadoopのドキュメントには、互換性に関するポリシーを記述したページがあって、今日紹介する話題がカバーされています。 Hadoopを使うときには、読んでみると参考になると思います。 基本路線として、メジャーバージョンアップのときだけ、互換性を壊すような変更を許容することになっています。 といって、ユーザの移行の負荷が大きいと、新しいバージョンを出してもなかなかユーザが移行してくれません。 いまHadoopのメジャーバージョンは3が最新で、リリースされてから3年ほどたつのですが、いまでも2.xを使っている人はいて、継続してバージョン2系のブランチも維持されてきました。 さすがにそろそろ終息しそうではあるのですが。
  9. ここからは個別のトピックに入ります。 HadoopはJavaで実装されてるので、メインとなるJavaのAPIの話から始めます。
  10. Javaの場合クラスやメソッドにpublic、protected、privateみたいな修飾子をつけます。 publicなクラスのpublicなメソッドが、外部から呼び出し可能なコードになります。 ただし、Hadoopは数多くのサブモジュールから構成されている都合上、モジュール間で呼び出せるようにpublicにしてあるコードも多いです。 エンドユーザ向けのpublicなAPIと、内部的な都合でpublicになってるAPIを区別できるようにするために、アノテーションが利用されています。 InterfaceAudience.Publicというアノテーションがついていると、ユーザ向けのものという意味です。 これがついていないクラスやメソッドは、Javadocにでてこなくなります。 逆にいえば、Javadocに出てこないAPIは、エンドユーザ向けと想定されていないものということになります。 InterfaceAudience.Privateみたいなアノテーションがついていると、内部的な都合で修正される可能性があるよ、ということを意味しています。 とはいえ、昔からある周辺ミドルウェアが実は内部向けのAPIを使っていて、それに変更が入ってクレームが上がるということはときどきあります。 新しいAPIを足すのは簡単なのですが、既に存在するpublicなAPIを変更/削除するのは簡単ではありません。
  11. Java 9には、Project Jigsawというコードネームで開発されていたModuleシステムが入ってます。 これを使うと、どのAPIを外部に見せるのかということを、いまよりもよく制御することができます。 ただし、Hadoopでこれに対応する動きはまだありません。 結局パッケージ構造を整理する必要はあるというのと、Java 9以降でビルドできるようにする作業が容易ではないためです。 最近のHadoopはJava 11でも動くのですが、Java 9以降でビルドするためにはまだ修正が必要です。 Hadoopが使っているライブラリの中にJava 9以降に対応していないものがあると、それをアップグレードする必要があります。 ただしそのモジュールが広範囲で使われていると、いろんな人が並行で作業していることもあって、修正が困難です。 例を挙げると、Rest APIを実装するのに使われるJerseyのアップグレードがなかなか難航しています。 また、Java 9以降でしかビルドできなくなる修正を入れる、つまりJava 8のサポートを落とすなら、メジャーバージョンアップ時になり、ちょっと気の長い話になります。
  12. 続いてHadoop RPCの話です。
  13. Hadoopは並列分散処理基盤なので、ノード間通信でプロセス同士がやりとりして処理を行います。 クライアントからサーバへのリクエスト送信だけでなく、たくさんいるノード上で動くデーモン同士が常時通信しています。 そのためのRPCのコードは、もともとJDKに含まれている機能と、Protocol Buffersを利用して作られています。
  14. Protocol Buffersはシリアライゼーションのためのライブラリです。 Googleで作られたもので、最近ではKubernetesとか、マイクロサービスみたいな文脈で、gRPCとセットで世の中に普及したという印象です。 似たような位置付けのツールとしては、ThriftとかAvro、MessagePackなどが挙げられます。 Protocol Buffersでは、ノード間のやりとりで使うメッセージとAPIを独自形式の記法で定義します。 その定義に対してコマンドを実行すると、各種プログラミング言語向けのソースコードを、出力してくれます。 Javaの場合だと、メッセージに対応するClassと、APIに対応するInterfaceが出力されます。 生成されたクラスには、オブジェクトとバイト列を相互変換するためのコードが入っています。 Hadoop側では、そのクラスとインタフェースを利用して、ソケット経由でメッセージをやりとりするみたいなRPCフレームワークを実装しているというわけです。
  15. Protocol Buffersでは、メッセージの中にoptional、つまりあってもなくてもよいフィールドを定義できます。 何か新機能で使うために既存のメッセージにフィールドを追加したい場合、optionalにしておくと、互換性をキープすることができます。 というのは、変更前のバージョンのメッセージは、optionalなフィールドの値を持たない場合として解釈できて、新旧のバージョンのコード/メッセージが混在しても大丈夫だからです。 optionalなフィールドを追加するのは容易なのですが、既にあるフィールドを変更したり削除したりすることは、簡単にはできません。
  16. また、Protocol Buffersは複数のプログラミング言語に対応しています。 Hadoopビルトインのコードではその一部だけ活用していて、Java以外では唯一C++のパーツが使われています。
  17. Protocol Buffersで定義したメッセージは、互換性を保って変更しやすいという話をしましたが、Protocol Buffersそれ自体のバージョンアップは大仕事になってしまいます。 Hadoopはかなり長いあいだ2.5.0を使い続けていたのですが、昨年3.7.1にアップグレードされました。 ただし、新しいやつに問題があった時に切り戻したり、RPCのコードを他のプロダクトが使っていたりする関係で、古いバージョンのモジュールも残されています。 いうなれば、モジュールを足すのは互換性を保ったままできるが、変更/削除はそうではありません。 この例の場合だと、RPCエンジンを切り替えて使うための抽象化が必要で、コードが読みにくくなるので、追加が容易ってほど容易ではないですが。。
  18. 続いて、プロダクト間の依存関係の話です。
  19. Hadoopは、Mavenを利用しています。 Hadoopは多くのプロダクトに依存しているし、Hadoopエコシステムの多くのプロダクトから依存されています。 Hadoopエコシステム内でも、相互に依存関係がついています。 そしてHadoopはエンドユーザのアプリケーションコードを呼び出す、フレームワークです。 そのため、HadoopのアプリケーションやHadoopエコシステムのミドルウェアと、同じライブラリの違うバージョンに依存するという、競合状態が発生しがちです。 競合しがちものを挙げると、SLF4Jやlog4jといったロギングライブラリ、commons-なんちゃらというASFの共通ライブラリ、JSONを処理するためのJackson、Googleの便利ライブラリ集であるGuava、ネットワークサーバ系を作るのに使うnetty, jetty, jersey、さっき話題に上がったprotocol buffers、ノード間のコーディネーションに利用するzookeeper、みたいな感じでいろいろあります。
  20. Mevenで設定した依存ライブラリの依存ライブラリも、コンパイルや実行に必要になります。 Javaの場合、同一クラスローダ上に、同じクラスの異なるバージョンを並存することはできません。 そのため、依存関係のツリー上に同一プロダクトの異なるバージョンがある場合、もっとも距離が近いものが選ばれます。 このスライドの例だと、hadoopが依存しているhttpclientはcommons-logging-1.2に依存しています。 同時に、hadoop-commonはcommons-logging-1.1.3に依存しています。 この場合hadoop-common自体に設定されている依存性が1ホップで一番近いので、commons-logging-1.1.3が選ばれます。 ただし、commons-logging-1.2向けにコンパイルされたhttpclientを、commons-logging-1.1.3と組み合わせて動くという保証はありません。 メジャーバージョンが同じだし、マイナーバージョンも近いので問題なさそうだなーと期待されはするのですが、それでも問題が起きることはあります。 ここで上げた例はHadoopの依存関係の例ですが、Hadoopに依存するプロダクトの依存関係ツリーは、さらに深く、競合が起こりやすいものになります。
  21. そういう状況を避けるためにつくられたのが、shaded clientと呼ばれるモジュールです。 Hadoop 3.0.0から使えるようになりました。 maven-shade-pluginのrelocation機能を使って、依存ライブラリとその呼び出し箇所のパッケージ名を、バイトコード上で書き換えます。 これによってライブラリを自分専用のものにして、Hadoopに依存するコードとの競合を避けています。 パッケージ名を書き換えて別の名前になったクラスは、オリジナルのクラスの別のバージョンと共存できるようになるわけです。 hadoop-client-apiにはrelocateしたHadoopのクラスが、hadoop-client-runtimeにはrelocateされた依存ライブラリ一式が入っていて、セットで利用します。 必要なクラスが全て入ったfat jarなので、サイズがかなり大きいです。 hadoop-client-runtimeに入っているクラスのファイル名をみると、オリジナルのパッケージ名にプレフィクスをつけて、別の名前としていることがわかります。
  22. ちなみに、注意点としては、パッケージ名を置き換える対象になっているクラスが、APIの引数に使われていると、呼び出し元とshaded client側でクラス名の食い違いが起きるので、まずいです。 また、バイトコードの書き換えのために、ビルドにすごく時間がかかります。 開発者が日常的にコードを修正してビルドするときには、shaded clientはスキップして時間短縮できるようになっています。
  23. さらに同じ方向の取り組みとして、relocateしたプロダクトを、独立のアーティファクトとしてリリースしたものが、hadoop-thirdpartyです。 shaded clientは外から使われるためのhadoop-clientモジュールに閉じた話ですが、これはより広い範囲でrelocateしたライブラリを使えるようにするものです。 使うときは、relocationされた後のパッケージ名を、ソースコード中で明示的に指定してimportすることになります。 現時点では、特に問題になりがちだった、Protocol Buffers、Guava、Jeagerの3プロダクトが、hadoop-thirdpartyに含まれています。
  24. hadoop-thirdpartyの使われどころとしてわかりやすいのは、Protocol Buffersに関する部分です。 Hadoop自体はreocateされたをProtocol Buffers 3.7.1を使いつつ、オリジナルのProtocol Buffers 2.5.0を使ったモジュールを、互換性維持のために残す、みたいなことをしています。
  25. また、エンドユーザのアプリケーションを動かすときに、専用のクラスローダを使うという機能もあります。 指定されたパターンにマッチするパッケージやクラスを、アプリケーションのクラスパスからはロードしないようにするというものです。 この機能で解決できる場面が限定的なこともあって、この方向の改善はあまり進んでいないように見えます。
  26. 依存関係の競合に対するまったく別のアプローチとして、OSGiと呼ばれるモジュールシステムを使う案もありました。 ただし、このフレームワーク向けに大規模に作り変える必要があるので、採用されませんでした。
  27. ここからは、運用に関連する互換性という切り口で、トピックをいくつか紹介します。
  28. HadoopのコードはJavaで実装されていますが、特にユーザが運用上の機能をコンソールから利用するためのCLIが用意されています。 実体としてはJavaプロセスを起動するbashのスクリプトです。 基本的にはエンドユーザが使う想定のものですが、別のミドルウェアがCLIを実行し、その標準出力を読み込んで処理するようなケースも存在します。 そのため、出力のフォーマットを変えたり、うっかりwarningメッセージを標準エラー出力ではなく標準出力に出したりすると、クレームが入ることもあります。 シェルスクリプトはHadoop 3.0.0のリリース前にリファクタリングされ、メンテナンス性を上げるために、bash-3.0以降を前提をするものになっています。 最近のLinuxディストリビューションで、この前提が問題になることはまずないとは思います。
  29. 監査ログは、誰がどういう操作をしたかに関する記録です。 タブ区切りの独自フォーマットになっています。 いまから作るなら、JSONとかにしたほうがよさげではあるのですが、セキュリティ上このログが重要で、機械的に処理してチェックされがちなので、積極的に変えない感じになってます。
  30. 動作状態や性能監視をする上で有用な統計情報は、JMX経由で取得することができます。 また、HTTP経由でJSON形式で取得することもできるようになっています。 フォーマット上、項目を追加することで互換性を損なうことは起こりにくいです。 ただし、既存の項目の変更や削除は避けるべきとなります。
  31. 最後に、パッケージングに関する話題に触れます。
  32. たくさんあるプロダクトを組み合わせて、問題なく動作するような互換性を維持しつづけるのはとても大変です。 どのバージョンとどのバージョンを組み合わせれば動くのかも、エンドユーザにとって自明ではありません。 そこで、オープンソースソフトウェアの世界には、たくさんのプロダクトの機能する組み合わせにあたるディストリビューションを提供する、ディストリビュータと呼ばれる企業が存在します。 典型的には、ソフトウェアパッケージの集合としてのディストリビューションを継続的に維持し、それに対するテクニカルサポートを、年額いくらで提供するみたいな形です。 Linuxのディストリビューションを提供するRed Hat社が、その成功例、代表例としてよく知られています。 Red Hat、プロダクトのベースバージョンを固定して、コミュニティ版のバグ修正や機能追加を、互換性を壊さない形でバックポートしていきます。 これによって、マイナーバージョンアップならユーザアプリケーションに影響を与えずにできるという状態を維持しています。 Hadoopエコシステムにおいては、Cloudera社が現時点では唯一最大のディストリビュータで、Red Hatと同じようなスタイルで互換性を維持しています。 昔は、Cloudera社のディストリビューションを無償で入手して使うこともできたのですが、いまは有償版のみとなっています。
  33. Hadoopエコシステムのプロダクトのパッケージを行う、コミュニティベースの取り組みが、Apache Bigtopです。 私も一応、開発者としてコントリビュートしています。 やってることは、パッケージングするプロダクトとバージョンの組み合わせを決めて、場合によってはバージョンミスマッチを修正するためのパッチをあてて、.rpmと.debのパッケージングをするための資材を提供しています。 また、ビルドしたパッケージを利用してクラスタを構築するためのプロビジョニング資材も提供しています。 さらに、ローカルホスト上で、Dockerを利用してクラスタを起動し、動作確認を行うためのテスト資材も提供しています。 ただ、コミュニティベースの取り組みゆえ、マンパワーは限られていて、継続的にパッチのバックポートを当てて行ってマイナーアップデートを提供することはできていません。 提供されているテストケースも、あまり網羅性がないです。 みたいな制限はあります。
  34. 今月リリースされたBigtop 1.5.0は、こんな組み合わせを提供しています。 Hadoopのバージョンが今となっては古い2系ですが、masterブランチ上ではHadoop 3系になってて、次のバージョン向けの作業が進んでいます。 OSディストリビューション的には、CentOS、Debian、Ubuntuの最近のやつに対応しています。 アーキテクチャ的にはx86_64とaarch64でテストされてます。
  35. というわけで、まとめです。
  36. 一度世の中で使われるようになったプロダクトは、簡単には変えられません。 メジャーバージョンアップ時には互換性壊しますよと宣言していたとしても、移行の負担が大きいと、ユーザは旧バージョンを使い続けます。 真にまるっと変えたかったら、別のプロダクトとして出したほうが良いです。 今日紹介したトピックの多くに共通することとして、機能の追加は互換性を壊さずにできます。たいがい。 ただし、既にある機能の修正や削除は、できないことが多いです。互換性上。 それがゆえに、メンテナンスしなきゃいけないコードは増える一方になりがちです。辛い。 とはいえ、広く世の中にで使われるソフトウェアであるためには、互換性にまじめに取り組むことは避けられないのかなーとは思います。