日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文件存儲 HDFS 版和數據庫MySQL雙向數據遷移

本文介紹如何使用Sqoop工具實現文件存儲 HDFS 版和關系型數據庫MySQL之間的雙向數據遷移。

前提條件

  • 已開通文件存儲 HDFS 版服務并創建文件系統實例和掛載點。具體操作,請參見文件存儲HDFS版快速入門。

  • 已搭建Hadoop集群。建議您使用的Hadoop版本不低于2.7.2,本文使用的Hadoop版本為Apache Hadoop 2.8.5。

  • 已為Hadoop集群所有節點安裝JDK,且JDK版本不低于1.8。更多信息,下載JDK。

背景信息

Sqoop是一款開源的工具,主要用于在Hadoop和結構化數據存儲(例如關系數據庫)之間高效傳輸批量數據。既可以將一個關系型數據庫(MySQL、Oracle、Postgres等)中的數據導入文件存儲 HDFS 版中,也可以將文件存儲 HDFS 版的數據導入到關系型數據庫中。

步驟一:Hadoop集群掛載文件存儲 HDFS 版實例

在Hadoop集群中配置文件存儲 HDFS 版實例。具體操作,請參見掛載文件系統。

步驟二:安裝Sqoop

目前Sqoop分為Sqoop1和Sqoop2兩個版本,且兩個版本并不兼容。本文以Sqoop1的穩定版本Sqoop 1.4.7版本為例進行介紹。

  1. 下載Sqoop 1.4.7版本

  2. 執行以下命令,解壓安裝包。

    tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/
  3. 配置環境變量。

    1. 執行vim /etc/profile命令,打開配置文件,添加如下內容:

      export SQOOP_HOME=/usr/local/sqoop-1.4.7.bin__hadoop-2.6.0
      export PATH=$PATH:$SQOOP_HOME/bin
    2. 執行source /etc/profile命令,使配置生效。

  4. 添加數據庫驅動。

    1. 下載MySQL-Connector包。

      wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz
    2. 解壓MySQL-Connector包。

      tar -zxf mysql-connector-java-5.1.48.tar.gz
    3. 將MySQL-Connector包存放到Sqoop安裝目錄的lib目錄下。

      cp ./mysql-connector-java-5.1.48/mysql-connector-java-5.1.48.jar ${SQOOP_HOME}/lib/
  5. 修改配置文件。

    1. 執行如下命令復制sqoop-env-template.sh,并命名為sqoop-env.sh。

      cp ${SQOOP_HOME}/conf/sqoop-env-template.sh ${SQOOP_HOME}/conf/sqoop-env.sh
    2. 執行vim ${SQOOP_HOME}/conf/sqoop-env.sh命令打開配置文件,添加如下內容。

      export HADOOP_COMMON_HOME=/usr/local/hadoop-2.8.5
      export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
      export HIVE_HOME=/usr/local/apache-hive-2.3.9-bin   #若沒有安裝hive可不必添加此配置
    3. 執行cp ${HIVE_HOME}/lib/hive-common-2.3.9.jar ${SQOOP_HOME}/lib/命令復制文件。

  6. 執行如下命令驗證數據庫是否連接成功。

    sqoop list-databases --connect jdbc:mysql://<dburi> --username 'username' --password 'password' 

    參數

    說明

    dburi

    數據庫的訪問連接。例如 jdbc:mysql://0.0.0.0:3306/。

    username

    數據庫登錄用戶名。

    password

    用戶密碼。

    如果回顯信息中顯示MySQL數據庫的名稱,則表示連接成功。數據庫成功連接

步驟三:數據遷移

下面介紹數據遷移方式及遷移后的結果驗證。

實踐一:將文件存儲 HDFS 版的數據遷移到MySQL

文件存儲 HDFS 版的數據遷移到MySQL,需要先在MySQL上創建好對應數據結構的表,然后在集群Sqoop節點上使用sqoop export命令進行遷移。

此處以遷移文件存儲HDFS版/sqoop2mysql/table/mysqltest.txt中的數據為例,mysqltest.txt中已寫入如下數據。

6,測試用戶6,2019-08-10,男
7,測試用戶7,2019-08-11,男
8,測試用戶8,2019-08-12,男
9,測試用戶9,2019-08-13,女
10,測試用戶10,2019-08-14,女
  1. 執行create database sqoop_migrate;命令,創建MySQL數據庫。

  2. 執行以下命令,創建表。

    use sqoop_migrate;
    CREATE TABLE `employee` (
      `e_id` varchar(20) NOT NULL DEFAULT '',
      `e_name` varchar(20) NOT NULL DEFAULT '',
      `e_birth` varchar(20) NOT NULL DEFAULT '',
      `e_sex` varchar(10) NOT NULL DEFAULT '',
      PRIMARY KEY (`e_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
  3. 執行以下命令,遷移數據。

     sqoop export --connect jdbc:mysql://localhost:3306/sqoop_migrate  --username 'userName' --password 'userPW'  --num-mappers 1  --table employee  --columns "e_id,e_name,e_birth,e_sex"  --export-dir '/sqoop2mysql/table/mysqltest.txt'  --fields-terminated-by ',' 

    遷移命令格式:sqoop export --connect jdbc:mysql://<dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <hdfs-dir>

    參數

    說明

    dburi

    數據庫的訪問連接。例如jdbc:mysql://localhost:3306/。如果您的訪問連接中含有參數,則請加上單引號,例如'jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。

    dbname

    數據庫的名字,例如user。

    username

    數據庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數據庫中表的名稱。

    hdfs-dir

    存放待遷移數據的文件存儲 HDFS 版目錄。

  4. 驗證遷移結果。

    執行select * from employee;命令查看表數據。如果表中有如下數據,則表示遷移成功。hdfs_mysql

實踐二:將MySQL的數據遷移到HDFS

在集群Sqoop節點上,使用sqoop import命令將MySQL中的數據遷移到文件存儲 HDFS 版上。

此處以遷移MySQL中的employee表為例,employee表中已寫入如下數據。MySQL遷移數據

  1. 執行以下命令遷移數據。

    sqoop import --connect jdbc:mysql://localhost:3306/sqoop_migrate --username 'userid' --password 'userPW' --table employee  --target-dir /mysql2sqoop/table/sqoop_migrate  --num-mappers 1  --columns "e_id,e_name,e_birth,e_sex"  --direct

    命令格式:sqoop import --connect jdbc:mysql://<dburi>/<dbname> --username <username> --password <password> --table <tablename> --check-column <col> --incremental <mode> --last-value <value> --target-dir <hdfs-dir>

    參數說明如下所示,更多信息,請參見Sqoop Import。

    參數

    說明

    dburi

    數據庫的訪問連接。例如jdbc:mysql://172.x.x.x:3306/。

    如果您的訪問連接中含有參數,則請加上單引號。例如'jdbc:mysql://172.x.x.x.235:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。

    dbname

    數據庫的名字。例如user

    username

    數據庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數據庫中表的名稱。

    col

    遷移表中列的名稱。

    mode

    該模式決定Sqoop如何定義哪些行為新的行。取值為appendlastmodified

    value

    前一個導入中檢查列的最大值。

    hdfs-dir

    文件存儲 HDFS 版的寫入目錄。

  2. 檢查遷移結果。

    1. 執行hadoop fs -ls /mysql2sqoop/table/sqoop_migrate命令,獲取遷移文件信息。MySQL遷移文件

    2. 執行hadoop fs -cat /mysql2sqoop/table/sqoop_migrate/part-m-00000命令查看文件中的內容。

      如果part-m-00000文件中有如下內容,則表示遷移成功。mysql-hdfs

實踐三:將MySQL的數據遷移到Hive

在集群Sqoop節點上使用sqoop import命令可以將MySQL上的數據遷移到Hive上。

此處以遷移MySQL中的employee表為例,employee表中已寫入如下數據。employee

  1. 執行以下命令遷移數據。

    sqoop import --connect jdbc:mysql://localhost:3306/sqoop_migrate --username 'userid' --password 'PW'   --table employee   --hive-import --hive-database default  --create-hive-table --hive-overwrite  -m 1

    遷移命令格式:sqoop import --connect jdbc:mysql://<dburi>/<dbname> --username <username> --password <password> --table <tablename> --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir <hdfs-dir> --hive-table <hive-tablename>

    參數

    說明

    dburi

    數據庫的訪問連接。例如jdbc:mysql://localhost:3306/。如果您的訪問連接中含有參數,則請加上單引號,例如'jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。

    dbname

    數據庫的名字。例如user。

    username

    數據庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數據庫中表的名稱。

    hdfs-dir

    文件存儲 HDFS 版的寫入目錄。

    hive-tablename

    對應的Hive中的表名。

  2. 驗證遷移結果。

    執行select * from default.employee;命令查看表數據,如果表中有如下數據,則表示遷移成功。

實踐四:將Hive的數據遷移到MySQL

將Hive的數據遷移到MySQL上,需要先在MySQL上創建好對應Hive數據結構的表,然后在集群Sqoop節點上使用sqoop export命令進行遷移。

此處以遷移Hive上default.employee中的數據為例,該表中已寫入如下數據。default.employee

  1. 在MySQL上的sqoop_migrate庫中創建要導入的表。

    use sqoop_migrate;
    CREATE TABLE `employee_from_hive`(
      `id` VARCHAR(20),
      `name` VARCHAR(20) NOT NULL DEFAULT '',
      `birth` VARCHAR(20) NOT NULL DEFAULT '',
      `sex` VARCHAR(10) NOT NULL DEFAULT '',
      PRIMARY KEY(`id`)
    );

  2. 執行DESCRIBE FORMATTED default.employee;命令查看表信息。查看表信息

  3. 執行以下命令遷移數據。

    sqoop export --connect jdbc:mysql://localhost:3306/sqoop_migrate --username 'userid' --password 'userPW' --table employee_from_hive -m 1 --fields-terminated-by '\0001'  --export-dir /user/hive/warehouse/employee

    遷移命令格式:sqoop export --connect jdbc:mysql://<dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <hive-dir> --fields-terminated-by <Splitter>

    參數

    說明

    dburi

    數據庫的訪問連接。例如jdbc:mysql://localhost:3306/。如果您的訪問連接中含有參數,則請加上單引號,例如'jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8'。

    dbname

    數據庫的名字,例如user

    username

    數據庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數據庫中表的名稱。

    hive-dir

    存放待遷移數據的文件存儲 HDFS 版目錄。

    Splitter

    Hive表數據使用的分隔符。

  4. 驗證遷移結果。

    執行select * from sqoop_migrate.employee_from_hive;命令查看表數據。如果表中有如下數據,則表示遷移成功。hive-mysql