Kuduをビルドする

# Kuduとは

Kuduの概要については[こちら](http://www.cloudera.co.jp/blog/kudu-new-apache-hadoop-storage-for-fast-analytics-on-fast-data.html)で公開されていますのでご覧下さい。


# Kuduのビルド方法
[インストールドキュメント](http://getkudu.io/docs/installation.html#_build_from_source)を見ながら進めます。
環境はIDCFの仮想サーバを使っています。
REHL 6が推奨されていますが、手持ち環境であるCentOS 7.1で作業します。
利用にあたってはソースからビルドしなければいけないわけではなく、RPMも配布されていますので基本はそちらを使うほうが楽です。

この後のビルド手順は冗長な内容があるので、ここで先に内容をまとめます、

- KuduはCentOS 7.1でもビルドできる
- ビルド方法はドキュメント通りでOK
- build-if-necessary.sh便利


# ビルド手順
環境にいろいろ足りていなかったので途中でいろいろ失敗してやり直していますが、作業記録のためにそのまま書いています。（一部のみ編集）


```console:
$ sudo yum install boost-static boost-devel openssl-devel cyrus-sasl-devel
$ sudo gem install asciidoctor
$ git clone https://github.com/cloudera/kudu
Cloning into 'kudu'...
remote: Counting objects: 44877, done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 44877 (delta 20), reused 0 (delta 0), pack-reused 44829
Receiving objects: 100% (44877/44877), 18.36 MiB | 5.33 MiB/s, done.
Resolving deltas: 100% (35020/35020), done.
$ cd kudu
$ thirdparty/build-if-necessary.sh
．．．
./download-thirdparty.sh: 行 89: autoreconf: コマンドが見つかりません
# autoconfのインストール
$ sudo yum install autoconf
．．．
Can't exec "aclocal": そのようなファイルやディレクトリはありません at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
autoreconf: failed to run aclocal: そのようなファイルやディレクトリはありません
# automakeのインストール
$ sudo yum install automake
$ thirdparty/build-if-necessary.sh
．．．
autoreconf: failed to run libtoolize: そのようなファイルやディレクトリはありません
# libtoolのインストール
$ sudo yum install libtool
$ thirdparty/build-if-necessary.sh
．．．
 行 81: automake-1.14: コマンドが見つかりません
# 環境にあるのがautomake-1.13だったので先ほど入れたautomakeを削除
$ sudo yum remove automake
# automake-1.14のインストール
$ wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
$ tar xvzf automake-1.14.tar.gz
$ cd automake-1.14
$ ./configure --prefix=/usr
$ make
$ sudo make install
$ thirdparty/build-if-necessary.sh
．．．
行 81: automake-1.13: コマンドが見つかりません
```

原因は一度1.13で作業したときのファイルが残ってしまっていたこと。
念のため最初からやり直し。

```shell:
$ git clone https://github.com/cloudera/kudu
$ cd kudu
$ thirdparty/build-if-necessary.sh
．．．
Thirdparty dependencies built and installed into /home/kuromt/kudu/kudu/thirdparty/installed successfully
$ thirdparty/installed/bin/cmake . -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/home/kuromt/
．．．
CMake Error at cmake_modules/CompilerInfo.cmake:37 (message):
  Unknown compiler.  Version info:
．．．
  スレッドモデル: posix

  gcc バージョン 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)
```

CompilerInfo.cmakeを見ると、$LANGが日本語になっているとコンパイラのチェック時にパターンマッチが通らないようなので修正。

```shell:
export LANG=en_US.UTF-8
$ thirdparty/installed/bin/cmake . -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/disk/disk1/kudu
．．．
-- Configuring done
-- Generating done
-- Build files have been written to: /disk/disk1/kudu-inst/kudu
$ make -j4
．．．
[100%] Built target tpch1
[100%] Built target kudu-admin-test
Linking CXX executable ../../../build/release/tpch_real_world
[100%] Built target tpch_real_world
$ make install
Install the project...
-- Install configuration: "RELEASE"
-- Installing: /disk/disk1/kudu/lib64/libkudu_client.so.0.1.0
-- Installing: /disk/disk1/kudu/lib64/libkudu_client.so.0
-- Installing: /disk/disk1/kudu/lib64/libkudu_client.so
-- Removed runtime path from "/disk/disk1/kudu/lib64/libkudu_client.so.0.1.0"
-- Installing: /disk/disk1/kudu/include/kudu/client/callbacks.h
-- Installing: /disk/disk1/kudu/include/kudu/client/client.h
-- Installing: /disk/disk1/kudu/include/kudu/client/row_result.h
-- Installing: /disk/disk1/kudu/include/kudu/client/scan_predicate.h
-- Installing: /disk/disk1/kudu/include/kudu/client/schema.h
-- Installing: /disk/disk1/kudu/include/kudu/client/stubs.h
-- Installing: /disk/disk1/kudu/include/kudu/client/value.h
-- Installing: /disk/disk1/kudu/include/kudu/client/write_op.h
-- Installing: /disk/disk1/kudu/include/kudu/common/partial_row.h
-- Installing: /disk/disk1/kudu/include/kudu/util/kudu_export.h
-- Installing: /disk/disk1/kudu/include/kudu/util/monotime.h
-- Installing: /disk/disk1/kudu/include/kudu/util/slice.h
-- Installing: /disk/disk1/kudu/include/kudu/util/status.h
-- Installing: /disk/disk1/kudu/share/doc/kuduClient/samples/CMakeLists.txt
-- Installing: /disk/disk1/kudu/share/doc/kuduClient/samples/sample.cc
-- Installing: /disk/disk1/kudu/share/kuduClient/cmake/kuduClientTargets.cmake
-- Installing: /disk/disk1/kudu/share/kuduClient/cmake/kuduClientTargets-release.cmake
-- Installing: /disk/disk1/kudu/share/kuduClient/cmake/kuduClientConfig.cmake
-- Munging kudu client targets in /disk/disk1/kudu/share/kuduClient/cmake/kuduClientTargets.cmake
-- Munging kudu client targets in /disk/disk1/kudu/share/kuduClient/cmake/kuduClientTargets-release.cmake
-- Munging kudu client targets in /disk/disk1/kudu/share/kuduClient/cmake/kuduClientConfig.cmake

```


ということで無事にビルドできました。