ローカル データ ウェアハウス プロジェクト (4) - アドホック クエリ

背景1枚

この記事では、主に Presto、Druid、Kylin などのアドホック クエリ ツールを含む、ローカル データ ウェアハウス プロジェクトのアドホック クエリに関連する内容について説明します。
この記事は、「ローカル データ ウェアハウス プロジェクト (1) - ローカル データ ウェアハウス構築の詳細プロセス」および「ローカル データ ウェアハウス プロジェクト (2) - システム ビジネス データ ウェアハウス構築の詳細プロセス」および「ローカル データ ウェアハウス プロジェクト ( 3) - データの可視化とタスクのスケジューリング》

2 プレスト

2.1 プレストのコンセプト

Presto は、オープン ソースの分散 SQL クエリ エンジンです。データ ボリュームは GB ~ PB をサポートしています。主に、第 2 レベルのクエリ シナリオの処理に使用されます。

2.2 プレストのアーキテクチャここに画像の説明を挿入

2.3 Presto の長所と短所ここに画像の説明を挿入

2.4 プレストのインストール

2.4.1 Presto サーバーのインストール

公式サイトアドレス
https://prestodb.github.io/
ダウンロードアドレス
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/
1) インストールパッケージをアップロードして解凍し、ディレクトリを変更します解凍後の名前

tar -zxvf presto-server-0.196.tar.gz
mv presto-server-0.196 presto-server
  1. データなどのディレクトリを作成する
[root@wavehouse-1 presto-server]# pwd
/root/soft/presto-server
[root@wavehouse-1 presto-server]# mkdir data
[root@wavehouse-1 presto-server]# mkdir etc
  1. etc ディレクトリに jvm.config ファイルを作成し
    、次の内容を追加します。
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
  1. Presto は、Presto でカタログと呼ばれる複数のデータ ソースをサポートできます。ここでは、Hive をサポートするデータ ソースを構成し、Hive カタログを構成します。
mkdir etc/catalog
vim catalog/hive.properties

次のコンテンツを hive.properties に追加します。

connector.name=hive-hadoop2
hive.metastore.uri=thrift://wavehouse-1:9083
  1. クラスタの各ノードにプレスト インストール パッケージを配布します。
  2. 配布後、各ノードの etc ディレクトリに新しい node.properties ファイルを作成し
    、以下の内容を追加します 注: 異なるノードの node.id は異なる値に設定されており、ここでは 16 進数が使用されています。
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data
  1. Presto は、コーディネーター ノードと複数のワーカー ノードで構成されます。マスターノードではコーディネーターとして、他のノードではワーカーとして構成します。
vim etc/config.properties

次のコンテンツをマスターノードに追加します

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://wavehouse-1:8881

他のノードは次のコンテンツを追加します

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://wavehouse-2:8881

8) Hive メタストアを開始します

nohup bin/hive --service metastore >/dev/null 2>&1 &

9) presto がインストールされているすべてのノードが presto を開始します。

#前台启动
bin/launcher run

また

#后台启动
bin/launcher start

ここに画像の説明を挿入
ここに画像の説明を挿入

2.4.2 Presto コマンドラインクライアントのインストール

ダウンロードアドレス:
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/

  1. ダウンロードした presto-cli-xxxx-executable.jar をマスター ノードのインストール presto フォルダーにアップロードします。
  2. 名前を変更して実行権限を与える
    ここに画像の説明を挿入
    3) lzo圧縮に対応したjarパッケージを入れる
    データウェアハウスのデータはlzoで圧縮されているため、Prestoはデータを読み込む際にlzo形式のデータを読み込む必要があるため、lzoのjarパッケージを入れる必要がありますプレストに
cp /root/soft/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar ./
  1. 起動
./presto-cli --server wavehouse-1:8881 --catalog hive --schema default

5) Presto コマンド ライン操作
Presto コマンド ライン操作は、Hive コマンド ライン操作と同等です。各テーブルにはスキーマを追加する必要があります。
ここに画像の説明を挿入

select * from hive.gmall.ads_back_count limit 10;

ここに画像の説明を挿入

2.4.3 Presto Visual クライアントのインストール

  1. yanagishima-18.0.zip をソフトディレクトリにアップロードします。
  2. 解凍する
unzip yanagishima-18.0.zip
  1. conf フォルダーに入り、yanagishima.properties を記述し
    、次の内容を追加します
jetty.port=7080
presto.datasources=chen-presto
presto.coordinator.server.chen-presto=http://wavehouse-1:8881
catalog.chen-presto=hive
schema.chen-presto=default
sql.query.engines=presto

ここに画像の説明を挿入
4) 開始

nohup bin/yanagishima-start.sh >y.log 2>&1 &
  1. http://wavehouse-1:7080 にアクセスしてください。
    ここに画像の説明を挿入
    ここに画像の説明を挿入

2.4.4 効率の比較

ハイブ側とプレスト側でそれぞれ同じSQLを実行します。

2.4.4.1

select count(*) from hive.gmall.dws_uv_detail_day

Hive は TEZ エンジンを使用します。TEZ
ここに画像の説明を挿入
の初回起動にかかる時間を無視すると、Hive の TEZ クエリ時間は 6.89 秒です。

Presto クエリ
ここに画像の説明を挿入
presto には 0.99 秒かかり、パフォーマンスが向上し、第 2 レベルのクエリが実行されます。

2.4.4.2

select max(dt) from hive.gmall.dws_uv_detail_day

Hive クエリには 4.65 秒かかります
ここに画像の説明を挿入
。Presto クエリ
ここに画像の説明を挿入
には 0.92 秒かかります。パフォーマンスが向上し、第 2 レベルのクエリになります。

注: 現在のローカル仮想マシンのメモリは 4G であるため、パフォーマンスは制限されていますが、実際の運用環境でメモリが 64G 以上であれば、パフォーマンスは向上します。
ここに画像の説明を挿入

2.5 プレストの最適化

2.5.1 合理的なパーティション設定

Hive と同様に、Presto はメタデータ情報に基づいてパーティション化されたデータを読み取ります。合理的なパーティション化により、Presto データの読み取り量が削減され、クエリのパフォーマンスが向上します。

2.5.2 カラムナ型ストレージの使用

Presto は ORC ファイルの読み取りを特に最適化しているため、Hive で Presto が使用するテーブルを作成する場合は、テーブルを ORC 形式で保存することをお勧めします。Parquet と比較して、Presto は ORC をより適切にサポートします。

2.5.3 圧縮の使用

データ圧縮により、ノード間のデータ送信による IO 帯域幅の圧力が軽減されます。高速な解凍が必要なアドホック クエリの場合は、Snappy 圧縮をお勧めします。

3 ドルイド僧

3.1 ドルイドの概要

Druid は、リアルタイム分析をサポートする高速カラム型分散データ ストレージ システムです。従来の OLAP システムと比較して、PB レベルのデータ、ミリ秒レベルのクエリ、リアルタイム データ処理のパフォーマンスが大幅に向上しました。

3.2 Druid の機能と適用シナリオ

① カラム型ストレージ
② スケーラブルな分散システム
③ 大規模な並列処理
④ リアルタイムまたはバッチの取り込み
⑤ 自己修復、自己バランシング、操作が簡単
⑥ 効果的なデータのステートメントまたは事前計算
⑦ データ結果に適用されるビットマップ圧縮アルゴリズム

アプリケーションシナリオ:
① クリーンアップされたレコードのリアルタイム入力に適していますが、更新操作は必要ありません。
② 結合のない広いテーブル (つまり 1 つのテーブル) のサポートに適しています。
③ フィールドを使用して、基本的な統計指標を要約するのに適しています。
④ であることを示します。リアルタイム要件の高いアプリケーションに適しています

3.3 ドルイドのフレームワーク

ここに画像の説明を挿入

3.4 ドルイドのデータ構造

Druid アーキテクチャを補完するのは、DataSource と Segment に基づくデータ構造であり、これらが連携して Druid の高パフォーマンスの利点に貢献します。
ここに画像の説明を挿入

3.5 ドルイドのインストール

3.5.1 インストールパッケージをダウンロードする

https://imply.io/get-started から最新バージョンのインストール パッケージをダウンロードします。

3.5.2 インストールと展開

1) imply-2.7.10.tar.gz を hadoop102 の /opt/software ディレクトリにアップロードし、解凍します。

tar -zxvf imply-2.7.10.tar.gz

2) imply-2.7.10 の名前を imply に変更
3) 設定ファイルを変更
(1) Druid の ZK 設定を変更

vim imply/conf/druid/_common/common.runtime.properties

ここに画像の説明を挿入
(2) 起動コマンドのパラメータを変更して、内蔵 ZK を検証せずに起動しないようにする

vim imply/conf/supervise/quickstart.conf

ここに画像の説明を挿入
4) スタート
(1) Zookeeper をスタート

./zkServer.sh statrt

(2) 開始暗示

bin/supervise  -c conf/supervise/quickstart.conf

3.5.3 Webページの利用

1) wavehouse-1:9095 にログインして表示します
ここに画像の説明を挿入
2) [データのロード] をクリックし、[Apache Kafka] をクリックして
Kafka クラスターとトピックを設定
ここに画像の説明を挿入
します 3) データ サンプル形式を確認します
ここに画像の説明を挿入
4) データをロードします。時間フィールドが必要です
5) を選択しますロードする項目
ここに画像の説明を挿入
6) データベーステーブル名を作成
ここに画像の説明を挿入
7) 構成を確認
ここに画像の説明を挿入
8) Kafka の topic_start に接続
ここに画像の説明を挿入
9) インジケーターをクエリする SQL を選択

select sum(uid) from "topic_start"

ここに画像の説明を挿入

4 キリン

4.1 Kylin の概要

Apache Kylin は、超大規模データをサポートするために Hadoop/Spark 上で SQL クエリ インターフェイスと多次元分析 (OLAP) 機能を提供するオープン ソースの分散分析エンジンです。もともと eBay によって開発され、オープン ソース コミュニティに貢献しました。巨大な Hive テーブルを数秒以内にクエリできます。

4.2 キリンのアーキテクチャ

ここに画像の説明を挿入
1) REST サーバー
REST サーバーは、Kylin プラットフォームのアプリケーション開発を実装するために設計された、アプリケーション開発のエントリ ポイントのセットです。このようなアプリケーションは、クエリの提供、結果の取得、キューブ構築タスクのトリガー、メタデータの取得、ユーザー権限の取得などを行うことができます。さらに、SQL クエリは Restful インターフェイスを通じて実装できます。
2) クエリ エンジン (クエリ エンジン)
キューブの準備が完了すると、クエリ エンジンはユーザー クエリを取得して解析できます。次に、システム内の他のコンポーネントと対話して、対応する結果をユーザーに返します。3) ルータ (Routing) の設計当初は、Kylin が実行できなかったクエリを Hive に誘導してさらに実行することを考えていましたが、実践の結果、Hive と Kylin の速度差が大きすぎることが判明しました。ほとんどのクエリは数秒以内に結果を返しますが、一部のクエリは数分から数十分待たなければならないため、エクスペリエンスは非常に悪くなります

この最後のルーティング機能は、ディストリビューションではデフォルトでオフになっています。
4) メタデータ管理ツール (Metadata)
Kylin はメタデータ駆動型のアプリケーションです。メタデータ管理ツールは、最も重要なキューブ メタデータを含む、Kylin に保存されているすべてのメタデータを管理するために使用される主要なコンポーネントです。他のすべてのコンポーネントの通常の操作は、メタデータ管理ツールに基づく必要があります。Kylin のメタデータは hbase に保存されます。
5) タスク エンジン (Cube Build Engine)
このエンジンは、シェル スクリプト、Java API、Map Reduce タスクなどを含むすべてのオフライン タスクを処理するように設計されています。タスク エンジンは Kylin のすべてのタスクを管理および調整し、各タスクが効果的に実行され、タスク中に発生する障害を解決できるようにします。

4.3 キリンの特徴

Kylin の主な機能には、SQL インターフェイスのサポート、超大規模データセットのサポート、1 秒未満の応答、スケーラビリティ、高スループット、BI ツール統合などが含まれます。
1) 標準 SQL インターフェイス: Kylin は、外部サービスのインターフェイスとして標準 SQL を使用します。
2) 非常に大規模なデータセットのサポート: 大規模なデータをサポートする Kylin の機能は、現在のすべてのテクノロジーの中で最も先進的である可能性があります。2015 年の時点では、eBay の実稼働環境は数百億レコードの第 2 レベルのクエリをサポートできましたが、その後、モバイル アプリケーションのシナリオで数千億のレコードの第 2 レベルのクエリが発生するケースがありました。
3) 1 秒未満の応答: Kylin は、事前計算の恩恵を受ける優れたクエリ応答速度を備えています。接続や集計などの複雑な計算の多くは、オフライン事前計算中に完了しているため、クエリ時間が大幅に短縮されます。必要な計算量が応答速度を向上させます。 。
4) スケーラビリティと高スループット: シングルノード Kylin は 1 秒あたり 70 クエリを達成でき、Kylin クラスターも構築できます。
5) BI ツールの統合
Kylin は、以下を含む既存の BI ツールと統合できます。
ODBC: Tableau、Excel、PowerBI などのツールと統合
JDBC: Saiku や BIRT などの Java ツールと統合
RestAPI: JavaScript および Web ページと統合
Kylin 開発チームも Zepplin プラグインを提供しており、Zepplin を使用してアクセスすることもできますキリンサービス

4.4 Kylin のインストール

Kylin をインストールする前に、Hadoop、Hive、Zookeeper、および HBase を最初にデプロイする必要があり、次の環境変数 HADOOP_HOME、HIVE_HOME、および HBASE_HOME を /etc/profile で構成する必要があります。これらの環境変数を有効にするには、必ずソースを指定してください。
HBASE インストールの詳細については、この記事を参照してください。
1) Kylin インストール パッケージをダウンロードします。
ダウンロード アドレス: http://kylin.apache.org/cn/download/
2) apache-kylin-2.5.1-bin-hbase1x.tar.gz を解凍します。
3) 起動
(1) Kylin を起動する前に、Hadoop (hdfs、yarn、jobhistoryserver)、Zookeeper、Hbase を起動する必要があります
(2) Kylin を起動

bin/kylin.sh start

kylin が正常に開始されたことを示すには、次のページを参照してください。
ここに画像の説明を挿入
4) URL にアクセスして、
http://wavehouse-1:7070/kylin の Web ページを表示します。
ユーザー名: ADMIN、パスワード: KYLIN (システムに入力されています)
ここに画像の説明を挿入

4.5 キリンの使用

gmall データ ウェアハウスの dwd_payment_info をファクト テーブルとして、dwd_order_info_his、dwd_user_info をディメンション テーブルとして使用し、スター スキーマを構築し、OLAP 分析に Kylin を使用する方法を示します。

4.5.1 プロジェクトの作成

  1. 「+」ボタンを選択します
    ここに画像の説明を挿入
  2. プロジェクト名の説明情報を入力します。
    ここに画像の説明を挿入

4.5.2 データソースの取得

  1. データソースの選択
    2) インポートテーブルの選択
    ここに画像の説明を挿入
  2. 必要なデータテーブルを選択し、「同期」ボタンをクリックします。
    ここに画像の説明を挿入

4.5.3 モデルの作成

1) [モデル]をクリックし、[+新規]ボタンをクリックし、[★新しいモデル]ボタンをクリックします。
ここに画像の説明を挿入
2) モデル情報を入力し、「次へ」をクリックします。
ここに画像の説明を挿入
3) ファクト テーブルを指定します。
ここに画像の説明を挿入

4) ディメンション テーブルを選択し、ファクト テーブルとディメンション テーブルの関連付け条件を指定し、[OK] をクリックします。
ここに画像の説明を挿入
ディメンション テーブルを追加したら、[
ここに画像の説明を挿入
次へ] をクリックします。 5) ディメンション フィールドを指定し、[次へ] をクリックします。
ここに画像の説明を挿入
6) 測定フィールドを指定し、クリックします。次へ
ここに画像の説明を挿入
7) ファクト テーブルの [パーティション] フィールド (時間パーティションのみをサポート) を指定し、[保存] ボタンをクリックすると、モデルが作成されます。
ここに画像の説明を挿入

4.5.4 キューブの構築

1) [新規] をクリックし、[新しいキューブ] をクリックします。
ここに画像の説明を挿入
2) キューブ情報を入力し、キューブが依存するモデルを選択して、[次へ] をクリックします。
ここに画像の説明を挿入
3) 以下の図に示すように、必要なディメンションを選択します。
ここに画像の説明を挿入
ここに画像の説明を挿入
4) 必要な測定値を選択します。下図
ここに画像の説明を挿入
5) キューブの自動マージ設定に示すように、キューブは日付パーティション フィールドに従って毎日構築する必要があり、各構築の結果は
Hbase のテーブルに保存されます。 、日次キューブをマージする必要があります。これはここでマージ サイクルを設定できます。
ここに画像の説明を挿入
6) Kylin の詳細構成 (最適化関連、一時的にスキップ)
ここに画像の説明を挿入
7) Kylin 関連の属性構成範囲
ここに画像の説明を挿入
8) キューブ情報の概要、[保存] をクリックするとキューブが作成されます
ここに画像の説明を挿入
9) キューブの構築 (計算)、キューブに対応するアクション ボタンをクリックします。
ここに画像の説明を挿入
10) 構築する時間間隔を選択し、「送信」をクリックします
ここに画像の説明を挿入

11) 「モニター」をクリックして建設の進行状況を表示します。
ここに画像の説明を挿入

4.5.6 高度な使用

上記の処理を実行すると、次のようなエラーが発生します。 エラーの
ここに画像の説明を挿入
理由: 上記のエラーの理由は、モデル内のディメンション テーブル dwd_order_info_his がジッパー テーブルであり、dwd_user_info が日次のフルスケール テーブルであるためです。 table をディメンション テーブルとして使用すると、必然的に同じ order_id が表示されるか、 user_id が複数のデータに対応する問題 解決策 1: ディメンション テーブルの一時テーブルをハイブに作成し、最新のものだけを保存
するディメンション テーブルの完全なデータ kylin でモデルを作成する場合、この一時テーブルをディメンション テーブルとして選択します。
オプション 2: 考え方はオプション 1 と同じですが、物理一時テー​​ブルは使用されず、同じ機能を実現するためにビュー (ビュー) が使用されます。

4.5.7 スキーム 2 の採用

(1) ディメンションテーブルビューの作成

CREATE VIEW dwd_user_info_view as select * from dwd_user_info
WHERE dt='2023-01-04';
CREATE VIEW dwd_order_info_view as select * from dwd_order_info
WHERE dt='2023-01-04';

(2) 新しく作成したビューを DataSource にインポートすると、以前のディメンション テーブルを選択して削除できます。
ここに画像の説明を挿入
変更後:
ここに画像の説明を挿入
(3) モデルとキューブを再作成
(4) 再構築を待つ
ここに画像の説明を挿入
(5) クエリ結果
例 1:

select user_level,sum(TOTAL_AMOUNT) from DWD_PAYMENT_INFO t1 join DWD_USER_INFO_VIEW t2 on t1.USER_ID = t2.ID
group by user_level

ここに画像の説明を挿入
現在時刻が 0.15 秒であることがわかり、1 秒未満のレベルで返すことができます。

例 2: 性別ディメンション クエリを追加する

select user_level,gender,sum(TOTAL_AMOUNT) from DWD_PAYMENT_INFO t1 join DWD_USER_INFO_VIEW t2 on t1.USER_ID = t2.ID
group by user_level,gender

ここに画像の説明を挿入
所要時間はわずか 0.09 秒で、1 秒未満のレベルで復帰できます。

4.5.8 Kylin BI ツール

4.5.8.1JDBC

Maven の依存関係をプロジェクトにインポートして開発します。ここでは詳しく説明しません。

  <dependencies>
        <dependency>
            <groupId>org.apache.kylin</groupId>
            <artifactId>kylin-jdbc</artifactId>
            <version>2.5.1</version>
        </dependency>
    </dependencies>

4.5.8.2 ツェップリン

1) Zepplinのインストールと起動
(1) zeppelin-0.8.0-bin-all.tgzをLinuxにアップロード
(2) zeppelin-0.8.0-bin-all.tgzを解凍
(3) 名前を変更
(4) 起動

bin/zeppelin-daemon.sh start

ここに画像の説明を挿入
Web ページにログインして表示できます。Web のデフォルトのポート番号は 8080
http://wavehouse-1:8080
ここに画像の説明を挿入

2) Kylin をサポートするように Zepplin を構成します
(1) 右上隅の匿名をクリックしてインタープリターを選択します
ここに画像の説明を挿入
(2) Kylin プラグインを検索し、対応する構成を変更します
ここに画像の説明を挿入
(3) 保存をクリックして変更を完了します
3) 新しいメモを作成します
ここに画像の説明を挿入
(2) ノート名を入力し、「作成」をクリックします。
ここに画像の説明を挿入

(3) SQLを入力してクエリを実行
ここに画像の説明を挿入
(4) クエリ結果を表示
ここに画像の説明を挿入

5 まとめ

5.1 アドホッククエリの比較

Druid/Impala/Presto/Es/Kylin/Spark SQL の比較
ここに画像の説明を挿入
CDH をベースにしたデータ ウェアハウス プロジェクトを構築します。詳細については、「CDH データ ウェアハウス プロジェクト (1) - CDH のインストールと展開の詳細なプロセス」を参照してください。

おすすめ

転載: blog.csdn.net/Keyuchen_01/article/details/128585789