HADOOP DAY01 总结
IO的随机读取数据:
获取文件输入流 new FileInputStresm(“d://”)
读取数据 fs.read() fs.skip(2L)跳过指定字节 写write不能随机写
打印sout
序列化:本质是对象转二进制的规则(java的序列化实现接口)newObjectOutputStream(new FileOutputStresm((“d://”))
自定义序列化实现指定数据传输,减少冗余
oos.writeInt(user.getId);…写出
ois.readInt();读回
*把读写封装成方法:写一个自定义的接口,
里面是读写方法 public voie write(oos)
bean实现该接口并且重写write和read方法
迭代器:解决绝密数据的读取(迭代器内部对数据进行处理,去除加密部分)
这样只需提供读方法
自定义迭代器实现Iteratot接口重写hasNext()和next()方法中的解析逻辑
优点:一次迭代就可以遍历出所有Json形式存的对象,不行存入list中,遍历一次就得new一个对象
大数据背景:计算数据做一些运营的 !指导!工作
Hadoop:三大发型版本 Apache Hadoop初学较好,Cloudera Hadoop (CDH 企业应用多) Hortonworks Hadoop文档较好
Hadoop:一个大数据技术框架
HDFS:海量数据的存储
MapReduce:海量数据的计算
Yarn:运算资源的调度 和 任务监控平台
Commons:工具包
Hadoop 特点:高容错,高可用
极易扩展 集群规模:增强存储和计算能力
廉价性
HDFS:
基本功能
有文件系统的基本操作功能;
文件块为单位
将数据存储在不同的机器磁盘上
大的数据切块默认128M,3个副本
NameNode 主节点:维护虚拟目录 ,管理子节点(Secondly NameNode) 存储资源的调度,与客户端交互
DataNode 从节点多个:存数据,启动时会向主节点注册,主节点会掌握它的信息方便以后调用
(DataNode 从节点集群满足的基本条件:Linux01,02,03…之间 ip 域名 免密设定好。因为节点之间是要通信的)
Linux01:NameNode DataNode
Linux02:DataNode
Linux03:DataNode
安装:
上传:cd/opt/apps/
上传压缩包 rz 回车:找到压缩包(hadoop-3.1.1.tar,gz)位置,点解开始上传
解压:将apps/目录下的hadoop-3.1.1.tar,gz解压
tar -zxvf hadoop-3.1.1.tar,gz 解压到当前目录
配置:cd/opt/apps/hadoop-3.1.1/(进入Hadoop的目录下的etc 配置文件一般都在这:)etc/hadoop
1:在hadoop-env.sh 中配置JAVA_HOME
export JAVA_HOME=/opt/apps/jdk1.8.0_141/
2.在hdfs-site.xml
<!-- 集群的namenode的位置 datanode能通过这个地址注册-->
<property>
<name>dfs.namenode.rpc-address</name>
<value>linux01:8020</value>
</property>
<!-- namenode存储元数据的位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hdpdata/name</value>
</property>
<!-- datanode存储数据的位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hdpdata/data</value>
</property>
<!-- secondary namenode机器的位置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux02:8020</value>
</property>
3.在core-site.xml (核心配置文件)配置默认文件系统,原来默认文件系统为本地的
<property>
<name>fs.defaultFS</name>
<value>hdfs://linux01:8020</value>
</property>
分发:scp -r hadoop-3.1.1 linux02:$PWD
scp -r hadoop-3.1.1 linux03:$PWD
初始化(bin):根据hdfs-site.xml中NameNode节点 存储源数据位置 的配置 在相应目录(/opt/hdpdata/name)下生产name文件夹
name文件夹存储源数据,后续DataNode进行注册
cd /opt/apps/hadoop-3.1.1/bin/
执行:./hadoop namenode -format
启动(sbin):单节点 ./hadoop-daemon.sh start namenode 步骤过后就可以在http://linux01:9870下看到页面了
./hadoop-daemon.sh start datanode
linux02,linux03相同地方启动datanode 节点
多节点:一键启动 sbin目录下:start-dfs.sh stop-dfs.sh
前提:①首相得配置系统环境变量(和JAVA_HOME同理 ,在一个位置/etc/profile中)
在JAVA_HOME下面:
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
将: :$HADOOP_HOME/bin:$HADOOP_HOME/sbin拼接到PATH后
②/opt/apps/hadoop-3.1.1/etc/hadoop下的workers中配置:linux01 linux02 linux03
③在start-dfs.sh stop-dfs.sh 中都添加:
此处下面#!/usr/bin/env bash声明操作用户
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
客户端:
位置 bin/hdfs dfs 其中是一些命令
上传:hdfs dfs -put ./ 到 / (前面是本地路径,后面是hdfs路径)
查看目录:hdfs dfs -ls / (查看分目录下的文件,其他路劲同理)
创建文件夹: hdfs dfs -mkdir /data (在根目录下创建文件夹)
查看文件内容:hdfs dfs -cat 文件路径
从hdfs下载:hdfs dfs get /data/1.txt / (前面是hdfs路径 后面是本地路径)
(小表join大表可以采用分布式map端缓存)
YARN 总结:
“定义”: Yarn 是一个 !运算资源! (cpu 内存 网络 Io…)管理系统, 主要负责 集群资源的管理 和 调度监控任务进度
“作用”: YARN可以为不同的分布式运算框架提供资源分配和任务监控服务
例如: MapReduce
spark
hive等
“资源管理的意义”:1.它会对集群中各类的资源进行抽象,
然后根据各种应用程序或者服务的要求,按照一定的调度策略将资源分配给她们使用
2.资源管理采用一定的隔离机制防止应用程序或者服务之间因为抢占资源而互相干扰
3.它弱化了计算框架之争,是他们都可以发挥自己的优势
4.yarn进行统一的管理,可以使各大框架有条不紊的运行在一个大的集群上
安装:1.到 cd /opt/apps/hadoop-3.1.1/etc/hadoop/ 配置yarn-site.xml
<!-- resourcemanager主节点所在机器 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>linux01</value>
</property>
<!-- 为mr程序提供shuffle服务 http下载-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 一台NodeManager的总可用内存资源 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 一台NodeManager的总可用(逻辑)cpu核数 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!-- 是否检查容器的虚拟内存使用超标情况 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 容器的虚拟内存使用上限:与物理内存的比率 -->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
2.配置好的yarn-site.xml 拷贝到linux02,linux03
scp yarn-site.xml linux02:$PWD
scp yarn-site.xml linux03:$PWD
3.配置一键启动 在sbin目录下的 start-yarn.sh 和 stop-yarn.sh
添加:YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
4.jps查看进程linux01中多出 (主)ResourceManager和(从)NodeManager
linux02中多出 NodeManager
linux03中多出 NodeManager
5.页面查看:http://linux01:8088
在哪运行主要有程序的入口来决定(main方法):
IDEA将MapReduce程序提交到yarn上运行:
程序修改的地方:
①设置当前程序的用户名,默认为主机名 它可能对HDFS文件的系统的操作权限不够
System.setProperty("HADOOP_USER_NAME","root");
②设置访问的第几集群的位置
conf.set("fs.defaultFS","hdfs://linux01:8020");
③设置yarn的位置
conf.set("mapreduce.framework.name","yarn");
④设置yarn的resourcemanage的位置
conf.set("yarn.resourcemanage.hostname","linux01");
⑤设置Reduce程序运行在Windows上的跨平台参数
con.set("mapreduce.app-submission.cross-platform","true");
⑥设置jar包的位置
job.setJar("C:\Users\ASUS\Desktop\demo.jar");
⑦要在resources里面添加mapred-site.xml文件
<configuration>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
</configuration>
⑧修改输入和输出路径:都是HDFS中的路径;
⑨运行,在CRT中看结果
Linuxt提交MapReduce程序到yarn上运行:
程序修改的地方:
③设置yarn的位置
conf.set("mapreduce.framework.name","yarn");
④设置yarn的resourcemanage的位置
conf.set("yarn.resourcemanage.hostname","linux01");
⑥设置jar包的位置
job.setJar("C:\Users\ASUS\Desktop\demo.jar"); 修改成job.setJarByClass(WordCount.class);
①在linux上运行需要jar包把依赖打进来,要在pom中添加:
<build>
<plugins>
<plugin>
<!--报红不用管-->
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
②打好jar包后上传到liunx01中:rz 选择jar包 回车存入当前目录下
④还要在/opt/apps/hadoop-3.1.1/etc/hadoop/mapred-site.xml 中配置(IDEA中也在resource中有相同配置)
③在linux中运行 hadoop jar ./wc.jar (全类名)com.doit19.day6.demo011.WordCount
此处不要用 java -cp ./wc.jar (全类名)com.doit19.day6.demo011.WordCount
因为无法解析Hadoop中的域名 例如linux01等,必须先IP地址
Zookeeper:
简介:Zookeeper是一个底层的分布式协调服务工具!它是hadoop生态体系中很多分布式系统(HDFS、YARN(HA高可用)、HBASE(ZK)、KAFKA…)的基础组件
基本的功能:
为客户提供写数据功能 存储关键状态数据 数据量小
为客户提供读取据功能
为用户提供数据变化时的监控功能 1) 节点的子节点个数 2) 节点的数据变化
作用:
HDFS YARN的mast是自己制定的(配置HA) namenode
分布式系统中的主节点选举! 比如hbase中的老大的产生 Hmaster(HA)
分布式系统中的主从节点感知!
分布式系统中的配置文件同步!
系统服务器的动态上下线感知!!!
分布式系统中的分布式锁的实现!分布式中的同一个对象
分布式系统中的名称服务!
分布式系统中的负载均衡!
........
Zookeeper的功能其实很简单:就是提供协调服务!
协调服务具体来说有三方面:
1. 帮使用者存储一些状态信息
2. 帮使用者读取一些信息
3. 帮使用者监视一些信息的变化,并将变化作为事件通知给使用者
特点:
Zookeeper的高度可靠性
是一个分布式的系统,多个节点 并且节点中记录的数据是完全一致(一致性) , 当某个zk的节点宕机之后不会影响工作 .
Zookeeper的节点不存在单点故障!Zookeeper的主节点是可以动态选举出来的!
Zookeeper的选举机制(奇数台)
Zookeeper的主节点叫做 leader (1个)
从节点叫做 follower(多个)
Leader选举过程(以3个节点的集群为例):
注:每个节点的配置文件中都有一个自己的独一无二的id
zookeeper的进程在不同的工作模式下,有不同的通信端口(比如选举时,通过端口3888通信;作为leader或者follower接收客户端请求时通过端口2181;leader和follower之间通信用2888)
!!!注意在zk集群安装的时候 会人为的为每台机器分配一个唯一的id
(1) 集群初次启动时的选举流程
A、第一台机器(id=1)启动,发现没有leader,进入投票模式,投自己,并收到自己投这一票,得1票,不能当选leader(当leader的条件是,集群机器数量过半的票数)
B、第2台机器(id=2)启动,发现没有leader,进入投票模式,投自己(因为自己的id>1 收到的另一台机器的票的id)
C、第1台机器收到2的票,发现集群中有一个比自己id大的机器上线了,重新投票,投id=2
D、第2台收到的得票数为2票,过半数,自己当选,切换模式:Leader模式
E、第1台就发现有Leader存在了,自己切换模式:Follower
F、第3台启动,发现有Leader,自动进入Follower状态
如果每个节点是同时启动的zk 同时选举自己 ,同时广播 , 同时获取别人的广播,3号机器会当选
(2) 集群在运行过程中的选举流程
a. 在某个时间点上,id=2机器挂了(leader),别的机器发现没有leader了,全体进入投票模式
b. 先投自己,票中会携带(自己的id,自己的数据的版本号)
c. 大家都投数据版本最新的节点做leader,如果有多个节点数据版本一样,则从中选id最大的那个作为投票目标!
从上述投票机制可以看出:
Zookeeper集群的节点数最好配置为奇数!
Zookeeper集群的节点规模一般在3~5台就够!
Zookeeper的数据存储模型:
znode类似于Linux的目录结构(TREE) , 维护了节点的层级关系 ,
真正的数据存储是以key:value的形式存储的 , 存储的是字节数据!
zookeeper中对数据的存储采用key-value的形式
然后,它的key有特别的格式——路径的形式!( /service/dn1 doit01 /service/dn2 doit02 ) (key 是路径,value是路径对应的值)
之所以采取这种形式,是因为zookeeper中的数据节点(znode)之间可以存在父子关系;
zookeeper的数据节点分为以下类型:
永久的znode:客户一旦创建这个znode,它就会被zookeeper一直保存,除非人为删除;create 文件夹名
短暂的znode:客户创建完这个znode后,如果客户断开与zookeeper的连接,则该数据马上会被zookeeper删除;cerste e 文件夹名 e 代表临时
带序号的znode:客户创建一个key,zookeeper会为客户的key自动拼接一个递增的序号! cerste s 文件夹名 s 代表有序,如果有重名出现会给每一个都加上序号
(客户创建的是/aaa/x ,那么zookeeper真实生成的key为: /aaa/x0000000000001
如果客户继续创建 /aaa/y,那么zookeeper真实生成的key为:/aaa/y000000000002)
另外: 永久的和短暂的,都可以跟“带序号的”特性进行组合!组合下来之后共有4种:
永久不带序号
永久且带序号的
短暂不带序号
短暂且带序号的
安装:
1.上传压缩包到/opt/apps/ rz zookeeper-3.4.6.tar.gz 回车
2.解压到当前目录下;tar -zxvf zookeeper-3.4.6.tar.gz 得到zookeeper-3.4.6
3.在zookeeper-3.4.6目录下新建一个文件夹用来存数据
mkdir zkData
4.修改 /opt/apps/zookeeper-3.4.6/conf 下zoo_sample.cfg的文件名 为 zoo.cfg
mv zoo_sample.cfg zoo.cfg
5.编辑更名的zoo.cfg内容:
①dataDir=/opt/apps/zookeeper-3.4.6/zkData
②在最后一行后添加:server.1=linux01:2888:3888
server.2=linux02:2888:3888
server.3=linux03:2888:3888
6.在/opt/appdata/zkdata/ 下新建一个文件 myid 用来存本节点的id
7.在myid 中写入id
echo 1 > /opt/apps/zookeeper-3.4.6/zkData/myid
8.将配置好的zookeeper-3.4.6分发到 linux02 和linux03
scp zookeeper-3.4.6 linux02:$PWD
scp zookeeper-3.4.6 linux03:$PWD (PWD代表复制到当前目录下,所以该操作要在/opt/apps/zookeeper-3.4.6 进行)
9.修改linux02 和linux03中myid文件中的id 分别为 2 3
10. zookeeper没有自带一个批启脚本,只能手动在每一台节点上一个一个地启动每台机器都执行
bin/zkServer.sh start zk服务启动
bin/zkServer.sh status zk 查看服务状态
bin/zkServer.sh stop zk停止服务
11.写脚本在/opt/apps/zookeeper-3.4.6 下,通过脚本实现一键启停集群中节点
①下建一个文件 :touch zk.sh
②在zk.sh中写入脚本内容:
#!/bin/bash
arg=$1
for name in linux01 linux02 linux03
do
ssh $name "source /etc/profile;/opt/apps/zookeeper-3.4.6/bin/zkServer.sh $arg ;exit"
done
③ 一键启停操作
sh zk.sh start 启动
sh zk.sh start 停止
linux上客户端操作:
/opt/apps/zookeeper-3.4.6/bin/zkCli.sh 直接进入本地客户端
/opt/apps/zookeeper-3.4.6/bin/zkCli.sh -server linux02:2181 连接到指定的服务节点
客户端中常用的操作命令:
ls path 查看路径下内容
create -s path创建带序号的节点
create -e path创建临时的节点,关闭在启动后自动消失
get path 查看路径下节点内容
rmr path 删除路径下节点
quit 或 close 退出客户端
Zookeeper的选举机制: 以linux01 linux03 为集群的ZK)
初次启动时:
linux01 会向域网发送组播寻找leader(端口2888)发现集群中没有leader,它就进入选举状态(3888端口),并向局域网组播投票(投自己);
linux02的服务器启动了,它向局域网寻找leader,发现没有,进入投票状态(3888端口),收到服务器1所投的票;然后发现1<自己2,投票(投2)
并向局域网组播选了自己;此时,linux01也会收到2的投票,发现2>自己,重新投(投2);此时,服务器2会收到两票;然后通过配置文件获知集群总共有3台机器,
从而知道自己已经得多数票(当选);服务器2就切换到leader状态(2888);
linux03服务器启动,它向局域网寻找leader,发现服务器2是leader,自己主动进入follower状态;
leader宕机时:
当leader宕机后,集群中没有了leader,全体立即选举机制,依旧是linux01 寻找leader,发现没有后投自己一票,并向局域网组播自己的投票情况。
通过比较配置文件发现自己一票并没有过半,不能当选。
linux03进入选举状态,它也首相在集群中寻找leader,发现没有,进入投票状态投自己并组播。此时linux01也发现了Linux03 投的自己,发现1<3所以linux01 改投linux03;
此时linux03 有两票,通过配置文件比较发现票数过半,自己当选,更改装填为leader。
ZK各个节点的数据如何保证一致 :
Zookeeper采用ZAB(Zookeeper Atomic Broadcast)协议来保证分布式数据一致性:
ZAB协议的核心是定义了对事务请求的处理方式,整个过程可以概括如下:
1.所有的事务请求都交由集群的Leader服务器来处理,Leader服务器会将一个事务请求转换成一个Proposal(提议),并为其生成一个全局递增的唯一ID,这个ID就是事务ID,
即ZXID,Leader服务器对Proposal是按其ZXID的先后顺序来进行排序和处理的。
2.之后Leader服务器会将Proposal放入每个Follower对应的队列中(Leader会为每个Follower分配一个单独的队列),并以FIFO的方式发送给Follower服务器。
3.Follower服务器接收到事务Proposal后,首先以事务日志的方式写入本地磁盘,并且在成功后返回Leader服务器一个ACK响应。
4.Leader服务器只要收到过半Follower的ACK响应,就会广播一个Commit消息给Follower以通知其进行Proposal的提交,同时Leader自身也会完成Proposal的提交。
事件监听机制:Zookeeper中可以通过Watcher来实现事件监听机制。客户端可以向服务端注册Watcher用以监听某些事件,一旦该事件发生,服务端即会向客户端发送一个通知。
事件监听特征
1.当监听器监听的事件被触发,服务端会发送通知给客户端,但通知信息中不包括事件的具体内容。以监听ZNode结点数据变化为例,
当Znode的数据被改变,客户端会收到事件类型为NodeDataChanged的通知,但该Znode的数据改变成了什么客户端无法从通知中获取,
需要客户端在收到通知后手动去获取。
2.Watcher是一次性的。一旦被触发将会失效。如果需要反复进行监听就需要反复进行注册。这么设计是为了减轻服务端的压力,
但是对开发者而言却是相当不友好,不过不用着急,可以通过一些Zookeeper的开源客户端轻松实现对某一事件的永久监听。
ZK保证服务故障的容错
Zookeeper通过事务日志和数据快照来避免因为服务器故障导致的数据丢失。
事务日志是指服务器在更新内存数据前先将事务操作以日志的方式写入磁盘,Leader和Follower服务器都会记录事务日志。
数据快照是指周期性通过深度遍历的方式将内存中的树形结构数据转入外存快照中。但要注意这种快照是"模糊"的,因为可能在做快照时内存数据发生了变化。
但是因为Zookeeper本身对事务操作进行了幂等性保证,故在将快照加载进内存后会通过执行事务日志的方式来讲数据恢复到最新状态。
Zookeeper自己的命令行:
shell连接到ZK的任意一台节点上 例如连接到linux01 :bin/zkCli.sh -server linux01:2181
1.创建节点:create [-s] [-e] path data acl
-s 指定节点特性:顺序性 (如有重名的都会加上序号) 永久有序
-e 指定节点类型:写-e 就是临时节点,下次启动后节点不存在了,什么都不写默认为永久节点 临时无序
-s -e 临时有序
无 永久无序
acl 进行权限控制
例如在跟节点下添加一个子节点aa,内容为123(注意不写内容不能成功创建新节点) create -s /aa 123
2.查看节点:get
例如查跟节点下的aa 节点的内容 get /aa 显示的结果就是123
3.展示所有的节点: ls /
4.更新节点 :例如跟新/aa的内容为234 set /aa 234
5. 删除节点:例如删除 跟下的aa节点 delete /user
6. 递归删除: rmr /aaa
Java API:通过程序获取zk的客户端对象,在Java端实现
添加节点
删除节点
查看子节点
查看节点数据
判断节点是否存在
Hbase:
简介:Hbase是一个分布式的数据库,它依赖于HDFS(数据是存在HDFS中的) ,面向列存储(数据是以key value的形势存储的)key代表:行号+cf名+属性 :属性值
功能:Hbase 可以进行海量数据的存储,包括结构化,半结构化和非结构化的数据(视频 图片等)
它将数据存储在不同的机器上 !利用不用机器来处理并发请求!!
优势:
高可靠性:分布式的数据库 , 存储的数据是安全的, 集群对外服务是可靠的。
高性能: 处理数据的速度,效率, 分布式的数据库就可以利用集群中所有机器的运算资源处理数据,
可伸缩性 :从存储能力和运算能力处理 ,可以通过添加节点来扩展存储容量和添加运算资源,他可以将数据存储在廉价的设备上
面向列 : 在hbase底层存储的所有的数据都是以key/value组成的字节数据
特点:
1)海量存储
Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。
正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
2)列式存储
这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3)极易扩展
Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
4)高并发
集群中对外服务的节点叫RegionServer(存储表的部分范围数据 例如1-100行之间的…)
并发查询的时候 不同的机器节点对外服务 支持高并发
由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。
能获得高并发、低延迟的服务。
5)稀疏
稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
安装:
1.上传压缩包到/opt/apps/下
2.解压到当前目录下;tar -zxvf hbase-2.2.5.tar.gz
3.opt/apps/hbase-2.2.5/conf 下修改配置文件hbase-env.sh
①配置Java环境变量: export JAVA_HOME=/opt/apps/jdk1.8.0_141
② 修改默认值true为false 目的是让Hbase不用自己带的Zookeeper: export HBASE_MANAGES_ZK=false
4.opt/apps/hbase-2.2.5/conf 下修改配置文件 hbase-site.xml
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:8020/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 指定zookeeper的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux01:2181,linux02:2181,linux03:2181</value>
</property>
5.opt/apps/hbase-2.2.5/conf 下修改配置文件 regionservers 这个是用来指定从节点点启动的位置
linux01
linux02
linux03
6.设置环境变量/etc/profile中添加Hbase的环境变量 (这种操作都是在linux01上)
添加:export HBASE_HOME=/opt/apps/hbase-2.2.5
在PATH结尾添加:$HBASE_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
7.单节点启动
bin/hbase-daemon.sh start master (主,Hbase有两个master linux02 中也要启动一个)
bin/hbase-daemon.sh start regionserver(三个节点都有启动)
提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,修复提示
8.在目录/opt/apps/hbase-2.2.5下 将hbase-2.2.5远程分发到 linux02和linux03中
scp -r hbase-2.2.5/(注意后面有/) linux02:$PWD
scp -r hbase-2.2.5/(注意后面有/) linux03:$PWD
9.一键启动(主节点配置好环境变量的前提下)启动的是HRegionServer
start-hbase.sh 启动
stop-hbase.sh 停止
命令: