一、版本的选择
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内容,各脚本之间的关系
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(元数据)
解决方案:删除/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上线和下线信息。