大数据6、Apache Sqoop及ZooKeeper简介

本系列为大数据学习个人笔记,如有错误,欢迎指正,也欢迎各路朋友交流讨论。

What is Sqoop?

  • Sqoop是一个用于在Hadoop和关系数据库,或商业服务器之间的数据传输的工具
  • Import Data from RDBMS to HDFS (从RDB导入数据到HDFS)
  • Export Data from HDFS to RDBMS (导出数据从HDFS到RDB)
    • Sqoop uses MapReduce to import and export the data, which provides parallel operation as well as
      fault tolerance. (Sqoop使用MapReduce导入和导出数据,提供并行操作和容错)
  • Target Users (使用者)
    • application programmers (应用开发人员)
    • System administrators (系统管理员)
    • Database administrators (数据库管理员)
  • Sqoop底层就是mapreduce任务,但是只有map,没有reduce

Sqoop 导入导出的原理剖析

Sqoop跟Hive有相似之处,都是把各自的对应命令转化成MapReduce任务来执行。只不过Sqoop的命令任务没有那么复杂,只是负责数据的迁移工作。Sqoop命令底层转化成mapreduce任务只有map阶段没有reduce阶段。

从RDB导入数据到HDFS

  • Sqoop会通过JDBC来获取所需要的数据库元数据,例如,导入表的列名,数据类型等。
  • 这些数据库的数据类型(varchar, number等)会被映射成Java的数据类型(String, int等),根据这些信息,Sqoop会生成一个与表名同名的类用来完成序列化工作,保存表中的每一行记录。
  • Sqoop启动MapReducer作业
  • 启动的作业在input的过程中,会通过JDBC读取数据表中的内容,这时,会使用Sqoop生成的类进行反序列化操作
  • 最后将这些记录写到HDFS中,在写入到HDFS的过程中,同样会使用Sqoop生成的类进行反序列化

导出数据从HDFS到RDB

  • sqoop依然会通过JDBC访问关系型数据库,得到需要导出数据的元数据信息
  • 根据获取到的元数据的信息,sqoop生成一个Java类,用来进行数据的传输载体。该类必须实现序列化和反序列化
  • 启动mapreduce作业
  • sqoop利用生成的这个java类,并行的从hdfs中读取数据
  • 每个map作业都会根据读取到的导出表的元数据信息和读取到的数据,生成一批insert语句, 然后多个map作业会并行的向数据库mysql中插入数

ZooKeeper介绍

Apache ZooKeeper致力于开发和维护开源服务器,以实现高度可靠的分布式协调服务。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase,Flink的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。zookeeper简化了分布式应用的管理和部署,开发人员只需要专注于业务的开发,而不用担心应用服务的分布式特性。
中文:动物管理员

  • Zookeeper集群:一个领导者(Leader),多个随从(Follower)的集群架构模式
  • 集群中只要有半数以上节点存活,Zookeeper集群就能正常的运行
  • 全局数据一致:每个server保存一份相同的数据副本,对于Clinet端链接哪个server都是一样的

ZooKeeper典型应用场景

  • 提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
  • 命名服务
    • 在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。
  • 统一配置管理
    • 在分布式环境下,配置文件同步很常见。
      • 要求在一个集群中,所有节点的配置信息是一致的,对配置文件修改后,能够快速同步到各个节点上。
      • 配置文件内容可以给zookeeper进行管理,将配置信息写到znode,然后通过客户端监听znode
  • 集群管理
    • Zookeeper可以实现实时监控节点的状态变化
    • NameNode的HA机制就是基于Zookeeper来实现的
    • HBase的HA也是基于Zookeeper
    • Flink里面的心跳检车也用到Zookeeper
  • 分布式锁
    • 有了 ZooKeeper 的一致性文件系统,锁的问题变得容易。锁服务可以分为两三类
      • 一个是写锁,对写加锁,保持独占,或者叫做排它锁,独占锁
      • 一个是读锁,对读加锁,可共享访问,释放锁之后才可进行事务操作,也叫共享锁
      • 一个是控制时序,叫时序锁
    • 对于第一类,我们将 ZooKeeper 上的一个znode看作是一把锁,通过 createznode() 的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的 /distribute_lock 节点就释放出锁。
    • 对于第二类,/distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选 Master 一样,编号最小的获得锁,用完删除,依次有序。
  • 队列管理
    • 两种类型的队列:
      • 1、同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
      • 2、先进先出队列:队列按照 FIFO 方式进行入队和出队操作。
    • 第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
    • 第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。
  • 缺点:zookeeper不太适合存储大量的数据和支持高频的数据读写。
    • kafka0.8版本版本之前offset是保存在zookeeper的,0.8以上的版本是保存在kafka自己的topic(__consumer)

ZooKeeper的数据结构

  • ZooKeeper在分布式领域,能够协助解决很多的分布式难题,但是底层却只是依赖于两个主要的组件:
    • znode文件系统
    • watch监听机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值