HBase第二天

一、版本的选择

cdh5.3.0:archive.cloudera.com/cdh5/chd/5/

下载对应的hadoop hive zookeeper hbase版本

二、角色规划

                              hadoop02       hadoop03         hadooop04      hadoop05

Master                       √                        √

Regionserver           √                         √                        √                      √

zookeeper                √                         √                        √

三、问题

1、为什么要搭建zookeeper?

2、secondaryNameNode的作用

3、建立软链接

4、不配置slaves可以吗?每台手动启动

5、集群搭建完成之后要做什么?Hadoop基准测试

测试hdfs每秒能读写多少数据?等等

6、怎样区分bin和sbin内容,各脚本之间的关系

《HBase第二天》 启动Hadoop集群各脚本之间的关系

bin:

hdfs dfs -ls /          查看/创建目录

yarn jar xxx.jar       提交MR任务

sbin:

start-all.sh 由start-dfs.sh和start-yarn.sh脚本组成

start-dfs.sh:使用hadoop-daemons.sh启动zookeeper、journalnode、NameNode、secondaryNameNode、DataNode

hadoop-daemons.sh脚本中执行了bin/slaves.sh脚本

cat slaves:然后获取到我们在slaves中配置的datanode节点(参数)

如果我们使用start-dfs.sh启动集群,必须配置slaves,因为这个脚本依赖于slaves.sh脚本,如果使用hadoop-daemon.sh start namenode,不需要配置slaves,因为该脚本与slaves.sh脚本独立。

7、默认情况下载DataNode节点启动NodeManager?

           数据本地化。

四、写脚本执行自动发送

for i in hadoop03 hadoop04 hadoop05

do

nohup scp -r hadoop-2.6.5 $i:$PWD &

done

查看任务有没有执行完成

jobs

1)hdfs namenode -format 该命令是为了生成fsimage(元数据)

《HBase第二天》 格式化错误问题

解决方案:删除/tmp目录下的元数据,然后再执行格式化操作

2)启动NameNode start-dfs.sh(hadoo-daemon.sh start namenode)

集群访问地址:

Hadoop–50070       

yarn—8088

zookeeper–2181

hbase–16010

3)出错查看日志

tail -100 /日志文件目录

手启master             hbase-daemon.sh start master

rm -rf *hadoop* /*cmd

五、HBase的使用场合

数据量大

功能简单

虚拟化:docker

spark

人工智能:机器学习 深度学习

hbase-site.xml 配置访问地址

     hdfs端口号:8020/9000

     zookeeper集群访问地址

hbase-env.sh 两种方式都可以,无所谓好坏

      HBASE_MANAGES_ZK=true表示用HBase自带zookeeper

      HBASE_MANAGES_ZK=false表示用外面自己搭建的zookeeper

配置regionservers:zookeeper节点

实现HA:bachup_masters

问题:hdfs的地址:配成myha01,只是一个逻辑名,它是怎么识别的?

我们怎么让它知道?答:把配置myha01的文件复制到conf目录下。还有一种高级的方式:调用脚本让该文件自己找到我们的core-site.xml和hdfs-site.xml。脚本该怎么写?

日志的位置 hbase/logs

hbase后台启动之后怎么停止?怎么转到前台?

jobs查看当前进程是前台还是后台

ctrl+z挂起程序

bg 1切换到后台

fg 1唤醒到前台运行

进入客户端名之后不能退格的解决方案?

六、HBase写数据的流程 put命令

HStore MemStore StoreFile 合并256M 10G

WAL机制

HStore的个数=列族的个数

HMaster决定分割出来的region分发到哪台regionserver

内存易丢失——WAL机制(Write Ahead Log)预写日志

合并文件的时候会把过期的数据清理掉

MySQL使用B+树架构的,HBase:LSM树:由B+树演化过来的。

在MemStore中按照rowkey字典排序

读数据:zookeeper/-Root-/.META/RegionServer

内存、磁盘

布隆过滤器的思想:IP地址通过hash算法转换为位数组(散列表/哈希表),通过0和1判断一个IP地址是否同时在两台服务器出现,允许误判的情况下可以提高效率。

解决散列冲突的几种方法:

1、开地址法:二次探测再散列          

            求桶号的公式:Hi=(H0+i^2)%m,i=1,2…m-1(m是一个4k+3的质数)

写javaAPI:第一个API:HBaseDao和HBaseDaoImpl

获取连接:hTablePool.getTable(tableName);

插入数据的方法save insert

对象 put tableName qualifer value .getbytes

查询方法:getOneRow(tableName,rowKey)查询一行–返回Result对象

                    getRows(tableName,rowKey)模糊查询–返回List<Result>

                    getRows(tableName,startrow,endrow)根据起始键和结束键查询几行

构建get对象(rowkey)(new的方式)

table.get(get)–>Result对象

table.getScanner(scan);

扫描对象要添加过滤器      scan.setFilter(filter);

前缀过滤器PrefixFilter(rowkey.getbytes());

hbase只支持左匹配

功能,根据起始键和结束键扫描获取数据

首先获取表的连接

然后初始化一个scan对象并设置startRow 和 endRow 属性值

最后返回一个List<Result result>的集合list

测试方法:

1、getRow()返回一个result对象,获取单元格集合

for(Cell cell:result.rawCells()){

 String rowKey=new String(CellUtil.cloneRow(cell));

}

2、getRows(tableName,row_like)

一个result对应一个rowkey,一个rowkey对应多个cell

3、测试getRows(tableName,startRow,endRow)

查询多条rowkey对应信息,前闭后开。

左匹配 +起始结束键(前闭后开) +字典顺序

4、删除表

delete对象

HBase的读数据:当HMaster挂掉之后,不影响读数据。

HMaster参与的操作:写数据,具体:HMaster会管理region发送到哪台服务器。

region中存放数据。

实现HA也必须有HMaster,管理regionserver

Master管理regionserver:master与znode保持心跳,znode保存regionserver上线和下线信息。

    原文作者:夙夜M
    原文地址: https://www.jianshu.com/p/c2441ad58c9a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞