大資料技術學習筆記之hive框架基礎3-sqoop工具的使用及具體業務分析
阿新 • • 發佈:2018-12-07
一、CDH版本的介紹及環境部署
-》Hadoop的三大發行版本
-》Apache Hadoop
-》cloudera Hadoop:CDH
-》Hortonworks: HDP
-》選用CDH版本的好處
-》解決每個框架之間的相容性問題
-》不需要對其他框架進行對應版本的編譯
-》cdh5框架的下載:cdh-5.3.6
-》http://archive.cloudera.com/cdh5/cdh/5/
-》安裝部署CDH版本
-》建立CDH版本目錄
sudo mkdir /opt/cdh-5.3.6
sudo chown -R hpsk:hpsk /opt/cdh-5.3.6
-》Hadoop
-》下載解壓
-》修改配置檔案
->hadoop-env.sh
->core-site.xml
->hdfs-site.xml
->mapred-site.xml
->yarn-site.xml
->slaves
-》格式化HDFS
bin/hdfs namenode -format
-》啟動
-》Hive
-》下載解壓
-》修改配置檔案
->hive-env.sh
->hive-site.xml
->log4j
-》新增MySQL的連線驅動包
-》啟動
-》建立表
二、sqoop的介紹及安裝部署
-》sqoop的功能:用於hdfs與rdbms之間資料的匯入匯出
-》資料分析的業務流程
-》資料清洗
-》欄位的過濾
-》欄位的補充 -》使用者、訂單、商品、一般儲存在RDBMS-》用sqoop實現
-》欄位格式化
-》資料分析後的資料儲存
-》HDFS
-》將分析好的資料匯出到MySQL中,供資料展示層進行讀取
-》sqoop不僅僅支援將資料匯入到hdfs
-》hive
-》hbase
-》sqoop的底層實現原理
-》使用引數來使用sqoop命令即可
-》sqoop底層封裝的是一個MapReduce程式
-》將引數傳遞給MapReduce,然後進行打包,提交給yarn執行
-》只有map task,沒有reduce task,不進行排序合併等操作
-》sqoop版本
-》sqoop1:選用1.4.5
-》sqoop2:添加了sqoop server ,安全機制等等
-》sqoop中的匯入匯出,基於HDFS而言
-》sqoop的安裝部署
-》下載解壓
tar -zxvf /opt/tools/sqoop-1.4.5-cdh5.3.6.tar.gz -C /opt/cdh-5.3.6/
-》修改配置檔案(宣告環境變數)
mv conf/sqoop-env-template.sh conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
export HADOOP_MAPRED_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
export HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6
-》新增MySQL的連線驅動包
cp /opt/tools/mysql-connector-java-5.1.27-bin.jar lib/
-》新增jacon
-》測試
-》幫助命令
bin/sqoop help
bin/sqoop list-databases --connect jdbc:mysql://bigdata-training01.hpsk.com:3306 --username root --password 123456
三、sqoop的匯入
-》將MySQL中的資料匯入到HDFS
-》在MySQL中建立資料
create table toHdfs(
id varchar(20) primary key,
name varchar(20) not null
);
insert into toHdfs value("0001","laoda");
insert into toHdfs value("0002","laoer");
insert into toHdfs value("0003","laosan");
insert into toHdfs value("0004","laosi");
-》使用SQOOP將資料匯入到HDFS
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs
-》預設的輸出路徑:使用者的家目錄
-》指定匯入目錄
--target-dir
-》指定maptask的個數
-m
-》提前刪除已存在的目錄
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--direct \
--delete-target-dir \
--target-dir /sqoop/import/ \
-m 1
-》指定匯入分隔符
--fields-terminated-by
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--direct \
--delete-target-dir \
--target-dir /sqoop/import/ \
--fields-terminated-by '\t' \
-m 1
-》指定匯入某些列
--columns
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--columns id \
--direct \
--delete-target-dir \
--target-dir /sqoop/columns \
--fields-terminated-by '\t' \
-m 1
-》指定匯入SQL語句結果
-e,--query <statement>
-》不能與--table一起使用
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--query 'select name from toHdfs where $CONDITIONS' \
--direct \
--delete-target-dir \
--target-dir /sqoop/columns \
--fields-terminated-by '\t' \
-m 1
-》如果MySQL中的資料,是動態變化的,如何保證資料同步的問題?
-》如果每天都有增加的資料。每次匯入到hdfs時,會不會包含之前匯入過的資料?
-》如果MySQL中的資料被修改,如何解決HDFS上的資料同步?
-》增量匯入(追加資料方式)
Incremental import arguments:3個引數配置:
--check-column <column> Source column to check for incremental
change
--incremental <import-type> Define an incremental import of type
'append' or 'lastmodified'
--last-value <value> Last imported value in the incremental
check column
-》check-column:用於記錄匯入的標誌列
-》incremental:匯入的型別
-》append:追加
-》lastmodified:根據時間進行匯入
-》last-value:上一次匯入時的最後一個值
create table toHdfsIN(
id int primary key,
name varchar(20) not null
);
insert into toHdfsIN value("1","laoda");
insert into toHdfsIN value("2","laoer");
insert into toHdfsIN value("3","laosan");
insert into toHdfsIN value("4","laosi");
insert into toHdfsIN value("5","laowu");
insert into toHdfsIN value("6","laoliu");
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--delete-target-dir \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
-m 1
-》增量匯入不能與--delete-target-dir一起使用
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 4 \
-m 1
-》增量匯入一般都使用sqoop job來執行
bin/sqoop-job \
--create job1 \
-- import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 4 \
-m 1
-》檢視job:bin/sqoop job --show job1
-》執行job1:bin/sqoop job -exec job1
-》匯入HIVE
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--delete-target-dir \
--hive-import \
--hive-database student \
--hive-table stu_info \
--fields-terminated-by '\t' \
-m 1
-》實際過程
-》MapReduce將MySQL中的資料儲存到hdfs的家目錄
-》將資料從hdfs的家目錄載入到hive表中去
四、sqoop的匯出
-》將HDFS(HIVE)中的資料匯出到MySQL
-》bin/sqoop export --help
bin/sqoop export \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table fromHdfs \ //要匯入的mysql目標表格
--export-dir /user/hive/warehouse/student.db/stu_info \ //HDFS要匯出的檔案路徑
--input-fields-terminated-by '\t' \
-m 1
-》使用sqoop執行檔案(而不是命令列)
bin/sqoop --options-file file_path
bin/sqoop --options-file /opt/datas/sqoop.txt
檔案格式注意:
換行不要,一個引數一行
export
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop
--username
root
--password
123456
--table
fromHdfs
--export-dir
/user/hive/warehouse/student.db/stu_info
--input-fields-terminated-by
'\t'
-m
1
五、使用者行為案例分析
-》需求分析
-》需求:統計每天每小時的PV,UV數
-》實現過程
-》建立hive表載入源資料
-》建立分割槽表,兩級分割槽
-》過濾欄位,提取需要的欄位
-》統計PV
count(URL)
-》統計UV
count(distinct guid)
-》生成結果表
date hour PV UV
-》匯出到MySQL
sqoop
-》資料採集
create database log_analysis;
use log_analysis;
create table log_source(
id string,
url string,
referer string,
keyword string,
type string,
guid string,
pageId string,
moduleId string,
linkId string,
attachedInfo string,
sessionId string,
trackerU string,
trackerType string,
ip string,
trackerSrc string,
cookie string,
orderCode string,
trackTime string,
endUserId string,
firstLink string,
sessionViewNo string,
productId string,
curMerchantId string,
provinceId string,
cityId string,
fee string,
edmActivity string,
edmEmail string,
edmJobId string,
ieVersion string,
platform string,
internalKeyword string,
resultSum string,
currentPage string,
linkPosition string,
buttonPosition string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
load data local inpath '/opt/datas/2015082818' into table log_source partition (date='20150828',hour='18');
load data local inpath '/opt/datas/2015082819' into table log_source partition (date='20150828',hour='19');
-》資料清洗
-》提取欄位:
-》手動分割槽
create table log_clear_part1(
id string,
url string,
guid string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
insert into table log_clear_part1 partition (date='20150828',hour='18')
select id,url,guid from log_source where date='20150828' and hour='18';
insert into table log_clear_part1 partition (date='20150828',hour='19')
select id,url,guid from log_source where date='20150828' and hour='19';
-》動態分割槽:一條語句實現自動分割槽
-》引數配置:
hive.exec.dynamic.partition=true
hive.exec.dynamic.partition.mode=nonstrict
create table log_clear_part2(
id string,
url string,
guid string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
insert into table log_clear_part2 partition (date='20150828',hour)
select id,url,guid,hour from log_source where date='20150828';
-》資料分析
create table result(
date string ,
hour string,
PV string,
UV string
);
insert overwrite table result select date,hour,count(url) PV ,count(distinct guid) UV from log_clear_part2 group by date,hour;
-》資料儲存
mysql中:
create table result_visit(
date varchar(30) not null,
hour varchar(30) not null,
pv varchar(30) not null,
uv varchar(30) not null,
primary key(date,hour)
);
-》hive預設的分隔符:\001
bin/sqoop export \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table result_visit \
--export-dir /user/hive/warehouse/log_analysis.db/result \
--input-fields-terminated-by '\001' \
-m 1
-》Hadoop的三大發行版本
-》Apache Hadoop
-》cloudera Hadoop:CDH
-》Hortonworks: HDP
-》選用CDH版本的好處
-》解決每個框架之間的相容性問題
-》不需要對其他框架進行對應版本的編譯
-》cdh5框架的下載:cdh-5.3.6
-》http://archive.cloudera.com/cdh5/cdh/5/
-》安裝部署CDH版本
-》建立CDH版本目錄
sudo mkdir /opt/cdh-5.3.6
sudo chown -R hpsk:hpsk /opt/cdh-5.3.6
-》Hadoop
-》下載解壓
-》修改配置檔案
->hadoop-env.sh
->core-site.xml
->hdfs-site.xml
->mapred-site.xml
->yarn-site.xml
->slaves
-》格式化HDFS
bin/hdfs namenode -format
-》啟動
-》Hive
-》下載解壓
-》修改配置檔案
->hive-env.sh
->hive-site.xml
->log4j
-》新增MySQL的連線驅動包
-》啟動
-》建立表
二、sqoop的介紹及安裝部署
-》sqoop的功能:用於hdfs與rdbms之間資料的匯入匯出
-》資料分析的業務流程
-》資料清洗
-》欄位的過濾
-》欄位的補充 -》使用者、訂單、商品、一般儲存在RDBMS-》用sqoop實現
-》欄位格式化
-》資料分析後的資料儲存
-》HDFS
-》將分析好的資料匯出到MySQL中,供資料展示層進行讀取
-》sqoop不僅僅支援將資料匯入到hdfs
-》hive
-》hbase
-》sqoop的底層實現原理
-》使用引數來使用sqoop命令即可
-》sqoop底層封裝的是一個MapReduce程式
-》將引數傳遞給MapReduce,然後進行打包,提交給yarn執行
-》只有map task,沒有reduce task,不進行排序合併等操作
-》sqoop版本
-》sqoop1:選用1.4.5
-》sqoop2:添加了sqoop server ,安全機制等等
-》sqoop中的匯入匯出,基於HDFS而言
-》sqoop的安裝部署
-》下載解壓
tar -zxvf /opt/tools/sqoop-1.4.5-cdh5.3.6.tar.gz -C /opt/cdh-5.3.6/
-》修改配置檔案(宣告環境變數)
mv conf/sqoop-env-template.sh conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
export HADOOP_MAPRED_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
export HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6
-》新增MySQL的連線驅動包
cp /opt/tools/mysql-connector-java-5.1.27-bin.jar lib/
-》新增jacon
-》測試
-》幫助命令
bin/sqoop help
bin/sqoop list-databases --connect jdbc:mysql://bigdata-training01.hpsk.com:3306 --username root --password 123456
三、sqoop的匯入
-》將MySQL中的資料匯入到HDFS
-》在MySQL中建立資料
create table toHdfs(
id varchar(20) primary key,
name varchar(20) not null
);
insert into toHdfs value("0001","laoda");
insert into toHdfs value("0002","laoer");
insert into toHdfs value("0003","laosan");
insert into toHdfs value("0004","laosi");
-》使用SQOOP將資料匯入到HDFS
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs
-》預設的輸出路徑:使用者的家目錄
-》指定匯入目錄
--target-dir
-》指定maptask的個數
-m
-》提前刪除已存在的目錄
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--direct \
--delete-target-dir \
--target-dir /sqoop/import/ \
-m 1
-》指定匯入分隔符
--fields-terminated-by
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--direct \
--delete-target-dir \
--target-dir /sqoop/import/ \
--fields-terminated-by '\t' \
-m 1
-》指定匯入某些列
--columns
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--columns id \
--direct \
--delete-target-dir \
--target-dir /sqoop/columns \
--fields-terminated-by '\t' \
-m 1
-》指定匯入SQL語句結果
-e,--query <statement>
-》不能與--table一起使用
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--query 'select name from toHdfs where $CONDITIONS' \
--direct \
--delete-target-dir \
--target-dir /sqoop/columns \
--fields-terminated-by '\t' \
-m 1
-》如果MySQL中的資料,是動態變化的,如何保證資料同步的問題?
-》如果每天都有增加的資料。每次匯入到hdfs時,會不會包含之前匯入過的資料?
-》如果MySQL中的資料被修改,如何解決HDFS上的資料同步?
-》增量匯入(追加資料方式)
Incremental import arguments:3個引數配置:
--check-column <column> Source column to check for incremental
change
--incremental <import-type> Define an incremental import of type
'append' or 'lastmodified'
--last-value <value> Last imported value in the incremental
check column
-》check-column:用於記錄匯入的標誌列
-》incremental:匯入的型別
-》append:追加
-》lastmodified:根據時間進行匯入
-》last-value:上一次匯入時的最後一個值
create table toHdfsIN(
id int primary key,
name varchar(20) not null
);
insert into toHdfsIN value("1","laoda");
insert into toHdfsIN value("2","laoer");
insert into toHdfsIN value("3","laosan");
insert into toHdfsIN value("4","laosi");
insert into toHdfsIN value("5","laowu");
insert into toHdfsIN value("6","laoliu");
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--delete-target-dir \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
-m 1
-》增量匯入不能與--delete-target-dir一起使用
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 4 \
-m 1
-》增量匯入一般都使用sqoop job來執行
bin/sqoop-job \
--create job1 \
-- import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfsIN \
--direct \
--target-dir /sqoop/incremental/ \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 4 \
-m 1
-》檢視job:bin/sqoop job --show job1
-》執行job1:bin/sqoop job -exec job1
-》匯入HIVE
bin/sqoop import \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table toHdfs \
--delete-target-dir \
--hive-import \
--hive-database student \
--hive-table stu_info \
--fields-terminated-by '\t' \
-m 1
-》實際過程
-》MapReduce將MySQL中的資料儲存到hdfs的家目錄
-》將資料從hdfs的家目錄載入到hive表中去
四、sqoop的匯出
-》將HDFS(HIVE)中的資料匯出到MySQL
-》bin/sqoop export --help
bin/sqoop export \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table fromHdfs \ //要匯入的mysql目標表格
--export-dir /user/hive/warehouse/student.db/stu_info \ //HDFS要匯出的檔案路徑
--input-fields-terminated-by '\t' \
-m 1
-》使用sqoop執行檔案(而不是命令列)
bin/sqoop --options-file file_path
bin/sqoop --options-file /opt/datas/sqoop.txt
檔案格式注意:
換行不要,一個引數一行
export
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop
--username
root
--password
123456
--table
fromHdfs
--export-dir
/user/hive/warehouse/student.db/stu_info
--input-fields-terminated-by
'\t'
-m
1
五、使用者行為案例分析
-》需求分析
-》需求:統計每天每小時的PV,UV數
-》實現過程
-》建立hive表載入源資料
-》建立分割槽表,兩級分割槽
-》過濾欄位,提取需要的欄位
-》統計PV
count(URL)
-》統計UV
count(distinct guid)
-》生成結果表
date hour PV UV
-》匯出到MySQL
sqoop
-》資料採集
create database log_analysis;
use log_analysis;
create table log_source(
id string,
url string,
referer string,
keyword string,
type string,
guid string,
pageId string,
moduleId string,
linkId string,
attachedInfo string,
sessionId string,
trackerU string,
trackerType string,
ip string,
trackerSrc string,
cookie string,
orderCode string,
trackTime string,
endUserId string,
firstLink string,
sessionViewNo string,
productId string,
curMerchantId string,
provinceId string,
cityId string,
fee string,
edmActivity string,
edmEmail string,
edmJobId string,
ieVersion string,
platform string,
internalKeyword string,
resultSum string,
currentPage string,
linkPosition string,
buttonPosition string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
load data local inpath '/opt/datas/2015082818' into table log_source partition (date='20150828',hour='18');
load data local inpath '/opt/datas/2015082819' into table log_source partition (date='20150828',hour='19');
-》資料清洗
-》提取欄位:
-》手動分割槽
create table log_clear_part1(
id string,
url string,
guid string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
insert into table log_clear_part1 partition (date='20150828',hour='18')
select id,url,guid from log_source where date='20150828' and hour='18';
insert into table log_clear_part1 partition (date='20150828',hour='19')
select id,url,guid from log_source where date='20150828' and hour='19';
-》動態分割槽:一條語句實現自動分割槽
-》引數配置:
hive.exec.dynamic.partition=true
hive.exec.dynamic.partition.mode=nonstrict
create table log_clear_part2(
id string,
url string,
guid string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t'
stored as textfile;
insert into table log_clear_part2 partition (date='20150828',hour)
select id,url,guid,hour from log_source where date='20150828';
-》資料分析
create table result(
date string ,
hour string,
PV string,
UV string
);
insert overwrite table result select date,hour,count(url) PV ,count(distinct guid) UV from log_clear_part2 group by date,hour;
-》資料儲存
mysql中:
create table result_visit(
date varchar(30) not null,
hour varchar(30) not null,
pv varchar(30) not null,
uv varchar(30) not null,
primary key(date,hour)
);
-》hive預設的分隔符:\001
bin/sqoop export \
--connect jdbc:mysql://bigdata-training01.hpsk.com:3306/sqoop \
--username root \
--password 123456 \
--table result_visit \
--export-dir /user/hive/warehouse/log_analysis.db/result \
--input-fields-terminated-by '\001' \
-m 1