This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e200ab  ARROW-6943: [Website] Translate Apache Arrow Flight 
introduction to Japanese
3e200ab is described below

commit 3e200ab7044f75096229f62f40e08bceaeb993cc
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Oct 28 10:21:23 2019 +0900

    ARROW-6943: [Website] Translate Apache Arrow Flight introduction to Japanese
    
    Closes #36 from kou/flight-ja and squashes the following commits:
    
    dec1f05c <Sutou Kouhei> Improve translation
    b7fbbda2 <Sutou Kouhei> Improve translation for instrumentation
    774aa712 <Sutou Kouhei> Add missing MEI
    b3638af0 <Sutou Kouhei> Improve translation
    92a7b0fc <Sutou Kouhei> Improve translation for opaque
    865ab8fb <Sutou Kouhei> Remove needless SHITA
    bb46185f <Sutou Kouhei> Fix translation for parallel
    963e10a9 <Sutou Kouhei> Improve translation for how to process multiple 
Flight streams
    e934f3fe <Sutou Kouhei> Remove but nuance
    f0d7707b <Sutou Kouhei> Add missing translation for little
    eebb35fe <Sutou Kouhei> Improve translation of end-to-end
    c89b0a4f <Sutou Kouhei> Fix translation
    7aa16d18 <Sutou Kouhei> Improve translation
    86358d68 <Sutou Kouhei> Use different translation for 
implementation-{defined,specific}
    0f6b75f0 <Sutou Kouhei> Use OKURU for transport
    b2832069 <Sutou Kouhei> Fix the last word
    77316d47 <Sutou Kouhei> More descriptive
    9c504a5b <Sutou Kouhei> Remove needless NO
    5bd7a3f9 <Sutou Kouhei> Easy to read
    99968a53 <Sutou Kouhei> Combine sentences
    ae566c43 <Sutou Kouhei> Add missing SURU
    ec26b3cd <Sutou Kouhei> Remove needless NO
    e5fe6eee <Sutou Kouhei> Use more suitable word
    2d4acc7e <Sutou Kouhei> Improve Flight position
    38e57382 <Sutou Kouhei> Translate columnar
    28a59e83 <Sutou Kouhei> Fix translation
    44d7f401 <Sutou Kouhei> Improve
    9bf0af39 <Sutou Kouhei> Translate Apache Arrow Flight introduction to 
Japanese
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 ...2019-09-30-introducing-arrow-flight-japanese.md | 172 +++++++++++++++++++++
 _posts/2019-09-30-introducing-arrow-flight.md      |   6 +-
 2 files changed, 176 insertions(+), 2 deletions(-)

diff --git a/_posts/2019-09-30-introducing-arrow-flight-japanese.md 
b/_posts/2019-09-30-introducing-arrow-flight-japanese.md
new file mode 100644
index 0000000..a4c8c70
--- /dev/null
+++ b/_posts/2019-09-30-introducing-arrow-flight-japanese.md
@@ -0,0 +1,172 @@
+---
+layout: post
+title: "Apache Arrow Flightの紹介:高速データトランスポートフレームワーク"
+description: "この記事ではArrow 
Flightという高速データサービスを構築するためのフレームワークを紹介します。この1.5年、Flightの開発を進めてきました。Flightの開発者・利用者を探しています。"
+date: "2019-10-13 00:00:00 -0600"
+author: wesm
+categories: [application,translation]
+---
+<!--
+{% comment %}
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to you under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+{% endcomment %}
+-->
+
+[原文(English)]({% post_url 2019-09-30-introducing-arrow-flight %})
+
+この1.5年、Apache 
Arrowコミュニティーは**Flight**の設計と実装を進めてきました。Flightは高速なデータトランスポートを実現するための新しいクライアント・サーバー型のフレームワークです。Flightを使うとネットワーク越しに大きなデータセットを送る処理を簡単に実現できます。Flightは特定用途向けに設計されたものではないため、幅広い用途で利用できます。
+
+Flightの実装は、まず、[gRPC][1]を使ったArrow列指向フォーマット(つまり「Arrowレコードバッチ」)のトランスポートの最適化に注力しました。gRPCはGoogleが開発しているHTTP/2ベースのRPCライブラリー・フレームワークで、広く利用されています。gRPCも特定用途向けではなく幅広い用途で使えるように設計されています。これまでFlightをgRPCベースで実装することに注力してきましたが、gRPCでだけ使えるようにしたいわけではありません。
+
+Flightと他のデータトランスポートフレームワークとの大きな違いは並列転送機能です。クライアントとサーバークラスター間で同時にデータをストリームで転送できます。この機能により、簡単にスケーラブルなデータサービスを開発できます。スケーラブルなデータサービスとはクライアント数が増えても大丈夫なサービスです。
+
+Apache Arrow 0.15.0でC++(Pytonバインディングあり)とJavaでFlightを使えるようになっています。 
現時点ではベータユーザー向けです。ベータユーザーとはFlight内部の低レベルの改良によりAPIやプロトコルが変わっても適応できるユーザーのことです。
+
+## モチベーション
+
+多くの人がネットワーク越しに大きなデータセットにアクセスすることに関して困っています。リモートのデータサービスからデータセットを読むためのさまざまな転送プロトコルやツールがたくさんあります。たとえばODBCやJDBCです。この10年、ファイルベースでデータを保管することが多くなりました。このときにはCSVやAvroやParquetといったフォーマットがよく使われます。しかし、この方法ではデシリアライズする前に生データをローカルのホストに転送しなければいけないという問題があります。
+
+Apache 
Arrowの初期からやってきた作業によりさまざまな方法でデータトランスポートを加速できます。[Arrow列指向フォーマット][2]には次の重要な機能があります。
+
+* 表形式データの「転送用の」表現です。この表現はデータ受信側でデシリアライズが必要ありません。
+* 
標準で「バッチをストリーム送信」するためのモードがあります。このモードでは、大きなデータセットを複数の行ごとにまとめて転送します。(Arrowの用語では「レコードバッチ」と呼んでいます。)この記事では「データストリーム」について話します。データストリームとはApache
 Arrowプロジェクトのバイナリープロトコルを使った一連のArrowレコードバッチです。
+* 
このフォーマットはプログラミング言語に依存していません。このフォーマットは現在11のプログラミング言語がサポートしています。サポートしているプログラミング言語は増え続けています。
+
+ODBCのような標準的なプロトコルの各実装は、通常、それぞれ独自の転送用バイナリープロトコルを実装します。これらのプロトコルは各ライブラリーの公開インターフェイスの表現と相互に変換しなければいけません。ODBC・JDBCライブラリーのパフォーマンスは場合によって大きく異なります。
+
+私たちのFlightの設計で目指していることは、データサービス用の新しいプロトコルを作ることです。このプロトコルは転送用のデータ表現にも開発者向けの公開APIにもArrow列指向フォーマットを使います。こうすることで、データトランスポート関連のシリアライズコストを減らし、分散データシステム全体を効率化できます。さらに、すでに別の用途にApache
 Arrowを使っているシステム間では非常に効率的にデータをやりとりできます。
+
+## Flightの基礎
+
+Arrow 
Flightライブラリーはデータストリームを送受信できるサービスを実装するための開発者向けフレームワークを提供します。Flightサーバーは次の基本的なリクエストをサポートしています。
+
+* 
**Handshake**:クライアントが認証済みかを確認するシンプルなリクエスト。いくつかのケースでは、以降のリクエストのために実装定義のセッショントークンを確立します。
+* **ListFlights**:利用可能なデータストリームのリストを返します。
+* **GetSchema**:データストリームのスキーマを返します。
+* 
**GetFlightInfo**:対象のデータセット用の「アクセスプラン」を返します。複数のデータストリームを消費しなければいけないかもしれません。このリクエストにはシリアライズしたカスタムコマンドを含めることができます。たとえば、アプリケーション固有のパラメーターを含めることができます。
+* **DoGet**:クライアントにデータストリームを送信します。
+* **DoPut**: クライアントからデータストリームを受信します。
+* **DoAction**:実装依存のアクションを実行し、結果を返します。つまり、一般的な関数呼び出しです。
+* **ListActions**:利用可能なアクションの種類を返します。
+
+gRPCの「双方向の」ストリーミングサポート([HTTP/2ストリーミング][9]上に実装されています)を活用して、リクエスト処理中でもデータとメタデータをクライアント・サーバー間でやりとりできます。
+
+単純なFlightの構成は1台のサーバーとそのサーバーに接続し`DoGet`リクエストをするクライアントという構成です。
+
+<div align="center">
+<img src="{{ site.baseurl }}/img/20191014_flight_simple.png"
+     alt="Flight Simple Architecture"
+     width="50%" class="img-responsive">
+</div>
+
+## gRPCごしのデータスループットの最適化
+
+gRPCのような汎用メッセージングライブラリーを使うことには多くの利点があります。汎用ライブラリーはすでに多数の問題を解決しているからです。gRPCの場合はGoogleが多数の問題を解決していました。しかし、大きなデータセットのトランスポート性能を改善するためにいくつかの処理を改善する必要がありました。多くのgRPCユーザーは比較的小さなメッセージしか扱っていないからです。
+
+一番よくサポートされているgRPCを使う方法はサービスを[Protocol 
Buffers][3](「Protobuf」と呼ばれることもあります)の`.proto`ファイルで定義する方法です。gRPCのProtobufプラグインはgRPCサービスのスタブを生成します。このスタブを使ってアプリケーションを実装します。RPCコマンドとデータメッセージは[Protobufワイヤーフォーマット][4]を使ってシリアライズします。Flightでは「普通のgRPCとProtocol
 
Buffers」を使っているので、Arrow列指向フォーマットのことを知らないgRPCクライアントでもFlightサービスとやりとりできますし、Arrowデータの中身を気にせずに処理できます。
+
+Flightの中の主要なデータ関連のProtobufの型は`FlightData`と呼ばれています。一般的にProtobufメッセージの読み書きにはコストがかかります。そのため、C++でもJavaでもgRPCにいくつか次のような低レベルの最適化を実装しています。
+
+* 
`FlightData`用のProtobufワイヤーフォーマットを生成します。`FlightData`には送信対象のArrowレコードバッチが含まれていますが、メモリーコピー・シリアライズ処理は一切ありません。
+* 
Protobufで表現された`FlightData`からメモリーコピー・デシリアライズ処理なしでArrowレコードバッチを再構築できます。実際には、Protocol
 Bufersライブラリーにエンコードされたデータペイロードを触らせないようにしています。
+
+Protobufを使うがProtobufのメッセージパースのオーバーヘッドはなくしたいという両立できない2つのことを両立させようとしているということです。Flight実装は上述の最適化をして高速化しています。素のgRPCクライアントでもFlightサービスとやりとりできますが、素のgRPCクライアントにはこのような最適化はないので、Protobufライブラリーを使って`FlightData`をデシリアライズすることになります。そのため、素のgRPCクライアントを使うといくらか性能が落ちます。
+
+FlightのC++実装でのデータスループットベンチマークの結果での絶対的な性能ですが、どちらもローカルホストで動いているサーバー・クライアント間のTCPスループットは2-3GB/sを上回っていました。ただし、TLSは無効にした状態です。このベンチマークは約4秒で12GBのデータを転送できることを示しています。
+
+
+```shell
+$ ./arrow-flight-benchmark --records_per_stream 100000000
+Bytes read: 12800000000
+Nanos: 3900466413
+Speed: 3129.63 MB/s
+```
+
+この結果から次の2つのことを言えます。1つはFlightとgRPCを使うと相対的に小さなオーバーヘッドはあるということです。もう1つは多くの実際のFlightアプリケーションではネットワークの帯域がボトルネックになりそうということです。
+
+## 水平方向のスケーラビリティ:並列データアクセスとパーティション化したデータアクセス
+
+分散型のデータベースシステムの多くは「コーディネーター」を通してクライアントのリクエストを処理するアーキテクチャーパターンを使っています。クライアントへのデータセットを複数回転送するという明らかに効率に課題がある点はさておき、巨大なデータセットへのアクセスに対するスケーラビリティの問題もあります。
+
+Flightで次のようなシステムを作れるようにしました。それはこのようなボトルネックに取り組まずに水平方向にスケーラブルなデータサービスを作れるシステムです。`GetFlightInfo`
 RPCを使ったクライアントのリクエストは **エンドポイント** のリストを返します。返ってくる各エンドポイントにはサーバーの位置と **チケット** 
の情報が入っています。チケットはデータセットの一部を取得する`DoGet`リクエストに入れてサーバーに送ります。データセット全体にアクセスするためにはすべてのエンドポイントを処理する必要があります。どのエンドポイントのFlightのストリームから処理しなければいけないということはありません。どのエンドポイントのFlightのストリームから処理しても構いません。しかし、特定の順序で処理するための�
 �組みは用意しています。その仕組みとはアプリケーション固有のメタデータを使えるという仕組みです。順序の情報はメタデータで表現できます。
+
+この複数エンドポイントパターンにはたくさんの利点があります。
+
+* 複数のクライアントが複数のエンドポイントから並列にデータを読み込めます。
+* 
`GetFlightInfo`「プランニング」リクエストを提供するサービスは兄弟サービスに処理を移譲できます。これにより、データの局所性の利点を得られたり、単純にロードバランスしやすくなったりします。
+* 
分散クラスター中のノードは異なる役割を引き受けることができます。たとえば、クラスター内の一部のノードはクエリープランニングに責任を持つかもしれません。一方、他のノードはデータストリームリクエスト(`DoGet`または`DoPut`)だけを処理するかもしれません。
+
+次の図はサービスの役割を分けた複数ノードアーキテクチャーの例です。
+
+<div align="center">
+<img src="{{ site.baseurl }}/img/20191014_flight_complex.png"
+     alt="Flight Complex Architecture"
+     width="60%" class="img-responsive">
+</div>
+
+## アクション:アプリケーション固有のロジックでFlightを拡張
+
+`GetFlightInfo`リクエストはデータセットをリクエストするときにシリアライズしたコマンドを中身を気にせずに送ることができますが、クライアントはデータストリームの送受信以外の操作をサーバーに依頼できなければいけないかもしれません。たとえば、クライアントは特定のデータセットをメモリー上に「ピン止め」することを要求するかもしれません。ピン止めすることで他のクライアントからの後続のリクエストを高速に処理できます。
+
+Flightサービスは追加で「アクション」を定義できます。`DoAction` 
RPCでアクションを実行できます。アクションリクエストには実行したいアクションの名前と追加情報が入っています。追加情報は省略可能です。アクションの結果はgRPCストリームです。このgRPCストリーム中には任意の結果を入れられます。
+
+いくつかアクションの例を紹介します。
+
+* メタデータを見つけるアクション。組み込みの`ListFlights` 
RPCでも提供されている機能ですが、`ListFlights`の機能で不十分な場合はアクションで実現できます。
+* セッション固有のパラメーターを設定するアクション。
+
+サーバーはアクションを1つも実装しなくてもよいことに注意してください。また、アクションは結果を返さなくてもよいです。
+
+## 暗号化と認証
+
+Flightは組み込みで暗号化をサポートしています。gRPCの組み込みのTLS/OpenSSLの機能を使っています。
+
+クライアント側・サーバー側ともに拡張可能な認証ハンドラーがあります。この認証ハンドラーを使えば、ユーザー名とパスワードのようなシンプルな認証スキーマも使えますし、ケルベロスのような複雑な認証も使えます。Flightプロトコルには組み込みの`BasicAuth`機能がついています。そのため、追加の開発なしでそのままユーザー名とパスワードの認証を実現できます。
+
+## ミドルウェアとトレース
+
+gRPCには「インターセプター」というコンセプトがあります。インターセプターを使うと開発者が定義した「ミドルウェア」を開発できます。ミドルウェアを使うと届いたリクエストと送るリクエストに介在することができます。このような処理をするフレームワークに[OpenTracing][6]があります。
+
+ミドルウェアの機能は最近Flightに追加された機能です。そのため、今のところはmasterブランチでしか使えません。
+
+## gRPCを使っているがgRPCだけではない
+
+`DoGet`リクエストでサーバーの位置を指定する方法にはRFC 
3986準拠のURIを使っています。たとえば、TLSを使ったgRPCは`grpc+tls://$HOST:$PORT`というように指定します。
+
+Flightサーバーの「コマンド」レイヤーにgRPCを使っているのは妥当だと思っていますが、[RDMA][7]のようなTCP以外のデータトランスポート層もサポートしたくなるかもしれません。設計・開発時間が必要になりますが、おそらく、TCP以外のプロトコル上でデータを転送するときでもgRPCを使えるでしょう。
+
+## はじめかたと今後の話
+
+Flightユーザー向けのドキュメントは作成中です。しかし、このライブラリーはベータユーザー向けには十分に使い物になります。ベータユーザーとは今後1年で発生するだろう軽微なAPI・プロトコルの変更に耐えられるユーザーです。
+
+Flightをためす簡単な方法はPython 
APIを使う方法です。なぜならカスタムサーバーもカスタムクライアントもすべてPythonだけで定義できるからです。なにもコンパイルする必要はありません。Arrowのコードにある[PythonでのFlightクライアントとサーバーの例][8]を参考にできます。
+
+実際に使っている例もあります。Dremioは[Arrow 
Flightベースの][10]コネクターを開発しました。このコネクターは[ODBCよりも20-50倍よい性能を発揮する][11]ことを示しました。ArrowのコントリビューターであるRyan
 MurrayはApache Sparkユーザー向けにFlight対応エンドポイントに接続する[データソース実装][12]を作りました。
+
+最後に今後の話をします。gRPCではない(あるいはTCPではない)データトランスポートをサポートできないか研究開発を進めるかもしれません。Flightの開発が進むとユーザーが使えるFlight対応サービスが増えていくでしょう。Flightは開発フレームワークなので、ユーザーが使うAPIは高レベルなAPIだけになるようにするつもりです。高レベルなAPIではFlightの詳細と特定のFlightアプリケーションに関連する詳細を隠します。
+
+[1]: https://grpc.io/
+[2]: 
https://github.com/apache/arrow/blob/master/docs/source/format/Columnar.rst
+[3]: https://github.com/protocolbuffers/protobuf
+[4]: https://developers.google.com/protocol-buffers/docs/encoding
+[5]: 
https://github.com/apache/arrow/blob/apache-arrow-0.15.0/format/Flight.proto#L291
+[6]: https://opentracing.io/
+[7]: https://en.wikipedia.org/wiki/Remote_direct_memory_access
+[8]: 
https://github.com/apache/arrow/tree/apache-arrow-0.15.0/python/examples/flight
+[9]: https://grpc.io/docs/guides/concepts/
+[10]: https://github.com/dremio-hub/dremio-flight-connector
+[11]: https://www.dremio.com/is-time-to-replace-odbc-jdbc/
+[12]: https://github.com/rymurr/flight-spark-source
diff --git a/_posts/2019-09-30-introducing-arrow-flight.md 
b/_posts/2019-09-30-introducing-arrow-flight.md
index 284ac71..8fdc4c0 100644
--- a/_posts/2019-09-30-introducing-arrow-flight.md
+++ b/_posts/2019-09-30-introducing-arrow-flight.md
@@ -5,7 +5,7 @@ description: "This post introduces Arrow Flight, a framework 
for building high
 performance data services. We have been building Flight over the last 18 months
 and are looking for developers and users to get involved."
 date: "2019-10-13 00:00:00 -0600"
-author: Wes McKinney
+author: wesm
 categories: [application]
 ---
 <!--
@@ -27,6 +27,8 @@ limitations under the License.
 {% endcomment %}
 -->
 
+Translations: [日本語]({% post_url 2019-09-30-introducing-arrow-flight-japanese 
%})
+
 Over the last 18 months, the Apache Arrow community has been busy designing and
 implementing **Flight**, a new general-purpose client-server framework to
 simplify high performance transport of large datasets over network interfaces.
@@ -292,4 +294,4 @@ service.
 [9]: https://grpc.io/docs/guides/concepts/
 [10]: https://github.com/dremio-hub/dremio-flight-connector
 [11]: https://www.dremio.com/is-time-to-replace-odbc-jdbc/
-[12]: https://github.com/rymurr/flight-spark-source
\ No newline at end of file
+[12]: https://github.com/rymurr/flight-spark-source

Reply via email to