天天看点

Hadoop 大数据概念那些事儿

又开始接触大数据了,相比较2013年的Hadoop发觉新增了太多组件,近五年真是。。。

话不多说,常见的概念应用场景先搞清楚

文章目录

    • Hadoop
      • HDFS 适用场景
      • 参考
    • YARN
      • 百度百科中的YARN
        • 概念
        • 基本缺陷
        • 主要优点
      • 参考
    • Spark
      • CDH中的Spark
      • 参考
    • HUE
      • Editor:
      • Dashboard 看板
      • Scheduler 调度器
      • Browsers:浏览器
      • 参考
    • Impala
      • 在Hadoop 上做BI-style Queries
      • 与你基础框架保持一致
      • 快速实现
      • 基于企业级的安全
      • 无锁操作
      • 增强 Hadoop 用户体验
      • CDH中Impala的介绍
      • 参考
    • oozie
      • CDH中oozie的介绍
      • 参考
    • Sqoop
      • 参考
    • Kafka
      • 消息
      • web活动跟踪
      • 度量
      • 日志聚合
      • 流处理
      • 事件溯源
      • 提交日志
      • kafka logstach? TODO
      • 参考
    • Hive
      • CDH中的Hive
      • 百度上的Hive
      • 参考
    • HBase
      • CDH中HBase
      • 参考
    • Kudu
      • 主要特点
      • 主要概念
        • 数据模型Data Model
        • 低延迟的随机访问
        • Apache Hadoop 生态系统集成
        • Built by and for Operators
      • 适用场景
      • 参考
    • Pig
      • 百度百科的pig
      • W3CSCHOOL 的说明
      • 与Hive 的区别
      • 参考
    • Apache Parquet
      • 参考

Hadoop

Apache Hadoop 软件库 是一个框架,它允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它被设计成从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身的设计目的不是依赖硬件来提供高可用性,而是检测和处理应用层上的故障,因此在一组计算机上提供高可用性的服务,而每组计算机都可能出现故障。

以下是许多用户可能感兴趣的一些显著特性:

Hadoop(包括HDFS)非常适合使用 商业硬件 进行分布式存储和分布式处理。它是容错的,可伸缩的,并且扩展非常简单。MapReduce是Hadoop不可分割的一部分,它以其对大量分布式应用程序的简单性和适用性而闻名。

HDFS是高度可配置的,通常安装后的默认配置就足够用。大多数时候,只有当非常大的集群使用的时候才需要对配置进行调优。

Hadoop是用Java编写的,并支持主流平台。

Hadoop支持类似shell的命令来直接与HDFS交互。

NameNode和datanode已经内建了在web服务器,可以轻松检查当前集群状态。

New features and improvements are regularly implemented in HDFS. The following is a subset of useful features in HDFS:

HDFS定期新增功能和改进特性。以下是HDFS中有一些有用的特性

  • 文件权限和身份验证
  • 机架感知: 在调度任务和分配存储时考虑节点的物理位置。
  • Safemode: 一种用于维护的管理模式。
  • fsck: 一个用于诊断文件系统的健康状况、查找丢失的文件或块的实用程序。
  • fetchdt: 一个用来获取 DelegationToken 并且存储在本地文件系统的工具。
  • Balancer: 当数据在数据在DataNodes分布不均匀时,用于平衡集群的工具。
  • 更新和回滚: 在软件升级之后,可以回滚到升级之前的 HDFS 的状态,以防出现意外问题。
  • Secondary NameNode: 执行命名空间的定期检查点,并帮助保持 NameNode 中包含HDFS修改日志的文件的大小在一定范围内。
  • Checkpoint node: 执行命名空间的定期检查点,并帮助最小化存储在NameNode上的日志的大小,其中包含对HDFS的更改。取代了之前由 Secondary NameNode 所扮演的角色,尽管还没有经过大量实践检验。NameNode 允许同时使用多个检查点节点,只要系统中没有注册的备份节点
  • Backup node: 一个扩展的检查点节点。除了检查点之外,它还从NameNode接收编辑流,并维护自己 namespace内存拷贝,该副本始终与活动的 NameNode 名称空间状态保持同步。一次只能向 NameNode 注册一个备份节点

HDFS 适用场景

高吞吐率、批处理

参考

  • https://hadoop.apache.org/

YARN

YARN的基本思想是将 资源管理 和 任务调度/监控功能 分解成独立的守护进程。其思想是建立一个全局资源管理器(global ResourceManager RM)和每个应用程序应用程序管理器(per-application ApplicationMaster AM)。一个应用程序不是一个任务 就是 组合的有向无环图(DAG) 任务。

ResourceManager 和 NodeManager形成了数据计算框架。ResourceManager 是在系统中所有应用程序之间仲裁资源的最终权威。NodeManager 是每台机器负责容器的框架代理,监视资源使用(CPU、内存、磁盘、网络)情况,并向 ResourceManager/Scheduler 报告。

实际上,每个应用程序的 ApplicationMaster 是一个特定于框架的库,其任务是与 ResourceManager协商资源,并与NodeManager(s)合作执行和监视任务。

Hadoop 大数据概念那些事儿

ResourceManager 有两个重要组成部分:Scheduler 和 ApplicationsManager.

Scheduler 负责将资源分配给各种运行中的应用程序,这些应用程序受容量、队列等限制。Scheduler 是纯粹的调度器,它不执行对应用程序状态的监视或跟踪。此外,它不能保证由于应用程序故障或硬件故障而重新启动失败的任务。调度程序根据应用程序的资源需求执行调度功能;它是基于资源容器的抽象概念(abstract notion)来实现的,资源容器包含内存、cpu、磁盘、网络等元素。

Scheduler 提供可插拔的策略,负责将集群资源划分到各种队列、应用程序等中。当前的 Scheduler,诸如 CapacityScheduler 和 FairScheduler 。

ApplicationsManager 负责接收作业的提交请求,协商第一个容器以执行应用程序特定的 ApplicationMaster,并在失败时提供重新启动ApplicationMaster容器的服务。每个应用程序的 ApplicationMaster 负责 与 Scheduler 协商合适的资源容器,并跟踪它们的状态并监视进度。

在 hadoop-2.x 中 MapReduce 保持了与以前稳定版本(hadoop-1.x)的API兼容性。这意味着所有MapReduce任务仍然应该在YARN上运行时保持不变,只需重新编译就可以了。

YARN支持通过 ReservationSystem 实现 资源保留 的概念,该系统允许用户指定资源超时和时间限制(例如截止日期)的描述,并保留资源以确保重要任务的可预测执行。ReservationSystem 可以跟踪超时资源、对预订执行准入控制、动态指示底层调度程序确保预订满填充(reservation is fullfilled)。

为了将 YARN 可以伸缩到几千个节点,YARN 提供了YARN Federation 特性来支持 联邦(Federation)概念 。Federation 可以透明的将多个 yarn (sub-)clusters 联合在一起,并使它们作为单个大集群出现。这可以用于实现更大的规模,并/或允许多个独立集群一起用于非常大的工作,同时也可对外向具有所有这些工作的目标客户提供服务(or for tenants who have capacity across all of them.)。

百度百科中的YARN

概念

YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。

YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。

ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是用户代码,因此存在潜在的安全问题。YARN 假设 ApplicationMaster 存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。

NodeManager 管理一个 YARN 集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN 继续使用 HDFS 层。它的主要 NameNode 用于元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务。

要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行周期就完成了。 [1]

基本缺陷

MapReduce 的第一个版本既有优点也有缺点。MRv1 是目前使用的标准的大数据处理系统。但是,这种架构存在不足,主要表现在大型集群上。当集群包含的节点超过 4,000 个时(其中每个节点可能是多核的),就会表现出一定的不可预测性。其中一个最大的问题是级联故障,由于要尝试复制数据和重载活动的节点,所以一个故障会通过网络泛洪形式导致整个集群严重恶化。

但 MRv1 的最大问题是多租户。随着集群规模的增加,一种可取的方式是为这些集群采用各种不同的模型。MRv1 的节点专用于 Hadoop,所以可以改变它们的用途以用于其他应用程序和工作负载。当大数据和 Hadoop 成为云部署中一个更重要的使用模型时,这种能力也会增强,因为它允许在服务器上对 Hadoop 进行物理化,而无需虚拟化且不会增加管理、计算和输入/输出开销。

主要优点

大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。

对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。

老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。

Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。

参考

  • https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
  • https://baike.baidu.com/item/yarn/16075826?fr=aladdin

Spark

Apache Spark™ 是用于大规模数据处理的统一分析引擎。

Apache Spark 使用最先进的 DAG 调度器、查询优化器和物理执行引擎,实现了批处理和流数据的高性能。

Spark提供了超过80个高级操作符,使得构建并行应用程序变得容易。你可以在Scala、Python、R和SQL shell中 交互式 地使用它。

Apache Spark是一种快速通用的集群计算系统。它提供了Java、Scala、Python和R的高级api,以及支持一般执行图的优化引擎。它还支持丰富的高级工具集,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、用于图形处理的GraphX和Spark流。

CDH中的Spark

Apache Spark是一个通用的分布式计算框架,它为批处理和交互处理提供了高性能。它暴露了对应的Java、Python和Scala的APIs,Spark core由几个相关项目组成:

  • Spark SQL - 用于处理结构化数据的模块。允许您无缝地混合SQL查询与 Spark 程序
  • Spark Streaming - 允许您构建可伸缩的容错(fault-tolerant)流应用程序的API。
  • MLlib - 实现通用机器学习算法的API。
  • GraphX - 图形和图形并行计算的API

通过使用交互式shell 或 提交应用程序,你可以在本地或跨集群运行Spark应用程序。交互式地运行Spark应用程序通常在数据研究(data-exploration) 阶段和 特设分析(ad hoc analysis) 阶段执行

要运行跨集群分布的应用程序,Spark 需要一个集群管理器。Cloudera 支持两个集群管理器:YARN 和 独立 Spark 。在YARN 上运行时,Spark 应用程序进程 由 YARN ResourceManager and NodeManager 角色管理。当Spark独立运行时,Spark 应用程序进程由 Spark Master 和 Worker角色管理。

参考

  • https://spark.apache.org/
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/spark.html

HUE

是基于web,用来查询Hadoop数据的交互式查询编辑器。主要提供以下几大功能

Editor:

编辑器的目标是让数据查询变的更简单和高效。

他关注SQL处理并支持作业式提交。其中的查询助手可以智能的自动补全、搜索以及对数据进行标签。

Dashboard 看板

看板是让他人简单并快速理解你的数据的一种方法。不需要编程,仅需要拖拽和点击就可以完成看板的定制操作。

Scheduler 调度器

应用程序可以让你构建工作流,然后自动定时执行。提供一个监视的接口用来显示进度、日志,并允许暂停或停止作业等操作。

Browsers:浏览器

Hue的浏览器支持数据目录。它们可以让您轻松地搜索、浏览和执行对数据或云计算或本地集群中的作业的操作。

CDH 使用HUE

用Impala的高效、低延迟的SQL 查询引擎 来分析和可视化你的数据。

hue也可以导入导出数据,并可以编写查询计划(比如每天一次),用图形展现;还可以查看应用任务运行情况及日志;上传、下载、修改HDFS中文件等等。

参考

  • http://gethue.com/
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hue.html

Impala

Apache Impala 是针对 Apache Hadoop 实现的开源的本地分析数据库。

Impala提高了Apache Hadoop上SQL查询性能的门槛,同时保留了熟悉的用户体验。使用Impala,您可以实时查询数据,无论是存储在HDFS还是Apache HBase中,包括SELECT、JOIN和聚合函数。此外,Impala使用与Apache Hive相同的元数据、SQL语法(Hive SQL)、ODBC驱动程序和用户界面(Hue Beeswax),为面向批处理或实时查询提供熟悉的统一平台。(出于这个原因,Hive用户可以使用Impala,只需要很少的设置开销。)

为了避免延迟,Impala绕过MapReduce,通过一个专门的分布式查询引擎直接访问数据,这个查询引擎与商业并行rdbms中的查询引擎非常相似。根据查询和配置的类型,其结果比Hive快很多。

与查询Hadoop数据的其他方法相比,这种方法有许多优点

  • 由于数据节点上的本地处理,避免了网络瓶颈。
  • 可以使用单个、开放和统一的元数据存储。
  • 不需要昂贵的数据格式转换,因此不会产生开销。
  • 所有数据都可以立即查询,ETL没有延迟
  • 所有硬件都用于Impala查询以及MapReduce
  • 只需要一个机器池来就可以扩展

在Hadoop 上做BI-style Queries

Impala 提供基于Hadoop的低延迟高并发的BI/分析查询特性(不是基于类似于Apache Hive的批处理框架的处理结果)。即使在多租户(multitenant)环境下,Impala也可以线性扩展。

与你基础框架保持一致

使用与Hadoop部署相同的文件和数据格式、元数据、安全性和资源管理框架—没有冗余基础设施或数据转换/复制。

快速实现

对于 Apache Hive 用户, Impala 提供了相同的元数据和ODBC驱动。像Hive一样,Impala支持SQL,因此你不必担心会有新的研究成本。

基于企业级的安全

Impala与本地Hadoop安全性和Kerberos集成在一起进行身份验证,通过Sentry模块,您可以确保为正确的数据授权正确的用户和应用程序。

无锁操作

Impala 是安全的 (基于Apache License).

增强 Hadoop 用户体验

使用 Impala, 更多的用户,无论是使用SQL查询还是BI应用程序,都可以通过单个存储库和通过分析从源存储的元数据与更多数据进行交互

CDH中Impala的介绍

Apache Impala项目对流行的Apache Hadoop文件格式存储的数据提供高性能、低延迟的SQL查询。查询的快速响应支持交互式探索和分析查询的微调,而不是传统上与SQL-on-Hadoop技术相关联的长批作业。(你经常会看到“交互”这个词用在这些具有人类响应时间的快速查询上。)

Impala与Apache Hive metastore数据库集成,在两个组件之间共享数据库和表。与Hive的高度集成以及与HiveQL语法的兼容性,使您可以使用Impala或Hive来创建表、发出查询、加载数据等等。

以下是Impala的关键特性:

  • Impala与现有的CDH生态系统集成,意味着可以使用CDH包含的各种解决方案存储、共享和访问数据。这也避免了数据竖井和最小化昂贵的数据移动。
  • Impala提供对存储在CDH中的数据的访问,而不需要MapReduce任务所需的Java技能。Impala可以直接从HDFS文件系统访问数据。Impala还提供一个SQL前端来访问HBase数据库系统或Amazon Simple Storage system (S3)中的数据。
  • Impala通常在几秒或几分钟内返回结果,而不是通常需要许多分钟或几个小时才能完成Hive查询。
  • Impala开创了使用Parquet文件格式的先河,这是一种柱状存储布局,为数据仓库场景中典型的大规模查询进行了优化。

参考

  • https://impala.apache.org//overview.html
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/impala.html

oozie

Oozie是一个工作流调度器系统,用于管理Apache Hadoop作业

  • Oozie工作流作业是有向无环图(Directed Acyclical Graphs DAGs)的动作。
  • Oozie协调器作业是由时间(频率) 和 数据可用性 来 触发的可反复执行的的Oozie工作流作业
  • Oozie与其他的Hadoop产品集成在一起,支持几种现成的Hadoop作业(如Java map-reduce、Streaming map-reduce、Pig、Hive、Sqoop 和 Distcp)以及系统特定作业(如Java程序和shell脚本)。
  • Oozie是一个可伸缩、可靠和可扩展的系统。

CDH中oozie的介绍

Hadoop 的 Apache Oozie 工作流调度器是管理 Apache Hadoop 作业的工作流和协调服务:

  • Oozie工作流作业(jobs)是有向无环图(DAGs) 的 actions; actions 通常是Hadoop作业 (MapReduce, Streaming, Pipes, Pig, Hive, Sqoop等)。
  • Oozie协调器作业根据时间(频率) 和 数据可用性 触发周期性的 Workflow jobs。
  • Oozie Bundle jobs are sets of Coordinator jobs managed as a single job.
  • Oozie Bundle jobs 是作为一个单独job 的一组 Coordinator jobs。

Oozie是一个可扩展、可伸缩和支持数据的服务,您可以使用它来协调运行在Hadoop上的作业之间的依赖关系

参考

  • http://oozie.apache.org/
  • https://en.wikipedia.org/wiki/Directed_acyclic_graph

Sqoop

Apache Sqoop(TM-Trademark)是一种用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输大量数据的工具.

Sqoop于2012年3月顺利从孵化器毕业,现为顶级Apache项目。

Apache Sqoop 是一种高效传输结构化、半结构化和非结构化数据源数据的工具。关系数据库是结构化数据源的示例,它们存储的数据具有良好定义的模式。Cassandra 和 Hbase是 典型的半结构化数据源,HDFS 是 典型的 非结构化数据。

参考

http://sqoop.apache.org/

Kafka

消息

Kafka可以很好地替代传统的消息代理。消息代理用于各种原因(从数据生产者分离处理、缓冲未处理的消息等)。与大多数消息传递系统相比,Kafka具有更好的吞吐量、内置的分区、复制和容错功能,这使它成为大规模消息处理应用程序的良好解决方案。

在我们的经验中,消息传递使用的吞吐量通常相对较低,但可能需要较低的端到端延迟,并且常常依赖于Kafka提供的强大的持久性保证。

在这个领域,Kafka可以与ActiveMQ或RabbitMQ等传统消息传递系统相媲美。

web活动跟踪

Kafka最初的用例是能够作为一组实时发布-订阅feed重新构建用户活动跟踪管道。这意味着站点活动(页面视图、搜索或用户可能采取的其他操作)被发布到中心主题,每个活动类型有一个主题。这些提要可用于订阅一系列用例,包括实时处理、实时监视和加载到Hadoop或离线数据仓库系统中以进行离线处理和报告。

度量

Kafka经常用于操作监控数据。包含 从 分布式应用程序到生产集中处理的操作数据 的聚合统计信息。

日志聚合

许多人使用Kafka作为日志聚合解决方案的替代品。日志聚合通常从服务器收集物理日志文件,并将它们放在一个集中的地方(可能是文件服务器或HDFS)进行处理。Kafka将文件的细节抽象出来,将日志或事件数据抽象成消息流。这允许更低的延迟处理,更容易支持多个数据源和分布式数据消耗。与以日志为中心的系统(如Scribe或Flume)相比,Kafka对复制提供了同样好的性能、更强的耐久性保证和更低的端到端的延迟。

流处理

Kafka可以处理管道中的许多用户处理数据,包括多个阶段,原始输入数据被从Kafka主题中消费,然后聚合、充实或以其他方式转换为新主题,以进一步消费或后续处理。例如,用于推荐新闻文章的处理管道可能会从RSS提要中抓取文章内容,并将其发布到“文章”主题;进一步的处理可能会将该内容规范化或删除,并将已清理的文章内容发布到新的主题;最后的处理阶段可能会尝试向用户推荐这些内容。这种处理管道基于各个主题创建实时数据流图。从0.10.0.0开始,Apache Kafka中提供了一个轻量级但功能强大的流处理库Kafka Streams来执行上述数据处理。除了Kafka流,其他的开源流处理工具包括Apache Storm和Apache Samza。

事件溯源

事件源是一种应用程序设计风格,其中状态更改被记录为时间顺序的记录序列。Kafka对非常大的存储日志数据的支持使它成为构建这种风格的应用程序的优秀后端

提交日志

Kafka可以作为分布式系统的一种外部委托日志。日志有助于在节点之间复制数据,并充当失败节点恢复数据的重新同步机制。Kafka中的日志压缩特性有助于支持这种用法。在这种用法中,Kafka类似于Apache BookKeeper项目。

kafka logstach? TODO

参考

  • https://kafka.apache.org/documentation/
  • https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying 这个典型的场景描述可以后继单独翻译

Hive

Apache Hive™ 数据仓库软件使用 SQL 语法来读、写和管理在分布式存储中的大型数据集。结构可以投影到已经存储的数据上。提供了一个命令行工具和 JDBC 驱动程序便于用户连接到Hive

基于Apache Hadoop™,Hive 提供了如下特性:

  • 支持 SQL 轻松访问数据,诸如extract/transform/load (ETL)、报告、数据分析 这些基于数仓的任务。
  • 一个在多样数据格式上加强数据结构的机制
  • 可以直接访问Apache HDFS™或者诸如 Apache HBase™ 在存储系统上的数据
  • 使用 Apache Tez™、Apache Spark™、 MapReduce 进行查询
  • 使用 HPL-SQL 过程语言
  • 通过 Hive LLAP、Apache YARN 和 Apache Slider 进行亚秒查询检索。
  • Hive 提供了标准的 SQL 功能,包括许多后期 SQL:2003 和 SQL:2011 的分析特性。
  • 通过用户定义函数(udf)、用户定义聚合(UDAFs)和用户定义表函数(UDTFs),用户可以扩展Hive的SQL。
  • 没有一种数据必须存储的 “Hive格式”。Hive 支持基于分隔符逗号、制表符的文本文件、 Apache Parquet™, Apache ORC™ 和其他文件格式。
  • 对于其他数据格式,用户可以扩展Hive连接器。有关详细信息,请参阅- Developer指南中的 File Formats and Hive SerDe。
  • Hive不是为在线事务处理(OLTP)工作负载而设计的。它最好用于传统的数据仓库任务。
  • Hive旨在最大限度地提高可伸缩性(通过向Hadoop集群动态添加更多的机器进行扩展)、性能、可扩展性、容错性以及与输入格式的松散耦合。
  • Hive 包含 HCatalog 和 WebHCat.
  • HCatalog是Hive的一个组件。它是Hadoop的一个表和存储管理层,允许使用不同数据处理工具(包括Pig和MapReduce)的用户更容易地在网格上读写数据。
  • WebHCat提供了一个服务,你可以使用用HTTP (REST风格)接口去执行,Hadoop MapReduce(或YARN)、Pig、Hive的作业来操作 Hive元数据。

CDH中的Hive

Hive数据仓库软件支持在分布式存储中读取、写入和管理大型数据集。使用与SQL非常相似的Hive查询语言(HiveQL),查询被转换为一系列作业,这些作业通过MapReduce 或 Apache Spark在Hadoop集群上执行。

Users can run batch processing workloads with Hive while also analyzing the same data for interactive SQL or machine-learning workloads using tools like Apache Impala or Apache Spark—all within a single platform.

用户可以使用 Hive 运行批处理工作负载,同时可以使用交互式SQL 或者 机器学习工作负载(像在单个平台上的Apache Impala 或者 Apache Spark—all)来分析这些数据。

作为CDH的一部分,Hive也提供如下益处:

  • 通过 YARN 来提供统一的资源管理
  • 通过Cloudera Manager来简单的发布和管理
  • Shared security 和 governance(治理)遵从 Apache Sentry and Cloudera Navigator。

百度上的Hive

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式。

  • 支持索引,加快数据查询。
  • 不同的存储类型,例如,纯文本文件、HBase 中的文件。
  • 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
  • 可以直接使用存储在Hadoop 文件系统中的数据。
  • 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF - 数来完成内置函数无法实现的操作。
  • 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。 [1]

参考

  • https://cwiki.apache.org/confluence/display/Hive
  • https://baike.baidu.com/item/hive/67986?fr=aladdin
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hive.html

HBase

低延迟、随机读写

Apache HBase™ 是一个分布式、可扩展、大数据存储的 Hadoop 数据库。

当您需要对大数据进行随机、实时的读写访问时,请使用Apache HBase。这个项目的目标是在商业硬件集群上托管非常大的表–具有数十亿行 x 数百万列。Apache HBase是一个开源的、分布式的、版本化的、非关系型的数据库,模仿了谷歌的Bigtable: Chang 等人构建的为结构化数据构建的分布式存储系统。正如 Bigtable 利用了谷歌文件系统提供的分布式数据存储一样,Apache HBase 在 Hadoop和HDFS之上提供了类似于Bigtable的功能。

  • 线性和模块化的可伸缩性。
  • 严格一致的读写。
  • 自动和可配置的分片表
  • 区域服务器之间的自动故障转移支持。
  • 便捷的基类来使用 Apache HBase表 支持 Hadoop MapReduce 作业
  • 使用 简单的 Java API进行客户端访问。
  • 用于实时查询的块缓存和布鲁姆过滤器(Bloom Filters)。
  • 通过服务侧过滤器向下推查询谓词
  • Thrift网关和REST-ful web service 支持XML、Protobuf和二进制数据编码选项。
  • 可基于 jruby-based (JIRB) shell 扩展
  • 支持通过 Hadoop metrics 子系统将指标导出到文件或Ganglia;或通过JMX进行处理

CDH中HBase

Apache HBase是一个可伸缩的、分布式的、面向列的数据存储。Apache HBase提供实时读写随机访问在HDFS上的超大数据集。

参考

  • http://hbase.apache.org/book.html
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hbase.html

Kudu

Kudu是一个为Apache Hadoop平台开发的柱状存储管理器。Kudu 具有 Hadoop生态系统应用程序的共同技术属性:它运行在商业硬件上,水平可拓展,支持高可用性操作

Kudu’s design sets it apart. Some of Kudu’s benefits include:

Kudu的设计让它与众不同。Kudu的一些优势包括:

  • OLAP工作负载的快速处理
  • 与MapReduce、Spark和其他Hadoop生态系统组件的集成。
  • 与Apache Impala的紧密集成,使其成为使用带有Apache Parquet 的HDFS的一个很好的、可变的替代方案。
  • 强而灵活的一致性模型,允许您根据每个请求选择一致性需求,包括严格序列化一致性选项。
  • 强大的性能,同时运行顺序和随机工作负载。
  • 通过 Cloudera Manager 简单的管理和运营
  • High availability(高可用性)。Tablet server 和 Master 使用 Raft Consensus Algorithm - 来保证节点的高可用,确保只要有一半以上的副本可用,该 tablet - 便可用于读写。例如,如果3个副本中有2个或5个副本中的3个可用,则该tablet可用。即使在 leader tablet - 出现故障的情况下,读取功能也可以通过 read-only(只读的)follower tablets - 来进行服务,或者是leader宕掉的情况下,会根据raft机制重新选举leader。
  • 可以通过只读的 tablets 来提供读服务,即使 leader tablet 失败事件的情况下也可读。
  • 结构化数据模型

通过结合所有这些特性,Kudu的目标是支持在当前一代 Hadoop 存储技术上难以或不可能实现的应用程序系列。下面是使用Kudu作为解决方案的典型场景:

  • 需要立即为最终用户提供最新数据报告的应用程序
  • 那些必须同时支持基于 查询大量历史数据、对快速返回的单个实体的细粒度查询 的时间序列应用程序:
  • 使用预测模型进行实时决策的应用程序,定期刷新基于所有历史数据的预测模型

更多典型的 Kudu 使用应用场景参见 Example Use Cases

主要特点

  1. 更新的架构:

    Kudu提供了快速 inserts/updates 和高效的柱状扫描的组合,支持跨单个存储层的多个实时分析工作。作为对HDFS和Apache HBase的一种新补充,Kudu使架构师能够灵活地处理更广泛的用例,而不需要额外的解决方案。

  2. 更快的分析:

    Kudu是专门为需要对快速(快速变化的)数据进行快速分析的用例而设计的。为了充分利用下一代硬件和内存处理技术,Kudu显著降低了Apache Impala (孵化池项目) 和 Apache Spark(最初采用其他执行引擎) 的查询延迟。

  3. 开源:

    Apache Kudu由Hadoop生态系统的长期贡献者创建,是Apache 2许可下发布的顶级Apache软件基金会项目,并将社区参与视为其长期成功的重要组成部分。我们感谢迄今为止所有社区的贡献,并期待看到更多的成功!

主要概念

数据模型Data Model

Kudu集群存储的表与关系(SQL)数据库中使用的表相似。一个表可以像二进制的key value一样简单,也可以像几百个不同的强类型属性一样复杂。

与SQL一样,每个表都有一个主键,由一个或多个列组成。这可能是单个列(比如唯一用户标识符),或者是复合键(比如机器时间序列数据库的(主机、指标、时间戳)元组)。可以通过主键有效地读取、更新或删除行。

Kudu的简单数据模型 使 移植 历史应用程序 或 构建新应用程序变得轻而易举:无需担心如何将数据编码为二进制blob或理解一个充满难以解释的JSON的庞大数据库。表是自描述的,因此您可以使用 SQL引擎或 Spark 等标准工具来分析数据。

低延迟的随机访问

其他大数据分析的存储不同,Kudu不仅仅是一种文件格式。它是一个实时存储系统,支持对单个行的低延迟毫秒级访问。对于“NoSQL”风格的访问,您可以选择Java、c++或Python api。当然,这些随机访问api可以与批量访问一起用于机器学习或分析

Kudu的api被设计成易于使用。数据模型是完全类型化的(fully typed),所以您不需要担心二进制编码或外来的序列化。就像你JDBC或ODBC时,你可以只存储基本类型。

Kudu并没有被设计成一个OLTP系统,但如果你有一些在内存中的数据子集,这提供了更好的随机访问性能。我们使用 YCSB 测量10亿行的随机访问,结果很低延迟(%99在6ms或以下)就返回(We’ve measured 99th percentile latencies of 6ms or below)能够在与后端数据分析相同的存储上运行低延迟的在线工作负载,可以极大地简化应用程序体系结构。

Apache Hadoop 生态系统集成

Kudu的设计初衷就是为了适应Hadoop的生态系统,将它与其他数据处理框架集成起来非常简单。你可以使用Java客户机从实时数据源中导入流数据,然后在到达时立即使用Spark、Impala或MapReduce进行处理。您甚至可以透明地将Kudu表与存储在其他Hadoop存储(如HDFS或HBase)中的数据连接起来。

Kudu是Hadoop集群的很好组成部分:它可以轻松地与HDFS DataNodes 共享数据磁盘,并且可以在RAM占用空间小到1 GB 的情况下运行,以适应较轻的工作负载。

Built by and for Operators

Kudu是由一群工程师创建的,他们花了很多个深夜为数百个企业用例中的关键Hadoop集群提供随叫随到的生产支持。我们知道如果没有良好的指标、跟踪或管理工具,调试软件是多么令人沮丧。

自从第一个beta版本发布以来,Kudu就包含了高级的进程内跟踪功能、广泛的指标支持,甚至还包括监视线程,这些线程检查延迟异常值并转储“确凿的”堆栈跟踪,以便快速找到问题的根源。

适用场景

高吞吐率、低延迟

参考

http://kudu.apache.org/overview.html

Pig

Apache Pig是一个用于分析大型数据集的平台,它包含用于表示数据分析程序的高级语言,以及用于评估这些程序的基础结构。Pig程序的显著特性是,它们的结构适合于大量的并行化,这反过来又使它们能够处理非常大的数据集。

目前,Pig的基础架构层由一个生成Map-Reduce程序序列的编译器组成,对于这些程序,已经存在大规模的并行实现(例如Hadoop子项目)。Pig’s language layer目前由一种叫做Pig Latin的文本语言组成,它具有以下关键属性:

  • 易于编程。实现简单的、“窘迫并行(embarrassingly parallel)”的数据分析任务的并行执行是微不足道的。由多个相互关联的数据转换组成的复杂任务被显式编码为数据流序列,使其易于编写、理解和维护。
  • 优化因素(Optimization opportunities)。任务编码的方式允许系统自动优化对应任务的执行,允许用户关注语义而不是效率。
  • 可扩展性。用户可以创建自己的函数来执行特殊用途的处理。
  • Apache Pig is released under the Apache 2.0 License.

百度百科的pig

Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口

Apache Pig 是apache平台下的一个免费开源项目,Pig为大型数据集的处理提供了更高层次的抽象,很多时候数据的处理需要多个MapReduce过程才能实现,使得数据处理过程与该模式匹配可能很困难。有了Pig就能够使用更丰富的数据结构。

Pig LatinPig Latin 是一个相对简单的语言,一条语句 就是一个操作,与数据库的表类似,可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成)。

Pig 拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型,如 int、long、float、double、chararray 和 bytearray。并且,还有一套完整的比较运算符,包括使用正则表达式的丰富匹配模式。

W3CSCHOOL 的说明

Apache Pig是MapReduce的一个抽象,它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。Pig通常与Hadoop 一起使用;我们可以使用Pig在Hadoop中执行所有的数据处理操作。

与Hive 的区别

  • Apache Pig:Pig Latin ( 来源于Yahoo )。是过程语言,它适合流水线范式,各种数据。
  • Hive:HiveQL 的语言(来源于 Facebook )。是声明式语言,结构化数据。

参考

  • http://pig.apache.org/
  • https://baike.baidu.com/item/Apache Pig/1081326
  • https://www.w3cschool.cn/apache_pig/

Apache Parquet

Apache Parquet是Hadoop生态系统中的任何项目都可以使用的一种柱状存储格式,与数据处理框架、数据模型、编程语言无关。

参考

  • http://parquet.apache.org/

继续阅读