日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)

發布時間:2025/3/8 编程问答 19 如意码农
生活随笔 收集整理的這篇文章主要介紹了 大数据之路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+"\t"+name+"\t"+age+"\t"+gander1+"\t"+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();
} } }

總結

以上是生活随笔為你收集整理的大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。