sqoop常见问题和高频面试题总结

1.1.1 Sqoop导入数据到hdfs中的参数

/opt/module/sqoop/bin/sqoop import \
--connect \ # 特殊的jdbc连接的字符串
--username \
--password \
--target-dir \  # hdfs目标的目录
--delete-target-dir \ # 导入的目标目录如果存在则删除那个目录
--num-mappers \   #相当于 -m ,并行导入时map task的个数
--fields-terminated-by   \
--query "$2"  ' and $CONDITIONS;' # 指定满足sql和条件的数据导入

 1.1.2 Sqoop导入hive时的参数

一步将表结构和数据都导入到hive中
bin/sqoop import \
--connect jdbc的url字符串 \
--table mysql中的表名\
--username 账号 \
--password 密码\
--hive-import \
--m mapTask的个数\
--hive-database hive中的数据库名;

1.1.3 Rdbms中的增量数据如何导入?

--check-column 字段名 \  #指定判断检查的依据字段
--incremental  导入模式\  # 用来指定增量导入的模式(Mode),append和lastmodified
--last-value 上一次导入结束的时间\
--m mapTask的个数 \
--merge-key 主键 

补充:
·如果使用merge-key合并模式 如果是新增的数据则增加,因为incremental是lastmodified模式,那么当有数据更新了,而主键没有变,则会进行合并。
·--check-column字段当数据更新和修改这个字段的时间也要随之变化,mysql中建表时该字段修饰符,字段名timestamp default current_timestamp on update current_timestamp

 1.1.4 Sqoop导入导出Null存储一致性问题

Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性,转化的过程中遇到null-string,null-non-string数据都转化成指定的类型,通常指定成"\N"。在导出数据时采用–input-null-string “\N” --input-null-non-string “\N” 两个参数。导入数据时采用–null-string “\N” --null-non-string “\N”。


1.1.5  Sqoop底层运行的任务是什么

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

1.1.6 Map task并行度设置大于1的问题

并行度导入数据的 时候 需要指定根据哪个字段进行切分 该字段通常是主键或者是自增长不重复的数值类型字段,否则会报下面的错误。

Import failed: No primary key could be found for table. Please specify one with --split-by or perform a sequential import with ‘-m 1’.

那么就是说当map task并行度大于1时,下面两个参数要同时使用

–split-by id 指定根据id字段进行切分

–m n 指定map并行度n个


1.1.8 Sqoop数据导出的时候一次执行多长时间

Sqoop任务5分钟-2个小时的都有。取决于数据量。

发布了185 篇原创文章 · 获赞 312 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/shujuelin/article/details/104350598