热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hadoop记录篇11-关系型数据库导入导出组件sqoop

一。sqoop简介Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如:

一 。sqoop简介

     Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,

可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
 sqoop1架构(直接使用shell sqoop直接和关系型数据库与hadoop对接)
  

 sqoop2架构
   sqoop2引入了sqoop server(具体服务器为tomcat),对connector实现了集中的管理。其访问方式也变得多样化了,其可以通过REST API、JAVA API、WEB UI以及CLI控制台方式进行访问。另外,其在安全性能方面也有一定的改善,在sqoop1中我们经常用脚本的方式将HDFS中的数据导入到mysql中,或者反过来将mysql数据导入到HDFS中,其中在脚本里边都要显示指定mysql数据库的用户名和密码的,安全性做的不是太完善。在sqoop2中,如果是通过CLI方式访问的话,会有一个交互过程界面,你输入的密码信息不被看到
    
  

sqoop官网 http://sqoop.apache.org/
sqoop2用户手册地址 http://sqoop.apache.org/docs/1.99.7/admin/Installation.html

二 。chd安装sqoop

 使用cdh admin console添加服务 选择 sqoop2 (不使用cdh参考手册Admin Guide)
 角色分配 选择一台服务器 我选择cdh3 (cdh自动将hadoop配置分发给sqoop)

sqoop元数据数据库配置 默认是derby

创建成功

sqoopserver实际上是部署在tomcat中 从日志可以看出

sqoop-shell客户端 cdh未提供 下载sqoop安装包 解压使用bin目录接口 

下载 http://mirror.bit.edu.cn/apache/sqoop/1.99.7/sqoop-1.99.7-bin-hadoop200.tar.gz

解压 进入就如bin目录 就可以使用 sqoop2-shell命令 

sqoop1因为没有sqoopserver 如果安装了 直接使用sqoop-import 或者sqoop-export导入和导出

同理 在cdh添加 服务 选择sqoop1 只是个命令 就没有启动的说话

三 。sqoop脚本实现导入和导出

1。sqoop1实现

》》数据导入   
CDH添加服务 sqoop1的客户端  实际上就是设置参数
      (http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_sqoop_tools)
   官网描述 sqoop导入数据到hadoop中 调用hadoop命令 所有这里必须确保 本机有操作hadoop目录的命令(检测hdfs dfs -ls /能否查看hdfs内容) 否则目标地址
  就只能使用  hdfs://这种了 cdh中下载hdfs客户端配置文件 
  

   查看帮助 

[root@cdh3 conf]# sqoop-import --help
Warning: /opt/cloudera/parcels/CDH-5.7.6-1.cdh5.7.6.p0.6/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/04/25 16:57:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.7.6
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]

Common arguments:
   --connect                                        连接url
   --driver                                       驱动类
   --password                                       密码
   --username                                       用户名

Import control arguments:
   --append                                                   追加数据模式
   --as-avrodatafile                                          导入avro格式
   --as-parquetfile                                            Parquet格式
   --as-sequencefile                                          Imports data
   --as-textfile                                              文本文件
   --columns                                  导入的列
   --compression-codec                                 压缩算法类
   --delete-target-dir                                        
-e,--query                                         指定导入sql语句
-m,--num-mappers                                           map个数决定了输出几个文件
   --table                                        数据库读取的表
   --target-dir                                          目标hdfs目录
   --where                                      WHERE  条件                                                            
-z,--compress                                                 启用压缩

Output line formatting arguments:

   --fields-terminated-by       设置字段间分隔符
   --lines-terminated-by        行结尾符号 默认 \n


Input parsing arguments:
   --input-fields-terminated-by       设置字段间分隔符
   --input-lines-terminated-by        行结尾符号 默认 \n
 
Hive arguments:
   --create-hive-table                         创建hive的表 必须hive中不存在该表
   --hive-database              导入数据指定的数据库名称
   --hive-import  表示是hive导入
   --hive-table   指定hive表名
-libjars 指定包含classpath下的jar文件.

演示个简单例子 演示在cdh1上数据库  启用mysql的general_log

set global general_log=on;    # 开启general log模式
set global log_output='table' 自动将日志写入到 mysql.general_log表
将 mysql.genera_log下所有日志导入到hive中 查看表结构
MariaDB [mysql]> desc general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext       | NO   |     | NULL              |                             |
| thread_id    | int(11)          | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
| command_type | varchar(64)      | NO   |     | NULL              |                             |
| argument     | mediumtext       | NO   |     | NULL              |                             |
+--------------+------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)

测试数据

MariaDB [mysql]> select * from general_log limit 0,5;
+---------------------+----------------------------------+-----------+-----------+--------------+---------------------------------------------------------+
| event_time          | user_host                        | thread_id | server_id | command_type | argument                                                |
+---------------------+----------------------------------+-----------+-----------+--------------+---------------------------------------------------------+
| 2018-04-25 17:14:47 | scm[scm] @ localhost [127.0.0.1] |        19 |         0 | Query        | commit                                                  |
| 2018-04-25 17:14:47 | scm[scm] @ localhost [127.0.0.1] |        19 |         0 | Query        | SET autocommit=1                                        |
| 2018-04-25 17:14:47 | scm[scm] @ localhost [127.0.0.1] |        19 |         0 | Query        | SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ |
| 2018-04-25 17:14:48 | scm[scm] @ localhost [127.0.0.1] |        19 |         0 | Query        | SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED  |
| 2018-04-25 17:14:48 | scm[scm] @ localhost [127.0.0.1] |        19 |         0 | Query        | SET autocommit=0                                        |
+---------------------+----------------------------------+-----------+-----------+--------------+---------------------------------------------------------+
写sqoop的导入语句 这里先导入到hdfs中
sqoop-import --connect jdbc:mysql://node1:3306/mysql \
--driver com.mysql.jdbc.Driver \
--password hive \
--username hive \
--as-textfile \
--query 'select * from general_log where' \
--num-mappers 1 \
--target-dir /im
一般会报错 
18/04/25 17:27:15 INFO tool.CodeGenTool: Beginning code generation
18/04/25 17:27:16 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Query [select * from general_log] must contain '$CONDITIONS' in WHERE clause.
        at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:332)
        at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1856)
因为有可能在命令 中使用 --where 这个语句就放在 $CONDITIONS 中 修改sql语句
sqoop-import --connect jdbc:mysql://node1:3306/mysql \
--driver com.mysql.jdbc.Driver \
--password hive \
--username hive \
--as-textfile \
--query 'select * from general_log where $CONDITIONS' \
--num-mappers 1 \
--target-dir /im
导入完成查看 hdfs 的/im目录
[root@cdh4 init.d]# hdfs dfs -ls /im
Found 2 items
-rw-r--r--   3 root supergroup          0 2018-04-25 17:56 /im/_SUCCESS
-rw-r--r--   3 root supergroup    8435938 2018-04-25 17:56 /im/part-m-00000
直接导入到hive中 
sqoop-import --connect jdbc:mysql://node1:3306/mysql \
--driver com.mysql.jdbc.Driver \
--password hive \
--username hive \
--as-textfile \
--query 'select * from general_log where $CONDITIONS' \
--num-mappers 1 \
--target-dir /im1 \
--hive-import \
--create-hive-table \
--hive-database default \
--hive-table general_log

这里指定的target-dir只是个临时的存储 最终导入//user/hive/warehouse/general_log下

进入hive命令段 查看新建的hive表

sqoop-import --connect jdbc:mysql://node1:3306/mysql \
--driver com.mysql.jdbc.Driver \
--password hive \
--username hive \
--as-textfile \
--query 'select * from general_log where $CONDITIONS' \
--num-mappers 1 \
--target-dir /im1 \
--hive-import \
--create-hive-table \
--hive-database default \
--hive-table general_log

》》数据导出
对应的使用 sqoop-export即可 将之前导入到hive的表导入到test数据库的ttt表 创建ttt表的结构

mysql> create table ttt as select * from mysql.general_log where 1!=1;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc ttt;
+--------------+------------------+------+-----+---------------------+-------+
| Field        | Type             | Null | Key | Default             | Extra |
+--------------+------------------+------+-----+---------------------+-------+
| event_time   | timestamp        | NO   |     | 0000-00-00 00:00:00 |       |
| user_host    | mediumtext       | NO   |     | NULL                |       |
| thread_id    | int(11)          | NO   |     | NULL                |       |
| server_id    | int(10) unsigned | NO   |     | NULL                |       |
| command_type | varchar(64)      | NO   |     | NULL                |       |
| argument     | mediumtext       | NO   |     | NULL                |       |
+--------------+------------------+------+-----+---------------------+-------+
6 rows in set (0.00 sec)

导出命令 

sqoop-export --connect jdbc:mysql://node1:3306/test \
--driver com.mysql.jdbc.Driver \
--password hive \
--username hive \
--table ttt \
--num-mappers 1 \
--hcatalog-database default \
--hcatalog-table general_log

最后查询mysql 查看到导出数据

mysql> select count(*) from ttt;
+----------+
| count(*) |
+----------+
|     4838 |
+----------+
1 row in set (0.00 sec)

2。sqoop2实现

 (暂略)




推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
Kluter
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有