分享

sqoop操作命令总结

pergrand 2016-7-14 22:35:39 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 10775
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 "\0001"  --lines-terminated-by "\n"  
导出所有的表到hive
sqoop import-all-tables --connect --username --password  --hive-import  --fields-terminated-by "\u0001"  --lines-terminated-by "\n"


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原理。




没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条