• Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具


      Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS、Hive、HBase)与传统关系数据库(MySql、Oracle等)间进行数据传递工作。Sqoop最早是作为Hadoop的一个第三方模块存在,后来被独立成为了一个Apache项目。除了关系数据库外,对于某些NoSQL数据库,Sqoop也提供了连接器。

    一、Sqoop基础知识

      Sqoop项目开始于2009年,可以在Hadoop相关存储与传统关系数据库之间进行数据导入导出工作。Sqoop会开启多个MapReduce任务来并行进行数据导入导出工作,提高工作效率。

    图1.1 Sqoop简介

    二、Sqoop安装

      本实例安装版本:sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

    1、将安装文件上传到/usr/local/目录下并解压,然后重命名为sqoop。

    2、配置环境变量,执行命令:vi /etc/profile,增加export $SQOOP_HOME=/usr/local/bin,并在export PATH中增加$PIG_HOME/bin,然后执行命令:source /etc/profile使配置文件立即生效。

    3、将需要连接的数据库驱动文件拷贝至lib目录下,此实例连接mysql数据库,驱动文件为:mysql-connector-java-5.1.34.jar。注意,hadoop2貌似需要5.1.30以后的mysql驱动版本,否则很可能报错。

    三、Sqoop使用命令

       参考官方文档:http://sqoop.apache.org/docs/1.4.5/index.html

    1、MySQL数据导入到Hadoop

       sqoop import --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table mytabs --fields-terminated-by ' ' -m 1 [--hive-import] --append --check-column 'id'  --incremental append --last-value 5 --where 'id>2 and id<5'

       常用参数说明:

       ▶ --fields-terminated-by ' ',表示将数据导入到hadoop中列记录之间的间隔符,默认符号为英文逗号。这里通常使用制表符 来间隔数据,避免数据再次从HDFS到入到关系数据库时引起分割混乱;

       ▶ -m 1,是--num-mappers的缩写,表示指定MapReduce的个数为1个(默认会自动开启多个),sqoop转化的MR程序不包含reduce

       ▶ --append,表示数据导入到hadoop的方式为追加,否则不允许重复导入;

       ▶ --check-column '主键列名' --incremental append --last-value 5,表示数据为增量导入,根据--last-value的值来判断,有大于这个值的记录则执行导入,否则不执行导入操作;

       ▶ --hive-import表示将数据导入到Hive中;

        --where '',数据筛选条件

       ▶ -e--query 'select * from table where id>5 and $CONDITIONS',自定义导入数据的sql语句。使用自定义sql语句需要注意:① 使用了自定义sql就不能指定--table;② 自定义sql语句的where条件中必须包含字符串"$CONDITIONS"$CONDITIONS是一个变量,用于给多个map任务划分任务范围;③ 使用自定义sql时,如果通过参数-m指定多个map任务,由于自定义sql中可能存在多表查询,因此必须使用参数“--split-by 表名.字段名”指定多个map任务分割数据的根据字段,如--split-by users.id;

       ▶ --target-dir,显示指定数据导入到HDFS中的位置,默认保存路径为:/user/{当前用户}/{表名}/表数据文件,如果导入时需要将已存在的HDFS文件删除,可使用--delete-target-dir; 

    2、Hadoop数据导入到MySQL

       sqoop export --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table ids --fields-terminated-by ' ' --export-dir '/ids'

       其中--export-dir '/ids',表示指定要导出的HDFS文件地址。执行导出操作前,必须保证MySQL表ids存在

    3、将Sqoop命令保存作业方便调用

       sqoop job --create myjob -- import --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table mytabs --fields-terminated-by ' '

       其中myjob表示作业名称。在job中保存密码,默认在调用时还会要求输入密码,需要将密码直接保存在job中下次可以免密码直接执行,可以将/conf/sqoop-site.xml中的sqoop.metastore.client.record.password注视去掉。

       其他相关作业命令:① job sqoop job --list,查看作业列表;② job sqoop job --delete myjob,删除作业。

  • 相关阅读:
    hihoCoder#1142(三分求极值)
    hihoCoder#1095(二分搜索)
    hihoCoder#1139(二分+bfs)
    java亦或(^)
    JAVA线程
    java中io流浅析
    java循环
    java集合练习
    JAVA集合
    java面向对象(串)
  • 原文地址:https://www.cnblogs.com/hanganglin/p/4212635.html
Copyright © 2020-2023  润新知