Sqoop(SQL to Hadoop,数据抽取工具)

Sqoop主要用于在Hadoop和关系型数据库(结构化存储器)之间交换数据,可以改进数据的互操作性。通过Sqoop可以很方便的将数据从Oracle、MySQL等关系型数据库中导入Hadoop,或者将数据从Hadoop导出到关系型数据库中,使得传统关系型数据库和Hadoop之间的数据迁移变得非常方便。Sqoop主要通过JDBC(JAVA Database Connectivity)与关系型数据库进行交互,理论上支持JDBC的关系型数据库都可以使用Sqoop与Hadoop进行数据交互。Sqoop专门为大数据集而设计,支持增量更新,可以将新纪录添加到最后一次导出的数据源上,或者指定上次修改的时间戳。

Sqoop1是命令工具,不提供JAVA API,很难嵌入其它程序中,其中所有的连接器都必须掌握所有输出格式,而Sqoop2具有用以运行作业的服务器组件和一套客户端,包含命令行接口、网站用户界面、JAVA API等,还能使用其它执行引擎(如Spark)。

Sqoop连接器:Sqoop拥有一个可扩展的框架,使得它可以从(向)任何支持批量数据传输的外部存储系统导入(导出)数据。一个Sqoop连接器(Connector)就是在这个框架下的基础模块化组件,用于支持Sqoop的导入&导出。这种连接器由很多种类,比如JDBC连接器可以连接所有支持JDBC协议的数据库,还有针对MySQL、Oracle、DB2、Microsoft SQL Server等关系型数据库的专用连接器。这些常用的连接器一般会内置在Sqoop中。还有很多针对各种数据存储器的第三方连接器可以使用,如支持企业级数据仓库的Teradata和NoSQL存储器的连接器,他们往往需要另外单独下载安装。

向HDFS导入数据时,最终要的是确保访问的数据源是一致的,而从数据库中并行读取诗句的Map任务分布运行在不同的进程中,因此不可能共享同一个数据库事务。保持一致性的最好方法是导入时不允许运行任何对表中现有数据进行更新的过程。