hbase是什么?
是一个数据仓库
分布式的,基于列的数据仓库
非关系型数据库
支持增删改查
redis
传统的关系型数据库(mysql oracle db2 sqlserver…)
为什么叫关系型数据库:表与表之间有关联关系(一对一一对多多对一多对多)
非关系型数据库(redis mongodb)键值对<key,value>
为什么要有非关系型数据库??????有些数据,用传统的数据库很难表示的
比如中国的家庭关系图(family-tree)七大姑,八大姨redis
(“zhangsan”,"{大姑:a;二姑:b;三姑;大姨;二姨}")非关系型数据库还有别的用法
例如redis可以做缓存
hive 主要通过sql执行mapreduce
hbase来自google的bigtable
zookeeper只要半数以上的机器活着就可以
3台zk 2台
zk一般是奇数台机器,不是偶数台机器
1台 1台 挂了一台,zk就完蛋了
2台 2台都要运行 挂了一台,zk就完蛋了
3台 2台 可以挂一台
4 3 台 可以挂一台
3台机器跟4台机器的效果是一样的,都是只能宕一台
hbase的安装
前提:
1.zk正确安装
2.hadoop
3.时间
3台机器的时间要一样
date
tzselect
0.99 hadoop 2.6.5
2.0 hadoop 2.7.3
1.上传
2.解压
3.重命名
4.设置环境变量
5.修改配置文件
一共修改三个配置文件
6.发送到其他机器
7.启动
hbase启动后,回自动去zk下注册一个节点,所以zk必须提前开启
3.使用hbase
1.rowkey是hbase的主键
hbase没有删除操作,当向表中添加两条记录的时候,如果两条记录的rowkey一样,则后面的一条
数据会覆盖前面的一条数据
其实被覆盖的数据以历史数据存在
1001 zhangsan
1001 lisi
当我根据rowkey查询的时候,则显示最近插入的数据
如果我想更新一条记录,则只需rowkey一样
put ‘user’ , ‘1234’ , ‘info1:name’,’zhanhsan’
向user表中添加数据, rowkey是1234, 向info1中添加数据
添加的列名叫name 这个列的值是zhangsan
4 hbase到底怎么用
5.java api 操作hbase
jdbc mysql
hbase
步骤
1.新建项目
2.添加jar包和1og4j.properties
3.写代码
zookeeper要一个一个的开,hadoop执行./start-all.sh就可以启动整个集群,hbase也是./start-hbase.sh
先开第一台再第二台最后第三台
第二台是leader选举
1.先开第一台,会给自己投票得到1票,但是集群是3台,必须得到2或者3才是leader此次投票无效
2.再开第二台,默认会给ip大的投票都会给第二台投票,第二台2票;第一台是1票
此时第二台已经满足得到的票数>=集群的一半,所以第台是leader
3.再开第三台,此时leader已经定下来了,所以第三台只能乖乖的当小弟,等待时机
如果第二台宕机,此时会重新选举,第三台会当leader.
如果第三台也宕机,那么集群只剩下一台,已经不满足存货量>=集群的一半。
此时集群就不能正常工作了|
2>=1
2>1
linux 上安装hbase
前提:
hadoop和zookeeper已经正确安装和开启
1. 上传 上传到/root下
首先确保用户是hadoop,用工具将hbase安装包hbase-0.99.2-bin.tar.gz上传 到/home/hadoop下,确保hbase-0.99.2-bin.tar.gz的用户是hadoop,
如果不是,执行chown命令,见上文
2. 解压
su – hadoop
tar –zxvf hbase-0.99.2-bin.tar.gz
3. 重命名 移动 mv /root/解压后的文件夹名字 /usr/local/hbase
mv hbase-0.99.2 hbase
4. 修改环境变量 vim/etc/profile 在末尾添加 export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
1、 在master机器上执行下面命令:
su – root
vi/etc/profile
添加内容:
export HBASE_HOME=/home/hadoop/hbase
export PATH=$PATH:$HBASE_HOME/bin
执行命令:
source /etc/profile 更新一下
su – hadoop
2、在其他机器上执行上述操作。
5. 修改配置文件
su – hadoop
将配置文件
上传 到/home/hadoop/hbase/conf文件夹下。
每个文件的解释如下:(以这个为准)
hbase-env.sh
export JAVA_HOME=/usr/local/jdk //jdk安装目录
export HBASE_CLASSPATH=/usr/local/Hadoop/etc/hadoop //hadoop配置文件的位置
export HBASE_MANAGES_ZK=true (false) #如果使用独立安装的zookeeper
这个地方 就是false
hbase-site.xml
<configuration>
<property>
<name>hbase.master</name> #hbasemaster的主机和端口
<value>master:60000</value>
</property>
<property>
<name>hbase.master.maxclockskew</name> #时间同步允许的时间差
<value>180000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>#hbase共享目录,持久化hbase数据
</property>
<property>
<name>hbase.cluster.distributed</name> #是否分布式运行,false即为单机
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>#zookeeper地址
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>#zookeeper配置信息快照的位置
<value>/usr/local/hbase/tmp/zookeeper</value>
</property>
</configuration>
Regionservers //是从机器的域名
slave1
slave2
6. 把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf
cp /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hbase/conf
7. 发送到其他机器
su - hadoop
scp –r /usr/local/hbase root@slave1:/usr/local/hbase
scp –r /usr/local/hbase root@slave2:/usr/local/hbase
scp –r /home/hadoop/hbase hadoop@slave3:/home/hadoop
8. 启动
su – hadoop
start-hbase.sh
9. 查看
进程:jps
进入hbase的shell:hbase shell
退出hbase的shell:quit
页面:http://master:16010/