sqoop导入数据到hdfs

10.1 Sqoop概述
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
最新的稳定版本是1.4.7。Sqoop2的最新版本是1.99.7。请注意,1.99.7与1.4.7不兼容,且没有特征不完整,它并不打算用于生产部署。
10.2 Sqoop下载与安装
10.2.1 Sqoop安装地址
1.Sqoop官网地址
http://sqoop.apache.org/
2.文档查看地址
http://sqoop.apache.org/docs/1.4.7/index.html
3.下载地址
https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/
10.2.2 Sqoop安装部署

  1. 把sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz上传到linux的/opt/software目录下

  2. 解压sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz到/opt/module/目录下
    $ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ~/modules/

  3. 修改sqoop-1.4.7.bin__hadoop-2.6.0的名称为sqoop
    [amiyang@hadoop102 software]$ mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop

  4. 修改/opt/module/sqoop/conf目录下的sqoop-env-template.sh名称为sqoop-env.sh
    [amiyang@hadoop102 software]$ mv sqoop-env-template.sh sqoop-env.sh
    [amiyang@hadoop102 software]$ mv sqoop-site-template.xml sqoop-site.xml
    5)配置sqoop-env.sh文件
    export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
    export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
    export HIVE_HOME=/opt/module/hive
    export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
    export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
    10.2.3 添加JDBC驱动
    拷贝/opt/software/mysql-libs/mysql-connector-java-5.1.27目录下的
    mysql-connector-java-5.1.27-bin.jar到/opt/module/sqoop/lib/
    $ cp -a mysql-connector-java-5.1.27-bin.jar
    ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
    10.2.4验证Sqoop
    我们可以通过某一个command来验证sqoop配置是否正确:
    $ bin/sqoop help
    出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出:
    Available commands:
    codegen Generate code to interact with database records
    create-hive-table Import a table definition into Hive
    eval Evaluate a SQL statement and display the results
    export Export an HDFS directory to a database table
    help List available commands
    import Import a table from a database to HDFS
    import-all-tables Import tables from a database to HDFS
    import-mainframe Import datasets from a mainframe server to HDFS
    job Work with saved jobs
    list-databases List available databases on a server
    list-tables List available tables in a database
    merge Merge results of incremental imports
    metastore Run a standalone Sqoop metastore
    version Display version information
    10.2.5测试Sqoop是否能够成功连接数据库
    $ bin/sqoop list-databases --connect jdbc:mysql://linux01:3306/ --username root
    –password 123456
    出现如下输出:
    information_schema
    metastore
    mysql
    performance_schema
    10.3 导入数据
    在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字。
    10.3.1 RDBMS到HDFS
    1. 确定Mysql服务开启正常
    2.在Mysql中新建一张表并插入一些数据
    $ mysql -uroot -p123456
    mysql> create database company;
    mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
    mysql> insert into company.staff(name, sex) values(‘Thomas’, ‘Male’);
    mysql> insert into company.staff(name, sex) values(‘Catalina’, ‘FeMale’);
    3.导入数据
    (1)全部导入
    $ bin/sqoop import
    –connect jdbc:mysql://hadoop102:3306/company
    –username root
    –password 123456
    –table staff
    –target-dir /user/company
    –delete-target-dir
    –num-mappers 1
    –fields-terminated-by “\t”

    (2)查询导入
    $ bin/sqoop import
    –connect jdbc:mysql://hadoop102:3306/company
    –username root
    –password 123456
    –target-dir /user/company
    –delete-target-dir
    –num-mappers 1
    –fields-terminated-by “\t”
    –query ‘select name,sex from staff where id <=1 and C O N D I T I O N S ; ′ 尖 叫 提 示 : m u s t c o n t a i n ′ CONDITIONS;' 尖叫提示:must contain ' CONDITIONS;mustcontainCONDITIONS’ in WHERE clause.
    尖叫提示:如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
    (3)导入指定列
    $ bin/sqoop import
    –connect jdbc:mysql://hadoop102:3306/company
    –username root
    –password 123456
    –target-dir /user/company
    –delete-target-dir
    –num-mappers 1
    –fields-terminated-by “\t”
    –columns id,sex
    –table staff
    尖叫提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
    (4)使用sqoop关键字筛选查询导入数据
    $ bin/sqoop import
    –connect jdbc:mysql://hadoop102:3306/company
    –username root
    –password 123456
    –target-dir /user/company
    –delete-target-dir
    –num-mappers 1
    –fields-terminated-by “\t”
    –table staff
    –where “id=1”
    尖叫提示:在Sqoop中可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。

你可能感兴趣的:(学习日志)