Hadoop入門学習メモ - 8. データ分析事例集

ビデオコースのアドレス: https://www.bilibili.com/video/BV1WY4y197g7
コース教材のリンク: https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8

Hadoop入門学習メモ(まとめ)

8. データ分析の総合事例

8.1. 要件の分析

8.1.1. 背景の紹介

チャットプラットフォームには毎日多くのユーザーがオンラインにアクセスし、大量のチャットデータが表示されます。チャットデータの統計分析、ユーザーの正確なユーザーポートレートをより適切に構築し、ユーザーにより良いサービスを提供し、高いROIプラットフォームの運用とプロモーションを達成し、企業の開発決定に対する正確なデータサポートを提供できます。
ソーシャルプラットフォームアプリのユーザーデータに基づいて関連指標の統計分析を完了し、BIツールを使用して指標を視覚的に表示します。

8.1.2. 目標

チャットデータの統計分析を実装し、HadoopとHiveに基づいて構築するチャットデータ分析レポート
ここに画像の説明を挿入します

8.1.3. 要件

  • 今日のニュース総量の統計
  • 今日のメッセージ量、 1 時間あたりの送受信ユーザーの統計
  • 今日各地域で送信されたメッセージ データ量の統計
  • 今日メッセージを送受信したユーザーの数を数えます
  • 今日最も多くのメッセージを送信した上位 10 人のユーザーの統計
  • 今日最も多くのメッセージを受信した上位 10 人のユーザーの統計
  • 送信者の携帯電話機種分布統計
  • 送信者のデバイスのオペレーティング システムの分布に関する統計

8.1.4. データの内容

  • データサイズ:30万データ
  • 列区切り文字:Hive のデフォルトの区切り文字 '\001'
  • データディクショナリとサンプルデータ

ここに画像の説明を挿入します

8.2. データのロード

1. データベーステーブルの作成

-- 如果数据库已存在就删除
drop database if exists db_msg cascade;

-- 创建数据库
CREATE database db_msg;

-- 选择数据库
use db_msg;

--如果表已存在就删除
drop table if exists db_msg.tb_msg_source;

-- 建表
create table db_msg.tb_msg_source(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容"
);

2. データのインポート:
コース教材の chat_data-30W.csv ファイルを、node1 サーバーの /home/hadoop ディレクトリにアップロードします。

Linux システムで次のコマンドを実行します。

# 切换工作目录
cd /home/hadoop

# 在HDFS系统中创建/chatdemo/data目录
hadoop fs -mkdir -p /chatdemo/data

# 将chat_data-30W.csv文件从Linux上传到HDFS系统中
hadoop fs -put chat_data-30W.csv /chatdemo/data

DBeaver で次のコマンドを実行します。

-- 从HDFS系统中加载数据到Hive表
load data inpath '/chatdemo/data/chat_data-30W.csv' into table tb_msg_source;

-- 验证数据加载
SELECT * FROM tb_msg_source tablesample(100 rows);

-- 验证表中的数据条数
SELECT COUNT(*) from tb_msg_source tms ; 

8.3. ETL データのクリーニングと変換

元のデータには不適合なデータが含まれているため、データをクリーンアップする必要があります。
1. オリジナルデータの問題

  • 質問 1: 現在のデータでは、一部のデータ フィールド (sender_gps など) が空であり、正当なデータではありません。
  • 質問 2: 要件では、日および時間ごとのメッセージ数をカウントする必要がありますが、データには日および時間のフィールドはなく、全体の時間フィールドのみが含まれているため、処理が困難です。
  • 質問 3: 要件では、経度と緯度に基づいて地域の視覚的な地図を構築する必要がありますが、データ内の GPS 経度と緯度はフィールドであり、処理が困難です。

2. データクリーニングの必要性

  • 要件 1: 空のフィールドを含む不正なデータをフィルタリングします。
  • 要件 2: 時刻フィールドを介して曜日および時間フィールドを構築します。
  • 要件 3: GPS の経度および緯度から経度および緯度を抽出する。
  • 要件 4: ETL の結果を新しい Hive テーブルに保存します。
-- 创建存储清洗后数据的表
create table db_msg.tb_msg_etl(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);


-- 按照需求对原始数据表中的数据进行过滤,然后插入新建的表中
INSERT OVERWRITE TABLE db_msg.tb_msg_etl
SELECT 
	*,
	DATE(msg_time) as msg_day,
	HOUR(msg_time) as msg_hour,
	SPLIT(sender_gps, ',')[0] as sender_lng,
	SPLIT(sender_gps, ',')[1] as sender_lat
FROM db_msg.tb_msg_source
WHERE LENGTH(sender_gps) > 0;

実行が完了したら、tb_msg_etl テーブルを開くと、次のデータが表示されます。
ここに画像の説明を挿入します

拡張知識: ETL は、
テーブル tb_msg_source からデータをクエリし、データのフィルタリングと変換を実行し、結果を tb_msg_etl テーブルのオペレーションに書き込みます。この操作は本質的には単純な ETL 動作です。
ETL:

  • E、抽出、抽出
  • T、変換、変換
  • L、荷重、荷重

A (E) からデータを抽出し、データ変換とフィルター処理 (T) を実行し、その結果を ETL である B (L) にロードします。

8.4. 指標の統計

1. 指標 1: 毎日送信されるメッセージの総数の統計

-- 统计每日消息总量
CREATE table db_msg.tb_rs_total_msg_cnt comment '每日消息总量' as
SELECT msg_day, COUNT(*) as total_msg_cnt  FROM db_msg.tb_msg_etl GROUP BY msg_day;

2. 指標 2: 1 時間あたりのメッセージ量、送受信ユーザー数の統計

-- 统计每小时消息量、发送和接收用户数
CREATE table db_msg.tb_rs_hour_msg_cnt comment '每小时消息量情况' as
SELECT
	msg_hour,
	COUNT(*) as total_msg_cnt,
	COUNT(DISTINCT sender_account) as sender_user_cnt,
	COUNT(DISTINCT receiver_account) as receiver_user_cnt
FROM
	db_msg.tb_msg_etl
GROUP BY
	msg_hour;

3. 指標 3: 各地域で毎日送信されるメッセージの総数の統計

-- 每日各地区发送消息总量
CREATE table db_msg.tb_rs_loc_cnt comment '每日各地区发送消息总量' as
SELECT
	msg_day,
	sender_lng,
	sender_lat,
	COUNT(*) as total_msg_cnt
FROM db_msg.tb_msg_etl 
GROUP BY msg_day, sender_lng, sender_lat;

4. 指標 4: 日々の送受信ユーザーの統計

-- 每日发送和接收用户数
CREATE table db_msg.tb_rs_user_cnt comment '每日发送消息和接收消息人数' as
SELECT 
	msg_day,
	COUNT(DISTINCT sender_account) as sender_user_cnt,
	COUNT(DISTINCT receiver_account) as receiver_user_cnt 
FROM db_msg.tb_msg_etl
GROUP BY msg_day;

5. 指標 5: 最も多くのメッセージを送信した TOP10 ユーザーの統計

-- 发送消息条数最多的前10个用户
CREATE table db_msg.tb_rs_sneder_user_top10 comment '发送消息条数最多的10个用户' as
SELECT 
	sender_name,
	COUNT(*) as sender_msg_cnt 
FROM db_msg.tb_msg_etl
GROUP BY sender_name
SORT BY sender_msg_cnt DESC 
LIMIT 10;

6. 指標 6: 最も多くのメッセージを受信した TOP10 ユーザーの統計

-- 接收消息条数最多的10个用户
CREATE table db_msg.tb_rs_receiver_user_top10 comment '接收消息条数最多的10个用户' as
SELECT 
	receiver_name,
	COUNT(*) as receiver_msg_cnt 
FROM db_msg.tb_msg_etl
GROUP BY receiver_name 
SORT BY receiver_msg_cnt DESC 
LIMIT 10;

7. 指標 7: 送信者の携帯電話モデルの統計

-- 统计发送人的手机型号
CREATE table db_msg.tb_rs_sender_phone comment '发送人手机型号分布' as
SELECT 
	sender_phonetype,
	COUNT(*) as cnt
FROM db_msg.tb_msg_etl
GROUP BY sender_phonetype;

8. 指標 8: 送信者のデバイスのオペレーティング システムの分布に関する統計

-- 统计发送人的设备操作系统分布情况
CREATE table db_msg.tb_rs_sender_os comment '发送人设备操作系统分布' as
SELECT 
	sender_os,
	COUNT(*) as cnt
FROM db_msg.tb_msg_etl tme 
GROUP BY sender_os;

8.5. FineBI のインストールと設定

8.5.1. FineBI のダウンロードとインストール

1. FineBI 公式https://www.finebi.com/を開き、FineBI 個人試用版クライアントを登録してダウンロードします。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

2. ダウンロードしたクライアントをローカル物理マシンにインストールします (他のソフトウェアのインストールと同じ操作) インストールが完了したら、FineBI クライアントを起動します。
ここに画像の説明を挿入します

3. 起動後、FineBI 公式 Web サイトから提供されるアクティベーション コードを入力し、[BI を使用する] ボタンをクリックすると、FineBI クライアントが起動し始めます (このプロセスには時間がかかる場合がありますので、気長に待つ必要があります。このプロセスでは、openJDK がポップアップしてファイアウォールのアクセス許可を要求する場合があります。同意が必要です);
ここに画像の説明を挿入します
ここに画像の説明を挿入します
4. FineBI クライアントが正常に起動すると、ブラウザが自動的に開き、http://localhost:37799/webroot/decion/login/initialization Web が開きます。ページが開き、構成ページに入ります。このとき、BI ソフトウェアの管理を構成できます。ユーザー アカウントとパスワード;
ここに画像の説明を挿入します
5. アカウントを設定した後、FineBI データベースを構成する必要があります。FineBI は次のようなものです。 Hive には管理が必要なメタデータもあります。個人で使用する場合は、FineBI の組み込みデータベースを使用できます。本番環境で使用する場合は、外部データベースを使用することをお勧めします。データベース;
ここに画像の説明を挿入します
6. 「ログ」をクリックした後、 「直接入力」すると、BI システムは自動的にログイン インターフェイスにジャンプし、設定した管理者アカウントとパスワードを入力してログインします。
ここに画像の説明を挿入します
7. FineBI システムにログインすると、そのディレクトリとサンプルにいくつかの組み込みテンプレートが表示されます。データや初心者ガイドなどを参照して、必要なテンプレートを構成できます。
ここに画像の説明を挿入します
この時点で、FineBI クライアントはインストールされています。

8.5.2. FineBI と Hive 間の接続の設定

1. 次に、Hive に接続するために FineBI の分離プラグインを構成する必要があります。FineBI システムに入り、「管理システム - プラグイン管理 - マイ プラグイン - ローカルからインストール」に進み、FineBI フォルダー内のコース教材を選択すると、fr-plugin-hive-driver-loader-3.0.zipシステムは Hive 分離プラグインをインストールします
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
。2次に、メモ帳を使用して、FineBI インストール ディレクトリwebapps\webroot\WEB-INF\embed\finedbの下のディレクトリにあるdb.script、それらをINSERT INTO FINE_CONF_ENTITY VALUES('SystemConfig.driverUpload','false')に変更しますINSERT INTO FINE_CONF_ENTITY VALUES('SystemConfig.driverUpload','true')この方法でのみ Hive ドライバーをインストールできます。
ここに画像の説明を挿入します

3. 次に、FineBI クライアントを再起動し、最初に FineBI クライアントを閉じてから、デスクトップで FineBI クライアントを再度開きます;
ここに画像の説明を挿入します
ここに画像の説明を挿入します
4. システムに再度ログインした後、最初に Hive ドライバーをインストールし、FineBI 公式ヘルプを開く必要がありますマニュアル、Hadoop Hive データ接続の章 :https://help.fanruan.com/finebi/doc-view-301.html を
ここに画像の説明を挿入します
参照し、その指示に従って対応するバージョンのドライバー パッケージとログ jar パッケージをダウンロードします。ダウンロードが完了したら、2 つの圧縮パッケージにすべての jar を入れます。 ファイルをフォルダーに解凍します。
ここに画像の説明を挿入します
6. システムで、[管理システム - データ接続 - データ接続管理 - ドライバー管理] をクリックして、ドライバー管理インターフェイスに入ります。
ここに画像の説明を挿入します
7.ドライバー管理インターフェイスの [新しいドライバー] ボタンをクリックし、ドライバー名を入力して、[OK] ボタンをクリックします。
ここに画像の説明を挿入します
8. 次に、[ファイルのアップロード] ボタンをクリックし、アップロードするために解凍したすべての jar ファイルを選択します。
ここに画像の説明を挿入します
9. アップロードが完了したら、「ドライバー」列で Hive ドライバーを選択し、右上の「保存」ボタンをクリックして Hive ドライバーの追加を完了します。追加が成功したら、左上隅にある [ドライバー管理の終了] ボタンをクリックします。
ここに画像の説明を挿入します
10. データ接続管理インターフェイスの [新しいデータ接続] ボタンをクリックして、新しいデータ接続インターフェイスを開きます。
ここに画像の説明を挿入します
11. [すべて] を選択します。 12. Hadoop Hive ページで、
ここに画像の説明を挿入します
仮想マシン Hive サービス (つまり、hiveserver2 サービス) の関連情報を入力します。入力が完了したら、「Test Connection」ボタンをクリックします。構成を示す「接続成功」プロンプトが表示されます。成功したら、右上隅の「保存」ボタンをクリックすると、Hive 接続が作成されます。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
この時点で、FineBI から Hive へのデータ接続構成が完了します。視覚化パネルは後で構成します。

8.6. 視覚的な表示

このセクションの目的は、FineBI を使用して次のビジュアル ダッシュボードを構成することです。
ここに画像の説明を挿入します
1. レポートを作成します。システムにログイン後、「Public Data - New Folder」をクリックして今回使用するフォルダーを作成し、そのフォルダーに「Hive Data Analysis」という名前を付けます。
ここに画像の説明を挿入します
2. 新しく作成した「Hive Data Analysis」フォルダーを選択し、上の「新しいデータセット」ボタンをクリックして「データベーステーブル」を選択します。
ここに画像の説明を挿入します
3. 前の章で作成した 8 インジケーター データ テーブルを選択し、右上隅の [OK] ボタンをクリックします。
ここに画像の説明を挿入します
4. [OK] をクリックすると、前のテーブルが [Hive] の下に表示されることがわかります。 「データ分析」フォルダー。選択したテーブル (テーブルのコメントに基づいて名前が付けられます);
ここに画像の説明を挿入します
5. 各テーブルを順番にクリックし、[データの更新] ボタンをクリックして Hive からデータを取得します。
ここに画像の説明を挿入します
6. [マイ分析 - 新規] をクリックします。フォルダー」、新しいフォルダーに「Hive データ分析」という名前を付けます。
ここに画像の説明を挿入します
7. 「Hive データ分析」を選択し、「新しい分析トピック」をクリックします。分析トピック ページが別のブラウザー ウィンドウで開きます。
ここに画像の説明を挿入します
8. フォルダーで「Hive データ分析」を選択します。分析トピックページ。新しく作成したHiveデータ分析データセットの「パブリックデータ」-「毎日メッセージを送受信する人の数」を選択し、「OK」ボタンをクリックしてデータを構築します
ここに画像の説明を挿入します
。完了したら、下の [コンポーネント] タブをクリックしてコンポーネント構成を入力し、[KPI インジケーター カード] を選択して、左側の [sender_user_cnt] フィールドを [テキスト] 列にドラッグし、テキスト列の構成ボタンをクリックします。
ここに画像の説明を挿入します
10. ポップアップ テキスト列の設定で、[フォント サイズの固定] をキャンセルしてからコンテンツを編集し、コンテンツのプレフィックスを「メッセージを送信している人の数:」に変更します。 11. コンポーネントのタブの
ここに画像の説明を挿入します
ここに画像の説明を挿入します
名前を「人数」に変更します。メッセージの送信」を選択し、ページの下部にある「ボード」ボタンをクリックしてダッシュボードを追加します。12. 次に、ダッシュボード
ここに画像の説明を挿入します
で、新しく構成した「メッセージを送信している人の数」コンポーネントをダッシュ​​ボードにドラッグし、調整します。位置とサイズを変更するには、コンポーネントの横にあるドロップダウン ボタンをクリックし、「タイトルを表示」チェックボックスをキャンセルします。
ここに画像の説明を挿入します
13. 次に、右上隅にある「ダッシュボード スタイル」をクリックし、「デフォルト ダーク」を選択して、全体の背景を変更します。データ ダッシュボード;
ここに画像の説明を挿入します
14. 次に、同様に、「受信メッセージ数」の新しいコンポーネントを作成し、ダッシュボードに配置します;
ここに画像の説明を挿入します
15. 「データ」タブを選択し、上の「+」ボタンをクリックして、 「パブリック データ - Hive データ分析 - 日次メッセージの合計」を選択し、「OK」をクリックします。
ここに画像の説明を挿入します
16. 次に、「メッセージの合計数」コンポーネントを追加し、上記を参照してコンポーネントの構成を完了し、ダッシュボードに配置します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
17.同様の方法に従って、「最も多くのメッセージを送信したユーザー TOP10」コンポーネントを作成します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
18. 同様の方法に従って、「送信ユーザーのオペレーティング システムの割合」
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
コンポーネントを作成します。 19. 同様の方法に従って、マップ コンポーネントを作成します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
20 . 同様の方法で「最も多くのメッセージを受信したユーザーTOP10」コンポーネントを作成します;
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
21. 同様の方法に従って「送信ユーザーの携帯電話機種の分布」コンポーネントを作成します;
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
22. 同様の方法に従って時間ごとのメッセージを作成しますボリューム トレンド コンポーネント;
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
これでこのコースは終了です。

おすすめ

転載: blog.csdn.net/whh306318848/article/details/135361970