相关文章推荐
愉快的柚子  ·  sqoop·  3 天前    · 
愉快的柚子  ·  Apache Sqoop with ...·  3 天前    · 
愉快的柚子  ·  Run Apache Sqoop jobs ...·  3 天前    · 
愉快的柚子  ·  Run Apache Sqoop jobs ...·  3 天前    · 
愉快的柚子  ·  Apache Sqoop with ...·  3 天前    · 
愉快的柚子  ·  sqoop_百度百科·  3 天前    · 
愉快的柚子  ·  Use Managed Identity ...·  3 天前    · 
开源的工具
收藏
0 有用+1
0
Sqoop(发音:skup)是一款开源的工具,主要用于在 Hadoop (Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个 关系型数据库 (例如 : MySQL , Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个 Apache 项目。
外文名
sqoop
所属学科
大数据
发    音
skup
起始时间
2009年
作    用
数据迁移

出现背景

播报
编辑
Apache 框架Hadoop是一个越来越通用的 分布式计算环境 ,主要用来处理大数据。随着云提供商利用这个框架,更多的用户将数据集在Hadoop和 传统数据库 之间转移,能够帮助 数据传输 的工具变得更加重要。Apache Sqoop就是这样一款工具,可以在Hadoop和 关系型数据库 之间转移大量数据。

特征

播报
编辑
对于某些 NoSQL 数据库它也提供了连接器。Sqoop,类似于其他 ETL 工具,使用 元数据 模型来判断 数据类型 并在数据从 数据源 转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割 数据集 并创建maptask任务来处理每个区块。

注意事项

播报
编辑
尽管有以上的优点,在使用Sqoop的时候还有一些事情需要注意。首先,对于默认的并行机制要小心。默认情况下的并行意味着Sqoop假设大数据是在分区键范围内 均匀分布 的。这在当你的源系统是使用一个序列号发生器来生成 主键 的时候工作得很好。打个比方,当你有一个10个节点的集群,那么工作负载是在这10台服务器上 平均分配 的。但是,如果你的分割键是基于字母数字的,拥有比如以“A”作为开头的 键值 的数量会是“M”作为开头键值数量的20倍,那么工作负载就会变成从一台服务器倾斜到另一台服务器上。
如果你最担心是性能,那么可以研究下直接加载。直接加载绕过通常的 Java数据库连接 导入,使用数据库本身提供的直接载入工具,比如 MySQL mysqldump 。但是有特定数据库的限制。比如,你不能使用MySQL或者 PostgreSQL 的连接器来导入BLOB和 CLOB 类型。也没有驱动支持从视图的导入。 Oracle 直接驱动需要特权来读取类似dba_objects和v_$parameter这样的 元数据 。请查阅你的数据库直连 驱动程序 局限性的相关文档。
进行增量导入是与效率有关的最受关注的问题,因为Sqoop专门是为大数据集设计的。Sqoop支持 增量更新 ,将 新记录 添加到最近一次的导出的数据源上,或者指定上次修改的 时间戳
由于Sqoop将数据移入和移出 关系型数据库 的能力,其对于Hive— Hadoop 生态系统里的著名的类SQL 数据仓库 —有专门的支持不足为奇。命令“create- hive - table ”可以用来将 数据表 定义导入到 Hive

常用命令

播报
编辑
sqoop import 导入
--connect jdbc:mysql://127.0.0.1:3306/$db_name 连接数据库
--password root 数据库密码
--target-dir /origin_data/$db_name/db/$1/$db_date HDFS地址
--table db_table 源头数据表
--delete-target-dir HDFS地址存在删除
--num-mappers $2 \--split-by $3 maptask数量
-- input -null- string '\\N' 空值 转换
--input-null-non-string '\\N' 非 空字符串 替换
--fields-terminated-by "\t" 字符串 分割
--query "$4"' and $CONDITIONS;'
-hive-home <dir> 重写$HIVE_HOME
-hive-import 插入数据到hive当中,使用hive的默认 分隔符
-hive- overwrite 重写插入
-create-hive-table 建表,如果表已经存在,该操作会报错
-hive-table <table-name> 设置到hive当中的表名
-hive-drop-import-delims 导入到hive时删除 \n, \r, and \0001
-hive-delims-replacement 导入到hive时用自定义的字符替换掉 \n, \r, and \0001
-hive-partition-key hive分区的key
-hive-partition-value <v> hive分区的值
-map-column-hive <map> 类型匹配,sql类型对应到hive类型

示例

播报
编辑
sqoop import \
--connect jdbc :mysql://127.0.0.1(可以使用 虚拟机 名称):3306/database \
-- username root \
--password root \
--table tablename \
--target-dir /a/a
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"