sqoop小作業
實現需求:
1) city_info表存在MySQL
2) product_info表存在MySQL
3) user_click資料匯入Hive
4) 三表的join 取TOP3(按區域進行分組)按天分割槽表
5) 查詢結果匯入到MySQL資料庫
最終的統計結果欄位如下:
product_id 商品ID
product_name 商品名稱
area 區域
click_count 點選數/訪問量
rank 排名
day 時間
-------------------------------------------------------------------------------------
一、建立ruozedatajob資料庫
create database ruozedata_job;
二、hive建立使用者點選表
drop table user_click;
create table user_click(
user_id int,
session_id string,
action_time string,
city_id int,
product_id int
)
partitioned by (data string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
-- load 使用者點選量表到使用者點選表
load data local inpath '/home/hadoop/data/user_click.txt' overwrite into table user_click partition(data='2018-06-20');
三、匯入城市資訊表到hive
-- hive建立城市資訊表
drop table city_info;
create table city_info
(
city_id int,
city_name string,
area string
)
-- MySQL匯入Hive
sqoop import \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--table city_info -m 1 \
--mapreduce-job-name Hive_city_info \
--delete-target-dir \
--hive-database ruozedata_job \
--hive-table city_info \
--hive-overwrite \
--hive-import
四、匯入產品資訊表到hive
-- hive建立產品資訊表
drop table product_info;
create external table product_info(
product_id int,
product_name string,
extend_info string
);
-- MySQL匯入Hive
sqoop import \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--table product_info -m 1 \
--mapreduce-job-name Hive_product_info \
--delete-target-dir \
--hive-database ruozedata_job \
--hive-table product_info \
--hive-import \
--hive-overwrite
五、最終的統計結果欄位如下:
product_id 商品ID
product_name 商品名稱
area 區域
click_count 點選數/訪問量
rank 排名
day 時間
-- SQL語句
use ruozedata_job;
統計結果:
Total MapReduce CPU Time Spent: 7 seconds 400 msec
OK
7 product7 CC 39 1 2018-06-21
26 product26 CC 39 2 2018-06-21
70 product70 CC 38 3 2018-06-21
4 product4 EC 40 1 2018-06-21
96 product96 EC 32 2 2018-06-21
5 product5 EC 31 3 2018-06-21
40 product40 NC 16 1 2018-06-21
9 product9 NC 16 2 2018-06-21
5 product5 NC 13 3 2018-06-21
56 product56 NW 20 1 2018-06-21
67 product67 NW 20 2 2018-06-21
48 product48 NW 19 3 2018-06-21
38 product38 SC 35 1 2018-06-21
98 product98 SC 34 2 2018-06-21
88 product88 SC 34 3 2018-06-21
16 product16 SW 20 1 2018-06-21
60 product60 SW 19 2 2018-06-21
95 product95 SW 19 3 2018-06-21
Time taken: 57.804 seconds, Fetched: 18 row(s)
六、Hive建立複製表及表資料
七、HIve匯入到MySQL
-- MySQL建立表結構
CREATE TABLE product_hot
(
product_id int ,
product_name varchar(255),
area varchar(255),
click_count int,
rank int,
day varchar(255)
)
-- 匯入MySQL資料庫
sqoop export \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--mapreduce-job-name FromHDFSToMySQL3 \
--table product_hot \
-m 2 \
--export-dir /user/hive/warehouse/ruozedata_job.db/product_hot/* \
--fields-terminated-by '\001'
MySQL檢視結果:
1) city_info表存在MySQL
2) product_info表存在MySQL
3) user_click資料匯入Hive
4) 三表的join 取TOP3(按區域進行分組)按天分割槽表
5) 查詢結果匯入到MySQL資料庫
最終的統計結果欄位如下:
product_id 商品ID
product_name 商品名稱
area 區域
click_count 點選數/訪問量
rank 排名
day 時間
-------------------------------------------------------------------------------------
一、建立ruozedatajob資料庫
create database ruozedata_job;
二、hive建立使用者點選表
drop table user_click;
create table user_click(
user_id int,
session_id string,
action_time string,
city_id int,
product_id int
)
partitioned by (data string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
-- load 使用者點選量表到使用者點選表
load data local inpath '/home/hadoop/data/user_click.txt' overwrite into table user_click partition(data='2018-06-20');
三、匯入城市資訊表到hive
-- hive建立城市資訊表
drop table city_info;
create table city_info
(
city_id int,
city_name string,
area string
)
-- MySQL匯入Hive
sqoop import \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--table city_info -m 1 \
--mapreduce-job-name Hive_city_info \
--delete-target-dir \
--hive-database ruozedata_job \
--hive-table city_info \
--hive-overwrite \
--hive-import
四、匯入產品資訊表到hive
-- hive建立產品資訊表
drop table product_info;
create external table product_info(
product_id int,
product_name string,
extend_info string
);
-- MySQL匯入Hive
sqoop import \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--table product_info -m 1 \
--mapreduce-job-name Hive_product_info \
--delete-target-dir \
--hive-database ruozedata_job \
--hive-table product_info \
--hive-import \
--hive-overwrite
五、最終的統計結果欄位如下:
product_id 商品ID
product_name 商品名稱
area 區域
click_count 點選數/訪問量
rank 排名
day 時間
-- SQL語句
use ruozedata_job;
-
SELECT t2.*,current_date as day from
-
(
-
SELECT
-
t1.product_id,
-
t1.product_name,
-
t1.area,
-
t1.click_count,
-
row_number() over(PARTITION BY t1.AREA ORDER BY t1.click_count DESC) AS rank
-
FROM
-
(
-
SELECT
-
t.product_id ,
-
t.product_name,
-
t.area,
-
COUNT(t.session_id) click_count
-
FROM (
-
SELECT
-
uc.session_id,
-
ci.area,
-
pi.product_id,
-
pi.product_name
-
FROM user_click uc
-
LEFT JOIN city_info ci ON uc.city_id=ci.city_id
-
LEFT JOIN product_info pi ON uc.product_id=pi.product_id
-
WHERE 1=1
-
AND pi.product_name IS NOT NULL
-
AND ci.area IS NOT NULL
-
)t
-
GROUP BY t.area,t.product_name,t.product_id
-
ORDER BY t.AREA ,click_count DESC
-
)t1
-
)t2
- WHERE t2.rank <=3
統計結果:
Total MapReduce CPU Time Spent: 7 seconds 400 msec
OK
7 product7 CC 39 1 2018-06-21
26 product26 CC 39 2 2018-06-21
70 product70 CC 38 3 2018-06-21
4 product4 EC 40 1 2018-06-21
96 product96 EC 32 2 2018-06-21
5 product5 EC 31 3 2018-06-21
40 product40 NC 16 1 2018-06-21
9 product9 NC 16 2 2018-06-21
5 product5 NC 13 3 2018-06-21
56 product56 NW 20 1 2018-06-21
67 product67 NW 20 2 2018-06-21
48 product48 NW 19 3 2018-06-21
38 product38 SC 35 1 2018-06-21
98 product98 SC 34 2 2018-06-21
88 product88 SC 34 3 2018-06-21
16 product16 SW 20 1 2018-06-21
60 product60 SW 19 2 2018-06-21
95 product95 SW 19 3 2018-06-21
Time taken: 57.804 seconds, Fetched: 18 row(s)
六、Hive建立複製表及表資料
-
create table product_hot as
-
SELECT t2.*,current_date as day from
-
(
-
SELECT
-
t1.product_id,
-
t1.product_name,
-
t1.area,
-
t1.click_count,
-
row_number() over(PARTITION BY t1.AREA ORDER BY t1.click_count DESC) AS rank
-
FROM
-
(
-
SELECT
-
t.product_id ,
-
t.product_name,
-
t.area,
-
COUNT(t.session_id) click_count
-
FROM (
-
SELECT
-
uc.session_id,
-
ci.area,
-
pi.product_id,
-
pi.product_name
-
FROM user_click uc
-
LEFT JOIN city_info ci ON uc.city_id=ci.city_id
-
LEFT JOIN product_info pi ON uc.product_id=pi.product_id
-
WHERE 1=1
-
AND pi.product_name IS NOT NULL
-
AND ci.area IS NOT NULL
-
)t
-
GROUP BY t.area,t.product_name,t.product_id
-
ORDER BY t.AREA ,click_count DESC
-
)t1
-
)t2
- WHERE t2.rank <=3
七、HIve匯入到MySQL
-- MySQL建立表結構
CREATE TABLE product_hot
(
product_id int ,
product_name varchar(255),
area varchar(255),
click_count int,
rank int,
day varchar(255)
)
-- 匯入MySQL資料庫
sqoop export \
--connect jdbc:mysql://localhost:3306/ruozedata \
--username root --password root \
--mapreduce-job-name FromHDFSToMySQL3 \
--table product_hot \
-m 2 \
--export-dir /user/hive/warehouse/ruozedata_job.db/product_hot/* \
--fields-terminated-by '\001'
MySQL檢視結果:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31441024/viewspace-2156457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java小作業(三)Java
- 編譯原理作業小結編譯原理
- 軟體工程課程小作業軟體工程
- 微信小程式實現釋出作業微信小程式
- AIX作業系統版本小知識AI作業系統
- Sqoop之 Sqoop 1.4.6 安裝OOP
- sqoopOOP
- C語言動態陣列小作業C語言陣列
- 系統分析設計小組作業1
- 旅遊業企業如何製作自己的微信小程式?微信小程式
- Sqoop jobOOP
- Sqoop(1)OOP
- 嵌入式作業3.1 GPIO點亮小燈
- 解決一億小學生作業難題《作業瘋了》6月14日上架
- 【Sqoop篇】----Sqoop從搭建到應用案例OOP
- 微信小程式 結課作業 (附實驗報告)微信小程式
- Sqoop同步策略OOP
- sqoop 的使用OOP
- 作業系統 作業5作業系統
- 只有計算機才能完成的小學數學作業計算機
- 傢俱行業如何製作自己的商城類小程式?行業
- T520安裝xp作業系統小記作業系統
- 作業二:自動生成小學四則運算程式
- 作業
- SQOOP安裝部署OOP
- sqoop 架構分析OOP架構
- 【大資料】— sqoop ?大資料OOP
- sqoop的安裝OOP
- Sqoop fetchsize失效OOP
- sqoop簡單使用OOP
- 如何改善企業協作?這3個小tips請收好
- 家電行業商家如何開發製作自己的商城小程式?行業
- sqlplus小竅門:執行作業系統命令(zt)SQL作業系統
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 【團隊作業】第三週作業1
- 4- sqoop語法OOP
- sqoop指令碼批量生成OOP指令碼