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

Hive的概念,表结构,特点,作用以及安装(hadoop的一个复习)

一、大纲形式##一、Linux1.操作系统2.开源3.免费4.多用户5.多进程6.多线程7.性能稳定8.安全(权限的管理)##二、Hadoop的核心模块之一HDFS解决了大数据

一、大纲形式

##一、Linux1. 操作系统2. 开源3. 免费4. 多用户5. 多进程6. 多线程7. 性能稳定8. 安全(权限的管理)
##二、Hadoop的核心模块之一HDFS解决了大数据集如何存储的问题
##三、Hadoop的核心模块之一Mapreduce解决了分布式系统上的大数据集如何快速,高效的分析与计算的问题,是一个运行在hdfs上的并发的计算与分析框架
##四、Hadoop的核心模块之一yarn是一个资源(内存,cpu,磁盘)管理框架
##五、Zookeeper是一个为分布式应用程序提供协调服务的分布式框架。
##六、hive是一款数据仓库的工具,可以将HDFS上的具有结构化的文件映射(描述信息,也叫元数据,存储在MYSQL)成一张表。可以使用类sql语言进行管理。其实底层就是MR、SPARK、TEZ.

1、Linux

1. 概述
2. 常用指令
3. VI/VIM编辑工具
4. 网络配置(静态IP的设置)(重点)
5. 用户和权限管理(重点)
6. 软件包的安装
7. 虚拟机的克隆(学习期间 一定要会)
8. scp命令
9. 免密登录认证(原理,重点)
10. 时间同步(重点)
11. shell脚本(重点)

2、HDFS

1. 概述--4V(重点)--google的三篇论文:《GFS》《MapReduce》《Bigtable》
2. 安装:-- 单节点:--1)本地模式--2) 伪分布式:使用分布式文件系统,守护进程都是独立的(每一个进程都有自己的jvm)-- 多节点(重点)-- 完全分布式:使用分布式文件系统,守护进程是分布到各个节点的。也都是独立的进程。
3. 块的概念(重点)-- 合理的块的设计,都是为了解决稀缺的网络带宽和负载均衡问题-- 块是hdfs的存储单元-- 块的大小是相同的(除了最后一个块)-- 块的大小选择(参考的是寻址时间与传输时间的比例,认为在1:100的这个比例是最优)
4. hdfs的体系结构(重点)
5. hdfs的工作机制-- 开机启动过程-- 安全模式-- 检查点机制 (重点)-- 心跳反馈(10分30秒)(重点)-- 网络拓扑-- 机架感知(2.8.2是一个分水岭, 版本之前是 前两个副本一个机架, 版本之后是后两个副本在同一个机架)(重点)-- 动态的上下线
6. 读写流程(重中之重)
7. API-- 关心1: 此方法是静态的还是非静态的-- 关心2: 此方法的形参类型-- 关心3: 此方法的返回值类型

3、Mapreduce

1. 概述-- 框架的思想(重点)移动计算而非移动数据,分而治之,然后进行汇总处理。数据的扭转: fetch原始数据-->-->map函数----->>--->reduce函数--->
2. 入门案例-- 分片机制(重点)inputSplit--->FileSplit(path,start,length,hosts)-- 分片的特点
3. 序列化机制
4. MapTask的流程(重点)
5. ReduceTask的流程(重点)
6. shuffle流程(重中之重)
7. yarn的job提交流程(重中之重)
8. 经典案例:--topN案例--共同好友案例--自定义输入格式案例--Map-join--Reduce-join

4、Zookeeper

1. 简介与特点--本身是一个分布式集群框架,一个leader,多个follower--适合安装在奇数台机器上,能正常服务的条件是,(n+1)/2台机器正常运行允许(n-1)/2台机器宕机-- 每个服务节点的数据一致(重点理解)
2. 安装:集群模式(重点)
3. 数据模型:(重点)类似Linux/Unix的文件系统的多层次的数据结构。每个节点称之为znode. znode可以记录子节点的名字和个数(相当于文件系统的目录),还可以存储1M以内的数据(相当于文件系统的文件).znode通过路径进行唯一标识。每一个服务节点上都有这个数据模型,因此客户端连接上任务一个服务节点,数据都是一致的。
4. 选举制度权重: epoch > zxid >serverid
5. 监听和通知机制(重点理解)
6. 应用场景(重点):-- 集群的管理,比如HA-- 配置文件的管理-- 服务器的动态上下线感知-- 分布式锁-- 分布式队列

5、HIVE

1. 概念和体系结构,工作流程-- 体系结构(重点)-- 工作流程(重点)
2. hive的安装-- 内嵌模式: derby,只支持单session-- 本地模式: hive客户端指令会内置开启metastore服务项,自己连接自己,与mysql在哪一台机器上无关。-- 远程模式: hive的服务项(hiveserver2或metastore)是单独开启的,然后供客户端指令去连接。重点理解本地模式和远程模式, 实际生产环境中本地和远程用的一样多。
3. hive的库和表操作-- 本地上,库和表都是hdfs上的一个目录
4. hive的表类型-- 内部表-- 外部表
5. hive的基本查询子句-- left semi join(与exists的原理相同)-- map-side-join
6. 函数-- 日期函数-- 字符串函数-- 数学函数-- 开窗函数(重点)--1) 排名函数--2) 聚合函数--3) 序列函数-- 自定义函数
7. serde
8. 分区与分桶(重点)

二、Hbase的讲解


1、Hbase的简介

1. hadoop base 缩写成Hbase-- 开源的,基于hdfs的分布式的,可扩展的,面向列式存储,非关系型(nosql->not only sql)的数据库-- 数据可以有多个版本(历史版本)-- 提供了高可靠性-- 本身是基于内存的(高性能,近似实时的访问)-- 起源于google的《bigtable》论文
2. 与hive的区别-- hive是用于OLAP,提供类sql语言的分析与计算的框架,底层就是MR。-- hbase是用于存储的,设计目录是想存储数十亿行X数百万列的大数据集

2、Hbase的表模型


2.1 关系型数据库的表模型(扩展)

关系型数据库的表模型:面向行式存储。在定义表结构时,需要提前定义好列名,列类型,列数目

在这里插入图片描述

缺点:

1. 一旦数据表中存储数据后,修改表结构变得特别困难。
2. 如果我们想扩展字段时,会对表结构产生影响。
3. 即使某一行中的某个字段没有赋值,也要使用null填充
4. 一旦涉及到多张表,因为数据表存在着复杂的关系,管理非常不方便。
5. 一旦面对海量数据的处理时,读写性能特别差,尤其在高并发这一块。

2.2 Hbase的表模型

1)Cell

hbase是面向列式存储的表模型,列指的是KV对,这个key就是column,v就是column对应的值。KV对被称之单元格,也就是cell。单元格有属于自己的版本号,其实就是一个时间戳。

2)rowkey

为了表示某些单元格是同一个事物的,所以引入了rowkey的概念。因此rowkey是不可以重复的,否则会出现覆盖情况。

3)column family(列族)

为了更好的方便管理单元格,以及有相同意义的单元格尽可能的汇聚到一起,所以引入了列族的概念。

4)region

region是hbase的物理存储模型,是整张表(数据量比较小的时候),或者是表的一部分(数据量比较大时,有多个region)

5)排序机制

由于hbase是优先基于内存存储的,因此内存中的数据进行排序,排序规则是字典排序(ascii升序)
排序方式:
-- 先按照rowkey进行排序
-- 然后按照列族进行排序
-- 再按照key进行排序
-- 如果是多个版本,会按照时间戳进行降序排序

6)数据类型

hbase是不支持其他类型的维护的,底层就是byte[]类型

3、Hbase的体系结构

在这里插入图片描述
注意:应该是每一个 RegionServer 就只有一个 HLog,而不是一个 Region 有一个 HLog。

从HBase的架构图上可以看出,HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,接下来介绍他们的作用。

1、Client
1、HBase 有两张特殊表:

.META.:记录了用户所有表拆分出来的的 Region 映射信息,.META.可以有多个 Regoin

-ROOT-:记录了.META.表的 Region 信息,-ROOT-只有一个 Region,无论如何不会分裂

2、Client 访问用户数据前需要首先访问 ZooKeeper,找到-ROOT-表的 Region 所在的位置,然 后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过 client 端会做 cache 缓存。

2、ZooKeeper
1、ZooKeeper 为 HBase 提供 Failover 机制,选举 Master,避免单点 Master 单点故障问题

2、存储所有 Region 的寻址入口:-ROOT-表在哪台服务器上。-ROOT-这张表的位置信息

3、实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master

4、存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family

3、Master
1、为 RegionServer 分配 Region

2、负责 RegionServer 的负载均衡

3、发现失效的 RegionServer 并重新分配其上的 Region

4、HDFS 上的垃圾文件(HBase)回收

5、处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)

4、RegionServer
1、RegionServer 维护 Master 分配给它的 Region,处理对这些 Region 的 IO 请求

2、RegionServer 负责 Split 在运行过程中变得过大的 Region,负责 Compact 操作

可以看到,client 访问 HBase 上数据的过程并不需要 master 参与(寻址访问 zookeeper 和 RegioneServer,数据读写访问 RegioneServer),Master 仅仅维护者 Table 和 Region 的元数据信息,负载很低。

.META. 存的是所有的 Region 的位置信息,那么 RegioneServer 当中 Region 在进行分裂之后 的新产生的 Region,是由 Master 来决定发到哪个 RegioneServer,这就意味着,只有 Master 知道 new Region 的位置信息,所以,由 Master 来管理.META.这个表当中的数据的 CRUD

所以结合以上两点表明,在没有 Region 分裂的情况,Master 宕机一段时间是可以忍受的。

5、HRegion
table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值时就会分成两个新的region。
每个region由以下信息标识:<表名,startRowkey,创建时间>
由目录表(-ROOT-和.META.)记录该region的endRowkey
6、Store
每一个region由一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个 ColumnFamily建一个store,如果有几个ColumnFamily,也就有几个Store。一个Store由一个memStore和0或者 多个StoreFile组成。 HBase以store的大小来判断是否需要切分region
7、MemStore
memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文 件,即生成一个快照。目前hbase 会有一个线程来负责memStore的flush操作。

8、StoreFile
memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile。

9、HFile
HBase中KeyValue数据的存储格式,HFile是Hadoop的 二进制格式文件,实际上StoreFile就是对Hfile做了轻量级包装,即StoreFile底层就是HFile。

10、HLog
HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。
HLog文件就是一个普通的Hadoop Sequence File, Sequence File的value是key时HLogKey对象,其中记录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp,timestamp是写入时间,sequence number的起始值为0,或者是最近一次存入文件系统中的sequence number。 Sequence File的value是HBase的KeyValue对象,即对应HFile中的KeyValue。


4、Hbase的安装


4.1 单机模式

步骤1)上传并解压,更名

[root@qianfeng01 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /usr/local/
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv hbase-1.2.1/ hbase

步骤2)配置环境变量并重新引导

[root@qianfeng01 local]# vim /etc/profile
.........省略........
# hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH[root@qianfeng01 local]# source /etc/profile

步骤3)修改hbase的环境脚本(hbase-env.sh)

[hadoop@qianfeng01 local]$ vim $HBASE_HOME/conf/hbase-env.sh
#找到下面内容,解开注释,添加具体路径
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# hbase内置zookeeper开启
export HBASE_MANAGES_ZK=true

步骤4)修改hbase的site.xml(自定义配置文件)

<configuration><property><name>hbase.rootdirname><value>file:///usr/local/hbase/datavalue>property><property><name>hbase.zookeeper.property.dataDirname><value>/usr/local/hbase/zkdatavalue>property>
configuration>

步骤5)可以开心的玩了

start-hbase.sh
hbase shell
stop-hbase.sh

4.2 伪分布式模式

4.2.1 情况说明

hbase的伪分布式,其实就是指相关的守护进程都有,并且运行在同一个机器上,是独立的进程(每一个守护进程都有自己的JVM)-- hbase的伪分布式的数据的存储位置,可以是hdfs,也可以是本地文件系统。
-- hbase的伪分布式如果选择hdfs,针对于zookeeper来说,可以选择内置的,也可以我们自行安装的。下面的演示是自行安装的zookeeper

步骤1)上传并解压,更名

[root@qianfeng01 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /usr/local/
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv hbase-1.2.1/ hbase

步骤2)配置环境变量并重新引导

[root@qianfeng01 local]# vim /etc/profile
.........省略........
# hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH[root@qianfeng01 local]# source /etc/profile

步骤3)修改hbase的环境脚本(hbase-env.sh)

[hadoop@qianfeng01 local]$ vim $HBASE_HOME/conf/hbase-env.sh
#找到下面内容,解开注释,添加具体路径
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# 由于要使用我们自行安装的zookeeper,所以要把内置的关闭掉
export HBASE_MANAGES_ZK=false

步骤4)修改hbase的site.xml(自定义配置文件)

<configuration><property><name>hbase.rootdirname><value>hdfs://qianfeng01/hbasevalue>property><property><name>hbase.cluster.distributedname><value>truevalue>property><property><name>hbase.zookeeper.quorumname><value>qianfeng01:2181,qianfeng02:2181,qianfeng03:2181value>property><property><name>hbase.unsafe.stream.capability.enforcename><value>truevalue>property>
configuration>

步骤5)可以开心的玩了

由于使用自行安装的zookeeper,所以再启动hbase服务进程时,应该提前开启zookeeper集群

zkServer.sh start <---三台一起开
start-hbase.sh
hbase shell
stop-hbase.sh

4.3 完全分布式模式


4.3.1 情况说明和布局安排


4.3.2 安装步骤

步骤1)上传并解压,更名

[root@qianfeng01 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /usr/local/
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv hbase-1.2.1/ hbase

步骤2)配置环境变量并重新引导

[root@qianfeng01 local]# vim /etc/profile
.........省略........
# hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH[root@qianfeng01 local]# source /etc/profile

步骤3)修改hbase的环境脚本(hbase-env.sh)

[hadoop@qianfeng01 local]$ vim $HBASE_HOME/conf/hbase-env.sh
#找到下面内容,解开注释,添加具体路径
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# 由于要使用我们自行安装的zookeeper,所以要把内置的关闭掉
export HBASE_MANAGES_ZK=false

步骤4)修改hbase的site.xml(自定义配置文件)

<configuration><property><name>hbase.rootdirname><value>hdfs://qianfeng01/hbasevalue>property><property><name>hbase.cluster.distributedname><value>truevalue>property><property><name>hbase.zookeeper.quorumname><value>qianfeng01:2181,qianfeng02:2181,qianfeng03:2181value>property><property><name>hbase.unsafe.stream.capability.enforcename><value>truevalue>property>
configuration>

步骤5)三台机器的免密登录认证要做好

步骤6)三台机器的时间一定要同步,不能超过30秒

步骤7)配置regionserver的布局

[root@qianfeng01 hbase]# vim conf/regionserversqianfeng01
qianfeng02
qianfeng03

步骤8) 配置备份的hmaster

[root@qianfeng01 hbase]# echo "qianfeng02" > ./conf/backup-masters

步骤9)将hadoop的core-site.xml和hdfs-site.xml拷贝到hbase的conf目录下

[root@qianfeng01 hbase]# cp ${HADOOP_HOME}/etc/hadoop/{core-site.xml,hdfs-site.xml} ./conf/

步骤10)分发到其他两台机器上

[root@qianfeng01 local]# scp -r hbase qianfeng02:/usr/local/
[root@qianfeng01 local]# scp -r hbase qianfeng03:/usr/local/[root@qianfeng01 local]# scp /etc/profile qianfeng02:/etc/
[root@qianfeng01 local]# scp /etc/profile qianfeng03:/etc/最好去另外两台机器上,重新加载一下环境变量的文件

步骤11)启动hbase

hdfs和zookeeper一定要先启动,
然后再启动hbase的服务进程启动后,要去webui界面查看一下,ip:16010如果启动失败,应该去相关进程所在的机器上的hbase的家里的logs目录下查看响应的日志文件

推荐阅读
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 【漫画解析】数据已删,存储空间为何未减?揭秘背后真相
    在数据迁移过程中,即使删除了原有数据,存储空间却未必会相应减少。本文通过漫画形式解析了这一现象背后的真相。具体来说,使用 `mysqldump` 命令进行数据导出时,该工具作为 MySQL 的逻辑备份工具,通过连接数据库并查询所需数据,将其转换为 SQL 语句。然而,这种操作并不会立即释放存储空间,因为数据库系统可能保留了已删除数据的碎片信息。文章进一步探讨了如何优化存储管理,以确保数据删除后能够有效回收存储空间。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • FileBeat + Flume + Kafka + HDFS + Neo4j + SparkStreaming + MySQL:【案例】三度关系推荐V1.0版本11:每周一计算最近一月主播视频评级
    一、数据计算步骤汇总下面我们通过文字梳理一下具体的数据计算步骤。第一步:历史粉丝关注数据初始化第二步:实时维护粉丝关注数据第三步:每天定 ... [详细]
author-avatar
手机用户2602915451
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有