kafka数据导入hbase

我们在使用kafka处理数据的过程中会使用kafka跟一下数据库进行交互,Hbase就是其中的一种。下面给大家介绍一下kafka中的数据是如何导入Hbase的。

 

本文的思路是通过consumers把数据消费到Hbase中。

 

首先在Hbase中创建表,创建表可以在Hbase客户端创建也可以通过API创建,这里介绍通过API创建表的方法:

 

创建CreatTableTest类

[java]  view plain  copy
  1. import java.io.IOException;   
  2. import org.apache.hadoop.conf.Configuration;   
  3. import org.apache.hadoop.hbase.HBaseConfiguration;   
  4. import org.apache.hadoop.hbase.HColumnDescriptor;   
  5. import org.apache.hadoop.hbase.HTableDescriptor;   
  6. import org.apache.hadoop.hbase.client.HBaseAdmin;  
  7. public class CreatTableTest {  
  8.     public static void main(String[] args) throws IOException  {   
  9.         //设置HBase据库的连接配置参数  
  10.         Configuration conf = HBaseConfiguration.create();   
  11.         conf.set("hbase.zookeeper.quorum",  "192.168.5.128");  //  Zookeeper的地址  
  12.         conf.set("hbase.zookeeper.property.clientPort""42182");   
  13.         String tableName = "emp";  
  14.         String[] family = { "basicinfo","deptinfo"};   
  15.         HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);   
  16.         //创建表对象  
  17.         HTableDescriptor hbaseTableDesc = new HTableDescriptor(tableName);   
  18.         for(int i = 0; i < family.length; i++) {   
  19.         //设置表字段  
  20.         hbaseTableDesc.addFamily(new HColumnDescriptor(family[i]));   
  21.   
  22.         }   
  23.         //判断表是否存在,不存在则创建,存在则打印提示信息  
  24.         if(hbaseAdmin.tableExists(tableName)) {   
  25.         System.out.println("TableExists!");   
  26.         System.exit(0);   
  27.         } else{   
  28.         hbaseAdmin.createTable(hbaseTableDesc);   
  29.         System.out.println("Create table Success!");   
  30.         }   
  31.     }   
  32. }  


创建表之后我们创建一个consumer来消费数据到Hbase


[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.util.HashMap;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5. import java.util.Properties;  
  6.   
  7. import com.teamsun.kafka.m001.KafkaProperties;  
  8.   
  9. import kafka.consumer.ConsumerConfig;  
  10. import kafka.consumer.ConsumerIterator;  
  11. import kafka.consumer.KafkaStream;  
  12. import kafka.javaapi.consumer.ConsumerConnector;  
  13.   
  14. public class KafkaConsumer3 extends Thread {  
  15.     private final ConsumerConnector consumer;  
  16.     private final String topic;  
  17.   
  18.     public KafkaConsumer3(String topic) {  
  19.         consumer = kafka.consumer.Consumer  
  20.                 .createJavaConsumerConnector(createConsumerConfig());  
  21.         this.topic = topic;  
  22.     }  
  23.   
  24.     private static ConsumerConfig createConsumerConfig() {  
  25.         Properties props = new Properties();  
  26.         props.put("zookeeper.connect", KafkaProperties.zkConnect);  
  27.         props.put("group.id", KafkaProperties.groupId1);  
  28.         props.put("zookeeper.session.timeout.ms""40000");  
  29.         props.put("zookeeper.sync.time.ms""200");  
  30.         props.put("auto.commit.interval.ms""1000");  
  31.         return new ConsumerConfig(props);  
  32.     }  
  33.   
  34.     @Override  
  35.     public void run() {  
  36.         Map<String, Integer> topicCountMap = new HashMap<String, Integer>();  
  37.         topicCountMap.put(topic, new Integer(1));  
  38.         Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer  
  39.                 .createMessageStreams(topicCountMap);  
  40.         KafkaStream<byte[], byte[]> stream = consumerMap.get(topic).get(0);  
  41.         ConsumerIterator<byte[], byte[]> it = stream.iterator();  
  42.         HBaseUtils hbase = new HBaseUtils();    
  43.         while (it.hasNext()) {  
  44.             System.out.println("3receive:" + new String(it.next().message()));  
  45.             try {  
  46.                 hbase.put(new String(it.next().message()));  
  47.             } catch (IOException e) {  
  48.                 // TODO Auto-generated catch block  
  49.                 e.printStackTrace();  
  50.             }  
  51.               
  52. //          try {  
  53. //              sleep(300);    // 每条消息延迟300ms  
  54. //          } catch (InterruptedException e) {  
  55. //              e.printStackTrace();  
  56. //          }  
  57.         }  
  58.     }  
  59. }  


再创建一个HBaseUtils来指定要连接的Hbase数据库



[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.util.Random;  
  3.   
  4. import org.apache.hadoop.conf.Configuration;  
  5. import org.apache.hadoop.hbase.HBaseConfiguration;  
  6. import org.apache.hadoop.hbase.client.HTable;  
  7. import org.apache.hadoop.hbase.client.Put;  
  8. import org.apache.hadoop.hbase.util.Bytes;  
  9. public class HBaseUtils {  
  10.     public  void put(String string) throws IOException {   
  11.     //设置HBase据库的连接配置参数  
  12.     Configuration conf = HBaseConfiguration.create();   
  13.     conf.set("hbase.zookeeper.quorum",  "192.168.5.128");  //  Zookeeper的地址  
  14.     conf.set("hbase.zookeeper.property.clientPort""42182");   
  15.     Random random = new Random();  
  16.     long a = random.nextInt(1000000000);             
  17.     String tableName = "emp";   
  18.     String rowkey = "rowkey"+a ;  
  19.     String columnFamily = "basicinfo";   
  20.     String column = "empname";   
  21.     //String value = string;   
  22.     HTable table=new HTable(conf, tableName);   
  23.     Put put=new Put(Bytes.toBytes(rowkey));   
  24.     put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(string));   
  25.     table.put(put);//放入表  
  26.     table.close();//释放资源  
  27.     }  
  28. }  

最后再加上consumer的配置文件就大功告成了。


[java]  view plain  copy
  1. public interface KafkaProperties {  
  2.   
  3.     final static String zkConnect = "hadoop0:42182,hadoop1:42182,hadoop2:42182,hadoop3:42182";  
  4.     final static String groupId1= "group1";  
  5.     final static String topic = "test3";  
  6.     final static String kafkaServerURL = "hadoop0,hadoop1";  
  7.     final static int kafkaServerPort = 9092;  
  8.     final static int kafkaProducerBufferSize = 64 * 1024;  
  9.     final static int connectionTimeOut = 20000;  
  10.     final static int reconnectInterval = 10000;  
  11.     final static String clientId = "SimpleConsumerDemoClient";  
  12. }  

然后执行consumer就可以了,注意要保证topic中有消息才可以消费。


[java]  view plain  copy
  1. public class KafkaConsumerProducerTest {  
  2.   
  3.     public static void main(String[] args) {  
  4. //       KafkaProducer1 producerThread1 = new KafkaProducer1(KafkaProperties.topic);  
  5. //       producerThread1.start();  
  6. //       KafkaProducer2 producerThread2 = new KafkaProducer2(KafkaProperties.topic);  
  7. //       producerThread2.start();  
  8. //       KafkaProducer3 producerThread3 = new KafkaProducer3(KafkaProperties.topic);  
  9. //       producerThread3.start();  
  10.           
  11. //       KafkaConsumer1 consumerThread1 = new KafkaConsumer1(KafkaProperties.topic);  
  12. //       consumerThread1.start();  
  13. //       KafkaConsumer2 consumerThread2 = new KafkaConsumer2(KafkaProperties.topic);  
  14. //       consumerThread2.start();  
  15.          KafkaConsumer3 consumerThread3 = new KafkaConsumer3(KafkaProperties.topic);  
  16.          consumerThread3.start();  
  17. //       KafkaConsumer4 consumerThread4 = new KafkaConsumer4(KafkaProperties.topic);  
  18. //       consumerThread4.start();  
  19.     }  
  20. }  


HBase客户端执行

            hbase(main):063:0> scan  'emp'  

就可以查看到数据了。

以上就是kafka数据进入Hbase的一个例子,当然上诉只是保证数据走通了,大家在具体项目中什么需求,还需要自行修改和完善。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值