zoukankan      html  css  js  c++  java
  • Hadoop之Sqoop详解

    sqoop数据迁移
    1简介
      sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
      导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
      导出数据:从Hadoop的文件系统中导出数据到关系数据库

    2工作机制
      将导入或导出命令翻译成mapreduce程序来实现
      在翻译出的mapreduce中主要是对inputformat和outputformat进行定制

    3Sqoop的数据导入
      “导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件
      的文本数据(或者Avro、sequence文件等二进制数据)


    4、语法
      下面的语法用于将数据导入HDFS。
        $ sqoop import (generic-args) (import-args)

    5、导入表表数据到HDFS
      下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。
      $bin/sqoop import
      --connect jdbc:mysql://hdp-node-01:3306/test
      --username root
      --password root
      --table emp --m 1

      为了验证在HDFS导入的数据,请使用以下命令查看导入的数据
      $ $HADOOP_HOME/bin/hadoop fs -cat /user/hadoop/emp/part-m-00000

      emp表的数据和字段之间用逗号(,)表示。
      1201, gopal, manager, 50000, TP
      1202, manisha, preader, 50000, TP
      1203, kalil, php dev, 30000, AC
      1204, prasanth, php dev, 30000, AC
      1205, kranthi, admin, 20000, TP

      导入关系表到HIVE
        bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test
        --username root --password root --table emp --hive-import --m 1

      导入到HDFS指定目录
        在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。
        以下是指定目标目录选项的Sqoop导入命令的语法。
        --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

      下面的命令是用来验证 /queryresult 目录中 emp_add表导入的数据形式。
      $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

      它会用逗号(,)分隔emp_add表的数据和字段。
      1201, 288A, vgiri, jublee
      1202, 108I, aoc, sec-bad
      1203, 144Z, pgutta, hyd
      1204, 78B, oldcity, sec-bad
      1205, 720C, hitech, sec-bad

      导入表数据子集

      增量导入


    6、Sqoop的数据导出
      将数据从HDFS导出到RDBMS数据库
      导出前,目标表必须存在于目标数据库中。
      #默认操作是从将文件中的数据使用INSERT语句插入到表中
      #更新模式下,是生成UPDATE语句更新表数据
      语法
      以下是export命令语法。
        $ sqoop export (generic-args) (export-args)


      示例
        数据是在HDFS 中“EMP/”目录的emp_data文件中。所述emp_data如下:
        1201, gopal, manager, 50000, TP
        1202, manisha, preader, 50000, TP
        1203, kalil, php dev, 30000, AC
        1204, prasanth, php dev, 30000, AC
        1205, kranthi, admin, 20000, TP
        1206, satish p, grp des, 20000, GR

      1、首先需要手动创建mysql中的目标表
        $ mysql
        mysql> USE db;
        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 emp2
        --export-dir /user/hadoop/emp/

      3、验证表mysql命令行。
        mysql>select * from employee;
        如果给定的数据存储成功,那么可以找到数据在如下的employee表。

    7、Sqoop的原理
      概述
        Sqoop的原理其实就是将导入导出命令转化为mapreduce程序来执行,sqoop在接收到命令后,都要生成mapreduce程序

        使用sqoop的代码生成工具可以方便查看到sqoop所生成的java代码,并可在此基础之上进行深入定制开发

  • 相关阅读:
    MySQL如何监测是否命中索引? mysql执行计划解读
    mysql修改用户密码的方法及命令
    php7 安装rabbitmq 扩展 amqp扩展
    HAProxy的高级配置选项-Web服务器状态监测
    HAProxy 配置SSL
    nginx request_body 为空 没有参数 ;关于client_max_body_size client_body_buffer_size配置
    mysql 存储过程 函数的 导入导出
    postman设置客户端证书
    python字符串和列表之间相互转换
    python 发邮件 带附件 给多人发邮件
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9904935.html
Copyright © 2011-2022 走看看