そして、他の流行が過ぎ、私たちは春を見ました。
するときは、ハイブが特徴統合Apacheのスパークサポートを始めたのですか?
私は長い間使用さスパークリーダーなどとして長い時間前にこの事を言うことができるはずと信じています。
そのApacheのFLINKハイブの統合と、それをサポートしていますか?
読者は使ったことがない、それがサポートされていない、いくつかの疑問を持っていること?または最新のバージョンはサポートされていますが、機能はまだ比較的弱いです。
実際には、比較も意味欠け、異なるコミュニティの開発目標は常に違いがあり、多くのFLINKます努力を計算する真のリアルタイムのストリームに投資。しかし、私は、Apacheのハイブデータウェアハウスは、生態系の焦点となっている、それは、ビッグデータ分析のためにとETL SQLエンジンだけでなく、データ管理プラットフォームですので、それはスパーク、またはFLINK、またはインパラで表現したいです、プレスト、などは、積極的にハイブが特徴の統合をサポートします。
実際、FLINKを使用するための本当の必要性は、読み取りと書き込みのデータがハイブ読者が見つかりますアクセスハイブが特徴で、ApacheのFLINK 1.9.0バージョンが提供する統合を始めました。しかし、良いニュースは、FLINKは、コミュニティの統合ハイブ機能の多くを支払う比較的順調に進んでおり、最近FLINK 1.10.0 RC1版がリリースされている、関心のある読者は、研究と検証を行うことができます。
アーキテクチャ設計
まず、著者のコミュニティベースの公開情報やブログ、FLINK統合ハイブの一般的なアーキテクチャを説明します。
ApacheのFLINKとハイブ統合の目的は、主にメタデータと実際のテーブルのデータへのアクセスが含まれます。
1.メタデータ
メタデータの外部システムにアクセスするためには、FLINKはちょうどExternalCatalogの概念の提供を開始します。しかしExternalCatalogの定義は非常に不完全で、基本的に使用できない状態となります。:FLINK 1.10公式バージョンは、ExternalCatalog API(FLINK-13697)を、削除しました
-
ExternalCatalog(となExternalTableなど、すべての依存クラス、)
-
SchematicDescriptor、MetadataDescriptor和StatisticsDescriptor
問題ExternalCatalogについて、FLINKコミュニティは、既存のExternalCatalogを交換するカタログインタフェース(新しいカタログAPI)の新しいセットを提案しました。実装された新しいカタログ関数は、次のとおりです。
-
サポートデータベース、テーブル、パーティション、およびその他のメタデータオブジェクト
-
複数の外部システムへの同時アクセスをサポートするために、セッション中にユーザーを可能にする複数のインスタンスを維持するカタログ
-
カタログには、ユーザーがカスタムを提供することができ、方法プラグイン可能なアクセスFLINKに実装しました
ショー下図新しいカタログAPIのの全体的なアーキテクチャ:
TableEnvironment時間を作成することも、別のカタログインスタンスを管理する責任CatalogManagerを作成します。カタログで表のAPIとSQLクライアントのユーザーのためのメタデータサービスを提供するTableEnvironment。
現在、2つの実装カタログ、GenericInMemoryCatalogとHiveCatalogがあります。どのGenericInMemoryCatalogは、元FLINKメタデータ管理メカニズム、メモリに保存されているすべてのメタデータを維持します。例えばHiveCatalogとコネクトハイブメタストアは、メタデータに存続する能力を提供します。FLINKハイブはと対話するために、ユーザーがHiveCatalogによるメタデータハイブをHiveCatalogを設定し、アクセスする必要があります。一方、HiveCatalog FLINK自体がメタデータを処理するために使用することができる、このシナリオでは、HiveCatalogハイブメタストアは、永続的なストレージとして使用する、メタデータは、ハイブサポートされている形式である必要はないハイブメタストアに書き込まれます。A HiveCatalogインスタンスは両方のモードをサポートすることができ、ユーザーは、メタデータハイブとFLINKの管理のための個別のインスタンスを作成する必要はありません。あなたがビッグデータの開発に興味があるなら、私はシステムビッグデータを勉強したい、あなたは私的な手紙の管理者は、開発ツールとエントリ・教材自由を受け取ることができ、私は大規模なグループの研究交流技術データに入社突くことができます
ハイブメタストアのデザインHiveShim異なるバージョンによるサポートに加え、ハイブリストの特定のサポートバージョンは、公式ドキュメントを参照してください。
2.データテーブル
FLINKは、ハイブを読み書きするハイブデータコネクタテーブルのデータを提供しました。ハイブデータコネクタは、入力ハイブ自体/出力フォーマットとSerDe他のカテゴリの可能な再利用として、そうすることの利点は、より重要なのは、一方では、コードの重複を減らすことです、ハイブとの互換性の最大の度合いができ、そのFLINK書き込みハイブ通常のデータを読み出し、その逆も同様です。
ハイブの統合機能
FLINKハイブとリリース1.9.0のバージョンでお試し機能として統合機能は、そこに使用する多くの制限されているが、すぐに安定したバージョン1.10をリリースされる予定FLINKは、より統合された機能ハイブ完了し、企業のシナリオに適用されます。
事前FLINK 1.10機能のハイブ統合の経験に読者を可能にするためには、ベースとClouderaのCDH FLINK 1.10.0 RC1バージョンと、より完全なテストをコンパイルします。
1.環境情報
CDHバージョン:cdh5.16.2
FLINKバージョン:リリース-1.10.0-RC1
唯一の目的をテストするためのRC版を使用してFLINKは、本番環境にはお勧めしません。
現在、Clouderaのデータプラットフォームが正式にそのストリームコンピューティング製品としてFLINKを統合し、それは非常にユーザーフレンドリーです。
CDH環境は歩哨とKerberosを開きます。
2.ダウンロードしてコンパイルFLINK
FLINK-Hadoopの-FSにコンパイル時に驚くことではないが、その後、モジュールは次のエラーを報告します。
[ERROR] Failed to execute goal on project flink-hadoop-fs: Could not resolve dependencies for project org.apache.flink:flink-hadoop-fs:jar:1.10.0: Failed to collect dependencies at org.apache.flink:flink-shaded-hadoop-2:jar:2.6.0-cdh5.16.2-9.0: Failed to read artifact descriptor for org.apache.flink:flink-shaded-hadoop-2:jar:2.6.0-cdh5.16.2-9.0: Could not transfer artifact org.apache.flink:flink-shaded-hadoop-2:pom:2.6.0-cdh5.16.2-9.0 from/to HDPReleases (https://repo.hortonworks.com/content/repositories/releases/): Remote host closed connection during handshake: SSL peer shut down incorrectly
コンパイルの問題FLINK--Hadoopの-2網掛け、実際には、MavenのリポジトリはMavenの中央リポジトリにCDHのjar FLINK-影-Hadoopの-2パッケージの根本的な原因を見つける見る見つけることができませんが、該当するコンパイルされたバージョンではありません遭遇し、 FLINK FLINKシェーディング-Hadoopの-2パッケージ化、次いでコンパイルに頼る必要があります。
FLINKシェーディング-Hadoopの-2の問題を解決
FLINKシェーディング源(1)を得ました
(2)スイッチング依存支店 -
上記のエラーに係るスイッチング時間に対応するプロンプトコードを欠落分岐バージョン、すなわち、9.0バージョンFLINKシェーディング-Hadoopの-2を欠きます。
(3)構成CDHレポ倉庫
変更は、CDHのMavenリポジトリを追加し、プロジェクトのpom.xmlをシェーディングFLINK、またはCDH関連のパッケージが構築されて見つけることができません。
中には、 <profiles>...</profiles>
以下の内容を追加します。
(4)コンパイルFLINKシェーディング
コンパイルに開始しました:
読者が問題にいくつかのネットワーク接続に遭遇した場合は、アクセスの科学的手段によってコンパイル勧告は、あなたが再試行を試みるか、コンポーネントの倉庫の依存アドレスを置き換えることができます。
コンパイルが成功した後、パッティングFLINK-影-Hadoopの-2-特級2.6.0-cdh5.16.2-9.0.jarはコンパイル最後のログ以下、ローカルのMavenリポジトリにインストールされています:
Installing /Users/.../source/flink-shaded/flink-shaded-hadoop-2-uber/target/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar to /Users/.../.m2/repository/org/apache/flink/flink-shaded-hadoop-2-uber/2.6.0-cdh5.16.2-9.0/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar
Installing /Users/.../source/flink-shaded/flink-shaded-hadoop-2-uber/target/dependency-reduced-pom.xml to /Users/.../.m2/repository/org/apache/flink/flink-shaded-hadoop-2-uber/2.6.0-cdh5.16.2-9.0/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.pom
3.再コンパイルFLINK
長いプロセスを待って、読者は、並行して他のことを行うことができます。
コンパイルプロセスは、無事故ならば、その後、あなたは次のようなエラーメッセージが表示されます。
[INFO] Running 'npm ci --cache-max=0 --no-save' in /Users/xxx/Downloads/Flink/flink-release-1.10.0-rc1/flink-release-1.10.0-rc1/flink-runtime-web/web-dashboard [WARNING] npm WARN prepare removing existing node_modules/ before installation [ERROR] WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ECONNRESET: request to https://registry.npmjs.org/mime/-/mime-2.4.0.tgz failed, reason: read ECONNRESET [ERROR] WARN registry Using stale package data from https://registry.npmjs.org/ due to a request error during revalidation. [ERROR] WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ECONNRESET: request to https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz failed, reason: read ECONNRESET
見ることができ、FLINK-ランタイムWebモジュールは、フロントエンド-のMavenプラグイン・ノード、NPMと依存コンポーネントをインストールする必要が依存を紹介しています。
科学経由のアクセスがない場合は、FLINKランタイム・ウェブ/ pom.xmlファイル、追加情報nodeDownloadRootとnpmDownloadRootのを修正することができます。
コンパイルが成功した後、FLINKのインストールファイルは、FLINKリリース-1.10.0-RC1 / FLINK-distの/ターゲット/ FLINK-1.10.0-binディレクトリの下にあり、パッケージおよびノードにデプロイするためにアップロードされています。
4.デプロイおよび構成
FLINK展開はにパッケージを解凍し、簡単です。また、あなたはソフトリンク、環境変数などを設定することができ、それは導入しません。
FLINKコアプロファイルは、次のように典型的な構成は、FLINK-conf.yamlあります。
私は読者が実際の状況に応じて変更され、いくつかの一般的な設定パラメータを記載されています。設定パラメータが、まだ理解することは比較的容易であり、そしてその後の実用的な記事と組み合わせて詳細に説明します。
4.1統合された構成は、ハイブに依存します
あなたは上記の構成に加えて、機能を統合ハイブFLINKを使用している場合、ユーザーはまた、適切な依存関係を追加する必要があります。
-
あなたはSQL Clientを使用する必要がある場合は、jarファイルlibディレクトリFLINKに依存しますコピーする必要があります
-
あなたは表のAPIを使用する必要がある場合は、プロジェクトに適切な依存関係を追加する必要があります(例えばのpom.xmlなど)
著者が原因CDHバージョンにSQL Clientを使用する方法に焦点を当てたことは、あなたが瓶のパッケージをコピーする必要がHadoopのバージョン2.6.0、ハイブバージョン1.1.0 5.16.2、ディレクトリのlib FLINK展開ホームディレクトリをたどります次:
-
FLINK的ハイブコネクタ
FLINKコネクタ、ハイブ2.11-1.10.0.jar
FLINK-Hadoopの互換2.11-1.10.0.jar
FLINK-orc_2.11-1.10.0.jar
-
Hadoopの依存性
FLINKシェーディング-Hadoopの-2-特級2.6.0-cdh5.16.2-9.0.jar
-
ハイブ依存性
ハイブ-EXEC-1.1.0-cdh5.16.2.jar
ハイブ - メタストア-1.1.0-cdh5.16.2.jar
libfb303-0.9.3.jar
前記FLINKシェーディング-Hadoopの-2-ユーバーは、Hadoopのハイブへの依存を含んでいます。あなたはFLINKが提供するパックしていない場合、ユーザーはまた、Hadoopクラスタパッケージが添加される使用することができますが、必要性は追加のHadoopとHiveのバージョンは、バージョンに互換性がある依存していることを確認するために。
ハイブ依存パッケージ(すなわちハイブ-EXECとハイブ-メタストア)もハイブの詳細なサポート異なるバージョンとして、ユーザハイブクラスタによって提供されるJARパッケージを使用することができます。
Hadoopの、糸やハイブクライアントのノードFLINK展開を追加します。
4.2設定HiveCatalog
長年にわたり、ハイブメタストアは、Hadoopのエコシステムで開発してきましたが、実際にメタデータセンタです。多くの企業は、そのメタデータ(メタデータハイブハイブまたはメタデータ)のすべてを管理するために、その生産に個別のサービスインスタンスハイブメタストアを持っています。
ハイブとFLINKの展開の両方の場合には、メタデータFLINKは、ハイブメタストアを使用することができHiveCatalogによって管理することができます。
あなただけFLINKを展開する場合、HiveCatalogは、提供ボックスのうち、唯一の永続的なカタログFLINKです。持続的カタログがない場合はFLINK SQLを使用した場合、各セッションでカフカテーブルのようなメタオブジェクトを作成するために繰り返されなければならないDDLを作成すると、それは多くの時間を無駄にします。HiveCatalogは、許可されたユーザだけでテーブルやその他のオブジェクトの元一度作成され、かつ簡単で、将来的に参照され、クロスセッション管理する必要が。
あなたはSQLクライアントを使用する場合、ユーザーは、あなたがSQL-クライアントdefaults.yamlのカタログカタログリストの1つまたは複数のインスタンスを指定することができカタログSQL-クライアントdefaults.yamlに必要なものを指定する必要があります。
HiveCatalogを指定する方法を次の例が示します:
どこで:
-
カタログは、カタログ名とDB名は、メタデータのネームスペースFlinkSQLを構成し、各カタログ名が一意であることを確保する必要があり、指定された名前の各インスタンスにユーザー名です。
-
型はHiveCatalog用語のカタログの種類を表し、タイプはハイブとして指定されるべきです。
-
ハイブ-confの-dirのハイブ設定ファイルを読み込むため、ユーザーは、ハイブのクラスタ構成ファイルのディレクトリに設定することができます。
-
使用指定されたバージョンのためのハイブハイブバージョン。
HiveCatalogは後で指定された、ユーザーがSQLクライアントを起動し、HiveCatalogは、次のコマンドを使用して、誤ってロードされたことを確認することができます。
これはすべてのインスタンスがロードされたカタログのカタログ一覧を表示します。SQL-クライアントdefaults.yamlファイルで構成されたカタログのユーザーに加えて、FlinkSQLは自動的に内蔵されたカタログの例としてGenericInMemoryCatalog、ビルトインカタログdefault_catalogのデフォルト名をロードすることに留意すべきです。
表5.書き込みハイブ
それは、SQL Clientまたは表APIを介してハイブテーブルを読み書きするHiveCatalogを設定することができますので。
ハイブは、私たちは、このテーブルを読み込むために、次のSQLステートメントを使用することができ、MYTABLEという名前のテーブルがあることが前提とされてきました。
5.1データの読み取り
5.2ライトデータ
概要
この記事では、著者は、展開と構成FLINK環境だけでなく、特定の操作ハイブの統合プロセスに続いて、発生した問題の一部を解決するために、ソースからコンパイルを開始、その後、最後の公式リファレンスケースをFLINKとアーキテクチャ設計ハイブ統合機能を紹介します読み取りおよび書き込み操作のためのハイブのテーブル。
フォローアップ、私はFLINK SQLによるハイブを動作させるために説明し、実際の運用環境を使用します。