SlideShare a Scribd company logo
© 2021 NTT DATA Corporation
03/05/2021
Masatake Iwasaki
NTT DATA
BigtopでHadoopをビルドする
© 2021 NTT DATA Corporation 2
Apache Bigtopの取り組み紹介という切り口で以下の話題についてお話します
Hadoopエコシステムとはなにか
Javaミドルウェアのビルドシステム
Javaミドルウェアの互換性
多くのプロダクトはJavaで実装されていて、Java 8前提の話として聞いてください
ときどき出てくるBIGTOP-12345みたいなのはJIRAのissue keyです
はじめに
© 2021 NTT DATA Corporation 3
HadoopエコシステムとBigtop
© 2021 NTT DATA Corporation 4
大規模データ処理基盤
以下をセットで提供
分散ファイルシステム(HDFS)
計算リソース管理機構(YARN)
分散処理フレームワーク(MapReduce)
汎用的な(Linux)サーバ(〜10000台)でクラスタを構成する
大量のデータを格納し、並列分散処理する
2006年に登場
Googleが論文の形で紹介した技術を参考にして作られたOSS実装
Hadoopとは何か?
© 2021 NTT DATA Corporation 5
実用上、多種多様な周辺ミドルウェアと組み合わせて利用する
Spark: モダンな分散処理基盤/API (deprecating MapReduce)
Hive: SQL(ライクな)言語処理系
HBase: 分散KVS (like Bigtable)
Sqoop: データローダ
Oozie: ワークフロースケジューラ
Ranger: アクセス制御
...
プロダクト間の依存関係は複雑
バージョンアップで互換性に影響する変更がときどき入る
機能するバージョンの組み合わせを見つけるのは大変
Hadoopエコシステム
© 2021 NTT DATA Corporation 6
ディストリビューション: 機能する組み合わせでパッケージングしたもの
企業(ディストリビュータ)がビジネスとして提供する
パッケージング、継続的なupdate、テクニカルサポート
Linux(OS)の例として、Red Hat(IBM社)のRed Hat Enterprise Linux
ベースバージョンを(原則)固定してパッケージング
upstreamの機能追加やバグ修正をbackportしていく
互換性を壊す修正は入れないか、壊さないように直す
minor updateしても(原則)アプリケーションに影響を与えない
HadoopエコシステムではCloudera社がディストリビューションを提供
Red Hat同様のベースバージョン固定方式で互換性を維持
多種プロダクトの動く組み合わせをテストして提供
独自プロビジョニングツールによる運用が前提
(現在は)(CentOSのような)無償版はない
ディストリビューション
© 2021 NTT DATA Corporation 7
コミュニティベースの取り組み
Hadoopエコシステムのミドルウェアのパッケージングを提供
プロダクトとバージョンの組み合わせ選定
必要に応じてパッチ適用
.rpmおよび.debを作るための資材
# 過去に提供/公開されたCDH用の資材がベース
プロビジョニング資材
Dockerファイル/イメージ
クラスタ起動用docker-compose資材
Puppetマニフェスト
テストフレームワークとテストケース
以上をGradleタスクとして簡易に実行する枠組み
継続的なpatchのバックポートやminor updateは提供していない
テストはそれほど網羅的ではない
Apache Bigtop
© 2021 NTT DATA Corporation 8
Products:
Hadoop 2.10.1
Zookeeper 3.4.13
HBase 1.5.0
Phoenix 4.15.0-HBase-1.5
Hive 2.3.6
Spark 2.4.5
Kafka 2.4.0
...
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 (BIGTOP-3123)
© 2021 NTT DATA Corporation 9
Hadoop 3対応が目玉 -> Bigtopのバージョンも分かりやすく1.5 -> 3.0に
Hadoop 3.2.2
Zookeeper 3.4.14
HBase 2.2.6
Phoenix 5.1.0
Hive 3.1.2
Spark 3.0.1
Kafka 2.4.1
...
# masterブランチはすでに上記バージョンにupgrade済
開発が止まった/Hadoop 3.x未対応なプロダクトをdrop
Sqoop2, Giraph, Mahout, ...
古いOSのサポートをやめる (Ubuntu 16.04, Debian 9)
新しいOSのサポート(Ubuntu 20.04, Debian 11?)
# CentOS 8はCentOS Stream 8にするのか、代替ディストリビューションがでるのか?
Bigtop 3.0.0 (BIGTOP-3471)
© 2021 NTT DATA Corporation 10
Compatibility
© 2021 NTT DATA Corporation 11
HadoopはJavaで実装されている
Java部分は多くのプラットフォームで動く
性能向上等の目的で(Cで書かれた)nativeコードをJNI経由で利用
nativeコードがなければpure Java実装にフォールバック
実用上Linuxのシステムコール前提な部分が多い
サーバ側は実態としてLinux前提
コード上にWindows対応の名残はあるけどあまりメンテされてない
Microsoft AzureのHDInsightもUbuntuを利用
# Amazon EMRはAmazon Linux
BigtopもLinuxのみを対象にパッケージングを行なっている
プラットフォーム互換性
© 2021 NTT DATA Corporation 12
Javaではpublic, protected, privateのような修飾子で可視性を制御
publicなクラス/メソッドが外部から呼べるAPI
削除したりシグネチャ/仕様を変えると非互換な変更
呼び出している側が動かなくなったり、ビルドが通らなくなったりする
ユーザ向けではないが、モジュール間で参照する意図でpublicなクラス/メソッドも多い
(Hadoopは)それを示すためのInterfaceAudienceアノテーションを使っている
@InterfaceAudience.PublicなものだけJavadocが出力される
@InterfaceAudience.Privateだとマイナーバージョンアップでも変更されうる
アノテーションがついてるから外から呼べなくなるわけではない
歴史的経緯で外部から呼ばれていることもありがち
Java 9(以降)に移行するとモジュール機能(JPMS)で整理することもできるはずだけど...
JavaのAPI
@InterfaceAudience.LimitedPrivate({ "MapReduce", "HBase" })
@InterfaceStability.Unstable
public class DistributedFileSystem extends FileSystem
implements KeyProviderTokenIssuer, BatchListingOperations {
DistributedFileSystem.java:
© 2021 NTT DATA Corporation 13
Hadoopエコシステムのプロダクト(の多く)はMavenを利用
多くのプロダクトに依存し多くのプロダクトから依存される
ミドルウェア間で競合しがちなdependencies
SLF4J, Log4j
commons-logging, commons-cli, commons-httpclient
Jackson
Guava
Netty, Jetty, Jersey
protobuf-java
ZooKeeper, Curator
...
Mavenのdependency
© 2021 NTT DATA Corporation 14
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:
© 2021 NTT DATA Corporation 15
Javaで実装された(主に運用用の)APIを呼び出すモジュールを実行するシェルスクリプト
dependentがAPIではなくCLIを実行し、出力をparseすることもある
出力のフォーマットの変更や、warning出力の追加が問題になりがち (HADOOP-11257)
bash-3.0以上が前提 (HADOOP-9902)
CLI
© 2021 NTT DATA Corporation 16
誰がどういう操作をしたかの記録
タブ区切りの独自フォーマット
いまならもっとよいフォーマットにできそうだが..
機械的に処理してチェックされがちなので積極的に変えない
監査ログ
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ログ(の一部):
© 2021 NTT DATA Corporation 17
動作状態や性能を監視する上で有用な統計情報など
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を利用したメトリクス取得:
© 2021 NTT DATA Corporation 18
各プロダクトの開発者は(基本的には)それぞれ別の人
テストコードから外部向けではないAPIが使われがち
ライブラリを脆弱性起因でバージョンアップしたら非互換な変更もセットでついてきたり
互換性は意外とよく壊れる
© 2021 NTT DATA Corporation 19
building Hadoop
© 2021 NTT DATA Corporation 20
Hadoop 3.2.2のビルドに必要なもの
JDK 8
Maven (>= 3.3.0)
Protocol Buffers 2.5.0
# Hadoop 3.3.0以降だとProtocol Buffers 3.7.1
# protobuf-maven-pluginが使われてるけど、それでも必要
条件を満たしているかmaven-enforcer-pluginのチェックが入る
Hadoopのビルド
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<inherited>false</inherited>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.3.0,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>1.8</version>
</requireJavaVersion>
hadoop-assemblies/pom.xml:
© 2021 NTT DATA Corporation 21
パッケージングするためにbinary tarball(とsource tarball)を作る
binary tarball:
ダウンロードして実行可能なファイル一式
*.jarとresources
Javaプロセスを起動するためのCLI/スクリプト
設定ファイル
ネイティブライブラリ
各プロダクトが用意したprofileのうち必要なものを有効化する
関連プロダクトのバージョンをBigtopのパッケージング対象に合わせる
BigtopによるHadoopビルド
mvn install 
-DskipTests  # ユニットテストを実行しない
-Psrc  # source tarballを作る
-Pdist  # binary tarballを作る
-Dzookeeper.version=3.4.14 -Djetty.version=9.3.29.v20201019  # バージョンすり合わせ
-Pnative  # nativeライブラリ(後述)を作る
-Dsnappy.prefix=x -Dbundle.snappy=true -Dsnappy.lib=/usr/lib64 # nativeライブラリ関連のオプション設定
BigtopによるHadoopビルド時のコマンドライン(を説明用に改変したもの):
© 2021 NTT DATA Corporation 22
nativeコードを利用する機能
libhadoop.so
compression codec(lz4, snappy, zlib, zstd)
高速化(CRC32 by SSE42, user/group mapping)
HDFSの諸機能(SCLR, read ahead/drop behind, cacheadmin)
libhdfs (HDFSのCクライアント), libhdfspp (HDFSのC++クライアント)
Linux container-executor
libnativetask.so (MAPREDUCE-2841)
Hadoop 3.2.2のビルド(native proifle)に必要なもの
GCC
CMake (>= 3.1)
ライブラリ
libtirpc-devel zlib-devel bzip2-devel openssl-devel cyrus-sasl-devel (Cent OS 8の例)
Hadoopのビルド(native proifle)
$ mvn clean install –Pnative -DskipTests
native profileを有効にしてビルドする場合:
© 2021 NTT DATA Corporation 23
ビルド時に必要なライブラリ/ヘッダファイルが存在されば有効化される
Compression codecs: 対応フォーマットの追加/高速化
OpenSSL: 暗号化と乱数生成の高速化
ISA-L: イレージャコーディングの高速化
PMDK: NVMを利用したHDFSのキャッシュ機能
nativeライブラリを利用した機能(optional)
$ sudo dnf --enablerepo=epel,PowerTools install 
> zlib-devel lz4-devel bzip2-devel libzstd-devel snappy-devel libzstd-devel
> openssl-devel cyrus-sasl-devel libpmem-devel nasm
$ git clone https://github.com/intel/isa-l
$ cd isa-l/
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ cd path/to/srcs/hadoop
$ mvn clean install -Pnative -Pdist -Drequire.pmdk -DskipTests
optionalな機能を有効化する手順の例(CentOS 8):
© 2021 NTT DATA Corporation 24
nativeライブラリを使うための条件
ライブラリのpathがシステムプロパティで指定されている
# -Djava.library.path=/usr/lib/hadoop/lib/native
必要な依存ライブラリが存在する
hadoop checknativeコマンドで有効な機能が確認できる
nativeライブラリの状態確認
$ hadoop checknative
Native library checking:
hadoop: true /usr/lib/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
zstd : true /lib64/libzstd.so.1
snappy: true /usr/lib/hadoop/lib/native/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
ISA-L: true /lib64/libisal.so.2
PMDK: true /usr/lib64/libpmem.so.1.0.0
hadoop checknativeコマンドの実行例:
© 2021 NTT DATA Corporation 25
Hadoopプロジェクト配布版binary tarballにもlibhadoop.soは入っている
Linuxなら動くというわけでもない
# ASFの正式なリリースはあくまでsource tarball
# binary tarballはある環境でビルドしたものをおまけ的に提供
# Hadoop 3.2.2の場合Ubuntu 16.04でビルドしたもの
nativeライブラリのポータビリティ
$ hadoop checknative
Native library checking:
hadoop: false
zlib: false
...
$ ldd libhadoop.so
./libhadoop.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so)
linux-vdso.so.1 => (0x00007ffc0959f000)
...
nativeライブラリが使えない状態:
© 2021 NTT DATA Corporation 26
Bigtop basics
© 2021 NTT DATA Corporation 27
ソースコードはGitHubにある
ASF(Apache Software Foundation)のプロジェクト全般
# 2019年4月から
# https://blogs.apache.org/foundation/entry/the-apache-software-foundation-expands
開発の管理はJIRA
https://issues.apache.org/jira/projects/BIGTOP
issueを作ってパッチを添付するかpull requestのリンクを貼る
Bigtopのソースコード
$ git clone https://github.com/apache/bigtop
$ cd bigtop
Bigtopのソースコードの取得:
© 2021 NTT DATA Corporation 28
Gradleを利用して各種処理を実行する
Bigtopのタスク
$ ./gradlew tasks
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project - Bigtop
------------------------------------------------------------
Apache Creadur tasks
--------------------
rat - Runs Apache Rat checks
Build tasks
-----------
assemble - Assembles the outputs of this project.
...
タスク一覧の表示:
© 2021 NTT DATA Corporation 29
部品表
対象プロダクトとそのバージョンなどが記述されている
Bigtop BOM
$ cat bigtop.bom
bigtop { // *the name should be change: the parsing code depends on it*
version = "STACK-VERSION" // *required*
stack { // *required* Fundamental properties of the Stack: JDK, SDK, GDK, etc
'jdk' { version = '1.8'; version_base = version }
'scala' { version = '2.10.4'; version_base = version }
}
...
components {
'hadoop' {
name = 'hadoop'
relNotes = 'Apache Hadoop'
version { base = '3.2.2'; pkg = base; release = 1 }
tarball { destination = "${name}-${version.base}.tar.gz"
source = "${name}-${version.base}-src.tar.gz" }
url { download_path = "/$name/common/$name-${version.base}"
site = "${apache.APACHE_MIRROR}/${download_path}"
archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
}
...
BOMの内容:
© 2021 NTT DATA Corporation 30
Bigtop toolchain
© 2021 NTT DATA Corporation 31
プロダクト群をビルドするための環境をセットアップする資材
Puppetをインストールするスクリプト
ビルドツール群をインストールPuppetマニフェスト
JDK, Maven, GCC, CMake, Protocol Buffers, lib*-devel, ...
OS提供パッケージだとバージョンが合わないものは個別にセットアップ
プラットフォーム差分に対応するためのワークアラウンドを入れることもある
例) aarch64対応のパッチを当ててprotobuf-2.5.0をビルド
bigtop_toolchain
$ sudo bigtop_toolchain/bin/puppetize.sh
$ ./gradlew toolchain
bigtop_toolchainによるビルド環境のセットアップ:
© 2021 NTT DATA Corporation 32
Bigtop packaging
© 2021 NTT DATA Corporation 33
プロダクトをビルドしてパッケージングする
「プロダクト名-pkg」というGradleタスクで実行
.rpmと.debの2種類に対応
その環境に応じたパッケージが作られる
Red Hat系なら.rpm
Debian系なら.deb
bigtop-package
$ ./gradlew hadoop-pkg
$ ./gradlew zookeeper-pkg
$ ./gradlew bigtop-jsvc-pkg bigtop-utils-pkg bigtop-groovy-pkg
パッケージングタスクの実行例:
© 2021 NTT DATA Corporation 34
共通のビルド手順とインストール手順を.debと.rpm用の資材から呼び出して使う
ビルド手順: do-component-build
インストール手順: install_プロダクト名.sh
パッケージング資材
bigtop-packages
├── src
│ ├── common
│ │ ├── hadoop
│ │ │ ├── do-component-build
│ │ │ ├── install_hadoop.sh
│ │
│ ├── deb
│ │ ├── hadoop
│ │ │ ├── control
│ │ │ ├── rules
│ │
│ ├── rpm
│ │ ├── hadoop
│ │ │ ├── SPECS
│ │ │ │ ├── hadoop.spec
パッケージング資材の配置:
© 2021 NTT DATA Corporation 35
パッケージング時にpatch.*diffという名前のファイルをpatchとして適用
リリース版で解決できない問題に対応するため
特定プラットフォームでビルドが失敗する問題への対処
# Ubuntu, x86_64を暗黙に想定しているパターンが多いような
パッケージング対象バージョンに含まれない修正のバックポート
互換性を壊す変更のrevert
プロダクト間のdependencyのつじつま合わせ
プロダクトA, B, Cの3つが同時に動くバージョンの組み合わせが存在しないなど
独自に修正するとしてもpom.xmlぐらい
patchを書いたらなるべくfeedback..
Bigtopパッケージングにおけるパッチ適用
$ find bigtop-packages/src/common/hadoop -name 'patch*.diff' | sort
bigtop-packages/src/common/hadoop/patch0-revert-HADOOP-16598.diff
bigtop-packages/src/common/hadoop/patch1-HADOOP-15939.diff
bigtop-packages/src/common/hadoop/patch2-exclude-spotbugs-annotations.diff
bigtop-packages/src/common/hadoop/patch3-fix-broken-dir-detection.diff
Bigtopが適用するpatch:
© 2021 NTT DATA Corporation 36
$BIGTOP_HOME/output 下に出力されるパッケージファイルでリポジトリを作成する
repoタスクで実行
その環境に応じたリポジトリが作られる (Red Hat系ならYumの、Debian系ならAptの)
パッケージリポジトリの作成
$ ./gradlew repo
$ tree output
...
├── hadoop
│ ├── hadoop-3.2.2-1.el8.src.rpm
│ └── x86_64
│ ├── hadoop-3.2.2-1.el8.x86_64.rpm
│ ├── hadoop-client-3.2.2-1.el8.x86_64.rpm
│ ├── hadoop-conf-pseudo-3.2.2-1.el8.x86_64.rpm
...
│ ├── hadoop-hdfs-3.2.2-1.el8.x86_64.rpm
...
├── repodata
...
│ ├── aa0ff69b812187315d6825fcf7d862c326ac1ba42bf9625e57b826cd6462a68c-filelists.xml.gz
│ ├── cb8d35ada5c22a89e1f65a62229acde45b4175d5281a513fc6e1190d0ce4544c-filelists.sqlite.bz2
│ ├── f2077b7afd203a11428c21ca3c41f02a786fc2f514888274f12f514673d4f88f-primary.xml.gz
│ └── repomd.xml
リポジトリの作成(CentOS 8で実行した場合の例):
© 2021 NTT DATA Corporation 37
「プロダクト名-pkg-ind」というGradleタスクで実行(in Docker container)
異なるOS用のパッケージをビルドできる
Docker Hubのbigtop/slavesのイメージを利用
-POS=centos-7 -Pprefix=trunkだとtrunk-centos-7タグになる(x86_64の場合)
aarch64のマシン上でやるとtrunk-centos-7-aarch64タグ
試行錯誤しつつbigtop-packageの資材を修正する場合には使いにくい(かも)
Dockerコンテナを利用したパッケージング
$ ./gradlew hadoop-pkg-ind -POS=centos-7 -Pprefix=trunk
パッケージングタスクの実行例:
© 2021 NTT DATA Corporation 38
Bigtop provisioning
© 2021 NTT DATA Corporation 39
Dockerコンテナを起動してPuppetでクラスタを構築するスクリプト
事前にDockerとdocker-composeのセットアップが必要
./gradlew docker-provisionerで実行できる(がスクリプトを直接使った方が微妙に便利..)
Docker provisioner
$ cd provisioner/docker
$ ./docker-hadoop.sh 
--create 3 
--image bigtop/puppet:trunk-centos-8 
--memory 8g 
--stack hdfs,yarn,mapreduce 
--repo file:///bigtop-home/output 
--disable-gpg-check
$ ./docker-hadoop.sh --list
Name Command State Ports
------------------------------------------------------------
20210124_122554_r12819_bigtop_1 /sbin/init Up
20210124_122554_r12819_bigtop_2 /sbin/init Up
20210124_122554_r12819_bigtop_3 /sbin/init Up
$ ./docker-hadoop.sh --exec 1 /bin/bash
...
Dockerコンテナを利用したデプロイの例:
© 2021 NTT DATA Corporation 40
docker-hadoop.sh --createで出力されたファイルを見ると参考になる
Bigtopのソースツリーを/bigtop-homeにマウント
Hieraの設定を生成してpuppet apply
Docker provisionerの仕組み
$ cat docker-compose.yml
bigtop:
...
volumes:
- ../../:/bigtop-home
- ./config/hiera.yaml:/etc/puppet/hiera.yaml
- ./config/hieradata:/etc/puppet/hieradata
- ./config/hosts:/etc/hosts
- /sys/fs/cgroup:/sys/fs/cgroup:ro
$ cat config/hieradata/site.yaml
bigtop::hadoop_head_node: b2d614be6039.bigtop.apache.org
hadoop::hadoop_storage_dirs: [/data/1, /data/2]
bigtop::bigtop_repo_uri: file:///bigtop-home/output
bigtop::bigtop_repo_gpg_check: false
hadoop_cluster_node::cluster_components: [hdfs,yarn,mapreduce]
hadoop_cluster_node::cluster_nodes: [172.17.0.3, 172.17.0.4, 172.17.0.2]
...
Docker provisionerの設定ファイル(の一部):
© 2021 NTT DATA Corporation 41
Hadoopクラスタを構築するためのPuppetマニフェスト
Docker provisioner抜きで使うこともできる
bigtop-deploy
$ tree bigtop-deploy/puppet
bigtop-deploy/puppet
├── hieradata
│ ├── bigtop
│ │ ├── cluster.yaml
...
│ └── site.yaml
├── hiera.yaml
├── manifests
│ ├── bigtop_repo.pp
│ ├── cluster.pp
...
│ ├── hadoop
...
│ │ ├── manifests
│ │ │ └── init.pp
│ │ └── templates
│ │ ├── container-executor.cfg
│ │ ├── core-site.xml
...
Puppetマニフェストのファイルツリー:
© 2021 NTT DATA Corporation 42
スクリプト経由でコンテナ停止と、一時ファイル等の削除
クラスタ起動中の問題などでやり直す場合も、まず一度--destroyしてから
Dockerクラスタの終了
$ ./docker-hadoop.sh --destroy
Dockerコンテナクラスタの停止:
© 2021 NTT DATA Corporation 43
Bigtop tests
© 2021 NTT DATA Corporation 44
パッケージをデプロイした状態で動くかざっくり確認するためのテスト
おもにGroovyで書かれている
CLIを実行して期待する出力が得られるかを確認というパターンが多い
smoke-tests
$ cat bigtop-tests/test-artifacts/hadoop/src/main/groovy/.../hdfs/TestTextSnappy.groovy
...
@Test
void testTextSnappy() {
String cmd = "hadoop fs -text ${testDir}/${snappyFileName}"
System.out.println(cmd)
sh.exec(cmd)
String output = sh.getOut().join("n")
logError(sh)
String expected = "1traffertyt31n2tjonest33n3tsteinbergt33"
System.out.println("Expected output:n${expected}")
System.out.println("Actual output:n${output}")
assertEquals("Incorrect output", expected, output)
}
smoke-testsのテストケースの例:
© 2021 NTT DATA Corporation 45
Docker provisionerで起動したクラスタ上でテストを実行できる
やっていることはgradleタスクの実行
--smoke-test hdfs だと bigtop-tests:smoke-tests:hdfs:test タスク
Docker provisionerでtestを実行
$ ./docker-hadoop.sh --smoke-tests hdfs,yarn,mapreduce
起動済みのDockerコンテナを利用してsmoke testsを実行:
© 2021 NTT DATA Corporation 46
Summary
© 2021 NTT DATA Corporation 47
Apache Bigtopがやってるのは泥臭い作業
Hadoopエコシステムを使う敷居を下げるには必要
いろいろ勉強にはなる
RedHat系とDebian系のOSいろいろ
Java/Mavenのdependency managementの仕組みと苦労
ネイティブライブラリにまつわるあれこれ
コンテナやプロビジョニングツールを利用したテストとCI
Amazon EMRやAzure HDInsightの理解にも役立つ?
使ってみたり、パッチを投げてみたりしてください
まとめ
© 2021 NTT DATA Corporation
本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

What's hot

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
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
Preferred Networks
 
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
 
大量のデータ処理や分析に使える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 発表資料)
NTT DATA Technology & Innovation
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
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
 
Hiveを高速化するLLAP
Hiveを高速化するLLAPHiveを高速化するLLAP
Hiveを高速化するLLAP
Yahoo!デベロッパーネットワーク
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
大規模データ処理の定番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
 
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
Yahoo!デベロッパーネットワーク
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
 
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)
Noritaka Sekiyama
 
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 ...
NTT DATA Technology & Innovation
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
NTT DATA Technology & Innovation
 
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Yahoo!デベロッパーネットワーク
 
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Yoshiyasu SAEKI
 
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!デベロッパーネットワーク
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
Ken SASAKI
 

What's hot (20)

Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
 
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 発表資料)
 
大量のデータ処理や分析に使える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 発表資料)
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
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 発表資料)
 
Hiveを高速化するLLAP
Hiveを高速化するLLAPHiveを高速化するLLAP
Hiveを高速化するLLAP
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
大規模データ処理の定番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 発...
 
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
 
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)
 
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 ...
 
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...
 
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
 
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
 
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...
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
 

Similar to BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)

DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
VirtualTech Japan Inc.
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
ksk_ha
 
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
 
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTT DATA OSS Professional Services
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
NTT DATA OSS Professional Services
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
Yasuhiro Arai
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
NTT DATA OSS Professional Services
 
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
 
perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)
Daichi Egawa
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
NTT DATA OSS Professional Services
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
NTT DATA OSS Professional Services
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
Insight Technology, Inc.
 
並列分散処理基盤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
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
NTT DATA OSS Professional Services
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
samemoon
 

Similar to BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料) (20)

DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
DeNA private cloud のその後 - OpenStack最新情報セミナー(2017年3月)
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
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データ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
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)
 
perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
[db tech showcase Tokyo 2017] A32: Attunity Replicate + Kafka + Hadoop マルチデータ...
 
並列分散処理基盤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 ...
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 

More from NTT DATA Technology & Innovation

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

More from NTT DATA Technology & Innovation (20)

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

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 

BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)

  • 1. © 2021 NTT DATA Corporation 03/05/2021 Masatake Iwasaki NTT DATA BigtopでHadoopをビルドする
  • 2. © 2021 NTT DATA Corporation 2 Apache Bigtopの取り組み紹介という切り口で以下の話題についてお話します Hadoopエコシステムとはなにか Javaミドルウェアのビルドシステム Javaミドルウェアの互換性 多くのプロダクトはJavaで実装されていて、Java 8前提の話として聞いてください ときどき出てくるBIGTOP-12345みたいなのはJIRAのissue keyです はじめに
  • 3. © 2021 NTT DATA Corporation 3 HadoopエコシステムとBigtop
  • 4. © 2021 NTT DATA Corporation 4 大規模データ処理基盤 以下をセットで提供 分散ファイルシステム(HDFS) 計算リソース管理機構(YARN) 分散処理フレームワーク(MapReduce) 汎用的な(Linux)サーバ(〜10000台)でクラスタを構成する 大量のデータを格納し、並列分散処理する 2006年に登場 Googleが論文の形で紹介した技術を参考にして作られたOSS実装 Hadoopとは何か?
  • 5. © 2021 NTT DATA Corporation 5 実用上、多種多様な周辺ミドルウェアと組み合わせて利用する Spark: モダンな分散処理基盤/API (deprecating MapReduce) Hive: SQL(ライクな)言語処理系 HBase: 分散KVS (like Bigtable) Sqoop: データローダ Oozie: ワークフロースケジューラ Ranger: アクセス制御 ... プロダクト間の依存関係は複雑 バージョンアップで互換性に影響する変更がときどき入る 機能するバージョンの組み合わせを見つけるのは大変 Hadoopエコシステム
  • 6. © 2021 NTT DATA Corporation 6 ディストリビューション: 機能する組み合わせでパッケージングしたもの 企業(ディストリビュータ)がビジネスとして提供する パッケージング、継続的なupdate、テクニカルサポート Linux(OS)の例として、Red Hat(IBM社)のRed Hat Enterprise Linux ベースバージョンを(原則)固定してパッケージング upstreamの機能追加やバグ修正をbackportしていく 互換性を壊す修正は入れないか、壊さないように直す minor updateしても(原則)アプリケーションに影響を与えない HadoopエコシステムではCloudera社がディストリビューションを提供 Red Hat同様のベースバージョン固定方式で互換性を維持 多種プロダクトの動く組み合わせをテストして提供 独自プロビジョニングツールによる運用が前提 (現在は)(CentOSのような)無償版はない ディストリビューション
  • 7. © 2021 NTT DATA Corporation 7 コミュニティベースの取り組み Hadoopエコシステムのミドルウェアのパッケージングを提供 プロダクトとバージョンの組み合わせ選定 必要に応じてパッチ適用 .rpmおよび.debを作るための資材 # 過去に提供/公開されたCDH用の資材がベース プロビジョニング資材 Dockerファイル/イメージ クラスタ起動用docker-compose資材 Puppetマニフェスト テストフレームワークとテストケース 以上をGradleタスクとして簡易に実行する枠組み 継続的なpatchのバックポートやminor updateは提供していない テストはそれほど網羅的ではない Apache Bigtop
  • 8. © 2021 NTT DATA Corporation 8 Products: Hadoop 2.10.1 Zookeeper 3.4.13 HBase 1.5.0 Phoenix 4.15.0-HBase-1.5 Hive 2.3.6 Spark 2.4.5 Kafka 2.4.0 ... 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 (BIGTOP-3123)
  • 9. © 2021 NTT DATA Corporation 9 Hadoop 3対応が目玉 -> Bigtopのバージョンも分かりやすく1.5 -> 3.0に Hadoop 3.2.2 Zookeeper 3.4.14 HBase 2.2.6 Phoenix 5.1.0 Hive 3.1.2 Spark 3.0.1 Kafka 2.4.1 ... # masterブランチはすでに上記バージョンにupgrade済 開発が止まった/Hadoop 3.x未対応なプロダクトをdrop Sqoop2, Giraph, Mahout, ... 古いOSのサポートをやめる (Ubuntu 16.04, Debian 9) 新しいOSのサポート(Ubuntu 20.04, Debian 11?) # CentOS 8はCentOS Stream 8にするのか、代替ディストリビューションがでるのか? Bigtop 3.0.0 (BIGTOP-3471)
  • 10. © 2021 NTT DATA Corporation 10 Compatibility
  • 11. © 2021 NTT DATA Corporation 11 HadoopはJavaで実装されている Java部分は多くのプラットフォームで動く 性能向上等の目的で(Cで書かれた)nativeコードをJNI経由で利用 nativeコードがなければpure Java実装にフォールバック 実用上Linuxのシステムコール前提な部分が多い サーバ側は実態としてLinux前提 コード上にWindows対応の名残はあるけどあまりメンテされてない Microsoft AzureのHDInsightもUbuntuを利用 # Amazon EMRはAmazon Linux BigtopもLinuxのみを対象にパッケージングを行なっている プラットフォーム互換性
  • 12. © 2021 NTT DATA Corporation 12 Javaではpublic, protected, privateのような修飾子で可視性を制御 publicなクラス/メソッドが外部から呼べるAPI 削除したりシグネチャ/仕様を変えると非互換な変更 呼び出している側が動かなくなったり、ビルドが通らなくなったりする ユーザ向けではないが、モジュール間で参照する意図でpublicなクラス/メソッドも多い (Hadoopは)それを示すためのInterfaceAudienceアノテーションを使っている @InterfaceAudience.PublicなものだけJavadocが出力される @InterfaceAudience.Privateだとマイナーバージョンアップでも変更されうる アノテーションがついてるから外から呼べなくなるわけではない 歴史的経緯で外部から呼ばれていることもありがち Java 9(以降)に移行するとモジュール機能(JPMS)で整理することもできるはずだけど... JavaのAPI @InterfaceAudience.LimitedPrivate({ "MapReduce", "HBase" }) @InterfaceStability.Unstable public class DistributedFileSystem extends FileSystem implements KeyProviderTokenIssuer, BatchListingOperations { DistributedFileSystem.java:
  • 13. © 2021 NTT DATA Corporation 13 Hadoopエコシステムのプロダクト(の多く)はMavenを利用 多くのプロダクトに依存し多くのプロダクトから依存される ミドルウェア間で競合しがちなdependencies SLF4J, Log4j commons-logging, commons-cli, commons-httpclient Jackson Guava Netty, Jetty, Jersey protobuf-java ZooKeeper, Curator ... Mavenのdependency
  • 14. © 2021 NTT DATA Corporation 14 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:
  • 15. © 2021 NTT DATA Corporation 15 Javaで実装された(主に運用用の)APIを呼び出すモジュールを実行するシェルスクリプト dependentがAPIではなくCLIを実行し、出力をparseすることもある 出力のフォーマットの変更や、warning出力の追加が問題になりがち (HADOOP-11257) bash-3.0以上が前提 (HADOOP-9902) CLI
  • 16. © 2021 NTT DATA Corporation 16 誰がどういう操作をしたかの記録 タブ区切りの独自フォーマット いまならもっとよいフォーマットにできそうだが.. 機械的に処理してチェックされがちなので積極的に変えない 監査ログ 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ログ(の一部):
  • 17. © 2021 NTT DATA Corporation 17 動作状態や性能を監視する上で有用な統計情報など 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を利用したメトリクス取得:
  • 18. © 2021 NTT DATA Corporation 18 各プロダクトの開発者は(基本的には)それぞれ別の人 テストコードから外部向けではないAPIが使われがち ライブラリを脆弱性起因でバージョンアップしたら非互換な変更もセットでついてきたり 互換性は意外とよく壊れる
  • 19. © 2021 NTT DATA Corporation 19 building Hadoop
  • 20. © 2021 NTT DATA Corporation 20 Hadoop 3.2.2のビルドに必要なもの JDK 8 Maven (>= 3.3.0) Protocol Buffers 2.5.0 # Hadoop 3.3.0以降だとProtocol Buffers 3.7.1 # protobuf-maven-pluginが使われてるけど、それでも必要 条件を満たしているかmaven-enforcer-pluginのチェックが入る Hadoopのビルド <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <inherited>false</inherited> <configuration> <rules> <requireMavenVersion> <version>[3.3.0,)</version> </requireMavenVersion> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> hadoop-assemblies/pom.xml:
  • 21. © 2021 NTT DATA Corporation 21 パッケージングするためにbinary tarball(とsource tarball)を作る binary tarball: ダウンロードして実行可能なファイル一式 *.jarとresources Javaプロセスを起動するためのCLI/スクリプト 設定ファイル ネイティブライブラリ 各プロダクトが用意したprofileのうち必要なものを有効化する 関連プロダクトのバージョンをBigtopのパッケージング対象に合わせる BigtopによるHadoopビルド mvn install -DskipTests # ユニットテストを実行しない -Psrc # source tarballを作る -Pdist # binary tarballを作る -Dzookeeper.version=3.4.14 -Djetty.version=9.3.29.v20201019 # バージョンすり合わせ -Pnative # nativeライブラリ(後述)を作る -Dsnappy.prefix=x -Dbundle.snappy=true -Dsnappy.lib=/usr/lib64 # nativeライブラリ関連のオプション設定 BigtopによるHadoopビルド時のコマンドライン(を説明用に改変したもの):
  • 22. © 2021 NTT DATA Corporation 22 nativeコードを利用する機能 libhadoop.so compression codec(lz4, snappy, zlib, zstd) 高速化(CRC32 by SSE42, user/group mapping) HDFSの諸機能(SCLR, read ahead/drop behind, cacheadmin) libhdfs (HDFSのCクライアント), libhdfspp (HDFSのC++クライアント) Linux container-executor libnativetask.so (MAPREDUCE-2841) Hadoop 3.2.2のビルド(native proifle)に必要なもの GCC CMake (>= 3.1) ライブラリ libtirpc-devel zlib-devel bzip2-devel openssl-devel cyrus-sasl-devel (Cent OS 8の例) Hadoopのビルド(native proifle) $ mvn clean install –Pnative -DskipTests native profileを有効にしてビルドする場合:
  • 23. © 2021 NTT DATA Corporation 23 ビルド時に必要なライブラリ/ヘッダファイルが存在されば有効化される Compression codecs: 対応フォーマットの追加/高速化 OpenSSL: 暗号化と乱数生成の高速化 ISA-L: イレージャコーディングの高速化 PMDK: NVMを利用したHDFSのキャッシュ機能 nativeライブラリを利用した機能(optional) $ sudo dnf --enablerepo=epel,PowerTools install > zlib-devel lz4-devel bzip2-devel libzstd-devel snappy-devel libzstd-devel > openssl-devel cyrus-sasl-devel libpmem-devel nasm $ git clone https://github.com/intel/isa-l $ cd isa-l/ $ ./autogen.sh $ ./configure $ make $ sudo make install $ cd path/to/srcs/hadoop $ mvn clean install -Pnative -Pdist -Drequire.pmdk -DskipTests optionalな機能を有効化する手順の例(CentOS 8):
  • 24. © 2021 NTT DATA Corporation 24 nativeライブラリを使うための条件 ライブラリのpathがシステムプロパティで指定されている # -Djava.library.path=/usr/lib/hadoop/lib/native 必要な依存ライブラリが存在する hadoop checknativeコマンドで有効な機能が確認できる nativeライブラリの状態確認 $ hadoop checknative Native library checking: hadoop: true /usr/lib/hadoop/lib/native/libhadoop.so.1.0.0 zlib: true /lib64/libz.so.1 zstd : true /lib64/libzstd.so.1 snappy: true /usr/lib/hadoop/lib/native/libsnappy.so.1 lz4: true revision:10301 bzip2: true /lib64/libbz2.so.1 openssl: true /lib64/libcrypto.so ISA-L: true /lib64/libisal.so.2 PMDK: true /usr/lib64/libpmem.so.1.0.0 hadoop checknativeコマンドの実行例:
  • 25. © 2021 NTT DATA Corporation 25 Hadoopプロジェクト配布版binary tarballにもlibhadoop.soは入っている Linuxなら動くというわけでもない # ASFの正式なリリースはあくまでsource tarball # binary tarballはある環境でビルドしたものをおまけ的に提供 # Hadoop 3.2.2の場合Ubuntu 16.04でビルドしたもの nativeライブラリのポータビリティ $ hadoop checknative Native library checking: hadoop: false zlib: false ... $ ldd libhadoop.so ./libhadoop.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so) linux-vdso.so.1 => (0x00007ffc0959f000) ... nativeライブラリが使えない状態:
  • 26. © 2021 NTT DATA Corporation 26 Bigtop basics
  • 27. © 2021 NTT DATA Corporation 27 ソースコードはGitHubにある ASF(Apache Software Foundation)のプロジェクト全般 # 2019年4月から # https://blogs.apache.org/foundation/entry/the-apache-software-foundation-expands 開発の管理はJIRA https://issues.apache.org/jira/projects/BIGTOP issueを作ってパッチを添付するかpull requestのリンクを貼る Bigtopのソースコード $ git clone https://github.com/apache/bigtop $ cd bigtop Bigtopのソースコードの取得:
  • 28. © 2021 NTT DATA Corporation 28 Gradleを利用して各種処理を実行する Bigtopのタスク $ ./gradlew tasks > Task :tasks ------------------------------------------------------------ Tasks runnable from root project - Bigtop ------------------------------------------------------------ Apache Creadur tasks -------------------- rat - Runs Apache Rat checks Build tasks ----------- assemble - Assembles the outputs of this project. ... タスク一覧の表示:
  • 29. © 2021 NTT DATA Corporation 29 部品表 対象プロダクトとそのバージョンなどが記述されている Bigtop BOM $ cat bigtop.bom bigtop { // *the name should be change: the parsing code depends on it* version = "STACK-VERSION" // *required* stack { // *required* Fundamental properties of the Stack: JDK, SDK, GDK, etc 'jdk' { version = '1.8'; version_base = version } 'scala' { version = '2.10.4'; version_base = version } } ... components { 'hadoop' { name = 'hadoop' relNotes = 'Apache Hadoop' version { base = '3.2.2'; pkg = base; release = 1 } tarball { destination = "${name}-${version.base}.tar.gz" source = "${name}-${version.base}-src.tar.gz" } url { download_path = "/$name/common/$name-${version.base}" site = "${apache.APACHE_MIRROR}/${download_path}" archive = "${apache.APACHE_ARCHIVE}/${download_path}" } } ... BOMの内容:
  • 30. © 2021 NTT DATA Corporation 30 Bigtop toolchain
  • 31. © 2021 NTT DATA Corporation 31 プロダクト群をビルドするための環境をセットアップする資材 Puppetをインストールするスクリプト ビルドツール群をインストールPuppetマニフェスト JDK, Maven, GCC, CMake, Protocol Buffers, lib*-devel, ... OS提供パッケージだとバージョンが合わないものは個別にセットアップ プラットフォーム差分に対応するためのワークアラウンドを入れることもある 例) aarch64対応のパッチを当ててprotobuf-2.5.0をビルド bigtop_toolchain $ sudo bigtop_toolchain/bin/puppetize.sh $ ./gradlew toolchain bigtop_toolchainによるビルド環境のセットアップ:
  • 32. © 2021 NTT DATA Corporation 32 Bigtop packaging
  • 33. © 2021 NTT DATA Corporation 33 プロダクトをビルドしてパッケージングする 「プロダクト名-pkg」というGradleタスクで実行 .rpmと.debの2種類に対応 その環境に応じたパッケージが作られる Red Hat系なら.rpm Debian系なら.deb bigtop-package $ ./gradlew hadoop-pkg $ ./gradlew zookeeper-pkg $ ./gradlew bigtop-jsvc-pkg bigtop-utils-pkg bigtop-groovy-pkg パッケージングタスクの実行例:
  • 34. © 2021 NTT DATA Corporation 34 共通のビルド手順とインストール手順を.debと.rpm用の資材から呼び出して使う ビルド手順: do-component-build インストール手順: install_プロダクト名.sh パッケージング資材 bigtop-packages ├── src │ ├── common │ │ ├── hadoop │ │ │ ├── do-component-build │ │ │ ├── install_hadoop.sh │ │ │ ├── deb │ │ ├── hadoop │ │ │ ├── control │ │ │ ├── rules │ │ │ ├── rpm │ │ ├── hadoop │ │ │ ├── SPECS │ │ │ │ ├── hadoop.spec パッケージング資材の配置:
  • 35. © 2021 NTT DATA Corporation 35 パッケージング時にpatch.*diffという名前のファイルをpatchとして適用 リリース版で解決できない問題に対応するため 特定プラットフォームでビルドが失敗する問題への対処 # Ubuntu, x86_64を暗黙に想定しているパターンが多いような パッケージング対象バージョンに含まれない修正のバックポート 互換性を壊す変更のrevert プロダクト間のdependencyのつじつま合わせ プロダクトA, B, Cの3つが同時に動くバージョンの組み合わせが存在しないなど 独自に修正するとしてもpom.xmlぐらい patchを書いたらなるべくfeedback.. Bigtopパッケージングにおけるパッチ適用 $ find bigtop-packages/src/common/hadoop -name 'patch*.diff' | sort bigtop-packages/src/common/hadoop/patch0-revert-HADOOP-16598.diff bigtop-packages/src/common/hadoop/patch1-HADOOP-15939.diff bigtop-packages/src/common/hadoop/patch2-exclude-spotbugs-annotations.diff bigtop-packages/src/common/hadoop/patch3-fix-broken-dir-detection.diff Bigtopが適用するpatch:
  • 36. © 2021 NTT DATA Corporation 36 $BIGTOP_HOME/output 下に出力されるパッケージファイルでリポジトリを作成する repoタスクで実行 その環境に応じたリポジトリが作られる (Red Hat系ならYumの、Debian系ならAptの) パッケージリポジトリの作成 $ ./gradlew repo $ tree output ... ├── hadoop │ ├── hadoop-3.2.2-1.el8.src.rpm │ └── x86_64 │ ├── hadoop-3.2.2-1.el8.x86_64.rpm │ ├── hadoop-client-3.2.2-1.el8.x86_64.rpm │ ├── hadoop-conf-pseudo-3.2.2-1.el8.x86_64.rpm ... │ ├── hadoop-hdfs-3.2.2-1.el8.x86_64.rpm ... ├── repodata ... │ ├── aa0ff69b812187315d6825fcf7d862c326ac1ba42bf9625e57b826cd6462a68c-filelists.xml.gz │ ├── cb8d35ada5c22a89e1f65a62229acde45b4175d5281a513fc6e1190d0ce4544c-filelists.sqlite.bz2 │ ├── f2077b7afd203a11428c21ca3c41f02a786fc2f514888274f12f514673d4f88f-primary.xml.gz │ └── repomd.xml リポジトリの作成(CentOS 8で実行した場合の例):
  • 37. © 2021 NTT DATA Corporation 37 「プロダクト名-pkg-ind」というGradleタスクで実行(in Docker container) 異なるOS用のパッケージをビルドできる Docker Hubのbigtop/slavesのイメージを利用 -POS=centos-7 -Pprefix=trunkだとtrunk-centos-7タグになる(x86_64の場合) aarch64のマシン上でやるとtrunk-centos-7-aarch64タグ 試行錯誤しつつbigtop-packageの資材を修正する場合には使いにくい(かも) Dockerコンテナを利用したパッケージング $ ./gradlew hadoop-pkg-ind -POS=centos-7 -Pprefix=trunk パッケージングタスクの実行例:
  • 38. © 2021 NTT DATA Corporation 38 Bigtop provisioning
  • 39. © 2021 NTT DATA Corporation 39 Dockerコンテナを起動してPuppetでクラスタを構築するスクリプト 事前にDockerとdocker-composeのセットアップが必要 ./gradlew docker-provisionerで実行できる(がスクリプトを直接使った方が微妙に便利..) Docker provisioner $ cd provisioner/docker $ ./docker-hadoop.sh --create 3 --image bigtop/puppet:trunk-centos-8 --memory 8g --stack hdfs,yarn,mapreduce --repo file:///bigtop-home/output --disable-gpg-check $ ./docker-hadoop.sh --list Name Command State Ports ------------------------------------------------------------ 20210124_122554_r12819_bigtop_1 /sbin/init Up 20210124_122554_r12819_bigtop_2 /sbin/init Up 20210124_122554_r12819_bigtop_3 /sbin/init Up $ ./docker-hadoop.sh --exec 1 /bin/bash ... Dockerコンテナを利用したデプロイの例:
  • 40. © 2021 NTT DATA Corporation 40 docker-hadoop.sh --createで出力されたファイルを見ると参考になる Bigtopのソースツリーを/bigtop-homeにマウント Hieraの設定を生成してpuppet apply Docker provisionerの仕組み $ cat docker-compose.yml bigtop: ... volumes: - ../../:/bigtop-home - ./config/hiera.yaml:/etc/puppet/hiera.yaml - ./config/hieradata:/etc/puppet/hieradata - ./config/hosts:/etc/hosts - /sys/fs/cgroup:/sys/fs/cgroup:ro $ cat config/hieradata/site.yaml bigtop::hadoop_head_node: b2d614be6039.bigtop.apache.org hadoop::hadoop_storage_dirs: [/data/1, /data/2] bigtop::bigtop_repo_uri: file:///bigtop-home/output bigtop::bigtop_repo_gpg_check: false hadoop_cluster_node::cluster_components: [hdfs,yarn,mapreduce] hadoop_cluster_node::cluster_nodes: [172.17.0.3, 172.17.0.4, 172.17.0.2] ... Docker provisionerの設定ファイル(の一部):
  • 41. © 2021 NTT DATA Corporation 41 Hadoopクラスタを構築するためのPuppetマニフェスト Docker provisioner抜きで使うこともできる bigtop-deploy $ tree bigtop-deploy/puppet bigtop-deploy/puppet ├── hieradata │ ├── bigtop │ │ ├── cluster.yaml ... │ └── site.yaml ├── hiera.yaml ├── manifests │ ├── bigtop_repo.pp │ ├── cluster.pp ... │ ├── hadoop ... │ │ ├── manifests │ │ │ └── init.pp │ │ └── templates │ │ ├── container-executor.cfg │ │ ├── core-site.xml ... Puppetマニフェストのファイルツリー:
  • 42. © 2021 NTT DATA Corporation 42 スクリプト経由でコンテナ停止と、一時ファイル等の削除 クラスタ起動中の問題などでやり直す場合も、まず一度--destroyしてから Dockerクラスタの終了 $ ./docker-hadoop.sh --destroy Dockerコンテナクラスタの停止:
  • 43. © 2021 NTT DATA Corporation 43 Bigtop tests
  • 44. © 2021 NTT DATA Corporation 44 パッケージをデプロイした状態で動くかざっくり確認するためのテスト おもにGroovyで書かれている CLIを実行して期待する出力が得られるかを確認というパターンが多い smoke-tests $ cat bigtop-tests/test-artifacts/hadoop/src/main/groovy/.../hdfs/TestTextSnappy.groovy ... @Test void testTextSnappy() { String cmd = "hadoop fs -text ${testDir}/${snappyFileName}" System.out.println(cmd) sh.exec(cmd) String output = sh.getOut().join("n") logError(sh) String expected = "1traffertyt31n2tjonest33n3tsteinbergt33" System.out.println("Expected output:n${expected}") System.out.println("Actual output:n${output}") assertEquals("Incorrect output", expected, output) } smoke-testsのテストケースの例:
  • 45. © 2021 NTT DATA Corporation 45 Docker provisionerで起動したクラスタ上でテストを実行できる やっていることはgradleタスクの実行 --smoke-test hdfs だと bigtop-tests:smoke-tests:hdfs:test タスク Docker provisionerでtestを実行 $ ./docker-hadoop.sh --smoke-tests hdfs,yarn,mapreduce 起動済みのDockerコンテナを利用してsmoke testsを実行:
  • 46. © 2021 NTT DATA Corporation 46 Summary
  • 47. © 2021 NTT DATA Corporation 47 Apache Bigtopがやってるのは泥臭い作業 Hadoopエコシステムを使う敷居を下げるには必要 いろいろ勉強にはなる RedHat系とDebian系のOSいろいろ Java/Mavenのdependency managementの仕組みと苦労 ネイティブライブラリにまつわるあれこれ コンテナやプロビジョニングツールを利用したテストとCI Amazon EMRやAzure HDInsightの理解にも役立つ? 使ってみたり、パッチを投げてみたりしてください まとめ
  • 48. © 2021 NTT DATA Corporation 本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

Editor's Notes

  1. Apache Bigtopが行なっている、Hadoopエコシステムのプロダクトのパッケージングに関する取り組みを紹介します。 Hadoopの知識はなくても意外と問題ないかもしれません。 ただしJavaの話が多いので、Javaをまったくしらないとピンとこない部分が多いかもしれません。 Hadoopの現行バージョンはJava 8ベースなので、Bigtopも各プロダクトをJava 8ベースでパッケージングしています。いまとなってはちょっと古いバージョンですよね。 Bigtopも含めてHadoop関連のプロダクトは、JIRAでissue管理をしています。スライドで出てくるBIGTOP-12345みたいな番号は、JIRAのissue idで、これでググると、その話題の詳細を見ることができると思います。
  2. まず、Hadoopエコシステムってなに?という話から入ります。
  3. Hadoopはいわゆるビッグデータを処理するためのプロダクトです。 データを蓄積するための分散ファイルシステムであるHDFS、処理ノードの管理機構であるYARN、YARN上に実装された分散処理フレームワークのMapReduceをセットで提供しています。 汎用的なサーバノードをたくさん並べてクラスタを構成し、データを並列分散処理するためのミドルウェアです。 最初のバージョンがリリースされたのが2006年なので、もう14年前になります。 Googleが自社の検索サービスに利用している技術を論文の形で発表した内容を、参考にして開発されたオープンソースソフトウェアとして知られています。 Hadoopのベースになった技術は、日本では「Googleを支える技術」という書籍で紹介されたことで、知られるようになったと思います。
  4. Hadoopは実用上、それ単体ではなく、いろいろな周辺ミドルウェアと組み合わせて使われます。 MapReduceよりモダンな?フレームワークであるSpark、SQLでデータの操作をするための言語処理系であるHive、Hadoopの分散ファイルシステム上で動く分散KVSに相当するHBase、などが代表的です。 他にも、リレーショナルデータベースなどとの間でデータを出し入れするためのデータローダや、ジョブネット管理的なことをするワークフロースケジューラ、アクセス制御のための基盤、などなどがあります。 こういった周辺ミドルウェアを含めて、Hadoopエコシステムみたいな呼び方をしています。 基本的には別の開発者がそれぞれのプロダクトを作っています。 あるプロダクトに非互換な変更が入ると、それに依存する側でも修正が必要なことになります。 どのバージョンとどのバージョンを組み合わせれば動くのかは、自明ではありません。
  5. オープンソースソフトウェアの世界には、たくさんのプロダクトの機能する組み合わせにあたるディストリビューションを提供する、ディストリビュータと呼ばれる企業が存在します。 典型的には、ソフトウェアパッケージの集合としてのディストリビューションを継続的に維持し、それに対するテクニカルサポートを、年額いくらで提供するみたいな形です。 Linuxのディストリビューションを提供するRed Hat社が、その成功例、代表例としてよく知られています。 Red Hat、プロダクトのベースバージョンを固定して、コミュニティ版のバグ修正や機能追加を、互換性を壊さない形でバックポートしていきます。 これによって、マイナーバージョンアップならユーザアプリケーションに影響を与えずにできるという状態を維持しています。 Hadoopエコシステムにおいては、Cloudera社が現時点では唯一最大のディストリビュータで、Red Hatと同じようなスタイルで互換性を維持しています。 昔は、Cloudera社のディストリビューションを無償で入手して使うこともできたのですが、いまは有償版のみとなっています。
  6. Hadoopエコシステムのプロダクトのパッケージを行う、コミュニティベースの取り組みが、Apache Bigtopです。 私も一応、開発者としてコントリビュートしています。 やってることは、パッケージングするプロダクトとバージョンの組み合わせを決めて、場合によってはバージョンミスマッチを修正するためのパッチをあてて、.rpmと.debのパッケージングをするための資材を提供しています。 また、ビルドしたパッケージを利用してクラスタを構築するためのプロビジョニング資材も提供しています。 さらに、ローカルホスト上で、Dockerを利用してクラスタを起動し、動作確認を行うためのテスト資材も提供しています。 ただ、コミュニティベースの取り組みゆえ、マンパワーは限られていて、継続的にパッチのバックポートを当てて行ってマイナーアップデートを提供することはできていなかったり、 提供されているテストケースも、そこまで網羅性はなかったり、みたいな制限はあります。
  7. Bigtopの最新のリリース版は1.5.0は、こんな組み合わせを提供しています。 一時期活動が停滞していたこともあって、Hadoopのバージョンが今となっては古い2系で、最新感がないかもしれません。 masterブランチ上ではHadoop 3系への対応作業がすでに進んでいます。 OSディストリビューション的には、CentOS、Debian、Ubuntuの最近のやつに対応しています。 アーキテクチャ的にはx86_64とaarch64でテストされてます。
  8. Bigtopの次のバージョンをどういう構成にしようかという議論がBIGTOP-3471というJIRAのissueで行われています。 メインとなる作業はHadoop 3系へのメジャーバージョンアップです。 もともとBigtop 2.0というのが、別の試みを示す名前として使われていたので、わかりやすくBigtop 3.0にしようかという流れになってます。 付随して、HBaseやHiveもメジャーバージョンを上げています。 ここに挙げられているプロダクトについては、既にBigtopのmasterブランチ上でバージョンアップがされています。 また、活動があまりなくなってしまったり、Hadoop 3に未対応のプロダクトを外すことになります。 対応しているOSディストリビューションの入れ替えもあります。 CentOS 8は近いうちになくなっちゃうみたいな話もあるけど、代替ディストリビューションに乗り換えてみるのかどうか、とか。 パッケージング資材は、いまあるCentOS 8用のものが、RHEL 8でもCentOS Stream 8でもそのまま使えそうではあるのですが。
  9. というわけで、Bigtopはプロダクトを組み合わせて使うときの互換性の問題を扱っています。一言で互換性といっても、けっこう色々な側面があるので、ここでもう少し掘り下げてみたいと思います。
  10. HadoopはJavaで実装されていて、Javaの部分については多くのプラットフォームで動きます。 ただし、性能向上等の目的でC言語で書かれたコードをJNIで使う部分があって、そこは実質Linux前提になっています。 一時期Windows対応を頑張っていた開発者もいたのですが、最近ではあまりメンテされていない印象です。 Hadoopクラスタをぱっと立ち上げて利用できるAzureのHDInsightというクラウドサービスがあるのですが、これもWindowsではなくUbuntuのVMが利用されています。 ちなみに、同じようなサービスであるところのAmazon EMRだと、Red Hat系にあたるAmazon Linuxが利用されています。
  11. 多くのプロダクトはJavaおよびScalaのようなJVM言語で実装されていて、JavaのAPIが主要な連携手段です。 Javaの場合クラスやメソッドにpublic、protected、privateみたいな修飾子をつけます。 publicなクラスのpublicなメソッドが、外部から呼び出し可能なコードで、それを消したり、シグネチャを変えてしまうと、それを呼んでいる側が動かなくなったり、ビルドが通らなくなったりします。 そのため、そういう変更はメジャーバージョンアップのときだけ行うというポリシーがあるのですが、仕方なくそういう変更をマイナーアップデートですることが、ないわけではありません。、Hadoopは数多くのサブモジュールまた、Hadoopをはじめとする規模の大きなミドルウェアは多くのサブモッジュールから構成されている都合上、ユーザ向けのAPIではないけれど、モジュール間で呼び出せるようにpublicにしてあるコードも多いです。 エンドユーザ向けのpublicなAPIと、内部的な都合でpublicになってるAPIを区別できるようにするために、アノテーションが利用されています。 InterfaceAudience.Publicというアノテーションがついていると、ユーザ向けのものという意味です。 これがついていないクラスやメソッドは、Javadocにでてこなくなります。 とはいえ、昔からある周辺ミドルウェアが実は内部向けのAPIを使っていて、それに変更が入ってクレームが上がるということはときどきあります。
  12. Hadoopは、Mavenを利用しています。 Hadoopは多くのプロダクトに依存しているし、Hadoopエコシステムの多くのプロダクトから依存されています。 Hadoopエコシステム内でも、相互に依存関係がついています。 そしてHadoopはエンドユーザのアプリケーションコードを呼び出す、フレームワークです。 そのため、HadoopのアプリケーションやHadoopエコシステムのミドルウェアと、同じライブラリの違うバージョンに依存するという、競合状態が発生しがちです。 競合しがちものを挙げると、SLF4Jやlog4jといったロギングライブラリ、commons-なんちゃらというASFの共通ライブラリ、JSONを処理するためのJackson、Googleの便利ライブラリ集であるGuava、ネットワークサーバ系を作るのに使うnetty, jetty, jersey、RPC フレームワークを作るのに使うprotocol buffers、ノード間のコーディネーションに利用するzookeeper、みたいな感じでいろいろあります。
  13. 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に依存するプロダクトの依存関係ツリーは、さらに深く、競合が起こりやすいものになります。
  14. 主要なAPIはJavaで実装されていますが、特にユーザが運用上の機能をコンソールから利用するためのCLIが用意されています。 多くの場合、Javaプロセスを起動するシェルのスクリプトです。Pythonとかのスクリプトのこともあります。 基本的にはエンドユーザが使う想定のものですが、別のミドルウェアがCLIを実行し、その標準出力を読み込んで処理するようなケースも存在します。 そのため、出力のフォーマットを変えたり、うっかりwarningメッセージを標準エラー出力ではなく標準出力に出したりすると、問題になることもあります。 シェルスクリプトはHadoop 3.0.0のリリース前にリファクタリングされ、メンテナンス性を上げるために、bash-3.0以降を前提をするものになっています。 最近のLinuxディストリビューションで、この前提が問題になることはまずないとは思います。
  15. 監査ログは、誰がどういう操作をしたかに関する記録です。 タブ区切りの独自フォーマットになっています。 いまから作るなら、JSONとかにしたほうがよさげではあるのですが、セキュリティ上このログが重要になる場面があり、機械的に処理してチェックされがちなので、積極的に変えない感じになってます。
  16. 動作状態や性能監視をする上で有用な統計情報は、JMX経由で取得することができます。 また、HTTP経由でJSON形式で取得することもできるようになっています。 フォーマット上、項目を追加することで互換性を損なうことはないですが、既存の項目の変更や削除は、これを使っている運用監視ツールの動作に影響したりする可能性があるので、避けるべきということになります。
  17. 複数のミドルウェアを組み合わせて使う場合の互換性は思った以上によく壊れます。 そもそも各プロダクトを作っているのが別の人で、この変更が他のプロダクトにどういう影響を与えるかを意識しにくかったりします。 また、ちょっと込み入ったテストコードを作るために、あるプロダクトの内部向けのはずのAPIが、別のプロダクトから使われていたみたいなこともあります。 よく使われるライブラリで脆弱性が見つかったので、修正済みのバージョンをあげたら、ある一部のプロダクトが使っていたAPIがなくなっていてビルドが通らなくなる、みたいなこともありがちです。
  18. さて、今日のお題は"BigtopでHadoopをビルドする"なのですが、"Hadoopをビルドする"ということがどうことか、もう少し理解を深めてみたいと思います。
  19. Hadoopは主にJavaで実装されたプロダクトで、ビルドツールとしてMavenを利用しています。 そのため、ビルドするために必須なツールは、JDKとMavenです。 JDKのバージョンはHadoop 3系だと、いまのとこ8です。 また、Mavenも3.3.0以降が必要になります。 また、Protocol Buffersを使っているため、それもインストールされている必要があります。 Mavenの仕組みを使ってチェックされるので、条件を満たしてないとすぐわかります。
  20. BigtopがHadoopをビルドするときに実行しているコマンドラインはこんな感じです。 説明の都合上、省略したり、並べ替えたりしてる部分がありますが、こんな感じです。 mvn installって実行すると、.javaファイルを.classファイルにコンパイルして、.jarファイルが作成されて、ローカルリポジトリにインストールされます。 ユニットテストは全部流すとHadoopの場合は半日以上かかかる勢いなので、skipTestsというプロパティでスキップします。 binary taballと呼ばれるエンドユーザが利用するためのCLIとか設定ファイルなどを含む一式は、-Pdistオプションでdistというプロファイルを有効化すると作成されます。 先ほど説明した依存ライブラリのバージョンの調整も、ビルド時のプロパティ指定でできます。 また、-Pnativeというプロファイルで、ネイティブライブラリのビルドを有効にしています。これは次に説明します。
  21. Hadoopでは、JDKから直接利用できないOSの機能を利用したり、性能向上したりするための目的で、Cで書いたコードをJNIでJavaから呼び出している部分があります。 関連する部分を挙げると、圧縮形式への対応、暗号化関連の処理の高速化、ファイルIOの最適化、エンドユーザ権限での処理実行などがあります。 ものによっては、nativeライブラリなしでも、ピュアJava実装にフォールバックすることで実行自体はできます。 ただ、セキュリティ機能を有効化する場合や、IOのレイテンシが重要なユースケースでは、利用したほうがよいです。 nativeライブラリをビルドするためには、GCCとCMakeと、各種ライブラリが必要です。 少なくともHadoop 3.2.2については、最近めのOSディストリビューションが提供するパッケージでこれらをインストールすれば、ビルドに支障はありません。 ちなみに、Hadoopの開発中の最新のソースコードだと、新し目のgccやcmakeが必要になっているというような、変化があります。 nativeライブラリをビルドするときは、さっきもちらっと触れたように、-Pnativeオプションで、nativeプロファイルを有効にします。
  22. nativeプロファイルを有効化した上で、必要な資材が用意されていれば、有効化されるoptionalな機能があります。 例えば、pure Javaでも対応している圧縮フォーマットの高速化したり、pure Javaではできない圧縮フォーマットに対応したりできます。 また、暗号化や乱数生成はpure Javaでもできるけど、OpenSSLを利用して高速化されます。 イレージャコーディングも、pure Javaで提供されている機能の高速化です。 不揮発性メモリを利用したキャッシュ機能は、PMDKがあるときだけ利用できる機能です。 だいたいの機能は、必要なライブラリがインストールされていれば、cmakeがそれを見つけて、関連するコードがビルドされることになります。
  23. nativeライブラリを利用するためには、実行時にもちょっとした設定が必要です。 hadoopの関連プロセスを起動する際に、java.library.pathでlibhadoop.soが置かれた場所が指定されていて、 さらに依存ライブラリがリンクできる状態になっていることが必要です。 hadoop checknativeコマンドを利用すると、nativeライブラリが使えるかどうかと、optionalな機能の対応状況を確認できます。
  24. Hadoopのリリースしているbinary tarballにもlibhadoop.soは付属しています。 ただし、これがどのLinuxでも使えるportableなものかというと、そんなことはありません。 OSのディストリビューションとバージョン次第では、必要なglibcのバージョンがマッチしないみたいな、基本的なところで使えない場合もあります。 こういう側面でも、Bigtopがビルドする環境を整えてくれたり、各OSディストリビューション向けのビルド済みバイナリを提供してくれたりするところに、ご利益があったりします。
  25. というわけで、互換性の問題のつじつま合わせをしたり、ビルドに必要な準備を補助してくれるものであるところのBigtopの紹介をしていきます。
  26. Hadoopエコシステムのプロダクトは基本ASF(Apache Software Foundation)で開発が管理されてるのですが、ソースコードはGitHubにあります。 いきなり余談っぽいのですが、2019年からGitHubが使われるようになって、ユーザアカウントも連携されるようになりました。 もともとASF側で管理されていたGitリポジトリとは相互にミラーしあっていて、両方マスターみたいな感じです。 開発はJIRAで管理されているので、なにか修正するときはJIRAのissueを立てて、そこにパッチを添付するかGitHubのpull requestを作ってリンクを貼ります。 BigtopもHadoopも最近はpull requestが主流という感じがします。
  27. BigtopはGradleを利用していろいろな処理を実行するようになっています。 できることの一覧は./gradlw tasksというコマンドを実行すると、見ることができます。
  28. Bigtopのソースツリーのトップディレクトリには、bigtop.bomというファイルが置かれています。 BOMというのはbill of materials、つまり部品表です。 Bigtopが扱うミドルウェアとそのバージョンなどが記述されています。 パッケージングするバージョンを変えたいときは、まずここを変えることになります。 運がよければそれだけで済みますが、たいがそうではないというのは、さきほど互換性に関する話で説明した通りです。 ある一つのプロダクトのマイナー未満のバージョンを、ちょっと変えただけでも、何かしら問題が見つかることが多いです。
  29. ここからBigtopの提供するパーツをいろいろ見ていくのですが、最初に挙げるのが、開発環境と実行環境を整えるためのtoolchainです。
  30. bigtop_toolchainは、プロダクト群をビルドしたりテストしたりするための環境をセットアップするためのものです。 具体的には、Puppetを簡単にインストールするためのスクリプトと、そのPuppetを使ってビルドツール群などをセットアップするPuppetマニフェストです。 ここでいうビルドに必要なツールというのは、JDKだったり、Mavenだったり、gccだったり、各種ライブラリだったりします。 Mavenのバージョンがちょっと古いとビルドがこけるみたいなのが意外とあるので、OS標準のパッケージをあえて使わないものもあります。 また、Protocol Buffers 2.5.0はARMに対応していないのですが、対応パッチをバックポートするみたいな、個別の対処をしたりしている部分もあります。
  31. 次に、メインとなるパーツであるところのパッケージング資材です。
  32. bigtop-packageというサブディレクトリ下には、各プロダクトをビルドしてパッケージングするための、資材が入っています。 BigtopはRedHat系の.rpmパッケージと、Debian系の.debパッケージの両方をカバーします。 パッケージングするときに、hadoop-pkgのように、プロダクト名-pkgというGradleタスク名を指定します。 この場合、ビルドを実行した環境に応じたパッケージが作られます。 例えば、CentOS 8の環境で実行すると、CentOS 8用のrpmができます。 複数のタスクをまとめて実行することもできます。 このスライドは、主にHadoopを例にして説明しているのですが、Hadoopのパッケージを動かすためには、 Hadoopが依存しているzookeeperやbigtop-なんとかという、ここに書いてある依存パッケージが必要になるので、合わせて載せています。
  33. パッケージング用の資材は、このスライドにあるようなディレクトリ階層に格納されています。 debとrpmの両方に対応しつつ、メンテしやすくするためのものです。 どちらの方式にしても、プロダクトをビルドして、ファイルをインストールされた状態に配置します。 その上で、その配置の中の、どのファイルがどのパッケージに所属するみたいな定義を、 rpmとdebそれぞれのやり方で記述することになります。 プロダクトのビルドを実行する手順はdo-component-buildというシェルスクリプトに書かれています。 ファイルをインストールされた状態に配置する手順は、install_プロダクト名.sh というシェルスクリプトに書かれています。 それをrpmなら.specファイルの中から呼び出すみたいな感じになってます。 バージョンアップ作業でファイルの配置を直す必要があれば、common、deb、rpmの3箇所すべてを編集しなければならなくなりがちです。
  34. Bigtopのパッケージング作業では、各プロダクトのソースtarballをダウンロードしてきて、それをビルドします。 ただし、ダウンロードしたソースそのままではうまくいかない場合があります。 そういう場合に、Bigtop側で個別にパッチを当てる仕組みが用意されています。 patch*.diffというファイルを所定の場所に置いておくと、それが適用されます。 これをやる場合の例として、特定のプラットフォームでビルドが通らない問題への対処があります。 Hadoopだと、性能上の理由などでC言語で書いたコードをJNIで呼んでいる部分があって、これがarmだとビルドがこけるみたいなのがありがちです。 開発者はx86_64でUbuntuを利用していることが多いため、というのがその背景にはあると思います。 あるいは、パッケージング対象のバージョンに入っていないけど、より新しいバージョンとかmasterブランチに入ってる修正のバックポートがあります。 逆に、パッケージング対象のバージョンの修正がパッケージング上問題がある場合に、revertするみたいなパターンもあります。 また、複数のプロダクトを組み合わせたときに、transitive dependencyのconflictが解決できないので、それをすり合わせるみたいな、pom.xmlを編集する、Bigtop独自のパッチをいれることもあります。 コードに独自に手を入れる場面はかなり少ないのですが、やるときは、なるべく本家にもパッチを投稿するようにはしています。
  35. パッケージングができたら、Gradleのrepoタスクでパッケージのリポジトリをつくることができます。 ビルドされたパッケージはoutputという名前のディレクトリ配下に出力されるのですが、そこにリポジトリ定義が作られます。 RedHat系ならYumの、Debian系ならAptのリポジトリができます。
  36. あと、パッケージングについてはプロダクト名-pkg-indというGradleタスクで、Dockerコンテナを使って実行することもできます。 indというのは、たぶんin Dockerの略なのだと思います。 ひとつの環境で、いろんなOSのパッケージを作れるという点で便利です。 オプションで指定したOS名に応じたDockerイメージがDocker Hubから引っ張ってきて利用されます。 試行錯誤しながら資材を修正していくときは、ちょっと使いにくい場面があるかもしれません。 私の場合、その環境をEC2とかに作って作業することにしています。だいたい。
  37. お次は、作ったパッケージを利用して、Hadoopクラスタを構築するためのプロビジョニング用資材についてです。
  38. docker provisionerはDockerを利用して、ローカルノード上に、Hadoopクラスタの環境を作ってくれるスクリプトです。 使うためには、事前にdockerとdocker-composeを使える状態に、セットアップしておく必要があります。 これもgradleタスクとして実行できるのですが、中身を直接使った方が便利な部分があるので、ここではそのやり方でコマンドを載せています。 ここの例だと、コンテナを3つ、つまり3ノードのクラスタを作る、 DockerイメージはCentOS 8のもの、 各コンテナが使えるメモリは最大8GB、 Hadoopのhdfsとyarnとmapreduceをデプロイ、 パッケージのリポジトリはローカル、つまりさっき紹介した手順でビルドして作ったもの、 みたいな設定を指定しています。 起動したコンテナ上で、docker execでコマンドを実行する場合は、こんな感じでできます。 --exec 1というのは、1番目のコンテナで、という意味になります。
  39. 実際に起動してみて、生成された設定ファイルを眺めてみると、どんな感じでセットアップされているのかの雰囲気がわかります。 docker-composeの設定をみると、Bigtopのソースツリーを、/bigtop-homeにマウントして使っています。 また、PuppetのHieraの設定が生成されて、それを元にPuppetのマニフェストを適用して、コンテナ上にパッケージのインストールと設定の適用がされます。
  40. Puppetのマニフェストは、Bigtopのbigtop-deployディレクトリ下に格納されています。 これは別にDocker provisioner専用というわけではありません。 ただ、一回dockerで動かしてみた方が、使い方が理解しやすいです。 Hieraのyamlの設定を変えることである程度構成や設定値を調節できるようにはなってますが、 実運用でつかうのであれば、これをベースに、あるいは参考にして、作り込むとかしたほうがよいと思います。 最近のBigtop開発者の視点としては、docker provisionerでテストを流すことがメインの目的となっているため。 あと、個人的な感想としては、いま作るならAnsibleとかの方がやりやすいな、と思ってみたり。
  41. Docker provisionerで起動したクラスタを止めるときは、--destroyというオプションをつけて実行します。 資材をいじって起動途中でエラーになってやりなおす時も、一回このコマンドを実行して、生成された一時的な設定ファイルを削除する必要があります。
  42. つぎにテスト用の資材です。
  43. smoke-testsは、構築されたHadoopクラスタが機能するかを確認するための、テスト群です。 テストケースはGroovyで書かれていて、CLIをいろいろ実行して、期待した出力が得られるかを見るものがメインです。 テストケースがすごい網羅的で充実しているというわけではないのですが、 パッケージでインストールされたコマンド、ライブラリ、設定ファイルなどが噛み合ってるかをみることができます。
  44. これもDocker provisionerを利用して起動することができます。 というか、それがメインの利用用途です。 --smoke-testというオプションに、どのプロダクトのテストかを示す引数をつけて実行します。 対応するGradleタスクは、bigtop-tests:smoke-tests:プロダクト名:テスト みたいな感じです。
  45. というわけでまとめです。
  46. というわけでApache Bigtopが取り組んでるのは、いろんなプロダクトを組み合わせて、互換性の辻褄をあわせる、泥臭い作業です。 エコシステムとかいうとカッコよさげなのですが、プロダクトがたくさんあって、とっつきが悪いので、こういうディストリビューションがあると、敷居を下げる役には立つのかな? という感じです。 自分が使いたいプロダクトとバージョンを組み合わせて、パッケージングを試みてみると、いろいろ勉強にはなると思います。 また、Amazon EMRやAzureのHDInsightなど、Hadoopのマネージドサービスも、Bigtopのパーツをベースにしているようにみえるので、そういう環境の構成を理解するのにも役に立つかも?しれません。 興味があれば、使ってみて、フィードバックをもらえるとうれしいです。