ビッグデータを扱うための話

Pythonによるデータ加工での大容量csvの扱い」のような質問を見かけたので、回答を載せておく。普通には扱いないサイズの、ビッグデータを処理するための汎用的な話を残しておきます。

ビッグデータを扱うには、元となるデータを一度に処理可能な量(数十MB程度)に分割して処理を行うバッチ処理か、最小単位のデータ(1行)毎に処理を行うストリーム処理の何れかになります。

ビッグデータを処理するための環境として知られているApatch Hadoopは前者を、RDBに対するSQL文の処理などは後者の方法を使っています。

一行ずつのデータに対して処理を行う場合には、バッチ処理でもストリーム処理でも良いのですが、複数の行にまたがった計算処理を行う場合にはバッチ処理でないと難しくなります。例えば時系列にそった移動平均を計算しようとするなら、元となるデータを時系列順に並び替えなくてはなりません。ですが並び替える処理は多くのメモリを使用するため、データ量が多いと一度にはできません。こういう部分はストリーム処理では実装が難しくなります。

またビッグデータの処理では、どのような中間データを出力するかが肝になります。移動平均を算出する場合には「順不同の元データ→各月毎のデータに分割→各月毎のデータを並び替え→月毎のデータを結合→移動平均算出」のように、何段階かのバッチ処理に分ける必要があるでしょう。この時に汎用性を考えた中間データを作成しておかないと、異なる集計を行う場合に最初からやり直すために、多くの時間がかかる事になります。

Hadoopのプログラムを作るときのMap/Reduceの考え方は、Hadoop以外にも適用できるので、ビッグデータを処理する機会があるならば、Hadoopを使ってみることをお勧めします。既存の仮想マシンのイメージをダウンロードして使うなら、インストールに手間もかかりません。開発言語もJavaに限りません。コンソールからの入出力を処理できる開発言語なら何でも使えます。

必要なサーバースペックを求める良い方法・・・

月間PV数とか接続クライアント数などの大雑把な指標から、必要なサーバースペックを求めたいと言う質問は昔からよく見かけます。答えは単純「そんな便利な方法はない。」の一言に尽きます。

必要なサーバスペックを求めるには実測にまさる方法はありません。サーバ行われる一連の処理を想定して適当なモックアップを作り、実際にアクセスして計測すれば良いのです。

なにも想定している最大の負荷を実際にかけて見る必要などは無く、数百回/minとかの適当な回数の処理を行い、CPUやネットワーク、ディスク、メモリの負荷量を計測すれば十分です。CPU使用率(%)、メモリの使用量(MB)、ディスクの読書量(MB/s、IOPS)、ネットワークのトラフィック量(MB/s)等の数値を得ます。

殆どの場合は処理回数が増えると、負荷量も線形に増加します。実運用において数万回/minの処理が行われる思っているなら、単純に数百回/minで計測した数値の100倍の負荷量に耐えられるハードウェアを選定すれば良いわけです。

ハードウェアの理論限界に対しての負荷量、負荷率が低い場合には、負荷量が上昇しても応答速度は殆ど低下しません。負荷率が一定レベルを超えると指数級数的に応答速度が低下します。これは必要なハードウェアリソースを使いたいその瞬間に、他の処理で使われていて使えない、コリジョンが発生する為です。これを踏まえて、CPUやメモリなら80%、ストレージやネットワークなら30%程度の負荷率を超えないように設定していれば、応答速度の低下を許容範囲におさめられるでしょう。

もちろん一度測定してしまえば、処理内容が同じなら流用する事もできます。即座に答えられるエンジニアは過去に似たような条件で実運用したデータを持っているか、あるいは計測した経験があるだけです。

特に実行環境がクラウドの場合には容易に試すことが出来るのですから、机上であれこれ考えるよりも、さっさと試した方が早いですよ。

Scaleway新サーバのIO性能

Scalewayの公式サイトだと具体的な数字無しに「超凄いぜ!」みたいな感じだったので、新サーバーの最低グレードにあたるfioコマンドを使ってベンチマークを計測してみました。

START-1XSで実測性能、Read 2.0GB/s, Write 100MB/s, 30KIOPSってところです。書込は速度が安定せずに、プチフリに近い状態に陥ります。それでも、これがどのくらい早いのかというと、クラウド上の仮想サーバとしては尋常ではない速度。AzureのPremiumストレージでも最大200MB/s、5KIOPSでだから、ストレージ性能が5倍くらい高速です。

START1-Sでも実測してみましたが、IO性能はSTART-1XSと変わりませんでした。

ちなみに現在私が使用しているARM64-2GBで計測すると、Read 380MB/s, Write 340MB/s, 15KIOPSでした。従来よりも書込性能が低下していますが、読込性能、IOPSは大幅に向上しているので、短時間に大量の書込を行うのでなければ実効性能は向上している物と推測しています。

新サーバーだと安くなる代わりにSingle Coreになるのでどうかと思っていましたが、WEBサーバとして使う分にはむしろ性能向上していそうですね。

Scalewayの格安レンタルサーバ

Scalewayのレンタルサーバの価格が、月額1.99€(約260円)まで下がったよ。

Scalewayの新サービスがリリースされました。最低構成のintel Avoton Core 64bit CPU x 1、1GBメモリ、25GB SSDで月額1.99€となります。

従来のサービスに比較して、CPUはIntel AtomプロセッサのAvotonからDenvertonに変更され、メモリがDDR3 1600からDDR4 2400に、SSDも高速化されて、1 Coreあたり50%のパフォーマンス向上を見込めるとか。Core あたり50%パフォーマンスが向上した分、Core あたり50%ほど価格が向上。最低価格を維持するために1 Coreのメニューを追加し、実質的な性能あたりの価格は据え置きという料金改定です。

実はScalewayではサーバーの増強スケジュールに失敗していて、長らく新規のリソースを作れない状態が続いていました。今回の新サービスリリースによって、漸くリソースに空きが出来て、新規の顧客を呼び込める状態になったことになります。

code-lab.netのサーバはScalewayのARMサーバ(月額2.99€)を使っていたのだけど、Linuxのアップデートに伴い、今後Scalewayを使うか否か迷って居たのですよね。近いうちに新しくできた月額1.99€のサービスに移って見たいと思います。

米国Amazonが日本からの購入に対応?

日本から米国Amazonで購入できるようになったと噂を聞いたので、久しぶりに開いてみたのだが・・・何も変わってないよね?特に日本語かされている訳でもなさそうだし、日本に発送できる商品が限定されているのも以前のままだし、送料も特別安くなったりしていないように思う。

それはさておき、海外Amazonを見ていると日本では売っていない面白そうな商品も目にする。いくつか紹介してみようかと思う。

PLCモデム

日本では完全に終了になっている電力線モデム。海外では地道に進化を続け、現在ではAV2000なる規格(リンク速度2Gbps、実効速度1Gbps)が現れ着実に進化を遂げている。法的な問題もあるのですが、それ以前に住宅事情が問題になって使えない。
このモデムは三線式コンセントの三線全て(活栓、中性線、アース線)を使う事で高速化を実現しています。米国の家屋ではアース線を持つ三線式コンセントの設置が義務づけられているのでこれを活用できます。ですが、日本の家屋ではアース線は無い事が多く、本来の性能を発揮できません。
アース線を使わない製品だとAV1200(リンク速度1.2Gbps、実効速度600Mbps)が上限になります。日本ではAV600(リンク速度600Mbps、実効速度300Mbps)までしか発売されていないことを考えると、それでも十分に高速なのですけどね。

無線LANカード

パソコンのPCI-Expressに接続するようなLANカードというのは不思議と日本市場では取り扱いが殆ど無い。LANはオンボードが多くて需要が少ないのは分かるのだけど、無線LANについてもMini PCI Expressに接続する物が殆どを閉める。
こんな感じでアンテナを分離したモデルもある。アンテナを外付けにした方が絶対に実行速度で勝るはずなので、是非とも試してみたい一品ではある。むろん日本の技適マークなんて取ってるわけないので、法的には使い無いのだけれど、国際規格に適合していたら技適免除な制度が是非とも欲しくなる。