天天看點

資料導出/遷移(Sqoop技術)

資料導出/遷移的概念 

        在做資料導出之前,我們看一下已經完成的操作:資料分析階段将名額統計完成,也将統計完成的名額放到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技術)

        sqoop實作資料遷移(導入、導出)主要是将遷移操作轉換成為MR程式去運作,在表現形式上,就是将MR程式的InputFormat和OutputFormat進行重寫或者自定義。

繼續閱讀