1.HBase_工作原理

1.HBase介绍

HBase是一种Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库。利用Hadoop HDFS存储HBase的数据文件,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为HBase分布式协同服务。主要用来存储非结构化和半结构化的松散数据。

2.HBase数据模型

 

RowKeyTimeStampColumn Family01Column Family02
nameagejob1job2
10001t1tom25enginermanager
10002t2lily22dancerdancer

Row Key:

  • 决定一行数据的唯一标识
  • RowKey是按照字典顺序排序的
  • Row key最多只能存储64k的字节数据

Column Family列族 & qualifier列:

  • HBase表中每列都归属于某个列族,列族必须作为表模式(schema) 定义的一部分预先给出。如create 'test','course'
  • 列名以列族作为前缀,每个列族都可以有多个列成员。如CF1:q1,CF2:qw
  • 权限控制、存储以及调优都是在列族层面进行
  • HBase把同一列族里面的数据存储在同一目录下,由几个文件保存

Timestamp时间戳:

  • HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
  • 时间戳的类型是64位整型。
  • 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
  • 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突, 就必须自己生成具有唯一性的时间戳。

Cell单元格:

  • 由行和列的坐标交叉决定;
  • 单元格是有版本的(由时间戳来作为版本)
  • 单元格的内容是未解析的字节数组Byte[],cell中的数据是没有类型的,全部是字节码形式存储。
  • 由{row key,column(=<family> +<qualifier>),version}唯一确定的单元。

3.HBase架构

Client

  • 包含访问HBase的接口并维护cache来加快对HBase的访问

Zookeeper

  • 保证任何时候,集群中只有一个master
  •  存贮所有Region的寻址入口。
  • 实时监控Region server的上线和下线信息。并实时通知Master
  • 存储HBase的schema和table元数据

Master

  • 为Region Server分配Region
  • 负责Region Server的负载均衡
  • 发现失效的Region Server并重新分配其上的Region
  • 管理用户对Table的增删改操作

RegionServer

  • Region server维护Region,处理对这些Region的IO请求
  • Region server负责切分在运行过程中变得过大的Region 

HLog(WAL log)

  • HLog文件就是一个普通的Hadoop Sequence File,Sequence File的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了Table和Region名字外,同时还包括Sequence Number和TimeStamp,TimeStamp是"写入时间",Sequence Number的起始值为0,或者是最近一次存入文件系统中Sequence Number。
  • HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。

Region

  • Table中所有的行都按照Row Key的字典序进行排列
  • Table在行的方向上分割为多个Region
  • Region是按大小分割的,每个表开始只有一个Region,随着数据增多,Region不但增大。当增大到一个阈值时,Region就会等分两个新的Region,之后会有越来越多的Region。
  • Region是HBase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。
  • 一个HRegionServer管理多个HRegion。
  • 我们通过"Table + StartRowKey + RegionId"来确定HRegion。

Storefile

  • 一个Region由一个或多个Store组成,一个Store对应一个Column Family。
  • Store包括内存中的Memstore和HDFS上的Storefile。写操作先写入Memstore,当Memstore中的数据达到某个阈值,HRegionServer会启动FlashCache进程写入Storefile,每次写入形成单独的一个Storefile。
  • 当Storefile文件的数量增长到一定阈值后,系统会进行合并。在合并过程中进行版本合并和删除工作(majar),形成更大的Storefile。
  • 当一个HRegion中所有Storefile的文件大小加起来超过一定阈值后,会把当前HRegion分割为两个,并由HMaster分配到相应的HRegionServer服务器,实现负载均衡。
  • 客户端检索数据,先在MemStore找,找不到再找Storefile。
  • HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元表示不同HRegion可以分布在不同的HRegion Server上。
  • HRegion由一个或者多个Store组成,每个Store保存一个Column Family。
  • 每个Strore又由一个MemStore和0至多个StoreFile组成。

4.HBase安装与配置

Apache HBase官网提供了默认配置说明、参考的配置实例。我们安装方式为完全分布式,且使用独立的ZooKeeper协同服务保持HA。在安装HBase之前确保已经安装好了ZooKeeper。

(1) 下载Apache HBase

从官网上面下载最新的二进制版本:hbase-1.2.6-bin.tar.gz然后解压。

# 解压命令
tar -zxvf hbase-1.2.6-bin.tar.gz

# 配置环境变量
vi ~/.bash_profile
export HBASE_HOME=/home/hbase/hbase-1.2.6
export PATH=$PATH:$HBASE_HOME/bin

# 使用环境变量生效
source ~/.bash_profile

(2) 配置hbase-site.xml

编辑 $HBASE_HOME/conf/hbase-site.xml

<configuration>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>slave1,slave2,slave3</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hbase/zookeeper-data</value>
    <description>
        注意这里的zookeeper数据目录与hadoop ha的共用,也即要与zoo.cfg中配置的一致
    </description>
  </property>
  <property>
    <name>hbase.master</name>
    <value>master:60000</value>
  </property>
  <property>
    <name>hbase.master.maxclockskew</name> #时间同步允许的时间差
    <value>180000</value>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:8020/hbase</value>
    <description>这是RegionServers共享的目录,官网多次强调这个目录不要预先创建,
        hbase会自行创建,否则会做迁移操作,引发错误。
    </description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>分布式集群配置,这里要设置为true,如果是单节点的,则设置为false
      The mode the cluster will be in. Possible values are
      false: standalone and pseudo-distributed setups with managed ZooKeeper
      true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
    </description>
  </property>
</configuration>

(3)配置regionserver文件

编辑 $HBASE_HOME/conf/regionservers文件,输入要运行RegionServer的主机名

slave1
slave2
slave3

(4)配置backup-masters文件 (master备用节点)

HBase支持运行多个master节点,因此不会出现单点故障问题,但只能有一个活动的管理节点(active master),其余为备用节点(backup master)。编辑$HBASE_HOME/conf/backup-masters文件进行配置备用管理节点的主机名

slave2

(5) 配置hbase-env.sh文件

编辑$HBASE_HOME/conf/hbase-env.sh配置环境变量。我们单独配置的zookeeper,所以将配置文件中HBASE_MANAGES_ZK 设置为false

export HBASE_MANAGES_ZK=false

(6) 启动HBase

使用$HBASE_HOME/bin/start-hbase.sh指令可以启动整个集群。为了更加深入了解HBase启动过程,我们对各个节点依次启动。经查看start-hbase.sh,里面的启动顺序如下:

if [ "$distMode" == 'false' ] 
then
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master 
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
    --hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
    --hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi

即:使用hbase-daemon.sh命令依次启动zookeeper、master、regionserver、master-backup。

因此,我们也按照这个顺序,在各个节点进行启动(确保Hadoop HDFS运行)

  • 启动zookeeper
zkServer.sh start &
  • 启动hadoop分布式集群
# 启动 journalnode(master,slave1,slave2,slave3)
hdfs journalnode &

# 启动 namenode active(master)
hdfs namenode &

# 启动 namenode standby(slave2)
hdfs namenode &

# 启动ZookeeperFailoverController(slave1,slave2)
hdfs zkfc &

# 启动 datanode(slave1,slave2,slave3)
hdfs datanode &
  • 启动hbase master(master)
hbase-daemon.sh start master &
  • 启动hbase regionserver(slave1,slave2,slave3)
hbase-daemon.sh start regionserver &
  • 启动hbase backup-master(slave2)
hbase-daemon.sh start master --backup &
  • HBase 测试使用
hbase shell

# 查看集群状态和节点数量
hbase(main):001:0> status
1 active master, 1 backup masters, 4 servers, 0 dead, 0.5000 average load

 

5.HBase优缺点

(1) Hbase的优点

  • 半结构化或非结构化数据:对于数据结构字段不能确定的数据适合用HBase,因为HBase支持动态添加列。
  • 记录很稀疏:RDBMS每行数据的列是固定的,出现某列值为null就会浪费空间。HBase中值为null的列不会被存储,这样既节省了空间又提高了读性能。
  • 多版本号数据:依据Row key和Column key定位到的Value能够有随意数量的版本号值,因此对于需要存储变动历史记录的数据,用HBase是很方便的。
  • 高可用支持瞬间高写入量: WAL(记录日志)解决高可用,支持PB级数据,put性能高。适用于插入比查询操作更频繁的情况。比如,对于历史记录表和日志文件。
  • 业务场景简单: 不需要太复杂的操作,如:交叉列,交叉表,事务,连接等。

(2) Hbase的缺点

  • 单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
  • 不适合于大范围扫描查询
  • 不直接支持 SQL 的语句查询
好的,我会依次回答你的问题,不会透露你的要求。 1. MapReduce工作原理: MapReduce是一种分布式计算框架,可以处理大规模数据集,主要用于数据的批量处理。它的工作原理可以分为两个阶段:Map阶段和Reduce阶段。 在Map阶段,MapReduce将输入数据集分割成若干个小数据块,每个数据块由一个Map任务处理,Map任务对每个数据块进行处理并输出一系列键值对。这些键值对作为中间结果,会被存储在分布式文件系统中,供Reduce阶段使用。 在Reduce阶段,MapReduce将Map阶段输出的键值对根据键进行分组,每个组由一个Reduce任务进行处理。Reduce任务对每个组进行处理,并输出最终的结果。 2. Spark工作原理: Spark是一种快速、通用的大数据处理引擎,它支持多种数据处理模式,包括批处理、交互式查询、流处理等。Spark的工作原理可以分为三个阶段:数据的输入、数据的转换和数据的输出。 在数据的输入阶段,Spark从外部数据源(例如Hadoop HDFS、Apache Cassandra等)读取数据,并将数据分割成多个数据块,存储在内存中。 在数据的转换阶段,Spark通过各种转换算子(例如map、filter、reduce等)对数据进行转换处理,生成新的数据集。这些新的数据集可以被进一步转换或输出。 在数据的输出阶段,Spark将转换后的数据集写入外部数据源,或将结果返回给应用程序。 1. HBase工作原理HBase是一种列式存储数据库,它基于Hadoop分布式文件系统(HDFS)进行存储。HBase工作原理可以分为三个层次:RegionServer层、HMaster层和ZooKeeper层。 在RegionServer层,HBase将数据划分成多个区域(Region),每个区域由一个RegionServer进行管理。当数据需要写入或读取时,客户端会与对应的RegionServer进行交互。 在HMaster层,HBase将RegionServer进行管理,并负责对Region进行负载均衡和分裂处理。 在ZooKeeper层,HBase使用ZooKeeper进行协调和管理,例如协调HMaster和RegionServer之间的通信。 2. Hive工作原理: Hive是一种基于Hadoop的数据仓库工具,它可以将结构化数据映射到Hadoop HDFS上,并提供类SQL查询的接口。Hive的工作原理可以分为三个步骤:数据的导入、数据的存储和数据的查询。 在数据的导入阶段,Hive将外部数据导入到Hadoop HDFS上,并将数据进行格式化和存储,生成Hive表。 在数据的存储阶段,Hive将数据存储在Hadoop HDFS上,同时生成元数据信息,包括表结构、列信息、分区信息等。 在数据的查询阶段,Hive通过类SQL查询语言对数据进行查询和分析,生成查询结果,并将结果返回给用户。查询语言会被转化为MapReduce任务,在Hadoop集群上执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值