Hadoop_简介_01

1. Apache Hadoopjava

  1.1 Hadoop介绍mysql

    Hadoop是Apache旗下的一个用java语言实现的开源软件框架, 是一个开发和运行处理大规模数据的软件平台. 容许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理. Hadoop不会跟某种具体的行业或者某个具体的业务挂钩, 他只是一种用来作海量数据分析处理的工具. linux

    

    狭义上说, Hadoop指Apache这款开源框架, 其核心组件有: web

      HDFS (分布式文件系统) : 解决海量数据存储算法

      YARN (做业调度和集群资源管理的框架) : 解决资源任务调度sql

      MAPREDUCE (分布式运算编程框架) : 解决海量数据计算shell

    广义上说, Hadoop一般是指一个更普遍的概念 -- Hadoop生态圈. 数据库

    

    当下的Hadoop已经成长为一个庞大的体系编程

    HDFS: 分布式文件系统windows

    MAPREDUCE: 分布式运算程序开发框架

    HIVE: 基于Hadoop的分布式数据仓库, 提供基于SQL的查询数据操做

    HBASE: 基于Hadoop的分布式海量数据数据库

    ZOOKEEPER: 分布式协调服务基础组件

    Mahout: 基于MR / Spark / Flink等分布式运算框架的机器学习算法库

    OOZIE: 工做流调度框架

    SQOOP: 数据导入导出工具 (好比用于mysql和HDFS之间)

    FLUME: 日志数据采集框架

    IMPALA: 基于Hive的实时sql查询分析

  1.2 Hadoop发展简史

    三篇Google论文:

    1) 2003年Google发表的第一篇论文: GFS (Google分布式文件系统)

    2) 2004年Google发表的第二篇论文: Google的MapReduce解决海量数据计算

      同一时期,Doug Cutting基于Google的两篇论文开发出: HDFS (Hadoop的分布式文件系统) , MapReduce (基于Hadoop的分布式计算平台) 成为Apache的顶级项目. 

    3) 2006年Google发表的第三篇论文: BigTable, 开源界根据论文开发了HBase (基于Hadoop的分布式数据库) . 

  1.3 Hadoop特性优势

    1) 扩容能力: Hadoop是在可用的计算机集群间分配数据并完成计算任务的, 这些集群可用方便的扩展到数以千计的节点中. 

    2) 成本低: Hadoop经过廉价的机器组成服务器集群来分发以及处理数据, 以致于成本很低. 

    3) 高效率: 经过并发数据,Hadoop能够在节点之间动态并行的移动数据, 使得速度很是快. 

    4) 可靠性: 能自动维护数据的多份复制, 而且在任务失败后自动的从新部署计算任务. 因此Hadoop的按位存储和处理数据的能力值得信赖. 

 

2. Hadoop集群

  2.1 发行版本

    分为开源社区版商业版

    社区版: 由Apache软件基金会维护的版本, 是官方维护的版本体系. 

      优势: 功能最新, 免费. 

      缺点: 稳定性差, 兼容性差. 

    商业版: 由第三方商业公司在社区版基础上进行一些修改, 整合以及各个服务组件兼容性测试而发行的版本, 好比著名的cloudera的CDH, mapR, hortonWorks等. 

      优势: 稳定性好, 软件兼容性好. 

      缺点: 收费, 暂时不能使用最新的Hadoop版本. 

    Hadoop版本特殊, 是由多条分支并行的发展, 大的来看分为3个大的系列版本: 1.x, 2.x, 3.x. 

    Hadoop1.x由一个分布式文件系统HDFS和一个离线计算框架MR组成. 

    Hadoop2.x包含一个支持NameNode横向扩展的HDFS, 一个资源管理系统YARN和一个运行在YARN上的离线计算框架MR. 相比于Hadoop1.x, Hadoop2.x功能更增强大, 且具备更好的扩展性, 性能, 并支持多种计算框架. 如今是企业主流版本. 

    Hadoop3.x相比以前的Hadoop2.x有一系列的功能加强. 目前已经趋于稳定, 可是整个生态圈体系升级整合还未完毕, 因此商用还值得商榷. 

  2.2 集群简介

    Hadoop集群具体来讲包含两个集群: HDFS集群, YARN集群, 二者逻辑上分离, 但物理上常在一块儿. 

      1) HDFS集群负责海量数据的存储, 集群中的角色主要有: NameNode, DataNode, SecondaryNameNode. 

      2) YARN集群负责海量数据运算时的资源调度, 集群中的角色主要有: ResourceManager, NodeManager. 

      其中MR实际上是一个分布式运算编程框架, 是应用程序开发包, 由用户按照编程规范进行程序开发, 后打包运行在HDFS集群上, 而且受到YARN集群的资源调度管理.  

    Hadoop部署方式分四种: Standalone mode (独立模式) , Pseudo-Distributed mode (伪分布式模式) , Cluster mode (集群模式) , HA high availability (高可用集群模式) 其中前两种都是在单机部署. 

      1) 独立模式又称为单机模式, 仅1个机器运行1个Java进程, 主要用于调试. 

      2) 伪分布模式也是在1个机器运行HDFS的NameNode和DataNode, YARN的ResourceManager和NodeManager, 但分别启动单独的Java进程, 主要用于调试. 

      3) 集群模式主要用于生产环境部署. 会使用N台主机组成一个集群, 这种部署模式下, 主节点和从节点会分开部署在不一样的机器上. 

      4) 高可用集群模式主要解决单点故障, 保证集群的高可用, 提升可靠性

    HDFS集群 (主从架构) : 

      主角色: NameNode (nn)

      从角色: DataNode (dn)

      主角色的辅助角色: SecondaryNameNode (snn)

    YARN集群 (主从架构) : 

      主角色: ResourceManager (rm)

      从角色: NodeManager (nm)

    MR须要开发的程序组件: 

      Map组件

      Reduce组件

    Hadoop角色分布图

    

    HDFS原理图简单分析

    

  2.3 为何CDH版本Hadoop要从新编译?

    因为CDH的全部安装包版本都给出了对应的软件版本, 通常状况下是不须要本身进行编译的, 可是因为CDH给出的Hadoop的安装包没有提供带C程序访问的借口, 全部咱们在使用本地库的时候就会出现问题. (本地库: 能够用来作压缩, 以及支持C程序等等) 

    1) Hadoop是使用Java语言开发的, 可是有一些需求和操做并不适合使用java, 因此就引入了本地库 (Native Libraries) 的概念. 说白了, 就是Hadoop的某些功能, 必须经过JNT来协调Java类文件和Native代码生成的库文件一块儿才能工做.

    2) linux系统要运行Native代码, 首先要将Native编译成目标CPU架构的 [.so] 文件. 而不一样的处理器架构, 须要编译出相应平台的动态库 [.so] 文件, 才能被正确的执行, 因此最好从新编译一次hadoop源码, 让 [.so] 文件与本身处理器相对应. 注意: windows平台是动态库 [.dll] 文件

    总结: 主要是要从新编译本地库 (Native Libraries) 代码 (Linux下对应 [.so] 文件,window下对应 [.dlI] 文件) , 也就是编译生成linux下的 [.so] 文件. 

    源码编译后压缩包路径: 

    

     源码编译后结果: 

    

  2.4 Hadoop安装包目录结构

    目录结构以下: 

    bin: Hadoop最基本的管理脚本和使用脚本的目录

    etc: Hadoop配置文件所在的目录

    include: 对外提供的编程库头文件 (具体动态库和静态库在lib目录中) . 

    lib: 包含了Hadoop对外提供的编程动态库和静态库, 与include目录中的头文件结合使用. 

    libexec: 各个服务对用的shell配置文件所在的目录, 可用于配置日志输出, 启动参数等基本信息. 

    sbin: Hadoop管理脚本所在的目录, 主要包括HDFS和YARN中各种服务的启动 / 关闭脚本

    share: Hadoop各个模块编译后的jar包所在的目录, 官方自带实例

  2.5 集群规划 

    集群规划: 在咱们准备的三台服务器上如何搭建hadoop集群
    原则:
      1) 优先知足软件须要的硬件资源
      2) 尽可能避免有冲突的软件不要在一块儿
      3) 有依赖的软件尽可能部署在一块儿

    规划安排:
      hadoop01: NameNode DataNode | ResourceManager NodeManager
      hadoop02: DataNode SecondaryNameNode | NodeManager
      hadoop03: DataNode | NodeManager

    将来扩展:
      hadoop04: DataNode NodeManager
      hadoop05: DataNode NodeManager
      hadoop06: DataNode NodeManager
      ......

  2.6 启动, Web-UI

    要启动Hadoop集群, 须要启动HDFS和YARN两个集群, 首次启动HDFS时, 必须对其进行格式化操做. 本质上是一些清理和准备工做, 所以此时的HDFS在物理上仍是不存在的. 

    Hadoop集群启动并容许, 能够经过web-ui进行查看

    NameNode: http://nn_host:port/ 默认50070

    ResourceManager: http://rm_host:port/ 默认8088

  2.7 MapReduce JobHistory

    JobHistory用来记录已经finished的MR运行日志, 日志信息存放于HDFS目录中, 默认状况下没有开启此功能, 须要在mapred-site.xml中配置并手动启动. 

    能够经过web-ui进行查看

    http://nn_host:port/ 默认19888

 

3. HDFS的垃圾桶机制

  3.1 垃圾桶机制解析

    每个文件系统都会有垃圾桶机制, 便于将删除的数据回收到垃圾桶里, 避免某些误操做删除一些重要文件. 回收到垃圾桶里的资料数据, 均可以进行恢复. 

  3.2 垃圾桶机制配置

     HDFS的垃圾回收的默认配置属性为0, 也就是说, 若是不当心误删了, 那么这个操做是不可恢复的. 修改core-site.xml , 那么能够按照生产上的需求设置回收站的保存时间, 这个时间以分钟为单位, 例如1440 = 24h = 1天. 

  3.3 垃圾桶机制验证

    若是启用垃圾桶配置, dfs命令删除的文件不会当即从HDFS中删除. 相反, HDFS将其移动到垃圾目录 (每一个用户在 /user/<username>/.Trash 下都有本身的垃圾目录). 只要文件保留在垃圾箱中, 文件能够快速回复. 

    使用skipTrash选项删除文件, 该选项不会将文件发送到垃圾桶, 它将从HDFS中彻底删除. 

相关文章
相关标签/搜索