zoukankan      html  css  js  c++  java
  • Sqoop使用笔记

    Sqoop 使用笔记

    安装 略

    导入HDFS

    导入命令

    sqoop import --username root --password password --connect jdbc:mysql://127.0.0.1/hadoop --table archive
    

    如果数据库table没有主键,会有error打印,如下:

    Error during import: No primary key could be found for table archive. Please specify one with --split-by or perform a sequential import with '-m 1'.
    

    如错误说提示,这时需要添加参数 --split-by,命令如下:

    sqoop import --username root --password password --connect jdbc:mysql://127.0.0.1/hadoop --table archive --split-by id
    

    如果不想每次输入用户名和密码,可以如此做

    cat > .sqoop_import.txt << EOF
    > import --username
    > wiki_write
    > --password
    > wiki_write
    > EOF
    
    

    导入命令可以如此写:

    sqoop --options-file .sqoop_import.txt --connect jdbc:mysql://172.16.1.201/hadoop --table archive
    

    条件导入

    read -d '' query << "EOF"
    > SELECT DOC_TITLE,ARCHIVE_TITLE,CREATE_NICK,NEWS_SUMMARY FROM hadoop.archive where create_time > '2016-01-01 00:00:00'
    > AND $CONDITIONS
    > EOF
    

    Sqoop 的宏$CONDITIONS必须放在where查询语句中使用,它可以在mysql查询中替换limit和offset选项

    导入命令:

    sqoop --options-file .sqoop_import.txt --query "$query"  --split-by id --target-dir /user/hadoop/2016-archive
    

    数据分割

    默认情况下,Sqoop 运行4个map任务,可以使用 --num-mappers属性调整map任务数量 。

    Sqoop的第一步是从数据库提取元数据,它检查需要被导入的表的主键,还需要运行一个查询确定数据量的上下限(select MIN(id) , MAX(id) FROM archive)。有些还需要使用map任务分布式并行导入数据分片,从而将数据分成与map任务同样个数的数据分片,这个数据分片包含一个主键的最大最小值,然后,每个map人物执行一个包含一些列主键的独立查询。

    --boundary-query 参数可以构建一个替代查询,用于确定最大最小值。

    增量导入

    Sqoop支持两种增量方式: append 和 lastmodified。 lastmodified 需要记录有时间戳。这两种情况下,通过设置--check-column 选项指定列,通过设置 --incremental 参数指定模式,通过实际使用值 --last-value确定增量的变化。

    sqoop --options-file .sqoop_import.txt 
    > --check-column "create_time"
    >  --incremental "lastmodified" 
    > --last-value "2016-01-01" 
    > --table archive
    

    结果如下:

    ……
    16/03/18 16:26:17 INFO tool.ImportTool: Incremental import complete! To run another incremental import of all data following this import, supply the following arguments:
    16/03/18 16:26:17 INFO tool.ImportTool:  --incremental lastmodified
    16/03/18 16:26:17 INFO tool.ImportTool:   --check-column CREATE_TIME
    16/03/18 16:26:17 INFO tool.ImportTool:   --last-value 2016-03-18 16:35:07.0
    16/03/18 16:26:17 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')
    ……
    

    Sqoop作业和元数据存储

    在命令末尾输出,可以看到递增列的最后一个值。全自动化的数据导入工作肯定是要想起的时候指定重用这个值。

    sqoop job --create archive_increment -- import 
    > --append 
    > --check-column "CREATE_TIME" 
    > --incremental "lastmodified" 
    > --last-value "2016-01-01" 
    > --connect jdbc:mysql://172.16.1.201/hadoop 
    > --username root 
    > --table archive 
    > --split-by id 
    > --num-mappers 2
    
    sqopp job -list
    sqoop job --exec archive_increment
    #显示作业的元数据信息
    sqoop job --show archive_increment
    

    元数据包括增量列的最后一个值,这个值是执行命令的时间,并不是在表上看的最后一个值。

    incremental.last.value = 2016-03-18 16:58:17.0
    

    快速mysql导入

    sqoop --options-file .sqoop_import.txt --direct --table archive --split-by id --num-mappers 2
    

    快速连接器的缺点:只有mysql和postgreSQL支持快速链接器,而且快速链接器也只能处理文本输出文件,不能处理Avro和SequenceFile格式文件。

    将数据导入Hive

    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    Xcode ARC,非ARC混搭
    Xcode GData库解析XML
    NSThread
    自定义UITableViewCell中的button实现视图切换
    UITableView
    iOS事件响应链
    结构体和NSData相互转换
    UIView的transform属性
    javascript垃圾回收机制
    ios8 滚动事件解放了
  • 原文地址:https://www.cnblogs.com/re-myself/p/5293000.html
Copyright © 2011-2022 走看看