zoukankan      html  css  js  c++  java
  • Hadoop学习笔记04_Hbase

    大数据开发的学习,组件还是很多的,都需要掌握并多加练习。 最好的参考文档当然是官方的了。

    因为Hadoop生态圈组件很多,所以,在建设之初一定要检查好各版本的兼容性。避免后期麻烦。

    我的练习使用Hadoop-2.7.5  以及Hbase-1.4.2 看了Hbase 手册Chapter4 兼容性没有问题。

    # 行存储
        优点:写入一次性完成,保持数据完整性
        缺点:数据读取过程中产生冗余数据,若有少量数据可以忽略
    # 列存储
        优点:读取过程,不会产生冗余数据,特别适合对数据完整性要求不高的大数据领域
        缺点:写入效率差,保证数据完整性方面差
        
    # Hbase优势:
        海量数据存储
        快速随机访问
        大量写操作的应用
    # Hbase应用场景
        互联网搜索引擎数据存储
        海量数据写入
        消息中心
        内容服务系统(schema-free)
        大表复杂&多维度索引
        大批量数据读取
    
    # Hbase 数据模型
    # 行键          时间戳       列族contens           列族ahchor                   列族mime
    "com.cn.www"     t9                                anchor:cnnsi.com="CNN"   
                     t8                               anchor:my.look.cn="CNN.com"   
                     t6        contens:html=""                                    mime:type="text/html" 
                     t5        contens:html=""                                                          
                     t3        contens:html=""                                                          
    
    # RowKey: 是Byte array,是表中每条记录的“主键”,方便快速查找,RowKey的设计非常重要 
    # Column Family: 列族,拥有一个名称(string),包含一个或者多个相关列
    # Column: 属于某一个Columnfamily, familyName:columnName,每条记录可动态添加
    # Version Number: 类型为Long,默认值是系统时间戳,可由用户自定义
    # Value(cell): Byte array
    
    ## Hbase系统架构 可以参考 http://www.cnblogs.com/shitouer/archive/2012/06/04/2533518.html
    
    ######################### 安装配置启动 #########################
    # 先完成 配置并启动zookeeper以及hadoop 的前提下,开始安装hbase
    tar zxvf hbase* -C 
    cd hbase-1.4.2/conf
    
    vim /etc/profile
    export HBASE_HOME=/usr/local/src/hbase-1.4.2
    export PATH=$PATH:$HBASE_HOME/bin
    ###(以下两行最好加上,若没有,启动Hadoop、hbase时都会有没加载lib成功的警告) 
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
    
    vim hbase-env.sh
    export JAVA_HOME=/usr/local/src/jdk1.8.0_161
    export HBASE_CLASSPATH=/usr/local/src/hbase-1.4.2/conf  # 官方教程没有这行
    export HBASE_MANAGES_ZK=false ##### 使用自带zk 设为false ####
    export HBASE_HOME=/usr/local/src/hbase-1.4.2  # 官方教程没有这行
    export HADOOP_HOME=/usr/local/src/hadoop-2.7.5 # 官方教程没有这行
    #给以下两行加上注释
    #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    
    vim hbase-site.xml
    <property> 
        <name>hbase.rootdir</name> <!-- hbase存放数据目录,设置好会自动创建 -->
        <value>hdfs://master:9000/hbase/hbase_db</value>
        <!-- 但是实际生产环境最好使用HDFS HA的nameservice 才能高可用. -->
        <!-- hdfs://names1/hbase -->
        <!-- 端口要和Hadoop的fs.defaultFS端口一致 -->
    </property> 
    <property> 
        <name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
        <value>true</value> 
    </property> 
    <property>
        <name>hbase.zookeeper.property.clientPort</name><!-- Zookeeper的端口 -->
        <value>2181</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name><!-- Zookeeper的地址 写ip也行 -->
        <value>master,slave1,slave2</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <!-- zookeeper 数据文件夹,不配也可以,但是配的话就必须和zoo.cfg的一样。 -->
        <value>/usr/local/src/hbase-1.4.2/zookeeper</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master:60000</value>
    </property>
    
    # 配置 regionservers 启用HA后,就改用master slave2 slave3 因为有4台vm了。
    vim regionservers master slave1 slave2 # 配置备份主控 vim conf
    /backup-masters slave1

    #######################
    # 复制hadoop/etc/hadoop/hdfs-site.xml文件到hbase/conf/ 下 尤其是改过配置后,一定要重新复制
    #######################
    # 分别scp -r /usr/local/src/hbase-1.4.2 到其它机器

    
    

    # 启动zookeeper, 启动hadoop HA ,启动备份Namenode sbin/yarn-daemon.sh start resourcemanager
    # 启动hbase
    ./start-hbase.sh

    
    

    ### 验证 jps查看Hmaster, QuorumPeer, HRegionServer
    ### 访问http://master:16010 检查Region Servers 和 Backup Masters
    ### 0.98版为 http://master:60010

    
    ########################  使用   ########################
    hbase shell # 进入shell模式 
    # 在 shell 模式下,输入命令后直接回车,可以得到相关的帮助。
    status  # 查看状态
    version 
    list 
    processlist #当前任务列表
    whoami # 当前用户 
    #### 退格需要 ctrl + backspace
    
    create 'psn','cf1','cf2' #建表 表名和2个列族
    describe 'psn' # 表的描述  
    disable 'psn' #禁用表
    drop 'psn' #删除表,必须先禁用.
    
    put 'psn','0001','cf1:name','Tohmase' #插入数据:表名,RowKey, 列,值
    put 'psn','0001','cf1:sex','male'
    
    scan 'psn' #显示表数据 scan尽量少用,因为数据量很大。
    
    get 'psn','0001','cf1:name' # 得到数据
    
    put 'psn','0001','cf1:name','Jerry'
    get 'psn','0001','cf1:name' #因为默认VERSION的设置,只保留1个版本。
    
    list_namespace #默认的表都在default中
    
    create 'tb2','cf'
    disable 'tb2'
    list 
    drop 'tb2'
    
    
    # 如果是单机伪分布式, hbase-site.xml 中的 <name>hbase.rootdir</name> 将使用本地文件系统 <value>file:///tmp/hbase_db</value>
    # 那么,/tmp/hbase_db/data对应数据, oldWALs 和 WALs对应Hlog.   
    # /tmp/hbase_db/data/default/psn 对应数据表psn, psn下的子目录对应Region 而Region下的子目录对应列族。
    # 进入列族,可以看到数据文件,如果没有文件,则可能因为还在内存中,可以手动溢写 
    flush 'psn'
    # 查看数据文件命令 hbase hfile -p -f 文件名
    hbase hfile -p -f hdfs://names1/hbase/data/default/psn/321528543130bee66f28d583f91f6279/cf1/3351b190de7940a1bfa7c439c54cff70 # RowKey 在满足业务需求的前提下尽量短一些,节省资源 # 关闭各系统时,依次是: stop
    -hbase.sh stop-yarn.sh stop-dfs.sh zkServer.sh stop

    看了这位老师的教程,进一步理解HDFS HA的重要性,初学的时候只是简单地搭建了hadoop环境,而实际的生产环境中,HA则是必不可少的。

    后续我至少设置4台VM后,再试试搭建hadoop的HA。

    更新:

    启动成功 hadoop HA 后,又继续试验Hbase

    ########## 今天试验时出现一个故障:create 'psn'表时提示已存在,disable时又提示不存在。
    # 可能的原因是改了hbase的配置文件后没有复制到其它节点。 
    # 解决办法:zkCli.sh 进入zk shell, 在以下2个地方找到表名然后删除, 然后再hbase shell 重新创建表。
    # rmr /hbase/table/psn  
    # rmr /hbase/table-lock/psn  
    
    ########### 试验一下 Backup Master是否可用。先杀了master的HMaster,然后看slave1会不会顶上
    # 刷新http://slave1:16010 后,发现HMaster 已经成了slave1. 自动顶上来了。
    # 再启动master上的 bin/start-hbase.sh 
    # 刷新http://master:16010 后,看到Current Active Master: slave1 并且它自己成了backup 
  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/frx9527/p/hbase.html
Copyright © 2011-2022 走看看