实时数据项目Kafka之本地模拟
1.大局准备
在集群机器上创建两个文件夹
一个RealTimeDataReceiver4Shell文件夹,一个RealTimeDW4Shell文件夹
RealTimeDW4Shell负责:1.下载需要的数据文件, 2.把数据文件行读取进行编码传输到url接收器
RealTimeDataReceiver4Shell负责:1.启动java类包,url接收器接收编码的数据然后转发给kafka,2.kafka消费者获取数据进行解码
2.数据获取
在RealTimeDW4Shell文件夹中创建download_4_weibo_product.sh
负责获取需要传输的数据,保存到hdfs目录
#! /bin/bash
source ./config/set_env.sh
##数据库名
db_name=dongshaofei
#需要获取数据的表
input_table=weibo_product2
#下载到hdfs的目录
output_data_dir_hdfs=./weibo_sorted/
##把表中created_at时间字段能正则匹配到时间格式的数据作为文件放到hdfs目录
##注意下面terminated by '\001' 分隔符用\001, 用\t等分隔符,会在之后的kafka传输过程中出现错误,导致无法取出需要的字段
$HIVE -e "
use $db_name;
insert overwrite directory '$output_data_dir_hdfs'
row format delimited fields terminated by '\001'
select * from $input_table where day_seq=20120102 and created_at regexp '\\\d{4}-\\\d{2}-\\\d{2} \\\d{2}:\\\d{2}:\\\d{2}' order by created_at asc;
"
####需要注意的是 regexp中匹配的正则不能是两个斜杠 ,应该是\\\d
3.数据传输到Kafka
我们需要一个Base64的编码解码的java.jar包
#编码解码工具类
public class TLBase64Util {
public static String encode(String plainText)
throws UnsupportedEncodingException {
byte[] b = plainText.getBytes("utf-8");
Base64 base64 = new Base64();
b = base64.encode(b);
String s = new String(b);
return s;
}
public static String decode(String encodeStr)
throws UnsupportedEncodingException {
byte[] b = encodeStr.getBytes("utf-8");
Base64 base64 = new Base64();
b = base64.decode