sqoop 数据工具的使用

sqoop数据工具

文章目录

  • sqoop数据工具
    • 第一章 sqoop简介
    • 第二章 Sqoop原理
    • 第三章 sqop的简单使用案例
      • 3.1 导入数据
        • 3.1.1 RDBMS到HDFS
        • 确定Mysql服务开启正常
        • 在Mysql中新键一张表并插入一些数据
        • 导入数据
        • 3.1.2 RDBMS 到Hive
        • 3.1.3 RDBMS 到HBase
      • 3.2 导出数据
        • 3.2.1 Hive 到RDBMS
        • 3.2.2 HDFS 到RDBMS--connect

第一章 sqoop简介

sqoop 是一款开源的工具,主要用在Hadoop(Hive)与传统的数据库(mysql)间进行数据的传递,可以将HDFS的数据导进关系型数据库中
Sqopp2与1不兼容,且特征不完整,并不用做生产 

第二章 Sqoop原理

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

在翻译出的MapReduce中主要是对inputformat和outputformat进行定制

第三章 sqop的简单使用案例

3.1 导入数据

在sqoop中,“导入”概念指:从非大数据集(RDBMS)向大数据集群(HDFS,Hive,Hbase)中传入数据:即导入,即使用import关键字

3.1.1 RDBMS到HDFS

  1. 确定Mysql服务开启正常

  2. 在Mysql中新键一张表并插入一些数据

    mysql> create database company;
    Query OK, 1 row affected (0.00 sec)
    mysql> create table company.staff(id int(4) primary key not null auto_increment,name varchar(255),sex varchar(255));
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into company.staff(name,sex) values("Thomas","Male");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into company.staff(name,sex) values('Catalina','Female');
    Query OK, 1 row affected (0.00 sec)
    
  3. 导入数据

    1. 全部导入

      sqoop import  //导入
      {mysql 参数}
      --connectjdbc:mysql://192.168.100.11:3306/company
      	//连接mysql 数据库
      --username root //数据库用户名
      --password 123456 //数据库用户密码
      --table staff // MySQL数据库被导入表的名字
      {Hdfs参数}
      --target-dir /hive/company //数据导出的hdfs目录
      --delete-target-dir  //如果存在则删除
      --num-mappers 1 	//Map的数量
      --fields-terminated-by '\t' //指定分隔符
      
    2. 查询导入

      sqoop import 
      --connect jdbc:mysql://192.168.100.11:3306/company 
      

    –username root --password 123456
    –target-dir /hive/company2
    –delete-target-dir
    –num-mappers 1
    –fields-terminated-by “\t”
    –query ‘select name,sex from staff where id <=1 and $CONDITIONS;’
    (–query " 双引号 " 使用 $CONDITIONS 为防止 shell 识别为自己的变量
         ‘单引号’ 使用 $CONDITIONS)

    
    3. 当-m 设置的值大于1时,split-by必须设置字段(需要是 int 类型的字段),如果不是 int类型的字段,则需要加上参数 
    
    ~~~mysql
    split-by "key" //设置切割主键
    
    
    1. 导指定列

      sqoop import  //数据导入
      --connect jdbc:mysql://192.168.100.11:3306/company //jdbc数据库 
      --username root //数据库用户
      --password 123456 //数据库密码
      --table staff //数据表
      --columns id,sex  //列名,如果涉及多列用逗号隔开
      --target-dir /hive/company4 \> //hdfs数据导入地址 
      --delete-target-dir //若hdfs文件存在,则删除
      -m 1 // map数量
      --fields-terminated-by "\t" //字段分隔符 
      
    2. 使用sqoop关键字查询导入数据

      //where
      sqoop import //导出数据
      --connect jdbc:mysql://192.168.100.11:3306/company //jdbc数据库 
      --username root 
      --password 123456 
      --table staff 
      --where "id=1" //条件表达式
      --fields-terminated-by "\t" 
      --target-dir /hive/company5 
      --delete-target-dir
      

3.1.2 RDBMS 到Hive

​ 先由mysql将数据导入到hdfs,再由hive将hdfs的数据导入到hive的数据表中

提前在hive中建立hive表

sqoop import 
--connect jdbc:mysql://192.168.100.11:3306/company 
--username root 
--password 123456 
--table staff 
-m 1 
--hive-import 
--fields-terminated-by "\t"  //字段分隔符
--hive-overwrite  //覆盖
--hive-table staff_hiv //指定数据表的名字
--hive-database dataname //数据库的名字
如果不指定–target-dir,数据会存储在HDFS中的hive/warehouse目录下 
对于hive表导入,可以将sql语句写入脚本,以XXX.sql命名

3.1.3 RDBMS 到HBase

3.2 导出数据

3.2.1 Hive 到RDBMS

sqoop export \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table mysql_table_name \   //mysql接受数据的表
--export-dir /source_data_path \   //指定要导出数据在hive的目录
--num-mappers 1 \
--input-fields-terminated-by '\t'

3.2.2 HDFS 到RDBMS–connect

语法:

sqoop export \
--connectjdbc  \
--username  \
--password  \
--driver  \
--columnscol1,col2,...... 导出到表哪几列
--direct:使用direct导出,速度更快
--export-dir: 从HDFS哪一个目录导出
-m: 指定mapper个数
--table:导出数据库哪一张表
解析输入参数:
--input-enclosed-by: 设置输入字段的封闭字符
--input-escaped-by:设置输入字段的转义字符
--input-fields-terminated-by:HDFS文件字段分隔符
--input-lines-terminated-by:HDFS文件换行符
输出格式化参数:
--enclosed-by: 设置字段封闭符
--escaped-by: 设置转义字符
--fields-terminated-by: 设置每一字段分割符
--lines-terminated-by: 设置每一行结束分割符
--mysql-delimiters:使用mysql默认的分隔符,fields:,  lines: \n  escaped-by: \
如果在hive表中该字段是字符串且为NULL,然后理解成为NULL而不是\N
--input-null-string
如果在hive表中该字段是非字符串类型且为NULL,然后理解成为NULL而不是\N
--input-null-non-string
**eg:**
sqoopexport \
--connectjdbc:mysql://hadoop-all-01:3306/hadoop \
--usernamehive \
--passwordhive \
--drivercom.mysql.jdbc.Driver \
--export-dir/user/hive/warehouse/hadoop.db/m_d \
--columns"id,country,city,phone" \
--tabledirector \
--num-mappers2 \
--direct\
--input-fields-terminated-by',' \
--input-null-string'\\N' \
--input-null-non-string'\\N'

e/hadoop.db/m_d
–columns"id,country,city,phone"
–tabledirector
–num-mappers2
–direct
–input-fields-terminated-by’,’
–input-null-string’\N’
–input-null-non-string’\N’




你可能感兴趣的:(BigData,数据工具)