zoukankan      html  css  js  c++  java
  • 大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)

    在这里是简单模拟将索引存到redis中,再通过先查询索引再将Hbase中的数据查询出来。

    需要考虑的问题:

      1、建立redis的连接,建立Hbase的连接

      2、如何创建索引,即创建索引的key和value的设计

      3、如何通过将查到的索引,去查询到对应Hbase的数据

    代码的难度并不大,主要是这个思路。

    package com.wyh.redis;
    
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Set;
    
    
    /**
     * 通过存在redis的索引查询Hbase的数据
     */
    public class HbaseOnRediseIndex {
        private HConnection conn;
        private HBaseAdmin admin;
        private Jedis jedis;
    
    
        /**
         * 初始化建立连接
         * 连接Hbase,连接到redis
         *
         */
        @Before
        public void Cli(){
            try {
                //建立与Hbase的连接
                Configuration conf = new Configuration();
                conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
                conn = HConnectionManager.createConnection(conf);
                admin = new HBaseAdmin(conf);
    
                //建立与redis的连接
                jedis = new Jedis("master", 6379);
                System.out.println("与Hbase建立连接成功。。"+conn);
                System.out.println("与redis建立连接成功。。"+jedis);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
        /**
         * 创建表将学生信息导入到Hbase中
         *
         */
        @Test
        public void createTable(){
            try {
                HTableDescriptor student2 = new HTableDescriptor("student2");
                HColumnDescriptor info = new HColumnDescriptor("info");
    
                student2.addFamily(info);
    
                String name = Bytes.toString(student2.getName());
    
                admin.createTable(student2);
    
                System.out.println(name+"表 创建成功。。。");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 往创建的Hbase表中put数据
         */
        @Test
        public void putData(){
            try {
                ArrayList<Put> puts = new ArrayList<>();
    
                HTableInterface student2 = conn.getTable("student2");
                BufferedReader br = new BufferedReader(new FileReader("D:\shujia\shujia006\hadoop\src\data\students.txt"));
                String line;
                while ((line=br.readLine())!=null){
                    String[] split = line.split(",");
                    String id = split[0];
                    String name = split[1];
                    String age = split[2];
                    String gender = split[3];
                    String clazz = split[4];
    
    
                    Put put = new Put(id.getBytes());
                    put.add("info".getBytes(),"name".getBytes(),name.getBytes());
                    put.add("info".getBytes(),"age".getBytes(),age.getBytes());
                    put.add("info".getBytes(),"gender".getBytes(),gender.getBytes());
                    put.add("info".getBytes(),"clazz".getBytes(),clazz.getBytes());
    
                    puts.add(put);
                }
    
    
                student2.put(puts);
                System.out.println("数据插入完毕。。。");
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
        /**
         * 读取数据,将学号插入到redis当作索引
         * set集合的方式
         *
         */
        @Test
        public void setData(){
            try {
                String tableName = "student_gender";
                BufferedReader br = new BufferedReader(new FileReader("D:\shujia\shujia006\hadoop\src\data\students.txt"));
                String line;
                while ((line=br.readLine())!=null){
                    String[] split = line.split(",");
                    String id = split[0];
    
                    String gender = split[3];
                    String key = tableName +":" + gender;
                    jedis.sadd(key,id);
                }
    
                System.out.println("redis索引构建完毕。。。");
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 通过redis的索引查询Hbase的数据
         *      先查询索引表,再查询Hbase
         *
         */
        @Test
        public void indexData(){
    
            String gender = "男";
    
            Set<String> set = jedis.smembers("student_gender:" + gender);
    
            System.out.println("所有性别为 "+ gender+" 的学生如下:");
            for (String id : set) {
    
                try {
                    HTableInterface student2 = conn.getTable("student2");
                    Get get = new Get(id.getBytes());
    
                    Result result = student2.get(get);
                    if(result!=null){
                        String id1 = Bytes.toString(result.getRow());
                        String name = Bytes.toString(result.getValue("info".getBytes(), "name".getBytes()));
                        String age = Bytes.toString(result.getValue("info".getBytes(), "age".getBytes()));
                        String gander1 = Bytes.toString(result.getValue("info".getBytes(), "gender".getBytes()));
                        String clazz = Bytes.toString(result.getValue("info".getBytes(), "clazz".getBytes()));
    
                        System.out.println(id1+"	"+name+"	"+age+"	"+gander1+"	"+clazz);
                    }
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
    
            }
    
    
        }
    
    
    
    
        /**
         * 关闭连接
         */
        @After
        public void close(){
            if(admin!=null){
                try {
                    admin.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            if(jedis!=null){
                jedis.close();
            }
    
    
        }
    
    
    
    }
  • 相关阅读:
    USB Device Finder
    Delphi Interfaces
    Why we need interfaces in Delphi
    PostQuitMessage, PostThreadMessage( WM_QUIT )
    state与status的区别
    SQLSERVER监控复制并使用数据库邮件功能发告警邮件
    干货分享:SQLSERVER使用裸设备
    SQLSERVER truncate table之后是否会重置表的自增值
    配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations
    SQLSERVER 数据库性能的的基本
  • 原文地址:https://www.cnblogs.com/wyh-study/p/12182304.html
Copyright © 2011-2022 走看看