zoukankan      html  css  js  c++  java
  • sqoop 数据迁移

    sqoop 数据迁移

    1 概述

      sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。

      导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统。

      导出数据:从Hadoop的文件系统中导出数据到关系数据库。

    2 工作机制

      将导入或导出命令翻译成mapreduce程序来实现。

      在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

    3 sqoop 安装

      安装sqoop的前提是已经具备java和hadoop的环境。

      3.1 下载并解压

         http://ftp.wayne.edu/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

      3.2 修改配置文件 

    $ cd $SQOOP_HOME/conf
    
    $ mv sqoop-env-template.sh sqoop-env.sh
    
    打开sqoop-env.sh并编辑下面几行:
    
    export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/
    
    export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/
    
    export HIVE_HOME=/home/hadoop/apps/hive-1.2.1

      3.3 加入mysql的jdbc驱动   

    cp  ~/app/hive/lib/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/

      3.4 启动验证

    $ cd $SQOOP_HOME/bin
    $ sqoop-version

      输出:

      15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6

      Sqoop 1.4.6 git commit id 5b34accaca7de251fc91161733f906af2eddbe83

      Compiled by abe on Fri Aug 1 11:19:26 PDT 2015

      到这里,整个Sqoop安装工作完成

    4 数据导入

      4.1 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS

    $bin/sqoop import 
    --connect jdbc:mysql://hdp-node-01:3306/test 
    --username root 
    --password root 
    --table emp --m 1

      4.2 导入数据到HIVE

    bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --hive-import --m 1

      4.3 导入到HDFS指定目录

    --target-dir <new or exist directory in HDFS>

      下面的命令是用来导入emp_add表数据到'/queryresult'目录。

    bin/sqoop import 
    --connect jdbc:mysql://hdp-node-01:3306/test 
    --username root 
    --password root 
    --target-dir /queryresult 
    --table emp --m 1

      4.4 导入表数据子集

      我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

      where子句的语法如下。 

    --where <condition>

      下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为:Secunderabad 

    bin/sqoop import 
    --connect jdbc:mysql://hdp-node-01:3306/test 
    --username root 
    --password root 
    --where "city ='sec-bad'" 
    --target-dir /wherequery 
    --table emp_add --m 1

      4.5 增量导入

      增量导入是仅导入新添加的表中的行的技术。它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。下面的语法用于Sqoop导入命令增量选项。  

    --incremental <mode>
    --check-column <column name>
    --last value <last check column value>

      假设新添加的数据转换成emp表如下

      1206, satish p, grp des, 20000, GR

      下面的命令用于在EMP表执行增量导入

    bin/sqoop import 
    --connect jdbc:mysql://hdp-node-01:3306/test 
    --username root 
    --password root 
    --table emp --m 1 
    --incremental append 
    --check-column id 
    --last-value 1205

    5 数据导出

      将数据从HDFS导出到RDBMS数据库。

      导出前,目标表必须存在于目标数据库中。

      默认操作是从将文件中的数据使用INSERT语句插入到表中。

      更新模式下,是生成UPDATE语句更新表数据。

      语法: 

    $ sqoop export (generic-args) (export-args) 

      5.1 将hdfs数据导出到mysql

        1)首先在mysql中创建目标表  

     CREATE TABLE employee ( 
       id INT NOT NULL PRIMARY KEY, 
       name VARCHAR(20), 
       deg VARCHAR(20),
       salary INT,
       dept VARCHAR(10));

        2)执行导出命令 

    bin/sqoop export 
    --connect jdbc:mysql://hdp-node-01:3306/test 
    --username root 
    --password root 
    --table employee 
    --export-dir /user/hadoop/emp/

    6 sqoop 作业

      6.1创建作业

        在这里,我们创建一个名为myjob,这可以从RDBMS表的数据导入到HDFS作业。  

    bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1

        该命令创建了一个从db库的employee表导入到HDFS文件的作业。

      6.2 验证作业(--list) 

    $ sqoop job --list

      它显示了保存作业列表。

      Available jobs:

        myjob

      ‘--show’ 参数用于检查或验证特定的工作,及其详细信息  

    $ sqoop job --show myjob

      6.3 执行作业

      ‘--exec’ 选项用于执行保存的作业。下面的命令用于执行保存的作业称为myjob。 

    $ sqoop job --exec myjob
  • 相关阅读:
    2020软件工程作业06
    2020软件工程作业05
    jdk13.0.2安装完成后,使用binjlink.exe 命令配置jre报错
    软件工程04(已报废)
    2020软件工程作业03
    软件工程问题解决清单
    软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/8059041.html
Copyright © 2011-2022 走看看