背景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
- データなどのディレクトリを作成する
[root@wavehouse-1 presto-server]# pwd
/root/soft/presto-server
[root@wavehouse-1 presto-server]# mkdir data
[root@wavehouse-1 presto-server]# mkdir etc
- etc ディレクトリに jvm.config ファイルを作成し
、次の内容を追加します。
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
- Presto は、Presto でカタログと呼ばれる複数のデータ ソースをサポートできます。ここでは、Hive をサポートするデータ ソースを構成し、Hive カタログを構成します。
mkdir etc/catalog
vim catalog/hive.properties
次のコンテンツを hive.properties に追加します。
connector.name=hive-hadoop2
hive.metastore.uri=thrift://wavehouse-1:9083
- クラスタの各ノードにプレスト インストール パッケージを配布します。
- 配布後、各ノードの etc ディレクトリに新しい node.properties ファイルを作成し
、以下の内容を追加します 注: 異なるノードの node.id は異なる値に設定されており、ここでは 16 進数が使用されています。
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data
- 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/
- ダウンロードした presto-cli-xxxx-executable.jar をマスター ノードのインストール presto フォルダーにアップロードします。
- 名前を変更して実行権限を与える
3) lzo圧縮に対応したjarパッケージを入れる
データウェアハウスのデータはlzoで圧縮されているため、Prestoはデータを読み込む際にlzo形式のデータを読み込む必要があるため、lzoのjarパッケージを入れる必要がありますプレストに
cp /root/soft/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar ./
- 起動
./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 クライアントのインストール
- yanagishima-18.0.zip をソフトディレクトリにアップロードします。
- 解凍する
unzip yanagishima-18.0.zip
- 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 &
- 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 プロジェクトの作成
- 「+」ボタンを選択します
- プロジェクト名の説明情報を入力します。
4.5.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 のインストールと展開の詳細なプロセス」を参照してください。