当前位置: 首页 > news >正文

项目开发经验

hadoop

1.namenode中有专门的工作线程池用于处理与datanode的心跳信号 dfs.namenode.handler.count=20 * log2(Clust

2.编辑日志存储路径 dfs.namenode.edits.dir 设置与镜像文件存储路径 dfs.namenode分开存放,可以达到提高并发

3.yarn参数调优,单个服务节点上yarn可获得的默认最大内存为8G,而单个任务默认可申请最大内存为8G;

4.hdfs和硬盘使用控制在70%以下。

5.hadoop宕机: 5.1 MR过载时,应控制yarn,任务运行的数量,和每个任务申请的 最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物 理内存量,默认是 8192MB)

5.2 载入文件过大造成namenode宕机时,应使用kafka做缓存(调高),控制kafka写入hdfs的速度,在高峰期过后数据同步自动跟上。

flume

1.Flume内存配置4G(flume-env.sh中配置)

FileChannel优化

/etc/flume-ng/conf目录下配置文件存放路径

2.datadir目录指向多个路径,配置到不同硬盘的多个目录下,可以提高并发。checkpointDir和backupcheckpointDir配置到不同硬盘的对应目录下,以便宕机时快速启用备份。

agent.channels.channel1.dataDirs = /path/to/data/dir1, /path/to/data/dir2, /path/to/data/dir3

agent.channels.channel1.checkpointDir = /path/to/checkpoint/dir agent.channels.channel1.backupCheckpointDir = /path/to/backup/checkpoint/dir

3.hdfs sink 小文件处理,控制滑动窗口溢写3个参数,hdfs.rollInterval 、 hdfs.rollSize 、 hdfs.rollCount

kafka

kafka吞吐量测试

kafka内存6G(不能超过6G)

kafka 每天数据1亿条,1150条每秒

kafka 消费能力不足怎么办?

1.并发 增加kafka topic的分区数以及对应的消费者数 (两者统一,缺一不可)

2.频率 拉取的速度需要跟得上生产的速度,如果下游处理数据不及时,可以提高每批次拉取的数据量

kafka挂掉期间了数据怎么办?

内部:

1.重启kafka

2.按消费者偏移量回到发生宕机之前的位置重新开始处理消息

3.kafka的日志和备份数据

外部:

1.flume 的channel 短期可以缓存

2.日志服务器的备份,可以等kafka重启后再次加载

kafka数据重复:在下一级消费者中去重(redis、spark streaming、hive dwd层)

Hive

1.自定义函数

UDF 继承extendsUDF类,重写evaluate(),实现重定义日的功能

UDTF 继承GUDTF类,重写 initialize() process()close()

UDAF

2.优化

2.1 存储

hdfs 上存储格式、列式存储对数仓的优化提升比较明显,提升压缩效率

小文件处理,归档合并小文件

2.2计算

1针对不同计算引擎依赖hive元数据信息生成更优的执行计划,

2mr计算的时候map阶段可以提前合并小文件再切片,减少数据切斜

3环形缓冲区落盘阶段可以提前聚合,减少io

4开启JVM重用

mysql元数据备份问题

重点:可能导致整个集群无法运行,至少保证每日零点后备份到其它服务器两个副本

tez的优点: 可以将多个有依赖的作业转换成一个大作业,减少IO,只写入一次HDFS,提高

计算性能

sqoop:

1.sqoop 的parquet数据从hdfs导出到mysql,需先转换成text

2.Hive 中的 Null 在底层是以“\N”来存储,而 MySQL 中的 Null 在底层就是 Null,为了 保证数据两端的一致性。在导出数据时采用--input-null-string 和--input-null-non-string 两 个参数。导入数据时采用--null-string 和--null-non-string。

sqoop import \--connect jdbc:mysql://hostname:port/database \--username username \--password password \--table table_name \--null-string '\\N' \--null-non-string '\\N' \--target-dir /path/to/output_dir

sqoop 数据一致性问题:

使用多个map如何保证? 使用—staging-table –clear-staging 任务执行成功首先在 tmp 临时表中,然后将 tmp 表中的数据复制到目标表中(这个时 候可以使用事务,保证事务的一致性

sparkstreaming优雅关闭,监听标志位,并使用ssc.stop()

  1. 定义一个标志位:定义一个标志位(如 isStopped),用于控制应用程序的关闭状态。

  2. 监听流式数据源的结束:如果你的流式数据源有一个结束信号,比如 Kafka 的消费者消费完所有消息,你可以在监听到数据源结束时将标志位设为 true

import org.apache.spark.SparkConf;
import org.apache.spark.streaming.Duration;
import org.apache.spark.streaming.api.java.JavaStreamingContext;public class StreamingApp {public static void main(String[] args) throws InterruptedException {// 创建 SparkConf 对象SparkConf conf = new SparkConf().setAppName("StreamingApp").setMaster("local[2]");// 创建 StreamingContext,并设置批处理间隔JavaStreamingContext streamingContext = new JavaStreamingContext(conf, new Duration(5000));// 定义标志位final boolean[] isStopped = {false};// 注册 JVM 钩子Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {System.out.println("Shutting down the application...");// 设置标志位为 trueisStopped[0] = true;// 停止 StreamingContextstreamingContext.stop(true, true);System.out.println("Application is successfully shut down.");}});// 从流式数据源读取数据,并进行处理// ...// 控制循环退出条件while (!isStopped[0]) {// 处理流式数据// ...}// 停止 StreamingContextstreamingContext.stop();// 关闭 Spark 上下文streamingContext.sparkContext().stop();}
}

http://www.lryc.cn/news/92803.html

相关文章:

  • STM32——05-按键、时钟控制、中断复位 点亮LED灯
  • VBA下载二进制文件,文本读写
  • MongoDB结合Robo 3T 1.4.3的简单操作
  • 【学习笔记】[AGC048D] Pocky Game
  • Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析
  • ES6 新增的循环方法
  • 移动端事件300ms延迟解决
  • NRF52832的DFU
  • 开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查
  • 敲黑板!java反射机制和原理
  • 【大数据工具】HBase 集群搭建与基本使用
  • 【Java】数组详解
  • NumPy库的学习
  • CentOS安装IRIS
  • 华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】
  • vue3中的reactive、ref、toRef和toRefs
  • 数字图像处理与Python实现-图像增强经典算法汇总
  • tag提示词总结
  • 微信小程序原生开发功能合集二十:导航栏、tabbar自定义及分包功能介绍
  • 高通 Camera HAL3:项目开发技术点总结
  • chatgpt赋能python:Python怎么删除列表中的最大值和最小值
  • 简述Vue的生命周期以及每个阶段做的事情
  • LeetCode-C#-0004.寻找两个正序数组的中位数
  • Vue.js 中的 $emit 和 $on 方法有什么区别?
  • LAZADA平台的商品评论Python封装API接口接入文档和参数说明
  • 云原生Docker镜像管理
  • ChatGPT+小红书的8种高级玩法
  • shell脚本学习记录1(运算符)
  • vector 迭代器失效问题
  • docker使用与服务器上的可视化(ROS rviz等)