資料匯出/遷移的概念
在做資料匯出之前,我們看一下已經完成的操作:資料分析階段將指標統計完成,也將統計完成的指標放到Hive資料表中,并且指標資料存盤到HDFS分布式檔案存盤系統,
指標統計完成之后,我們最終是想將我們的指標資料做成可視化大屏進行展示,Hive中的資料無法、很難直接連接到JavaWeb或者EE技術直接進行資料展示, 因此我們需要將Hive中統計出來的資料指標表遷移到我們的MySQL資料庫中,由MySQL資料庫連接web技術進行可視化展示,
Hive數倉指標表的資料都存盤在HDFS分布式檔案存盤系統,如果想要將Hive的資料匯出,有以下幾種匯出方式:
(1)使用insert命令匯出資料到一個目錄
(2)HDFS的相關命令:hdfs dfs -get/-move/-copyToLocalFile,將Hive數倉的資料匯出到本地的檔案中
(3)hive -e 和重定向 >> 命令將資料匯出到一個檔案中
(4)使用hive自帶的export命令匯出資料到一個檔案夾中(主要做資料倉庫的遷移 )
(5)第三方軟體技術sqoop技術實作資料遷移,實作將Hive數倉中的資料遷移到MySQL中
資料遷移技術SQOOP
一、SQOOP技術的相關概念
(1) sqoop技術也是apache的頂尖專案,主要是做資料遷移的,
(2)sqoop是將資料在Hadoop和關系型資料庫之間的資料傳遞,基于MapReduce完成,核心是對MR程式的InputFormat和OutputFormat進行定制,
(3)sqoop也是使用命令進行資料的匯入和匯出的,只不過底層也是會翻譯成為MR程式執行,
二、sqoop中兩個核心概念
匯入:將關系型資料庫表資料(比如MySQL)中表資料匯入到大資料集群(比如Hive、HBase、HDFS)
匯出:將大資料集群的資料(Hive、HBase、HDFS資料)匯出到非大資料集群的關系型資料庫,比如MySQL
三、SQOOP的安裝
sqoop軟體是基于Java和Hadoop的,所以必須先把Java和Hadoop軟體配置好,
1、首先下載上傳解壓sqoop、再配置sqoop的相關組態檔,
配置的sqoop組態檔是sqoop-env.sh,重點需要配置Hadoop的相關依賴環境:
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.8.5
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.8.5
export HIVE_HOME=/opt/module/hive-2.3.8
sqoop可以實作將Hive、HBase中表資料匯出到MySQL資料庫中,需要sqoop具備連接MySQL的條件——mysql-connector-java-xxxx.jar(需要把此jar包放在sqoop下)
cp /opt/module/hive-2.3.8/lib/mysql-connector-java-5.1.27.jar /opt/module/sqoop-1.4.7/lib/
2、配置sqoop的環境變數(vim /etc/profile)
四、SQOOP的使用
1、檢測sqoop是否安裝成功
sqoop help
sqoop version
sqoop可以用來查看某個資料庫管理系統中有哪些資料庫存在
2、sqoop查看MySQL資料庫中有哪些資料庫存在
sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password root
list-databases代表查看所有資料庫,connect代表連接哪個資料庫,username代表連接資料庫的用戶名,password代表連接資料庫密碼,
這個命令執行成功的前提條件是:你已經將對應資料庫的驅動jar包放到了sqoop的lib目錄下,
五、sqoop實作將MySQL資料匯入到Hive資料倉庫
【注意】需要將hive的相關jar包放到sqoop環境下
cp /opt/module/hive-2.3.8/lib/hive-common-2.3.8.jar /opt/module/sqoop-1.4.7/lib/
將MySQL中test資料庫下的test表資料匯入到Hive資料倉庫中,
sqoop import #匯入
--connect jdbc:mysql://localhost:3306/test # 連接MySQL的那個資料庫
--username root #連接MySQL的用戶名
--password root #連接MySQL的密碼
--table test # 指定MySQL要向Hive資料倉庫匯入當前資料下那張資料表的資料
--num-mappers 1 # 將匯入任務轉成MR程式運行 需要一個Map任務
--hive-import # 將資料匯入到hive數倉
--fields-terminated-by "\t" #指定hive數倉匯入完成之后表欄位之間分隔符
--hive-overwrite # 表中有資料 覆寫寫
--hive-table 資料庫名.表名 # 匯入到Hive的那個表中 表可以不存在 會自動創建
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table test --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table 資料庫名.表名
將MySQL表中資料匯入到Hive數倉的時候,hive資料倉庫中表可以不用提前存在,會自動創建,
六、sqoop實作將Hive/HDFS資料匯入到MySQL資料表中
sqoop的匯入分為:將資料匯入到HDFS和將資料匯入到Hive數倉,或者其他,每種匯入方式不一樣,
sqoop的匯出只有一種命令,就是將Hive/HDFS資料匯出到Mysql中,因為hive存盤的表資料也在HDFS上存盤著,所以HDFS的匯出和Hive的匯出命令一致的,
案例:實作專案功能,將age_pvs的資料匯出到MySQL資料庫中,
將MySQL資料匯入到hive表中,hive表可以不用提前存在,但是如果要將Hive資料表的資料匯入到MySQL中,那么MySQL中對應的表必須提前存在,并且和hive表結構保持一致,
匯出命令:
sqoop export # 匯出資料
--connect jdbc:mysql://localhost:3306/project #連接MySQL資料庫
--username root #連接用戶名
--password 123456 #連接密碼
--table staff # 匯入到MySQL的那張表中
--num-mappers 1 #轉成一個MR任務運行
--export-dir /user/hive/warehouse/staff_hive #hive資料表資料在HDFS上對應的路徑
--input-fields-terminated-by "\t" #hive表欄位和欄位之間的分隔符
sqoop的另外一種匯出方式:
vim一個xxx.opt檔案,然后將sqoop匯出命令放到檔案中,注意:sqoop關鍵字需要洗掉、而且引數和引數值需要分行寫
使用 sqoop --options-file xxx.opt

sqoop實作資料遷移(匯入、匯出)主要是將遷移操作轉換成為MR程式去運行,在表現形式上,就是將MR程式的InputFormat和OutputFormat進行重寫或者自定義,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297531.html
標籤:其他
上一篇:大資料開發基礎入門與專案實戰(三)Hadoop核心及生態圈技術堆疊之1.Hadoop簡介及Apache Hadoop完全分布式集群搭建
