sqoop相关整理

目录

sqoop是什么

sqoop基本命令

sqoop   hive  ------>   mysql

sqoop  oracle ------> hive

sqoop处理hive与mysql的空值

sqoop导出数据一致性

sqoop导数据时数据倾斜

sqoop与datax性能比较


sqoop是什么

sqoop是传统数据库与hadoop之间的数据同步工具。主要依托MapReduce分布式批处理

sqoop官网手册   http://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html

只有Map阶段,没有Reduce阶段任务。

sqoop基本命令

sqoop   hive  ------>   mysql

sqoop export -m 1 --connect jdbc:mysql://192.168.17.128:3306/test --username root --password 123456 --table u --export-dir /hadoopmr/flow.txt --input-fields-terminated-by ',' --mysql-delimiters 

sqoop  oracle ------> hive

sqoop import \  
--connect jdbc:mysql://mysql.example.com/sqoop \  
--username sqoop \  
--password sqoop \  
--table cities  
--where "country = 'USA'"  
--target-dir /etl/input/cities  
--warehouse-dir /etl/input/  
--num-mappers 10  
--null-string '\\N' \  
--null-non-string '\\N'  
--incremental append \   
--check-column id \   
--last-value 1



--connnect: 指定JDBC URL
--username/password:mysql数据库的用户名
--table:要读取的数据库表
--where:导入数据的过滤条件
--target-dir:HDFS中导入表的存放目录
--warehouse-dir:指定表存放的父目录,只需要指定一次,下次存放时会在该目录下自动以该表名命名
--num-mappers:并发的map数
--null-string:null值时,HDFS存储为N
--null-non-string:非字符类型的字段为空时,存储为N
--incremental append或lastmodified:自动增量方式
--check-column
--last-value:上一次导入的最后一个值
sqoop import \
  --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
  --split-by a.id --target-dir /user/foo/joinresults

 

sqoop expert   ...........      从hadoop里导出数据

sqoop import   ...........      导入数据到hadoop里

 

sqoop处理hive与mysql的空值

--null-string '\\N' \  
--null-non-string '\\N'     这俩参数重要   。因为hive和mysql里对于空值的默认形式不一样,hive是 '\N'   ,mysql是  'null'

sqoop导出数据一致性

sqoop导出数据时默认用4个map,有些map可能成功了,数据进入目标表了,有些map可能失败了,数据没能进入目标表。用来汇报的表数据就不全,这种情况是不允许的。可以通过参数

--staging-table方式

sqoop export --connect jdbc:mysql://192.168.137.10:3306/user_behavior --username root --password 123456 --table app_cource_study_report --columns watch_video_cnt,complete_video_cnt,dt --fields-terminated-by "\t" --export-dir "/user/hive/warehouse/tmp.db/app_cource_study_analysis_${day}" --staging-table app_cource_study_report_tmp --clear-staging-table --input-null-string '\N'

 

sqoop导数据时数据倾斜

1.设置 -m map数设置多些

2.--split-by参数 搭配 创建虚拟列 ( row_number() over() as COLA )

涉及参数  --query、--split-by、--boundary-query

--query: select column1、 column2、 column3、 columnN from (select ROWNUM() OVER() AS ETL_ID, T.* from table T where xxx )  where $CONDITIONS

--split-by: ETL_ID

--boundary-query: select 1 as MIN , sum(1) as MAX from table where xxx
 

sqoop与datax性能比较

sqoop毕竟是分布式的MR,datax是单机式的。

sqoop比datax导数据速度快,sqoop大概是20M/s,datax是5M/s。

但是sqoop主要支持各传统关系型数据库与HADOOP之间的导数据,

datax支持的数据种类丰富 hbase,mysql,pg,oracle,mongodb.......等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值