Sqoop

292 阅读3分钟

sqoop测试

# 1.测试
sqoop list-databases --connect jdbc:mysql://124.251.115.187:3306/ --username glht --password queryroot0711

sqoop list-databases --connect jdbc:mysql://master:3306/ --username root --password hadoop


# 2.导入到 HDFS
sqoop import \
--connect jdbc:mysql://master:3306/spark \
--username root \
--password hadoop \
--table order \
--delete-target-dir \
--target-dir /user/spark_order \
--num-mappers 1 \
--fields-terminated-by "\t"


# 3.导入到 HIVE (全量 + 覆盖)
sqoop import \
--connect jdbc:mysql://master:3306/bi \
--username root \
--password hadoop \
--table event_info \
--hive-import \
--hive-table elaiza.event_info \
--hive-overwrite \
--as-textfile \
--compress \
--compression-codec gzip \
--split-by id \
--fields-terminated-by "\t" \
--null-string '\\N' \
--null-non-string '0' \
-m 2

# 4.导入到 HIVE (where条件 m的个数会影响hdfs的文件个数)
sqoop import \
--connect jdbc:mysql://master:3306/bi \
--username root \
--password hadoop \
--table event_info \
--hive-import \
--hive-table elaiza.event_info2 \
--hive-overwrite \
--as-textfile \
--compress \
--compression-codec gzip \
--split-by id \
--where "event_time >= '2020-03-17'" \
--fields-terminated-by "\t" \
--null-string '\\N' \
--null-non-string '0' \
-m 1

# 5.导入到 HIVE (query 不要与部分命令合用,要加上$CONDITIONS 条件)
sqoop import \
--connect jdbc:mysql://master:3306/bi \
--username root \
--password hadoop \
--hive-import \
--hive-table elaiza.event_info3 \
--hive-overwrite \
--delete-target-dir \
--target-dir '/usr/hive/event_info3' \
--as-textfile \
--compress \
--compression-codec gzip \
--query 'select operator_id, event_key, event_time, source, session_id from event_info where event_time >= "2020-03-17 08:00:00" and $CONDITIONS ' \
--fields-terminated-by "\t" \
--null-string '\\N' \
--null-non-string '0' \
-m 1

# 6.导入到 HIVE (append)
确定:根据id自增是不准确的,数据有可能被修改
sqoop import \
--connect jdbc:mysql://master:3306/bi \
--username root \
--password hadoop \
--table event_info \
--hive-import \
--hive-table elaiza.event_info5 \
--incremental append \
--check-column id \
--last-value 70744 \
--as-textfile \
--compress \
--compression-codec gzip \
--fields-terminated-by "\t" \
--null-string '\\N' \
--null-non-string '0' \
-m 1

# 7.导入到 HIVE (lastmodified 不支持hive导入,可以放到warehouse目录里, 然后在建hive内部表)
确定:根据id自增是不准确的,数据有可能被修改
sqoop import \
--connect jdbc:mysql://master:3306/bi \
--username root \
--password hadoop \
--table event_info \
--target-dir /usr/hive/warehouse/elaiza.db/event_info6 \
--incremental lastmodified \
--check-column event_time \
--last-value '2020-03-20 00:00:00' \
--merge-key id \
--as-textfile \
--compress \
--compression-codec gzip \
--fields-terminated-by "\t" \
--null-string '\\N' \
--null-non-string '0' \
-m 1

# 7.建立event_info6 hive 内部表
create table event_info6
 (
  id bigint COMMENT '事件id',
  operator_id string COMMENT '操作人id',
  event_key string COMMENT '事件具体操作',
  event_time string COMMENT '事件发生时间',
  source string COMMENT '系统来源',
  session_id string COMMENT '会话ID',
  params string COMMENT '请求参数',
  create_time string COMMENT '创建时间'
 ) 
row format delimited fields terminated by '\t';

--append    不断将增量数据旺目标目录追加文件
--merge-key 不断将增量数据导入的hdfs,而且会将以前导入和最近一次导入的数据用一个mr job来合并

sqoop参数

# 1.job命令
创建:sqoop job --create sq1 -- list-databases --connect jdbc:mysql://master:3306/ --username root --password hadoop
列出:sqoop job --list
执行:sqoop job --exec jobname
删除:sqoop job --delete jobname


# 2.定时执行脚本
/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0/bin/sqoop  \
list-databases
--connect jdbc:mysql://master:3306/ 
--username root
--password hadoop

* * * * * sh /usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0/job > /usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0/job/jobOutput/job.log 2>&1



# 3.参数属性
--table mysql中的表
--delete-target-dir 如果hdfs中的目标目录存在,则删除
--target-dir d导入到hdfs只的目标目录
--split-by 切分工作单元,指定对应的 字段 ,一般是是id
--m 并行数
--columns 指定部分列
--query 查询语句,不能和--columns一起用,要搭配:where $CONDITIONS, 注意单引号和双引号的区别
--driver com.mysql.jdbc.Driver \ 指定驱动参数
--where 指定条件
--fields-terminated-by 指定分隔符,默认 ,
--null-string 字符串字段为空 被写成指定
--null-non-string 数字字段为空 被写成指定
--as-parquefile 输出的数据文件格式
--fetch-size 一次读取数据条数