##一、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. 概述
2. 常用指令
3. VI/VIM编辑工具
4. 网络配置(静态IP的设置)(重点)
5. 用户和权限管理(重点)
6. 软件包的安装
7. 虚拟机的克隆(学习期间 一定要会)
8. scp命令
9. 免密登录认证(原理,重点)
10. 时间同步(重点)
11. shell脚本(重点)
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: 此方法的返回值类型
1. 概述-- 框架的思想(重点)移动计算而非移动数据,分而治之,然后进行汇总处理。数据的扭转: fetch原始数据-->
2. 入门案例-- 分片机制(重点)inputSplit--->FileSplit(path,start,length,hosts)-- 分片的特点
3. 序列化机制
4. MapTask的流程(重点)
5. ReduceTask的流程(重点)
6. shuffle流程(重中之重)
7. yarn的job提交流程(重中之重)
8. 经典案例:--topN案例--共同好友案例--自定义输入格式案例--Map-join--Reduce-join
1. 简介与特点--本身是一个分布式集群框架,一个leader,多个follower--适合安装在奇数台机器上,能正常服务的条件是,(n+1)/2台机器正常运行允许(n-1)/2台机器宕机-- 每个服务节点的数据一致(重点理解)
2. 安装:集群模式(重点)
3. 数据模型:(重点)类似Linux/Unix的文件系统的多层次的数据结构。每个节点称之为znode. znode可以记录子节点的名字和个数(相当于文件系统的目录),还可以存储1M以内的数据(相当于文件系统的文件).znode通过路径进行唯一标识。每一个服务节点上都有这个数据模型,因此客户端连接上任务一个服务节点,数据都是一致的。
4. 选举制度权重: epoch > zxid >serverid
5. 监听和通知机制(重点理解)
6. 应用场景(重点):-- 集群的管理,比如HA-- 配置文件的管理-- 服务器的动态上下线感知-- 分布式锁-- 分布式队列
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. 分区与分桶(重点)
1. hadoop base 缩写成Hbase-- 开源的,基于hdfs的分布式的,可扩展的,面向列式存储,非关系型(nosql->not only sql)的数据库-- 数据可以有多个版本(历史版本)-- 提供了高可靠性-- 本身是基于内存的(高性能,近似实时的访问)-- 起源于google的《bigtable》论文
2. 与hive的区别-- hive是用于OLAP,提供类sql语言的分析与计算的框架,底层就是MR。-- hbase是用于存储的,设计目录是想存储数十亿行X数百万列的大数据集
关系型数据库的表模型:面向行式存储。在定义表结构时,需要提前定义好列名,列类型,列数目
缺点:
1. 一旦数据表中存储数据后,修改表结构变得特别困难。
2. 如果我们想扩展字段时,会对表结构产生影响。
3. 即使某一行中的某个字段没有赋值,也要使用null填充
4. 一旦涉及到多张表,因为数据表存在着复杂的关系,管理非常不方便。
5. 一旦面对海量数据的处理时,读写性能特别差,尤其在高并发这一块。
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[]类型
注意:应该是每一个 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。
步骤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.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
步骤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目录下查看响应的日志文件