# bigdata-test-demo
**Repository Path**: initialdream1659/bigdata-test-demo
## Basic Information
- **Project Name**: bigdata-test-demo
- **Description**: 这是一个大数据项目的本地测试代码汇总。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-14
- **Last Updated**: 2024-10-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# [blog记录地址](https://initialdream16.github.io/)
使用mkdocs(静态网页生成器),对平时的学习进行记录。使用[模板](https://klovien.github.io/),[blog更新地址](https://github.com/initialdream16/initialdream16.github.io)
# bigdata-test-demo
上传代码时,首先 git pull 拉取一下,否则可能会出现 merge branch 的错误。
```
git pull
```
该项目是针对大数据平台资源以及户式水机相关需求的一些本地测试(不完整),进行记录,以便后续有选择的使用。
**实时分析需求**:如实时大数据屏幕显示:进出水温度的实时变化曲线等
**离线分析需求**:如周期性【每年/月/天/小时等】报表:统计每年上线机组数等
在以上测试的基础上,咨询大数据中心同事进行指导并完善。
## 实时计算通用框架
实时计算通用框架,见下图:

### 数据层
交易数据(如银行交易):通常存储在mysql、oracle等数据库中;因此,增量数据使用canal/ogg -->kafka
行为数据(如电商平台用户购物行为):通常以日志形式存储,如json格式,或文件夹中;因此,使用flume收集数据 -->kafka
### 接入层
将收集的数据接入kafka中。kafka 优点:提供了消息队列、当从flume等中收集的数据较多时,起到削峰、解耦、异步效果(我理解的)等
### 计算层
实时计算引擎:Flink/sparkstreaming/Structured Streaming/storm等,kafka Streams比较简单,用于测试
### 存储层
可将计算结果存储在kudu/es/hbase/kafka等
### 服务层
满足一些实时需求,并作出决策等。如实时大屏展示:

## kafka-test
测试kafka的生产者和消费者连接使用,java代码(同样可以使用scala连接),参考工单系统
这里也测试了生产者(生产数据),实际项目中,数据从flume/canal等中进入kafka,用flink等消费数据并计算。(???目前大数据平台资源未见数据收集组件,这个需要找大数据中心进行沟通)
## MySQL-kafka
对原始二进制数据进行解析,这里原始数据保存在MySQL中,参考祁工gitlab上的服务端的代码
因为gitlab 上使用的是*springboot*开发,实际我们在大数据系统架构中使用 flink等进行解析(???或者使用flume的拦截器),后续还需要进行代码改进,这里只是对解析过程进行简单实验。
## [canal](https://developer.aliyun.com/article/770496)
canal 是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,实现实时数据收集至[kafka中](https://developer.aliyun.com/article/770659?spm=a2c6h.13262185.0.0.1ad23b3fHEyOOT),便于后续使用实时计算引擎(flink/sparkstreaming/Structured Streaming/storm)进行实时计算。
注意到户式水机原始数据(二进制数据)存储在MySQL数据库中,若实现实时展示的需求,可使用canal 收集增量数据。
**二进制数据存储位置**:外网测试数据库mysql(root/root):192.168.1.123:23306 wolf.status_water_xxx,内网实际数据:10.2.46.226。
**注**:实现数据流至实时计算引擎可有多种方案:服务端人员不参与,则使用canal收集MySQL增量日志,并解析;服务端人员参与,直接给我们传解析好的日志文件。(???这个数据流方案如何设计需要权衡)
## flink-parse-java
**解析速度对比**
*测试速度所用资源:8core 16G*
| 模块类 | 机组数 | 数据量 | 数据大小 | 解析速度 |
| ---- | ---- | ---- | ---- | ---- |
| gprs | 平均5000 | 千万条 | 5G 左右 | 近1个小时 |
| 4G | 平均390 | 百万条 | 160MB左右 | 3~4min |
| 4G | 平均390 | 万条 | 1.78MB左右 | 22s |
**对二进制数据进行解析并将解析数据sink**:
首先需要借助 mybatis(基于java的持久化框架) 从mysql表protocol_data_item_485 中获取指定的数据解析协议,其次 flink 从kafka中获得数据流,并根据协议进行解析,最后解析好的数据 sink 至 kafka(用于后续的业务分析:如故障诊断等,即一个实时性的分析需求)、hdfs(用于hive/impala分析);业务分析结果可存储至 hbase、MySQL、redis等;BI分析,可以自己开发(前后端)或使用开源的 tableau等。
**注意:** 数据解析与业务分析可以分开编写(弊端:数据流有两条)或可以一块编写(弊端:代码出错时,除非写好log,否则排查错误时较困难,不知问题出现在解析部分还是业务分析部分)
### streamingImprove
flink 底层算子process,结合watermark、state、timer等,实现复杂需求的逻辑。
### ProducerAndConsumerKafka
kafka 的生产与消费数据(解析数据)测试。
## sink_to_hdfs_test
总体来说,这是一个测试模块(在完成数据流入kafka的基础上,将数据持久化)。其中我们测试了:
* Flink 的异步I/O
* Flink 异步I/O将数据写入MySQL
* Flink 异步I/O将数据写入hbase(未测试,因为资源限制等问题)
* Flink StreamingFileSink 将数据持久化至 hdfs
* spark 对hdfs中数据进行 read和write测试
## bigdata
[在Windows上搭建hadoop开发环境](https://www.cnblogs.com/java-spring/p/11744195.html)
之前在内网测试的:spark连接hdfs数据。需要注意添加,网络认证与hadoop HA 配置。
本地测试遇到的问题:
1. org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------;
解决:Windows 下执行以下操作(本地hadoop的配置)
```
%HADOOP_HOME%\bin\winutils.exe ls F:\tmp\hive
%HADOOP_HOME%\bin\winutils.exe chmod 777 F:\tmp\hive
%HADOOP_HOME%\bin\winutils.exe ls F:\tmp\hive
```
2. 'show databases'仅显示default,不显示hive中数据库。
解决:在resources中添加core-site.xml/hdfs-site.xml/hive-site.xml/yarn-site.xml。
3. 连接metastore with URI thrift://cdh-master03:9083,但是出错:ERROR TSaslTransport: SASL negotiation failure
解决:在本地添加:
```
10.2.7.180 cdh-master03
10.2.7.140 cdh-master01
```


# 资料
1. [God-of-BigData之大数据成神之路](https://github.com/wangzhiwubigdata/God-Of-BigData)