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

文件存儲 HDFS 版和數(shù)據(jù)庫MySQL雙向數(shù)據(jù)遷移

本文介紹如何使用Sqoop工具實現(xiàn)文件存儲 HDFS 版和關(guān)系型數(shù)據(jù)庫MySQL之間的雙向數(shù)據(jù)遷移。

前提條件

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

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

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

背景信息

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

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

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

步驟二:安裝Sqoop

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

  1. 下載Sqoop 1.4.7版本。

  2. 執(zhí)行以下命令,解壓安裝包。

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

    1. 執(zhí)行vim /etc/profile命令,打開配置文件,添加如下內(nèi)容:

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

  4. 添加數(shù)據(jù)庫驅(qū)動。

    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. 執(zhí)行如下命令復(fù)制sqoop-env-template.sh,并命名為sqoop-env.sh。

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

      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. 執(zhí)行cp ${HIVE_HOME}/lib/hive-common-2.3.9.jar ${SQOOP_HOME}/lib/命令復(fù)制文件。

  6. 執(zhí)行如下命令驗證數(shù)據(jù)庫是否連接成功。

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

    參數(shù)

    說明

    dburi

    數(shù)據(jù)庫的訪問連接。例如 jdbc:mysql://0.0.0.0:3306/。

    username

    數(shù)據(jù)庫登錄用戶名。

    password

    用戶密碼。

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

步驟三:數(shù)據(jù)遷移

下面介紹數(shù)據(jù)遷移方式及遷移后的結(jié)果驗證。

實踐一:將文件存儲 HDFS 版的數(shù)據(jù)遷移到MySQL

文件存儲 HDFS 版的數(shù)據(jù)遷移到MySQL,需要先在MySQL上創(chuàng)建好對應(yīng)數(shù)據(jù)結(jié)構(gòu)的表,然后在集群Sqoop節(jié)點上使用sqoop export命令進(jìn)行遷移。

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

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. 執(zhí)行create database sqoop_migrate;命令,創(chuàng)建MySQL數(shù)據(jù)庫。

  2. 執(zhí)行以下命令,創(chuàng)建表。

    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. 執(zhí)行以下命令,遷移數(shù)據(jù)。

     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>

    參數(shù)

    說明

    dburi

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

    dbname

    數(shù)據(jù)庫的名字,例如user。

    username

    數(shù)據(jù)庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數(shù)據(jù)庫中表的名稱。

    hdfs-dir

    存放待遷移數(shù)據(jù)的文件存儲 HDFS 版目錄。

  4. 驗證遷移結(jié)果。

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

實踐二:將MySQL的數(shù)據(jù)遷移到HDFS

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

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

  1. 執(zhí)行以下命令遷移數(shù)據(jù)。

    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>

    參數(shù)說明如下所示,更多信息,請參見Sqoop Import

    參數(shù)

    說明

    dburi

    數(shù)據(jù)庫的訪問連接。例如jdbc:mysql://172.x.x.x:3306/。

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

    dbname

    數(shù)據(jù)庫的名字。例如user

    username

    數(shù)據(jù)庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數(shù)據(jù)庫中表的名稱。

    col

    遷移表中列的名稱。

    mode

    該模式?jīng)Q定Sqoop如何定義哪些行為新的行。取值為appendlastmodified。

    value

    前一個導(dǎo)入中檢查列的最大值。

    hdfs-dir

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

  2. 檢查遷移結(jié)果。

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

    2. 執(zhí)行hadoop fs -cat /mysql2sqoop/table/sqoop_migrate/part-m-00000命令查看文件中的內(nèi)容。

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

實踐三:將MySQL的數(shù)據(jù)遷移到Hive

在集群Sqoop節(jié)點上使用sqoop import命令可以將MySQL上的數(shù)據(jù)遷移到Hive上。

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

  1. 執(zhí)行以下命令遷移數(shù)據(jù)。

    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>

    參數(shù)

    說明

    dburi

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

    dbname

    數(shù)據(jù)庫的名字。例如user

    username

    數(shù)據(jù)庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數(shù)據(jù)庫中表的名稱。

    hdfs-dir

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

    hive-tablename

    對應(yīng)的Hive中的表名。

  2. 驗證遷移結(jié)果。

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

實踐四:將Hive的數(shù)據(jù)遷移到MySQL

將Hive的數(shù)據(jù)遷移到MySQL上,需要先在MySQL上創(chuàng)建好對應(yīng)Hive數(shù)據(jù)結(jié)構(gòu)的表,然后在集群Sqoop節(jié)點上使用sqoop export命令進(jìn)行遷移。

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

  1. 在MySQL上的sqoop_migrate庫中創(chuàng)建要導(dǎo)入的表。

    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. 執(zhí)行DESCRIBE FORMATTED default.employee;命令查看表信息。查看表信息

  3. 執(zhí)行以下命令遷移數(shù)據(jù)。

    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>

    參數(shù)

    說明

    dburi

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

    dbname

    數(shù)據(jù)庫的名字,例如user。

    username

    數(shù)據(jù)庫登錄用戶名。

    password

    用戶密碼。

    tablename

    MySQL數(shù)據(jù)庫中表的名稱。

    hive-dir

    存放待遷移數(shù)據(jù)的文件存儲 HDFS 版目錄。

    Splitter

    Hive表數(shù)據(jù)使用的分隔符。

  4. 驗證遷移結(jié)果。

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