搭建Hbase、Hbase表操作

实验一、搭建Hbase

一、部署 hdfs集群

(一键搭建)

二、部署ZooKeeper

1.修改ZooKeeper配置文件
a.进入解压目录下,把conf目录下的zoo_sample.cfg 复制成zoo.cfg文件。

cd /usr/cstor/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

b.打开zoo.cfg并修改和添加配置项目,如下:(修改位置:LINE12,最后)

LINE12:
dataDir=/usr/cstor/zookeeper/data
dataLogDir=/usr/cstor/zookeeper/log

最后:

        

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server.4=slave3:2888:3888

c.新建两个目录。

mkdir /usr/cstor/zookeeper/data
mkdir /usr/cstor/zookeeper/log

d.把配置好的 zookeeper 拷贝到slave1、slave2

scp -r /usr/cstor/zookeeper root@slave1:/usr/cstor
scp -r /usr/cstor/zookeeper root@slave2:/usr/cstor
scp -r /usr/cstor/zookeeper root@slave3:/usr/cstor

e.给 zookeeper 集群节点指定 id
分别在三个节点上的/usr/local/zookeeper/data目录下创建一个文件:myid。

vi /usr/cstor/zookeeper/data/myid

分别在myid上按照配置文件的server.中id的数值,在不同机器上的该文 件中填写相应过的值,如下:

        

master 的myid内容为1
slave1 的myid内容为2
slave2 的myid内容为3
slave3 的myid内容为4

2.启动ZooKeeper
分别在三个节点进入bin目录,启动ZooKeeper服务进程:

cd /usr/cstor/zookeeper/bin
./zkServer.sh start

在各机器上依次执行脚本,查看ZooKeeper状态信息,两个节点是follower状态,一个节点是leader状态:

./zkServer.sh status

三、搭建并启动Hbase

a.hbase-env.sh 配置
配置conf目录下的/usr/cstor/hbase/conf/hbase-env.sh文件,设置如下:
1)java环境变量
查看 Linux 的 java环境变量:

echo $JAVA_HOME  
/usr/local/jdk1.8.0_161
LINE27:
#Java安装路径 export JAVA_HOME=/usr/local/jdk1.8.0_161 (需根据实际情况指定)

2)不使用HBase自带的Zookeeper 配置 (LINE128)

export HBASE_MANAGES_ZK=false

b.hbase-site.xml 配置

vi hbase-site.xml  添加如下内容

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:8020/hbase</value>
        </property>
         <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master,slave1,slave2,slave3</value>
        </property>
        <property>
                <name>hbase.tmp.dir</name>
                <value>/usr/cstor/hbase/data/tmp</value>
        </property>
</configuration>

c.配置conf目录下的regionservers文件,设置如下:

            

vi regionservers
slave1
slave2
slave3

d.配置完成后,将hbase目录传输到集群的其它节点。

            

scp -r /usr/cstor/hbase/conf root@slave1:/usr/cstor/hbase
scp -r /usr/cstor/hbase/conf root@slave2:/usr/cstor/hbase
scp -r /usr/cstor/hbase/conf root@slave3:/usr/cstor/hbase

e.在主节点master进入hbase解压目录的bin目录,启动HBase服务进程(已启动Zookeeper):

            

cd /usr/cstor/hbase/bin
./start-hbase.sh

        

f.hbase 集群查看

  1. 进入 hbase shell 输入status
  2. web页面查看 master节点ip ip:16010

四、hbase 的简单操作

a.通过以下命令进入HBase shell界面(在 master 节点操作):

./hbase shell

b.在shell里创建表:

create 'testhbase' , 'f1'

c.查询所有表名:

list

d.查看表结构信息:

describe 'testhbase' 

e.在shell里插入数据

put 'testhbase', '001', 'f1:name', 'zhangsan'
put 'testhbase', '001', 'f1:age', 25
put 'testhbase', '002', 'f1:name', 'lisi'
put 'testhbase', '002', 'f1:age', 22

f.在shell里查询:
查看所有的数据

scan 'testhbase'

查看指定rowkey的数据

get 'testhbase','001'

获取某个列族的值

get 'testhbase','001','f1'

获取某个列族的某个列

get 'testhbase','001','f1:name'    

g.删除
删除列族的列 记录

delete 'testhbase','002','f1:age'

删除整行

deleteall 'testhbase','002'

删除表
先disable再drop:

disable 'testhbase'
drop 'testhbase'

    

实验二、Hbase表操作

  1. 本地机器安装 jdk1.8,并配置好环境变量
  2. 打开 eclipse,新建立 hbaseDemo 工程 (普通java工程)
  3. 导入第三方依赖包(hbase-lib)
    右击hbaseDemo工程 -> properties -> java Bulid Path-> Add External JARS
  4. 复制源码 注意 HBase 集群的 zk 连接的节点只有slave1 slave2即可

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.FilterList;
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
    import org.apache.hadoop.hbase.util.Bytes;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    public class Main {
    public static void main(String[] args) {

        Configuration configuration = HBaseConfiguration.create();
        Connection connection;
        configuration.set("hbase.zookeeper.quorum", "slave1:2181,slave2:2181");
        configuration.set("zookeeper.znode.parent", "/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            //获得HBaseAdmin对象
            Admin admin = connection.getAdmin();
            //表名称
            String tn = "mytable";
            TableName tableName = TableName.valueOf(tn);
            //表不存在时创建表
            if (!admin.tableExists(tableName)) {
                //创建表描述对象
                HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
                //列簇1
                HColumnDescriptor columnDescriptor1 = new HColumnDescriptor("c1".getBytes());
                tableDescriptor.addFamily(columnDescriptor1);
                //列簇2
                HColumnDescriptor columnDescriptor2 = new HColumnDescriptor("c2".getBytes());
                tableDescriptor.addFamily(columnDescriptor2);
                //用HBaseAdmin对象创建表
                admin.createTable(tableDescriptor);
            }
            //关闭HBaseAdmin对象
            admin.close();
            //向表put数据,代码实现:
            //获得table接口
            Table table = connection.getTable(TableName.valueOf("mytable"));
            //添加的数据对象集合
            List<Put> putList = new ArrayList<Put>();
            //添加10行数据
            for (int i = 0; i < 10; i++) {
                //put对象(rowkey)
                String rowkey = "mykey" + i;
                Put put = new Put(rowkey.getBytes());
                //列簇 , 列名, 值
                put.addColumn("c1".getBytes(), "c1tofamily1".getBytes(), ("aaa" + i).getBytes());
                put.addColumn("c1".getBytes(), "c2tofamily1".getBytes(), ("bbb" + i).getBytes());
                put.addColumn("c2".getBytes(), "c1tofamily2".getBytes(), ("ccc" + i).getBytes());
                putList.add(put);
            }
            table.put(putList);
            table.close();
            //查询数据,代码实现:
            //获得table接口
            //Scan 对象
            Scan scan = new Scan();
            //限定rowkey查询范围
            scan.setStartRow("mykey0".getBytes());
            scan.setStopRow("mykey9".getBytes());
            //只查询c1:c1tofamily1列
            scan.addColumn("c1".getBytes(), "c1tofamily1".getBytes());
            //过滤器集合
            FilterList filterList = new FilterList();
            //查询符合条件c1:c1tofamily1==aaa7的记录
            Filter filter1 = new SingleColumnValueFilter("c1".getBytes(), "c1tofamily1".getBytes(), CompareFilter.CompareOp.EQUAL, "aaa7".getBytes());
            filterList.addFilter(filter1);
            scan.setFilter(filterList);
            ResultScanner results = table.getScanner(scan);
            for (Result result : results) {
                System.out.println("获得到rowkey:" + new String(result.getRow()));
                for (Cell cell : result.rawCells()) {                    
                    System.out.println("列簇:" +
                        Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()) + "列:" +
                        Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) + "值:" +
                        Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
                }
            }
            results.close();
            table.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    }

  5. 导出 jar
    右击hbaseDemo工程 -> Export -> java -> JAR file(第一个) 给文件命名 然后finish。
  6. 执行

    java -jar -Djava.ext.dirs=/usr/cstor/hbase/lib/ hbaseDemo.jar

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

添加新评论

选择表情

  近期动态

近段时间可能都不怎么更新,回老家了。老家那个网。。。5G都快出来了。咋们老家还停留在3G。。唉
--- 发布日期 2019年7月30日

  关于博主

多数人都拥有自己不了解的能力和机会,都有可能做到未曾梦想的事情。

  近期评论

  •  YOLEN: 友链:Leelon 更改为:优乐博客 链接:leelon.cn 更改为:https://yol...
  •  马丁:
  •  浪客小苏: 以添加,请尽快添加本站,谢谢。
  •  Mkre: 分布式文件系统HDFS
  •  limm: https://www.cwtseo.com/
  •  hb: 谢谢 亲。遇见你很幸运,有你这个一直不老的朋友更是我的福气。 也祝我们的友谊天长地久。 很喜欢...

青春就是用来追忆的,当你怀揣着它时,它一文不值,只有将它耗尽后,再回过头看,一切才有了意义,爱过我们的人和伤害过我们的人,都是我们青春存在的意义。

既然活着来到这个世界,就没有打算活着回去。所以,在这有限的时间里,我们应该珍惜生命,珍惜机会,更要珍惜那得之不易的时间。因那滴答做响的时间脚步,一旦走过,再不回头。

青春是一个充满魁力,充满诱惑的时代。好动是青春,好奇是青春,好玩是青春。玩世不恭更是青春,我们的一切切都是青春。

要先打败任何事情得先学会打败自己。

我会把每一次改变当做成长,哪怕是痛也值得。