zoukankan      html  css  js  c++  java
  • sqoop1.4.6数据迁移

    sqoop介绍

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

    导入数据MySQLOracle导入数据到HadoopHDFSHIVEHBASE等数据存储系统;

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

    sqoop工作机制

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

    在翻译出的mapreduce中主要是对inputformatoutputformat进行定制

    sqoop安装

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

    1、下载,解压到/usr/local/目录下,重命名为sqoop

    2、修改配置文件$SQOOP_HOME/conf

      mv sqoop-env-template.sh sqoop-env.sh

      打开sqoop-env.sh并编辑下面几行: 

        export HADOOP_COMMON_HOME=/usr/local/hadoop/

       export HADOOP_MAPRED_HOME=/usr/local/hadoop/

       export HIVE_HOME=/usr/local/hive

    3、将MySQL的jdbc驱动包添加到sqoop/lib/目录下

    注意:

    后面在sqoop中进行数据导入导出的时候,会出现很多错误:

    java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@1d5a7f6 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.  

    ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter  

    这些错误都是$SQOOP_HOME/lib/中导入的jdbc驱动包版本低造成的,换个高版本的就OK了。

    4、验证启动

    $SQOOP_HOME/bin

    $sqoop-version

    三个警告,不用管。到这里,整个sqoop安装就完成了。

    Sqoop的数据导入

    1、导入表数据到HDFS

    mysql中有一个库userdb中三个表:emp, emp_addemp_conn

    id

    name

    deg

    salary

    dept

    1201

    gopal

    manager

    50,000

    TP

    1202

    manisha

    Proof reader

    50,000

    TP

    1203

    khalil

    php dev

    30,000

    AC

    1204

    prasanth

    php dev

    30,000

    AC

    1205

    kranthi

    admin

    20,000

    TP

    id

    hno

    street

    city

    1201

    288A

    vgiri

    jublee

    1202

    108I

    aoc

    sec-bad

    1203

    144Z

    pgutta

    hyd

    1204

    78B

    old city

    sec-bad

    1205

    720X

    hitec

    sec-bad

    id

    phno

    email

    1201

    2356742

    gopal@tp.com

    1202

    1661663

    manisha@tp.com

    1203

    8887776

    khalil@ac.com

    1204

    9988774

    prasanth@ac.com

    1205

    1231231

    kranthi@tp.com

    $bin/sqoop import   

    --connect jdbc:mysql://hadoop1:3306/userdb   mysql中数据库的名字

    --username root  

    --password admin   

    --table emp   userdb下的emp表,可以通过第三方工具创建

    --m 1    运行MapReduce的数量

    2、导入关系表到hive

    bin/sqoop import --connect jdbc:mysql://hadoop1:3306/userdb --username root --password admin --table emp --hive-import --m 1

    3、导入到HDFS指定目录

    bin/sqoop import

    --connect jdbc:mysql://hadoop1:3306/userdb 

    --username root

    --password admin 

    --target-dir /queryresult

    --table emp_add

    --m 1

    4、导入表数据子集

    bin/sqoop import

    --connect jdbc:mysql://hadoop1:3306/userdb 

    --username root

    --password admin 

    --where "city ='sec-bad'"

    --target-dir /wherequery

    --table emp_add

    --m 1

    5、增量导入

    增量导入是仅导入新添加的表中的行的技术

    它需要添加‘incremental’, ‘check-column’, ‘last-value’选项来执行增量导入。

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

    1206, satish p, grp des, 20000, GR

    bin/sqoop import

    --connect jdbc:mysql://hadoop1:3306/userdb 

    --username root

    --password admin 

    --table emp

    --m 1

    --incremental append

    --check-column id

    --last-value 1205      上次表中最后一行的id,这个id以后的就是新增的!

     

    sqoop的数据导出

     首先确保hdfs中有所要导出的数据存在!!!

    1、首先需要手动创建mysql中的目标表

    $ mysql

    mysql> USE userdb;

    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://hadoop1:3306/userdb 

    --username root

    --password admin 

    --table employee

    --export-dir /user/root/emp/   位于hdfs中的要导出的数据路径

    3验证表mysql命令行。

     

  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/ahu-lichang/p/6840146.html
Copyright © 2011-2022 走看看