zoukankan      html  css  js  c++  java
  • 数据搬运组件:基于Sqoop管理数据导入和导出

    数据搬运组件:基于Sqoop管理数据导入和导出

     

    本文源码:GitHub || GitEE

    一、Sqoop概述

    Sqoop是一款开源的大数据组件,主要用来在Hadoop(Hive、HBase等)与传统的数据库(mysql、postgresql、oracle等)间进行数据的传递。

    通常数据搬运的组件基本功能:导入与导出。

    鉴于Sqoop是大数据技术体系的组件,所以关系型数据库导入Hadoop存储系统称为导入,反过来称为导出。

    Sqoop是一个命令行的组件工具,将导入或导出命令转换成mapreduce程序来实现。mapreduce中主要是对inputformat和outputformat进行定制。

    二、环境部署

    在测试Sqoop组件的时候,起码要具备Hadoop系列、关系型数据、JDK等基础环境。

    鉴于Sqoop是工具类组件,单节点安装即可。

    1、上传安装包

    安装包和版本:sqoop-1.4.6

    [root@hop01 opt]# tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
    [root@hop01 opt]# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop1.4.6
    

    2、修改配置文件

    文件位置:sqoop1.4.6/conf

    [root@hop01 conf]# pwd
    /opt/sqoop1.4.6/conf
    [root@hop01 conf]# mv sqoop-env-template.sh sqoop-env.sh
    

    配置内容:涉及hadoop系列常用组件和调度组件zookeeper。

    [root@hop01 conf]# vim sqoop-env.sh
    # 配置内容
    export HADOOP_COMMON_HOME=/opt/hadoop2.7
    export HADOOP_MAPRED_HOME=/opt/hadoop2.7
    export HIVE_HOME=/opt/hive1.2
    export HBASE_HOME=/opt/hbase-1.3.1
    export ZOOKEEPER_HOME=/opt/zookeeper3.4
    export ZOOCFGDIR=/opt/zookeeper3.4
    

    3、配置环境变量

    [root@hop01 opt]# vim /etc/profile
    
    export SQOOP_HOME=/opt/sqoop1.4.6
    export PATH=$PATH:$SQOOP_HOME/bin
    
    [root@hop01 opt]# source /etc/profile
    

    4、引入MySQL驱动

    [root@hop01 opt]# cp mysql-connector-java-5.1.27-bin.jar sqoop1.4.6/lib/
    

    5、环境检查

    关键点:import与export

    查看帮助命令,并通过version查看版本号。sqoop是一个基于命令行操作的工具,所以这里的命令下面还要使用。

    6、相关环境

    此时看下sqoop部署节点中的相关环境,基本都是集群模式:

    7、测试MySQL连接

    sqoop list-databases --connect jdbc:mysql://hop01:3306/ --username root --password 123456
    

    这里是查看MySQL数据库的命令,如图结果打印正确:

    三、数据导入案例

    1、MySQL数据脚本

    CREATE TABLE `tb_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
      `user_name` varchar(100) DEFAULT NULL COMMENT '用户名',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
    INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (1, 'spring');
    INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (2, 'c++');
    INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (3, 'java');
    

    2、Sqoop导入脚本

    指定数据库的表,全量导入Hadoop系统,注意这里要启动Hadoop服务;

    sqoop import 
    --connect jdbc:mysql://hop01:3306/sq_import 
    --username root 
    --password 123456  
    --table tb_user 
    --target-dir /hopdir/user/tbuser0 
    -m 1
    

    3、Hadoop查询

    [root@hop01 ~]# hadoop fs -cat /hopdir/user/tbuser0/part-m-00000
    

    4、指定列和条件

    查询的SQL语句中必须带有WHERE$CONDITIONS:

    sqoop import 
    --connect jdbc:mysql://hop01:3306/sq_import 
    --username root 
    --password 123456 
    --target-dir /hopdir/user/tbname0 
    --num-mappers 1 
    --query 'select user_name from tb_user where 1=1 and $CONDITIONS;'
    

    查看导出结果:

    [root@hop01 ~]# hadoop fs -cat /hopdir/user/tbname0/part-m-00000
    

    5、导入Hive组件

    在不指定hive使用的数据库情况下,默认导入default库,并且自动创建表名称:

    sqoop import 
    --connect jdbc:mysql://hop01:3306/sq_import 
    --username root 
    --password 123456 
    --table tb_user 
    --hive-import 
    -m 1
    

    执行过程,这里注意观察sqoop的执行日志即可:

    第一步:MySQL的数据导入到HDFS的默认路径下;

    第二步:把临时目录中的数据迁移到hive表中;

    6、导入HBase组件

    当前hbase的集群版本是1.3,需要先创建好表,才能正常执行数据导入:

    sqoop import 
    --connect jdbc:mysql://hop01:3306/sq_import 
    --username root 
    --password 123456 
    --table tb_user 
    --columns "id,user_name" 
    --column-family "info" 
    --hbase-table tb_user 
    --hbase-row-key id 
    --split-by id
    

    查看HBase中表数据:

    四、数据导出案例

    新建一个MySQL数据库和表,然后把HDFS中的数据导出到MySQL中,这里就使用第一个导入脚本生成的数据即可:

    sqoop export 
    --connect jdbc:mysql://hop01:3306/sq_export 
    --username root 
    --password 123456 
    --table tb_user 
    --num-mappers 1 
    --export-dir /hopdir/user/tbuser0/part-m-00000 
    --num-mappers 1 
    --input-fields-terminated-by ","
    

    再次查看MySQL中数据,记录完全被导出来,这里,是每个数据字段间的分隔符号,语法规则对照脚本一HDFS数据查询结果即可。

    五、源代码地址

    GitHub·地址
    https://github.com/cicadasmile/big-data-parent
    GitEE·地址
    https://gitee.com/cicadasmile/big-data-parent
  • 相关阅读:
    java.lang.NoClassDefFoundError: org/jaxen/JaxenException解决方法
    SVN被锁定的几种解决方法
    URL传参时中文参数乱码的解决方法
    Log4j.properties配置详解
    如何在Oracle中向Collection类型的变量中逐条插入数据
    oracle中比较两表表结构差异和数据差异的方法
    报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
    JavaScript访问修改CSS样式表
    有关缓存
    emacs使用记录
  • 原文地址:https://www.cnblogs.com/lihaijia/p/14538485.html
Copyright © 2011-2022 走看看