最新大数据开发项目-电信项目2-传输数据,八年大数据开发开发心路历程

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

org.apache.maven.plugins

maven-surefire-plugin

2.12.4

true

3.2添加maven配置

3.2.1

hadoop/etc/hadoop/core-site.xml

hadoop/etc/hadoop/hdfs-site.xml

habse/conf/habase-site.xml

habse/conf/log4j.properties

3.2.2

在windows下,修改主机映射hosts

C:\Windows\System32\drivers\etc\hosts

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2.3 新建habse_consumer.properties

内容如下

设置kafka的# 设置kafka的brokerlist

bootstrap.servers=bigdata11:9092,bigdata12:9092,bigdata13:9092

设置消费者所属的消费组

group.id=hbase_consumer_group

设置是否自动确认offset

enable.auto.commit=true

自动确认offset的时间间隔

auto.commit.interval.ms=30000

设置key,value的反序列化类的全名

key.deserializer=org.apache.kafka.common.serialization.StringDeserializer

value.deserializer=org.apache.kafka.common.serialization.StringDeserializer

以下为自定义属性设置

设置本次消费的主题

kafka.topics=calllog

设置HBase的一些变量

hbase.calllog.regions=6

hbase.calllog.namespace=ns_ct

hbase.calllog.tablename=ns_ct:calllog

4 消费数据工具类

4.1 PropertiesUtil代码来调用配置的参数

package utils;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

//调用文件里的参数

public class PropertiesUtil {

public static Properties properties = null;

static {

//获取配置文件,方便维护

InputStream is = ClassLoader.getSystemResourceAsStream(“hbase_consumer.properties”);

properties = new Properties();

try {

properties.load(is);

} catch (IOException e) {

e.printStackTrace();

}

}

/*

获取参数值使用

@param:key 名字

@return: 参数值

*/

public static String getProperty(String key){

return properties.getProperty(key);

}

}

4.2 ConnectionInstance实例化一个连接对象

package utils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

public class ConnectionInstance {

private static Connection conn;

public static synchronized Connection getConnection(Configuration configuration){

try {

if (conn == null || conn.isClosed()){

conn = ConnectionFactory.createConnection(configuration);

}

} catch (IOException e) {

e.printStackTrace();

}

return conn;

}

}

5.kafkaAPI消费数据

5.1本地kafkaAPI接收集群上生产的数据

package kafka;

import org.apache.kafka.clients.consumer.ConsumerRecord;

import org.apache.kafka.clients.consumer.ConsumerRecords;

import org.apache.kafka.clients.consumer.KafkaConsumer;

import utils.PropertiesUtil;

import java.util.Arrays;

public class HBaseConsumer {

public static void main(String[] args) {

KafkaConsumer<String, String> kafkaConsumer = new KafkaConsumer<>(PropertiesUtil.properties);

kafkaConsumer.subscribe(Arrays.asList(PropertiesUtil.getProperty(“kafka.topics”)));

while(true) {

ConsumerRecords<String, String> records = kafkaConsumer.poll(100);

for (ConsumerRecord<String, String> cr : records) {

String orivalue = cr.value();

System.out.println(orivalue);

}

}

}

}

6.将kafka的数据保存到hbase

6.1HBaseUtil的命名空间
6.2判断表和创建表
6.3写分区键

package utils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.NamespaceDescriptor;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Admin;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

import java.text.DecimalFormat;

import java.util.Iterator;

import java.util.TreeSet;

/**

  • 1.namespace ====》 命名空间

  • 2.createTable ====》 表

  • 3.isTable ====》 判断表是否存在

  • 4.Regin、RowKey、分区键

*/

public class HbaseUtil {

/**

*初始化命名空间

  • @param conf 配置对象

  • @param namespace 命名空间的名字

  • @throws Exception

*/

public static void initNameSpace(Configuration conf, String namespace) throws Exception {

Connection connection = ConnectionFactory.createConnection(conf);

Admin admin = connection.getAdmin();

//命名空间描述器

NamespaceDescriptor nd = NamespaceDescriptor

.create(namespace)

.addConfiguration(“AUTHOR”, “Yuwen”)

.build();

//通过admin对象来创建命名空间

admin.createNamespace(nd);

//关闭两个对象

close(admin,connection);

}

//关闭admin对象和connection对象

private static void close(Admin admin, Connection connection) throws IOException {

if(admin != null){

admin.close();

}

if(connection != null){

connection.close();

}

}

/**

  • 创建Hbase的表

  • @param conf

  • @param tableName

  • @param regions

  • @param columnFamily

*/

public static void createTable(Configuration conf, String tableName, int regions, String… columnFamily ) throws IOException {

Connection connection = ConnectionFactory.createConnection(conf);

Admin admin = connection.getAdmin();

//判断表是否存在

if (isExistTable(conf,tableName)){

return;

}

//表描述器 HTableDescriptor

HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

for(String cf : columnFamily){

//列描述器

htd.addFamily(new HColumnDescriptor(cf));

}

//创建表

admin.createTable(htd,genSplitKeys(regions));

//关闭对象

close(admin,connection);

}

/**

  • 分区键

  • @param regions region个数

  • @return splitkyes

*/

private static byte[][] genSplitKeys(int regions) {

//存放分区键的数组

String[] keys = new String[regions];

//格式化分区键的形式 00|01|02|

DecimalFormat df = new DecimalFormat(“00”);

for (int i =0; i<regions;i++){

keys[i] = df.format(i) + “|”;

}

byte[][] splitKeys = new byte[regions][];

//排序 保证你这个分区键是有序的

TreeSet<byte[]> treeSet = new TreeSet<>(Bytes.BYTES_COMPARATOR);

for (int i =0; i< regions;i++){

treeSet.add(Bytes.toBytes(keys[i]));

}

//输出

Iterator<byte[]> iterator = treeSet.iterator();

int index = 0;

while (iterator.hasNext()){

byte[] next = iterator.next();

splitKeys[index++] = next;

}

return splitKeys;

}

/**

  • 判断表是否存在

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

(keys[i]));

}

//输出

Iterator<byte[]> iterator = treeSet.iterator();

int index = 0;

while (iterator.hasNext()){

byte[] next = iterator.next();

splitKeys[index++] = next;

}

return splitKeys;

}

/**

  • 判断表是否存在

[外链图片转存中…(img-5ur6UKtH-1715820092156)]
[外链图片转存中…(img-wNLlB4RY-1715820092156)]
[外链图片转存中…(img-vUpI7a0R-1715820092156)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值