zoukankan      html  css  js  c++  java
  • sqoop安装与使用

     
    sqoop 是什么:
    在关系数据库和hadoop之间数据的相互转换的工具。

    安装:原生安装:appache
    1.解压安装,
    2.重命名sqoop-1.4.5-cdh5.4.4/sqoop-env-template.sh 为sqoop-env.sh
    3.修改sqoop-env.sh配置:填写Hadoop,hbase,hive,zoocfgdir 对应的路径
    4.vi /etc/profile
                 export PATH=$PATH: /opt/sqoop-1.4.5-cdh5.4.4/bin
                 source /etc/profile
    安装问题:
       1.数据库驱动:在执行sqoop命令的client的sqoop lib目录下面放入驱动jar包即可(CDH默认在/opt/cloudera/parcels/CDH/lib/sqoop/lib/目录),驱动版本建议使用mysql-connector-java-5.1.32-bin.jar以上。

       2.client端JDK版本1.6~1.7,并且配置环境变量
           
      3.安装原生版本时,如果sqoop抛出找不到 驱动类或者主类org.apache.sqoop.Sqoop时,在如下目录中添加驱动包和sqoop核心包sqoop-1.4.x.jar。
             /opt/hadoop-2.6.0/share/hadoop/common/lib

    安装好后直接sqoop
    导入,导出,其他工具使用

    一.导入import

    1.mysql导入hdfs
    指定路径导入
    sqoop import --connect jdbc:mysql://ip地址:3306/数据库 --username 'root' --password '123456' --table 表名 –target-dir 指定目录(aadir)

    导入后hdfs dfs -ls  aadir(前面指定的)
            如果数据库数据大于4条会有4个文件,因为默认4个map任务,sqoop是hdfs的map阶段;sqoop 可以指定 -m 为1 吧数据导入一个文件
    sqoop import --connect jdbc:mysql://ip地址:3306/数据库 --username 'root' --password '123456' --table 表名 -m 1

    如果文件存在  导入是加上删除目录 --delete-target-dir
           
    向同一目录追加 --table info -m 1 --append --check-column 'id' --incremental append --last-value 23
            会向 之前info表导入hdfs的目录下追加一个文件数据时根据id并且23以后的数据
    --table info -m 1 --append --where "job like 'CTO'" -z  (--compression-codec ) 按照条件,默认gzip方式在目录下新增一个文件存放数据

    2.把mysql中的表复制到hive中
    sqoop import --connect jdbc:mysql://ip地址:3306/数据库 --username 'root' --password '123456'
            --table info --hive-import -m 1  (--fields-terminated-by "|" )按照指定分割方式,导入hive
            hive >show tables;查看数据库


    --table info --hive-import -m 1 --fields-terminated-by "|" --hive-overwrite 覆盖数据
    复制MySQL的表结构到hive 不复制数据
    sqoop create-hive-table --connect  --username  --password --table info --hive-table users  --fields-terminated-by "001"  --lines-terminated-by " "  
    导出所有的表到hive
    sqoop import-all-tables --connect --username --password  --hive-import  --fields-terminated-by "u0001"  --lines-terminated-by " "


    3.把mysql中的表复制到HBase
    --hbase-table                         指定导入到hbase中的表
    --column-family                         创建列族
    --hbase-row-key <id>                以id字段作为key
    --hbase-create-table                创建hbase表
    sqoop import --connect  --username  --password  --table info --hbase-create-table --hbase-row-key id --hbase-table info --column-family xxx


    二.导出export

    数据从hdfs 导出export到MySQL
    如果MySQL的数据存在就更新,不存在就插入
    sqoop export --connect "jdbc:mysql://ip地址:3306/test?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table info --export-dir 要导出数据的目录  -m 1 --update-key id --update-mode allowinsert

    hdfs的数据默认分割符是逗号。导入导出的事务是以Mapper任务为单位。

    注意:① --fields-terminated-by导入数据时(import)对输出进行字段分割、行分割

                 ② -input-fields-terminated-by解析HDFS上面的数据到数据库时使用参数


    三.
    1.Eval:

    直接使用sql进行操作MySQL数据库
    sqoop eval --connect --username 'root' --password '123456'  --query "select * from info"


    2.job

    创建job:--create
    删除job:--delete
    执行job:--exec
    显示job:--show
    列出job:--list

    sqoop job --create myjob -- import --connect jdbc:mysql://0.0.0.0:3306/数据库 --username 'root' --password '123456' --table info
    sqoop job --list
    sqoop job --exec myjob
    解释上段内容,将一个导入操作当作一个命令,可以使用job命名执行



    问题处理:

    MySQL是字段是空时,导入后,变成是null(这个是字符串)。需要处理

    当导入时突然故障,那么任务失败,数据是10000的整数倍(因为一次statement插入100条数据,然后每100个statement提交一次—)。处理这种故障           问题。用临时表备份

    原理:
    sqoop 将MySQL 数据 导入hadoop平台下的hdfs文件中。(hive可以从hdfs复制到kive中。从而实现从数据库导如hive或者hbase)
    从hdfs平台导出到关系型数据库是通过jdbc原理。
  • 相关阅读:
    JSON中toJSONString、ParseObject、parseArray的作用以及用 com.alibaba.fast.JSONArray解析字符串或者List集合
    几种操作Elasticsearch方法
    ElasticSearch 中boolQueryBuilder的使用
    maven依赖
    @javax.ws.rs Webservice注解
    Bug-滑稽
    Web安全之文件上传
    利用SSRF漏洞内网探测来攻击Redis(通过curl命令 & gopher协议)
    利用SSRF漏洞内网探测来攻击Redis(请求头CRLF方式)
    SVG XSS一般过程
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/13495461.html
Copyright © 2011-2022 走看看