当前位置: 首页 > news >正文

一文搞懂大数据入门之 Hadoop,HDFS,Hbase,Hive

经常听到这些大数据的名词, Hadoop,HDFS,Hbase,Hive等,这次就一探究竟。

  • Hadoop:是泛指大数据生态,实际上基本包括 存储(HDFS) + 计算(MapReduce);
  • HDFS: Hadoop分布式文件系统,主要是解决存储的问题;
  • Hbase: 基于Hadoop的高性能nosql数据库;
  • Hive: 最常用的数据仓库;

文章目录

    • What is 大数据 ?
    • What is Hadoop ?
      • HDFS 基础架构
        • HDFS写流程
        • HDFS读流程
        • 实战HDFS操作
      • MapReduce计算
    • What is Hbase ?
    • Hive ?
      • what is 数据仓库 ?
      • 什么是Hive
      • 安装Hive
      • Hive操作
        • 内表
        • 外表
      • 列存储VS行存储
    • Hbase VS Hive
      • 区别
      • 联系
    • 参考

What is 大数据 ?

大数据是以Hadoop为代表的大数据平台框架上进行各种数据采集,数据整理,数据分析的技术,Hadoop只是一个框架。

What is Hadoop ?

Hadoop 生态图:
在这里插入图片描述

  • 是一个开源的大数据框架,它是一个生态,是分布式计算的解决方案
  • 一般认为的Hadoop = HDFS(分布式文件系统,存储) + MapReduce(分布式计算,计算)

HDFS 基础架构

  • 文件是按照数据块存储,而非整个文件作为存储单元。每个文件分成多个固定大小的存储块,存储在不同的节点上。
  • NameNode,管理文件系统的命名空间,存放文件元数据,维护文件系统所有文件和目录,文件与数据块的映射。
  • DataNode:存储并检索数据块,向name node 更新检索信息,是真正存数据的node。

HDFS写流程

  1. client向NameNode发起写数据请求
  2. Namenode分块写入DataNode,DataNode自动完成3副本备份。
  3. DataNode向NameNode汇报存储完成。
  4. Namenode通知client.

HDFS读流程

  1. Client向NameNode发起读数据请求。
  2. NameNode找出距离最近的DataNode节点信息,并将信息发送给Client。
  3. Client从DataNode分块下载文件。

实战HDFS操作

可以通过shell或者pytohn操作HDFS,进行文件的存储到HDFS,并下载。

MapReduce计算

在这里插入图片描述

Hadoop提供最基本的MapReduce计算模型。

  • Map: 输入一个大文件,通过split,分成多个分片,到单独的机器去处理,Map任务完成后,会生成一些中间文件,这些中间文件将会作为Reduce的输入数据。
  • Reduce: 把各个机器Map的输出结果进行汇总并得到最终的结果。

所以,Hadoop其实是一个生态,最主要的是存储HDFS+计算MapReduce,Hadoop本身的计算比较鸡肋,所以有了Spark计算引擎

What is Hbase ?

  • 来源于Google的BigTable。
  • 高可靠,高性能,面向列,可伸缩,实时读写的分布式数据库。
  • 利用HDFS作为文件存储系统,支持MapReduce。
  • 存储非结构化和半结构化数据。
  • 基于Hadoop的数据库

Hive ?

what is 数据仓库 ?

数据仓库是将多个数据源的数据经过ETL处理后,按照一定的主题集成起来提供决策支持和联动分析应用的结构化数据环境。

ETL: Extract + Tranform + Load

什么是Hive

  • 是第一个基于Hadoop的sql处理引擎,是当前基于Hadoop构建数据仓的最常用方案,是对存储在HDFS的文件进行查询。
  • Hive是将文件数据映射成DB和table,库和表的元数据信息一般存在关系型数据库。
  • 以MapReduce作为计算引擎,HDFS作为存储系统,提供超大数据的计算扩展能力。
  • Hive数据存储:Hive的数据是存储在HDFS上的,Hive的库和表是对HDFS上数据的映射。
  • Hive元数据存储:元数据存储是在外部关系库MySql
  • Hive SQL的执行过程:将HQL转成MapReduce任务,所以比较慢。而如今,Apache Hive还能够将查询转换Spark作业,提供运行速度。

安装Hive

  1. 下载hive
  2. 修改conf配置,指定数据存放的HDFS目录
  3. 下载mysql java
  4. 创建metastore schema
  5. 启动meatastore,show databases 可以看到default DB.

Hive操作

内表

导入数据时,将数据移动到hive指定的目录文件中,删除表时,数据也会删除;

建表:

CREATE TABLE table1 (
  id int,
  name string,
  interest array<string>,
  score map<string,string>
 )
row format delimited fields terminated by ','  --列分割
collection items terminated by '-'             --array分割
map keys terminated by ':'                     --map分割
stored AS textfile;                            --保存

import data:

load data local inpath '/opt/data/test' overwrite into table table1;

外表

建表时添加关键字external,并指定位置,删除表时不会删除源数据

create external table table2(
id int,name string,interest array<string>,
score map<string,string>)
row format delimited fields terminated by ','
collection items terminated by '-'
map keys terminated by ':' location '/testtable';

desc formatted table2;

Hive可以通过partition,bucket对海量数据进行区分。

列存储VS行存储

  • 行存储:是按照行来把数据存储到disk上,一般的用于app的元数据存储,因为要获取某一行的所有数据,这样如果有索引的话,可以通过索引直接知道对应的某一行在disk上的位置。
  • 列存储,对于大数据而言,往往要进行数据分析,所以不太需要某一行的数据,更多的是某一列,比如:取分数前10名等。所以列存储,对于这种场景下,效率更高。

Hbase VS Hive

名字看上去是很相似的,其实他们本质上是不一样的,一个是数据仓库,一个是数据库。

区别

  • Hive,Hive是基于Hadoop的一个数据仓库工具,本身并不存储和计算数据,只是把sql转成MapReduce程序运行。
  • Hbase,是Hadoop的数据库,一个分布式、可扩展、大数据的存储。

联系

Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。

在大数据架构中,Hive和HBase是协作关系,数据流一般:

  1. 通过ETL工具将数据源抽取到HDFS存储;
  2. 通过Hive清洗、处理和计算原始数据;
  3. Hive清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbasei,数据应用从HBase查询数据;
  4. 如果不是随机查询场景,可以直接从Hive中获取数据。

参考

  • https://www.imooc.com/video/16286
  • https://www.imooc.com/video/19271
  • https://zhuanlan.zhihu.com/p/333682189

相关文章:

  • FreeRTOS-实现任务调度器
  • 基于51单片机公交车到站指示灯设计
  • MySQL表的增删查改
  • 开关电源学习(一) MP2315S简介
  • String类详解(上)
  • 【数据结构与算法】栈的深入学习(上)
  • C++向量复习题以及知识讲解
  • 深入理解python装饰器
  • 大数据趣味学习探讨(三):怎么确定学习目标
  • SSM整合(超详细)
  • 【程序语言】-- 编程语言分类和应用
  • Springboot三层架构--DAO层、Service层、Colltroler层--这波我在外太空
  • Selenium快速入门
  • manim|集合的运算
  • 【代理设计模式 Objective-C语言】
  • ES6指北【2】—— 箭头函数
  • Akka系列(七):Actor持久化之Akka persistence
  • egg(89)--egg之redis的发布和订阅
  • js 实现textarea输入字数提示
  • mysql innodb 索引使用指南
  • npx命令介绍
  • PAT A1092
  • 创建一个Struts2项目maven 方式
  • 给github项目添加CI badge
  • 基于组件的设计工作流与界面抽象
  • 驱动程序原理
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 再谈express与koa的对比
  • 自动记录MySQL慢查询快照脚本
  • zabbix3.2监控linux磁盘IO
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #Java第九次作业--输入输出流和文件操作
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)(1.9) MSP (version 4.2)
  • (1)Nginx简介和安装教程
  • (day 12)JavaScript学习笔记(数组3)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)创业家杂志:UCWEB天使第一步
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Standard 的管理策略
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET程序员迈向卓越的必由之路
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth