記事ディレクトリ
ビッグ データ教育データ ウェアハウスのオンライン教育プロジェクトのレビュー
01: オンライン教育プロジェクトの要件
-
目標: オンライン教育プログラムのニーズを習得する
-
埋め込む
- 日常的な要件: データ分析とデータの処理を通じて、いくつかの事実を反映し、運用上の決定をサポートするいくつかの指標が取得されます。
- 業種: オンライン教育産業
- 商品:コース
- 要望:学生登録のコンバージョン率向上と持続的な運営発展の実現
- 要件1: 訪問から登録までの各リンクにおける学生の定着率と離脱率を分析し、各リンクに存在する問題点を見つけて解決し、登録率を向上させる
- アクセス解析
- コンサルティング分析
- 意図分析
- レジストレーション分析
- 各リンクの分析を通じて、各リンクの損失の理由を発見し、問題を解決し、各ステップのコンバージョン率を向上させることができます。
- 要件 2: 持続可能な開発には、製品の良い評判を築き、試験、出席、宿題の管理と制御を通じて学生の学習の質を管理する必要があります。
- 勤怠分析
- 要件1: 訪問から登録までの各リンクにおける学生の定着率と離脱率を分析し、各リンクに存在する問題点を見つけて解決し、登録率を向上させる
-
まとめ
- マスターオンライン教育プログラムの要件
-
インタビュー:プロジェクト紹介
02:需要トピックの分割
- 目標:オンライン教育で需要の高いトピックの分類をマスターする
- 埋め込む
- データウェアハウスのデータ管理部門
- データ ウェアハウス [DW]: 企業全体のすべてのデータを保管します。
- データ マート/サブジェクト ドメイン [DM]: 特定のビジネス要件に従って分割されます: 部門、ビジネス、需要
- テーマ: 各テーマは最終的なビジネス分析要件を対象としています。
- データ マート/サブジェクト ドメイン [DM]: 特定のビジネス要件に従って分割されます: 部門、ビジネス、需要
- データ ウェアハウス [DW]: 企業全体のすべてのデータを保管します。
- オンライン教育で需要の高いトピック
- データウェアハウス:業務システムデータ[顧客サービスシステム、CRMシステム、学生管理システム]
- ビジネス データ ウェアハウス: 構造化データ
- データマート/サブジェクトドメイン
- 運用管理バザール/運用ドメイン
- 販売管理バザール/販売ドメイン
- 学習者管理者バザール/ユーザー ドメイン
- 商品管理バザール/商品ドメイン
- 広告ドメイン
- ……
- データ主体
- ソース分析トピック、アクセス分析トピック、コンサルティング分析トピック
- 売上分析トピック、リード分析トピック、意図分析トピック、サインアップ分析トピック
- 出席分析トピック、試験分析トピック、宿題分析トピック
- 商品アクセステーマ、商品販売テーマ、商品支払いテーマ
- テーブル名:layer_[domain]_subject_dimension テーブル
- データウェアハウス:業務システムデータ[顧客サービスシステム、CRMシステム、学生管理システム]
- データウェアハウスのデータ管理部門
- まとめ
- オンライン教育で需要の高いトピックの説明をマスターする
- インタビュー: プロジェクトではどのような主題領域が分割され、どのようなテーマが設定されていますか?
03: データソース
- 目的:オンライン教育プラットフォームのデータソースをマスターする
- 埋め込む
- アクセス解析トピックス、コンサルティング分析トピックス
- カスタマーサービスシステム:顧客サービスシステムデータベース
- 要件: 訪問ユーザーと相談ユーザーの数をさまざまな次元でカウントする
- インジケーター: UV、PV、IP、セッション、直帰率、ダブル直帰率
- 次元: 時間、地域、ソースチャンネル、検索ソース、ソースページ
- web_chat_ems
- web_chat_text_ems
- リード分析トピック、インテント分析トピック、登録分析トピック
- CRMシステム:マーケティングシステムデータベース
- 要件: 対象ユーザー、登録ユーザー、有効なリードの数をさまざまな次元でカウントします。
- 次元: 時間、地域、ソースチャネル、オンラインとオフライン、新旧学生、キャンパス、分野、営業部門
- customer_relationship: 意図および登録情報フォーム
- customer_clue: 手がかり情報テーブル
- お客様:学生情報フォーム
- itcast_school: 学区情報フォーム
- itcast_subject: サブジェクト情報テーブル
- 従業員: 従業員情報フォーム
- scrm_deparment: 部門情報テーブル
- itcast_clazz: 登録クラス情報フォーム
- 出席分析トピック
- データソース:学生管理システム
- 要件: さまざまな次元での学生の出席指標の統計: 出席者数、出席率、遅刻、休暇、欠席
- tbh_student_signin_record: 学生のサインイン情報フォーム
- Student_leave_apply: 学生休暇情報フォーム
- tbh_class_time_table: クラススケジュール
- course_table_upload_detail: クラススケジュール
- class_studying_student_count: クラスの生徒の総数のテーブル
- アクセス解析トピックス、コンサルティング分析トピックス
- まとめ
- コアのテーブルとフィールドを覚えておいてください
- インタビュー: データソースは何ですか?
04: データ ウェアハウスの設計
-
目標:ビジネス分析トピックの各トピック データ ウェアハウスの実装プロセスをマスターする
-
埋め込む
-
アクセス解析トピックス
- ODS:web_chat_ems、web_chat_text_ems
- DWD: 2 つのテーブルをマージして ETL を実装する
- DWS: さまざまな次元に基づいてすべてのアクセス データのユーザー、セッション、IP の数をカウントします。
-
コンサルティング分析トピックス
- ODS:web_chat_ems、web_chat_text_ems
- DWD:アクセス解析を直接再利用するDWD
- DWS: さまざまなディメンションに基づいて、すべてのコンサルテーション [msg_count > 0] データのユーザー、セッション、および IP の数をカウントします。
-
意図分析トピック
- ODS:顧客関係、顧客手がかり
- DIM:顧客、従業員、scrm_部門、itcast_shcool、itcast_subject
- DWD: customer_relationship の ETL を実装する
- DWM: すべてのテーブルの関連付けを実現し、すべてのディメンションとファクト フィールドを 1 つのテーブルに配置します
- DWS: さまざまなディメンションに基づいて集計し、関心のある人の数を取得します
-
分析トピックにサインアップする
- ODS:顧客関係
- DIM:顧客、従業員、scrm_部門、itcast_clazz
- DWD: customer_relationship の ETL を実装し、登録データをフィルターする
- DWM: 4 つのテーブルの関連付けを実現し、すべてのディメンションとファクト フィールドを 1 つのテーブルに配置します
- DWS: 時間ディメンションに基づいて他の結合ディメンションを集計し、インジケーターを取得します
- APP: 時間に基づいて結果を蓄積し、日、月、年の次元で事実の結果を取得します。
-
勤怠管理トピック
- ODS:tbh_student_signin_record、student_leave_apply
- DIM:tbh_class_time_table、course_table_upload_detail、class_studying_student_count
- DWD: いいえ
- DWM
- 学生出席状況表:学生パンチカード情報表に基づく
- 授業出席状況表:学生出席状況表による
- 授業休暇情報フォーム:休暇情報フォームに基づいて取得
- 不登校情報用紙:総数-出席者数-欠席者数
- DWS: 日 + クラスのディメンションの下での出席指標の日々の構築に基づく: 24
- APP: 人数に基づく合計の累積に基づいて、月次および年次の出席指標を再計算します。
-
-
まとめ
- ビジネス分析トピックの各トピック データ ウェアハウスの実装プロセスをマスターする
- インタビュー: レイヤリングはどのように設計されていますか?
- ODS:生データ層:生データを保存
- DWD:詳細データ層:ETL後の詳細データ
- DWM: ライト サマリー レイヤー: トピックのトランザクション ファクトを構築し、すべてのファクト テーブルを関連付けてトピック ファクトを取得し、いくつかの基本的なインジケーターを構築します。
- DWS: サマリー データ レイヤー: 主題ドメイン全体の事実と次元の広範なテーブルを構築します。
- APP: トピックごとに異なるディメンションでサブテーブルを分割する
- DIM: ディメンション データ レイヤー: すべてのディメンション テーブル
05: 技術アーキテクチャ
-
目標:プロジェクト全体の技術アーキテクチャをマスターする
-
埋め込む
- データソース: MySQLデータベース
- データ収集:Sqoop
- データ ストレージ: Hive: オフライン データ ウェアハウス
- データ処理: HiveSQL [MapReduce] = "将来的には、履歴書を SparkSQL などのツールに変更して実現する予定です
- データ結果: MySQL
- データレポート:FineBI
- コーディネートサービス:動物園飼育員
- 視覚的インタラクション: 色相
- タスク フロー スケジューリング: Oozie
- クラスター管理モニタリング: Cloudera Manager
- プロジェクトのバージョン管理: Git
-
まとめ
- プロジェクト全体の技術アーキテクチャをマスターする
- インタビュー: プロジェクトの紹介またはプロジェクトの技術アーキテクチャについて教えてください。
06: プロジェクトの最適化
-
目標: Hive の一般的な最適化をマスターする
-
埋め込む
-
特性の最適化
-
ローカルモード
hive.exec.mode.local.auto=true;
-
JVMの再利用
mapreduce.job.jvm.numtasks=10
-
投機的実行
mapreduce.map.speculative=true mapreduce.reduce.speculative=true hive.mapred.reduce.tasks.speculative.execution=true
-
フェッチクロール
hive.fetch.task.conversion=more
-
並列実行
hive.exec.parallel=true hive.exec.parallel.thread.number=16
-
圧縮
hive.exec.compress.intermediate=true hive.exec.orc.compression.strategy=COMPRESSION mapreduce.map.output.compress=true mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec
-
ベクトル化されたクエリ
hive.vectorized.execution.enabled = true; hive.vectorized.execution.reduce.enabled = true;
-
ゼロコピー
hive.exec.orc.zerocopy=true;
-
相関関係の最適化
hive.optimize.correlation=true;
-
CBO オプティマイザー
hive.cbo.enable=true; hive.compute.query.using.stats=true; hive.stats.fetch.column.stats=true; hive.stats.fetch.partition.stats=true;
-
小さなファイルの処理
#设置Hive中底层MapReduce读取数据的输入类:将所有文件合并为一个大文件作为输入 hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; #如果hive的程序,只有maptask,将MapTask产生的所有小文件进行合并 hive.merge.mapfiles=true; hive.merge.mapredfiles=true; hive.merge.size.per.task=256000000; hive.merge.smallfiles.avgsize=16000000;
-
インデックスの最適化
hive.optimize.index.filter=true
-
述語プッシュダウン PPD
hive.optimize.ppd=true;
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-4UGgQtXE-1690355726417) (J:/baidudownload/09-第 9 段階スパーク プロジェクト) -ワンストップ製造/Day5 _データ ウェアハウス ファクト レイヤー DWB レイヤーの構築/02_講義ノート/5 日目_データ ウェアハウス ファクト レイヤー DWB レイヤーの構築.assets/image-20210518184328346.png)]
- 内部結合と完全外部結合、条件は where 以降に記述され、パフォーマンスに違いはありません
- 左外部結合では、右側のテーブルは on の後に書き込まれ、左側のテーブルは where の後に書き込まれ、パフォーマンスが向上します。
- 右外部結合では、左側のテーブルは on の後に、右側のテーブルは where の後に書き込まれ、パフォーマンスが向上します。
- SQL文中に結果が不確定な関数が出現した場合、プッシュダウンは実装できません
-
マップ結合
hive.auto.convert.join=true hive.auto.convert.join.noconditionaltask.size=512000000
-
バケット結合
hive.optimize.bucketmapjoin = true; hive.auto.convert.sortmerge.join=true; hive.optimize.bucketmapjoin.sortedmerge = true; hive.auto.convert.sortmerge.join.noconditionaltask=true;
-
タスクメモリ
mapreduce.map.java.opts=-Xmx6000m; mapreduce.map.memory.mb=6096; mapreduce.reduce.java.opts=-Xmx6000m; mapreduce.reduce.memory.mb=6096;
-
バッファサイズ
mapreduce.task.io.sort.mb=100
-
流出閾値
mapreduce.map.sort.spill.percent=0.8
-
スレッドをマージする
mapreduce.task.io.sort.factor=10
-
プルの並列性を減らす
mapreduce.reduce.shuffle.parallelcopies=8 mapreduce.reduce.shuffle.read.timeout=180000
-
-
SQLの最適化
-
中心的なアイデア: 最初にフィルターをかけてから処理する
- どこで、そして用途があるのか
- join での on と where の使用
- 大きなテーブルをフィルタリングして小さなテーブルに分割し、結合します
-
-
設計の最適化
-
パーティション化テーブル: MapReduce 入力を削減し、不必要なフィルタリングを回避します。
-
バケット テーブル: 比較の数を減らし、データ分類を実現し、ビッグ データを分割し、マップ結合を構築します。
-
ファイル ストレージ: 円柱状のストレージが推奨されます: 寄木細工の床、オーク
-
-
-
まとめ
- Hive での最適化の熟練度
- インタビュー: プロジェクトではどのような最適化が行われましたか? Hive はどのような最適化を行いましたか?
07: プロジェクトの質問
-
目標: Hive の一般的な最適化をマスターする
-
埋め込む
-
メモリの問題: 症状 プログラムの実行に失敗する
- OOM:メモリ不足
-
ヒープ メモリが不十分です: タスク プロセスにより多くのメモリを割り当てます
mapreduce.map.java.opts=-Xmx6000m; mapreduce.map.memory.mb=6096; mapreduce.reduce.java.opts=-Xmx6000m; mapreduce.reduce.memory.mb=6096;
-
物理メモリが不十分です
- NodeManager がより多くのメモリを使用できるようにする
- ハードウェア リソースを拡張可能: 物理メモリを拡張
- コードを調整します。パーティション処理に基づいて、マップ結合を回避します。
-
仮想メモリが不十分です: 仮想メモリの比率を調整します。デフォルトは 2.1 です。
-
データ スキューの問題: プログラムが長時間実行され、常に 99% または 100% で固定される
-
-
現象
- プログラムを実行すると、このプログラムの特定のタスクが実行され、他のタスクの実行が終了し、進行状況が 99% または 100% で止まってしまいます。
-
基本的な理由
-
基本的な理由: この ReduceTask の負荷が他のタスクの負荷よりも高い
- ReduceTask のデータ分散が不均衡である
-
-
根本原因: パーティショニングのルール
-
デフォルトのパーティション: K2 のハッシュ値に従って剰余の数を取得します。
- 利点: 同じ K2 が同じ Reduce によって処理されます。
- 短所: データの偏りを引き起こす可能性がある
-
-
偏ったデータを含むシナリオ
- グループ化 / カウント (個別)
- 加入
-
解決
-
グループ化 / カウント (個別)
-
オープンコンバイナー
hive.map.aggr=true
-
ランダムなパーティション
-
方法 1: パラメーターを有効にする
hive.groupby.skewindata=true
-
このパラメータを有効にすると、最下層で 2 つの MapReduce が自動的に実行されます。
-
最初の MapReduce はランダムなパーティショニングを自動的に実装します。
-
2 番目の MapReduce は最終的な集計を実行します。
-
-
方法 2: 手動で指定する
distribute by rand():将数据写入随机的分区中
distribute by 1 :将数据都写入一个分区
-
-
-
加入
-
解決策 1: Reduce Join の使用をできるだけ避ける
- マップ結合: 結合に参加する必要のないデータをフィルタリングし、大きなテーブルを小さなテーブルに変換してみます。
- バケットマップ結合の構築
-
解決策 2: skewjoin: データのスキューを回避するために結合プロセスを削減します。
--开启运行过程中skewjoin set hive.optimize.skewjoin=true; --如果这个key的出现的次数超过这个范围 set hive.skewjoin.key=100000; --在编译时判断是否会产生数据倾斜 set hive.optimize.skewjoin.compiletime=true; --不合并,提升性能 set hive.optimize.union.remove=true; --如果Hive的底层走的是MapReduce,必须开启这个属性,才能实现不合并 set mapreduce.input.fileinputformat.input.dir.recursive=true;
-
-
-
まとめ
- Hive で一般的なメモリ オーバーフローとデータ スキューの問題をマスターする
- インタビュー: データの偏りを解決するにはどうすればよいですか?
- パーティションの数を増やす: 再パーティション
- 加入時は小容量データをブロードキャスト可能
- カスタム パーティション ルール: RDD の 5 つの特徴: バイナリ タイプの RDD の場合、パーティショナーを指定できます。
- reduceByKey(partitionClass = HashPartition)
-
技術面接: 理論ベース
-
Hadoop: HDFS の読み取りと書き込みの原理、プログラムの実行プロセス、ポート番号、どのプロセスを実行するか、YARN での MapReduce の実行プロセス
-
Hive: SQL ステートメント、関数アプリケーション
- 文字列関数、日付関数、判定関数、ウィンドウ関数
-