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
  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/8059041.html
Copyright © 2011-2022 走看看