• Hbase搭建-基本操作


    mysql:关系型数据库    RDBMS
    hive: 数据仓库        进行数据分析,没有实时性
    hbase:基于文档的数据库 nosql  not only sql
    
    
    hive和hbase的区别:
        hbase:数据库,不支持分析
        hive:数据仓库,用作数据分析
    
    
    hbase:基于hdfs的非关系型数据库,基于google的bigtable技术实现的。
           实时性,低延迟,分布式、可伸缩、大数据存储。
    
           数量级:十亿行 x 百万列 x 上千个版本
    
           读未提交:
            第一个会话修改的数据没有进行提交
            另一个会话进行读取        =====> 读取的是修改后的数据
            第一个会话进行回滚        =====> 回滚之后,没有修改
    
    
        总结:hbase是基于hadoop的一个提供随机定位和实时读写的大表数据库
    
    
    配置hbase本地模式:
    =================================
        1、tar开
            tar -xzvf hbase-1.2.6.tar.gz -C /soft
    
        2、创建符号链接
            ln -s hbase-1.2.6 hbase
    
        3、配置环境变量
            sudo nano /etc/profile,添加
            # hbase环境变量
            export HBASE_HOME=/soft/hbase
            export PATH=$PATH:$HBASE_HOME/bin
    
        3.5、使环境变量生效:
            source /etc/profile
    
        4、hbase-env.sh
            export JAVA_HOME=/soft/jdk
    
    
        5、hbase-site.xml
            <configuration>
                <property>
                    <name>hbase.rootdir</name>
                    <value>file:///home/centos/hbase</value>
                </property>
                <property>
                    <name>hbase.zookeeper.property.dataDir</name>
                    <value>/home/centos/hbase/zk</value>
                </property>
            </configuration>
    
    
        6、启动hbase:
            start-hbase.sh
    
        7、打开hbase的webUI:
            http://s101:16010
    
        8、停止hbase进程:
            stop-hbase.sh
    
    
    配置hbase的完全分布式:
    ========================================================
    1、修改hbase-site.xml
    <configuration>
        <!-- 开启hbase的集群模式 -->
        <property>
             <name>hbase.cluster.distributed</name>
             <value>true</value>
        </property>
        <!-- 将hbase的工作目录放在hdfs中 -->
        <property>
             <name>hbase.rootdir</name>
             <value>hdfs://mycluster/user/hbase</value>
        </property>
        <!-- zk的工作目录,指定搭建zk指定的工作目录 -->
        <property>
             <name>hbase.zookeeper.property.dataDir</name>
             <value>/home/centos/zk</value>
        </property>
        <!-- 指定zk客户端的地址 -->
        <property>
             <name>hbase.zookeeper.quorum</name>
             <value>s102:2181,s103:2181,s104:2181</value>
        </property>
    </configuration>
    
    
    2、编辑hbase-env.sh        //配置hbase不使用内置zk
    
        export HBASE_MANAGES_ZK=false
    
    3、编辑conf/regionservers文件,修改为
        s102
        s103
        s104
    
    4、将hadoop配置文件夹下的core-site.xml和hdfs-site.xml
        拷贝到hbase/conf文件夹
    
    5、分发hbase符号链接以及hbase安装目录
        xsync.sh /soft/hbase
        xsync.sh /soft/hbase-1.2.6
    
    
    hbase含有两个进程:
        HMaster        //master节点
        HRegionServer    //slave节点
    
    
    
    启动hadoop生态圈各个组件的启动步骤:
    ======================================================
        1、启动zk
            第一种方式:zkServer.sh start
            第二种方式:xzk.sh start
    
        2、启动hadoop:
            1)先启动zk
                xzk.sh start
            2)启动hadoop
                start-all.sh = start-dfs.sh + start-yarn.sh
    
        3、启动hive:
            1)先启动zk
                xzk.sh start
            2)启动hadoop
                start-all.sh = start-dfs.sh + start-yarn.sh
    
            3)启动hive或hiveserver2
                hive    ||    hiveserver2
    
        4、启动hbase:
            1)先启动zk
                xzk.sh start
            2)启动hdfs
                start-dfs.sh
            3)启动hbase
                start-hbase.sh
    
    
    hbase的HA模式:
    ========================================
        备份主节点(backup-masters)在hbase/conf文件夹下的backup-masters文件中
    
        nano /soft/hbase/conf/backup-masters,添加
            s105
    
    
    
    
    hbase错误处理:
    ========================================
        问题1:master节点挂掉,而regionserver节点还在启动
        解决1-1:hbase-daemons.sh stop regionserver
        解决1-2:编写脚本awk,使用kill -9 命令直接杀掉进程
             kill -9 `jps | grep HRegionServer | awk '{print $1}'`
              > /dev/null 2>&1        //输出重定向为空(输出,如错误信息,不打印)
            
             0、切换到root权限
              
             1、脚本编写/usr/local/bin/skill.sh
                #!/bin/bash
                kill -9 `jps | grep $1 | awk '{print $1}'`  > /dev/null 2>&1
             
             注意:脚本需要添加执行权限
    
             2、将skill.sh脚本分发至其他主机
                xsync.sh /usr/local/bin/skill.sh
    
             3、在s101中编写/usr/local/bin/xkill.sh
                #!/bin/bash
                if [ $# -gt 1 ] ; then echo use only one param ; exit ; fi
                if [ $# -lt 1 ] ; then echo use only one param ; exit ; fi
                for (( i=101 ; i<=105 ; i++ )); do
                    tput setaf 2
                    echo ================ s$i $1 ================
                    tput setaf 9
                    ssh s$i skill.sh $1
                done
    
             注意:脚本需要添加执行权限
    
             4、使用方法:
                xkill.sh + PName
                eg:
                    xkill.sh HRegionServer
    
        awk:
            awk '{print $1}'    //以'	'对每行进行切割,输出第一个数据
            awk -F ',' '{print $1}'    //将分隔符变为,
    
    
            
            
            
    
        杀死进程:kill PID
              eg: kill 10529
    
              kill -9 PID    //绝杀
    
    
    
        查看进程方式:
              1、netstat -anop | grep xxx    //网络进程
              2、jps            //java进程
              3、ps -Af | grep master    //linux进程
    
    
    
    
    start-hbase.sh = hbase-daemon.sh start master
                 + hbase-daemons.sh start regionserver
             + hbase-daemons.sh start master-backup
    
    hbase数据结构:
    ====================
            hbase        RDBMS
        1、namespace        database
        2、table        table
        3、row            row
        4、col            col
        5、column family    x
    
            id    name    age
        row1    1    tom    10
    
        hbase中每行自带主键,称之为row id
    
    
    
    hbase 客户端操作:
    ====================================
        hbase shell        //进入hbase客户端
    
            hbase                                                RDBMS
    1、列出数据库    list_namespace                                show databases;
    2、查看帮助    help 'command'                                    help show;
    3、创建数据库    create_namespace 'ns1'                        create database d1;
    4、删除数据库   drop_namespace 'ns1'                        drop database d1;
    5、创建表    create 'ns1:t1', 'f1', 'f2'                        create table n1(id int, name varchar(20))
    6、列出表    list_namespace_tables 'ns1'                        show tables;
    7、删除表    drop 'ns1:t1'                                    drop table n1;
    8、禁用表    disable 'ns1:t1'                                x
    9、表描述    describe 'ns1:t1'                                desc n1;
    10、添加数据    put 'ns1:t1','row1','f1:id','1'                insert into n1 values(1,'tom');
    11、查看数据    scan 'ns1:t1'                                select * from n1;    
    12、清空表    truncate 'ns1:t1'                                truncate n1;
    
    
    HBase的API编程:
    ========================
    注意:编程之前将hbase-site.xmlcore-site.xmlhdfs-site.xml放置在项目中的resource目录下
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.6</version>
        </dependency>
    
    
    hbase中的数据格式:byte[]
    
        /**
         * 创建数据库
         */
        @Test
        public void createDB() throws Exception {
            //初始化配置信息
            //Configuration conf = new Configuration();
            Configuration conf = HBaseConfiguration.create();
            //入口点,创建连接
            Connection conn = ConnectionFactory.createConnection(conf);
            //得到集群管理员权限,可以对数据库和表进行增删改查
            Admin admin = conn.getAdmin();
            //通过构建器模式,创建NamespaceDescriptor实例,并设置库名ns2
            NamespaceDescriptor nds = NamespaceDescriptor.create("ns2").build();  //NamespaceDecriptor nds = NamespaceDescriptor.create("ns2").build();
            //通过管理员创建数据库
            admin.createNamespace(nds);//admin.createNamespace(nds);
            admin.close();
            System.out.println("ok");
    
        }
    
        /**
         * 创建表
         */
        @Test
        public void createTable() throws Exception {
            //初始化配置信息
            //Configuration conf = new Configuration();
            Configuration conf = HBaseConfiguration.create();
            //入口点,创建连接
            Connection conn = ConnectionFactory.createConnection(conf);//Connection conn = ConnectionFactory.createConnection(conf);
            //得到集群管理员权限,可以对数据库和表进行增删改查
            Admin admin = conn.getAdmin(); //Admin admin = conn.getAdmin();
    
            //初始化tablename对象
            TableName tn = TableName.valueOf("ns2:t2");   //TableName tn = TableName.valueOf("ns2:t2");
            //得到表描述符
            HTableDescriptor table = new HTableDescriptor(tn);  HtableDescriptor table = new HTableDesriptor(tn);
    
            //得到列族的描述符
            HColumnDescriptor cf = new HColumnDescriptor("f1");  HColumnDesciptor cf = new HColumnDescriptor("f1");
            HColumnDescriptor cf2 = new HColumnDescriptor("f2");
    
            //在表中添加列族
            table.addFamily(cf);
            table.addFamily(cf2);
    
            //开始创建
            admin.createTable(table);  //admin.createTable(table);
    
            admin.close();
            System.out.println("ok");
    
        }
    
        /**
         * 添加数据到指定表
         */
        @Test
        public void putData() throws Exception {
            //初始化配置信息
            //Configuration conf = new Configuration();
            Configuration conf = HBaseConfiguration.create();
            //入口点,创建连接
            Connection conn = ConnectionFactory.createConnection(conf);  //Connection conn = ConnectionFactory.createConnection(conf);
    
            //通过getTable方法获取表的实例
            Table table = conn.getTable(TableName.valueOf("ns2:t2"));  //Table table = conn.getTable(TableName.valueOf("ns2:t2"));
    
            //创建put实例
            //hbase中任何值,都是以字节数组形式存在的
            Put put = new Put(Bytes.toBytes("row1"));   //Put = put = new Put(Bytes.toBytes("row1"));
            //添加列数据
            put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("tom"));
            
            //put.addColum(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("tom"));
            
    
            //创建数据
            table.put(put);   //table.put(put)
            System.out.println("ok");
    
            conn.close();//conn.coles();
    
        }
  • 相关阅读:
    CTF-域渗透--SSH服务
    CTF-域渗透--SMB信息泄露
    CTF-域渗透--FTP服务后门利用
    Codeforces Round #628 (Div. 2)
    模板
    模板
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    模板
    Codeforces Round #627 (Div. 3)
  • 原文地址:https://www.cnblogs.com/zyde/p/9015528.html
Copyright © 2020-2023  润新知