如何在开发环境 生成环境境下应对流数据峰值巨变

Spark Streaming性能优化: 如何在生产环境下应对流数据峰值巨变
时间: 20:58:52
&&&& 阅读:142
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&1、为什么引入Backpressure
&&&&& 默认情况下,Spark Streaming通过Receiver以生产者生产数据的速率接收数据,计算过程中会出现batch processing time & batch interval的情况,其中batch processing time 为实际计算一个批次花费时间, batch interval为Streaming应用设置的批处理间隔。这意味着Spark Streaming的数据接收速率高于Spark从队列中移除数据的速率,也就是数据处理能力低,在设置间隔内不能完全处理当前接收速率接收的数据。如果这种情况持续过长的时间,会造成数据在内存中堆积,导致Receiver所在Executor内存溢出等问题(如果设置StorageLevel包含disk, 则内存存放不下的数据会溢写至disk, 加大延迟)。Spark 1.5以前版本,用户如果要限制Receiver的数据接收速率,可以通过设置静态配制参数“spark.streaming.receiver.maxRate”的值来实现,此举虽然可以通过限制接收速率,来适配当前的处理能力,防止内存溢出,但也会引入其它问题。比如:producer数据生产高于maxRate,当前集群处理能力也高于maxRate,这就会造成资源利用率下降等问题。为了更好的协调数据接收速率与资源处理能力,Spark
Streaming 从v1.5开始引入反压机制(back-pressure),通过动态控制数据接收速率来适配集群数据处理能力。2、Backpressure&&&&&
Spark Streaming Backpressure:
根据JobScheduler反馈作业的执行信息来动态调整Receiver数据接收率。通过属性“spark.streaming.backpressure.enabled”来控制是否启用backpressure机制,默认值false,即不启用。2.1 Streaming架构如下图所示(详见Streaming数据接收过程文档和Streaming 源码解析)
2.2 BackPressure执行过程如下图所示:  在原架构的基础上加上一个新的组件RateController,这个组件负责监听“OnBatchCompleted”事件,然后从中抽取processingDelay
及schedulingDelay信息.
Estimator依据这些信息估算出最大处理速度(rate),最后由基于Receiver的Input
Stream将rate通过ReceiverTracker与ReceiverSupervisorImpl转发给BlockGenerator(继承自RateLimiter).
3、BackPressure 源码解析3.1 RateController类体系
RatenController 继承自StreamingListener. 用于处理BatchCompleted事件。核心代码为:
* A StreamingListener that receives batch completion
updates, and maintains
* an estimate of the speed at which this stream should ingest messages,
* given an estimate computation from a `RateEstimator`
private[streaming] abstract class RateController(val streamUID: Int, rateEstimator: RateEstimator)
extends StreamingListener with Serializable {
* Compute the new rate limit and publish it asynchronously.
private def computeAndPublish(time: Long, elems: Long, workDelay: Long, waitDelay: Long): Unit =
Future[Unit] {
val newRate = pute(time, elems, workDelay, waitDelay)
newRate.foreach { s =&
rateLimit.set(s.toLong)
publish(getLatestRate())
def getLatestRate(): Long = rateLimit.get()
override def onBatchCompleted(batchCompleted: StreamingListenerBatchCompleted) {
val elements = batchCompleted.batchInfo.streamIdToInputInfo
processingEnd &- batchCompleted.batchInfo.processingEndTime
workDelay &- batchCompleted.batchInfo.processingDelay
waitDelay &- batchCompleted.batchInfo.schedulingDelay
elems &- elements.get(streamUID).map(_.numRecords)
} computeAndPublish(processingEnd, elems, workDelay, waitDelay)
3.2 RateController的注册
JobScheduler启动时会抽取在DStreamGraph中注册的所有InputDstream中的rateController,并向ListenerBus注册监听. 此部分代码如下:
def start(): Unit = synchronized {
if (eventLoop != null) return // scheduler has already been started
logDebug("Starting JobScheduler")
eventLoop = new EventLoop[JobSchedulerEvent]("JobScheduler") {
override protected def onReceive(event: JobSchedulerEvent): Unit = processEvent(event)
override protected def onError(e: Throwable): Unit = reportError("Error in job scheduler", e)
eventLoop.start()
// attach rate controllers of input streams to receive batch completion updates
inputDStream &- ssc.graph.getInputStreams
rateController &- inputDStream.rateController
} ssc.addStreamingListener(rateController)&/span&
listenerBus.start()
receiverTracker = new ReceiverTracker(ssc)
inputInfoTracker = new InputInfoTracker(ssc)
receiverTracker.start()
jobGenerator.start()
logInfo("Started JobScheduler")
3.3 BackPressure执行过程分析
BackPressure 执行过程分为BatchCompleted事件触发时机和事件处理两个过程3.3.1 BatchCompleted触发过程
对BatchedCompleted的分析,应该从JobGenerator入手,因为BatchedCompleted是批次处理结束的标志,也就是JobGenerator产生的作业执行完成时触发的,因此进行作业执行分析。
Streaming 应用中JobGenerator每个Batch Interval都会为应用中的每个Output
Stream建立一个Job, 该批次中的所有Job组成一个Job
Set.使用JobScheduler的submitJobSet进行批量Job提交。此部分代码结构如下所示
/** Generate jobs and perform checkpoint for the given `time`.
private def generateJobs(time: Time) {
// Set the SparkEnv in this thread, so that job generation code can access the environment
// Example: BlockRDDs are created in this thread, and it needs to access BlockManager
// Update: This is probably redundant after threadlocal stuff in SparkEnv has been removed.
SparkEnv.set(ssc.env)
// Checkpoint all RDDs marked for checkpointing to ensure their lineages are
// truncated periodically. Otherwise, we may run into stack overflows (SPARK-6847).
ssc.sparkContext.setLocalProperty(RDD.CHECKPOINT_ALL_MARKED_ANCESTORS, "true")
jobScheduler.receiverTracker.allocateBlocksToBatch(time) // allocate received blocks to batch
graph.generateJobs(time) // generate jobs using allocated block
case Success(jobs) =&
val streamIdToInputInfos = jobScheduler.inputInfoTracker.getInfo(time)
jobScheduler.submitJobSet(JobSet(time, jobs, streamIdToInputInfos))
case Failure(e) =&
jobScheduler.reportError("Error generating jobs for time " + time, e)
eventLoop.post(DoCheckpoint(time, clearCheckpointDataLater = false))
其中,sumitJobSet会创建固定数量的后台线程(具体由“spark.streaming.concurrentJobs”指定),去处理Job Set中的Job. 具体实现逻辑为:
def submitJobSet(jobSet: JobSet) {
if (jobSet.jobs.isEmpty) {
logInfo("No jobs added for time " + jobSet.time)
listenerBus.post(StreamingListenerBatchSubmitted(jobSet.toBatchInfo))
jobSets.put(jobSet.time, jobSet)
jobSet.jobs.foreach(job =& jobExecutor.execute(new JobHandler(job)))
logInfo("Added jobs for time " + jobSet.time)
其中JobHandler用于执行Job及处理Job执行结果信息。当Job执行完成时会产生JobCompleted事件. JobHandler的具体逻辑如下面代码所示:
当Job执行完成时,向eventLoop发送JobCompleted事件。EventLoop事件处理器接到JobCompleted事件后将调用handleJobCompletion 来处理Job完成事件。handleJobCompletion使用Job执行信息创建StreamingListenerBatchCompleted事件并通过StreamingListenerBus向监听器发送。实现如下:
private def handleJobCompletion(job: Job, completedTime: Long) {
val jobSet = jobSets.get(job.time)
jobSet.handleJobCompletion(job)
job.setEndTime(completedTime)
listenerBus.post(StreamingListenerOutputOperationCompleted(job.toOutputOperationInfo))
logInfo("Finished job " + job.id + " from job set of time " + jobSet.time)
if (jobSet.hasCompleted) {
jobSets.remove(jobSet.time)
jobGenerator.onBatchCompletion(jobSet.time)
logInfo("Total delay: %.3f s for time %s (execution: %.3f s)".format(
jobSet.totalDelay / <span style="color: #00.0, jobSet.time.toString,
jobSet.processingDelay / <span style="color: #00.0
listenerBus.post(StreamingListenerBatchCompleted(jobSet.toBatchInfo))
job.result match {
case Failure(e) =&
reportError("Error running job " + job, e)
3.3.2、BatchCompleted事件处理过程
StreamingListenerBus将事件转交给具体的StreamingListener,因此BatchCompleted将交由RateController进行处理。RateController接到BatchCompleted事件后将调用onBatchCompleted对事件进行处理。
override def onBatchCompleted(batchCompleted: StreamingListenerBatchCompleted) {
val elements = batchCompleted.batchInfo.streamIdToInputInfo
processingEnd &- batchCompleted.batchInfo.processingEndTime
workDelay &- batchCompleted.batchInfo.processingDelay
waitDelay &- batchCompleted.batchInfo.schedulingDelay
elems &- elements.get(streamUID).map(_.numRecords)
} computeAndPublish(processingEnd, elems, workDelay, waitDelay)
onBatchCompleted会从完成的任务中抽取任务的执行延迟和调度延迟,然后用这两个参数用RateEstimator(目前存在唯一实现PIDRateEstimator,proportional-integral-derivative (PID) controller, )估算出新的rate并发布。代码如下:
* Compute the new rate limit and publish it asynchronously.
private def computeAndPublish(time: Long, elems: Long, workDelay: Long, waitDelay: Long): Unit =
Future[Unit] {
val newRate = pute(time, elems, workDelay, waitDelay)
newRate.foreach { s =&
rateLimit.set(s.toLong)
publish(getLatestRate())
其中publish()由RateController的子类ReceiverRateController来定义。具体逻辑如下(ReceiverInputDStream中定义):
* A RateController that sends the new rate to receivers, via the receiver tracker.
private[streaming] class ReceiverRateController(id: Int, estimator: RateEstimator)
extends RateController(id, estimator) {
override def publish(rate: Long): Unit =
ssc.scheduler.receiverTracker.sendRateUpdate(id, rate)
publish的功能为新生成的rate 借助ReceiverTracker进行转发。ReceiverTracker将rate包装成UpdateReceiverRateLimit事交ReceiverTrackerEndpoint
/** Update a receiver‘s maximum ingestion rate */
def sendRateUpdate(streamUID: Int, newRate: Long):
Unit = synchronized {
if (isTrackerStarted) {
endpoint.send(UpdateReceiverRateLimit(streamUID, newRate))
ReceiverTrackerEndpoint接到消息后,其将会从receiverTrackingInfos列表中获取Receiver注册时使用的endpoint(实为ReceiverSupervisorImpl),再将rate包装成UpdateLimit发送至endpoint.其接到信息后,使用updateRate更新BlockGenerators(RateLimiter子类),来计算出一个固定的令牌间隔。
其中RateLimiter的updateRate实现如下:
* Set the rate limit to `newRate`. The new rate will not exceed the maximum rate configured by
* {{{spark.streaming.receiver.maxRate}}}, even if `newRate` is higher than that.
* @param newRate A new rate in events per second. It has no effect if it‘s 0 or negative.
private[receiver] def updateRate(newRate: Long): Unit =
if (newRate & <span style="color: #) {
if (maxRateLimit & <span style="color: #) {
rateLimiter.setRate(newRate.min(maxRateLimit))
rateLimiter.setRate(newRate)
setRate的实现如下:
public final void setRate(double permitsPerSecond) {
Preconditions.checkArgument(permitsPerSecond & <span style="color: #.0
&& !Double.isNaN(permitsPerSecond), "rate must be positive");
synchronized (mutex) {
resync(readSafeMicros());
double stableIntervalMicros = TimeUnit.SECONDS.toMicros(<span style="color: #L) / permitsPerS
//固定间隔
this.stableIntervalMicros = stableIntervalM
doSetRate(permitsPerSecond, stableIntervalMicros);
到此,backpressure反压机制调整rate结束。
4.流量控制点  当Receiver开始接收数据时,会通过supervisor.pushSingle()方法将接收的数据存入currentBuffer等待BlockGenerator定时将数据取走,包装成block.
在将数据存放入currentBuffer之时,要获取许可(令牌)。如果获取到许可就可以将数据存入buffer,
否则将被阻塞,进而阻塞Receiver从数据源拉取数据。
* Push a single data item into the buffer.
def addData(data: Any): Unit = {
if (state == Active) {
waitToPush()
//获取令牌
synchronized {
if (state == Active) {
currentBuffer += data
throw new SparkException(
"Cannot add data as BlockGenerator has not been started or has been stopped")
throw new SparkException(
"Cannot add data as BlockGenerator has not been started or has been stopped")
其令牌投放采用令牌桶机制进行, 原理如下图所示:
令牌桶机制: 大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小。当进行某操作时需要令牌时会从令牌桶中取出相应的令牌数,如果获取到则继续操作,否则阻塞。用完之后不用放回。  Streaming
数据流被Receiver接收后,按行解析后存入iterator中。然后逐个存入Buffer,在存入buffer时会先获取token,如果没有token存在,则阻塞;如果获取到则将数据存入buffer.
然后等价后续生成block操作。
  令牌桶机制:
大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小。当进行某操作时需要令牌时会从令牌桶中取出相应的令牌数,如果获取到则继续操作,否则阻塞。用完之后不用放回。  Streaming
数据流被Receiver接收后,按行解析后存入iterator中。然后逐个存入Buffer,在存入buffer时会先获取token,如果没有token存在,则阻塞;如果获取到则将数据存入buffer.
然后等价后续生成block操作。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/itboys/p/6486089.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示.t1.t2表示10-30°C之间的两个不同温度.下列分析正确的是 A.与t1相比.t2时速率高峰出现时间推迟且峰值低.不利于叶片贮藏 B.与t2相比.t1时乙烯产生量高峰出现时间提前且峰值高.有利于叶片贮藏 C.t1.t2条件下呼吸速率的变化趋势相似.t1&t2.t1时不利于叶片 题目和参考答案——精英家教网——
暑假天气热?在家里学北京名师课程,
& 题目详情
某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示,t1、t2表示10-30°C之间的两个不同温度。下列分析正确的是A.与t1相比,t2时速率高峰出现时间推迟且峰值低,不利于叶片贮藏B.与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,有利于叶片贮藏C.t1、t2条件下呼吸速率的变化趋势相似,t1&t2,t1时不利于叶片贮藏D.t1、t2条件下乙烯产生量的变化趋势相似,t1&t2,t1时不利于叶片贮藏&
【答案】此题应该无答案与11年高考题图不同,选项相同。【解析】A项,与t1相比,t2时呼吸速率高峰出现时间提前,不利于叶片贮藏;B项,与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,但乙烯的作用是促进器官的成熟,会使细胞较快衰老,因此t1时不利于叶片贮藏;C项,t1、t2条件下呼吸速率的变化趋势相似,但同一时刻t1比t2时呼吸速率都高,有机物消耗都多,因此&t1时不利于叶片贮藏;D项,t1、t2条件下乙烯产生量的变化趋势相似,t1时不利于叶片贮藏是正确的,但&t1&t2。&
科目:高中生物
3.某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示,t1、t2表示10-30°C之间的两个不同温度。下列分析正确的是
与t1相比,t2时呼吸速率高峰出现时间推迟且峰值低,不利于叶片贮藏 B与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,有利于叶片贮藏 C.t1、t2条件下呼吸速率的变化趋势相似,t1&t2,t1时不利于叶片贮藏 D.t1、t2条件下乙烯产生量的变化趋势相似,t1&t2,t1时不利于叶片贮藏
科目:高中生物
来源:学年山西省曲沃中学高二下学期期中考试生物试卷(带解析)
题型:单选题
某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示,t1、t2表示10℃~30℃之间的两个不同温度。下列分析正确的是A.与t1相比,t2时呼吸速率高峰出现时间推迟且峰值低,不利于叶片贮藏 B.与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,有利于叶片贮藏 C.t1、t2条件下呼吸速率的变化趋势相似,t1&t2,t1时不利于叶片贮藏 D.t1、t2条件下乙烯产生量的变化趋势相似,t1&t2,t1时不利于叶片贮
科目:高中生物
来源:学年黑龙江省高三第一次考试生物试卷
题型:选择题
某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示,t1、t2表示10-30°C之间的两个不同温度。下列分析正确的是A.与t1相比,t2时速率高峰出现时间推迟且峰值低,不利于叶片贮藏B.与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,有利于叶片贮藏C.t1、t2条件下呼吸速率的变化趋势相似,t1&t2,t1时不利于叶片贮藏D.t1、t2条件下乙烯产生量的变化趋势相似,t1&t2,t1时不利于叶片贮藏&
科目:高中生物
来源:2013届湖北省襄阳市高二上学期期中考试生物试卷
题型:选择题
某种蔬菜离体叶片在黑暗中不同温度条件下呼吸速率和乙烯产生量的变化如图所示,t1、t2表示10-30°C之间的两个不同温度。下列分析正确的是A.与t1相比,t2时速率高峰出现时间推迟且峰值低,不利于叶片贮藏B.与t2相比,t1时乙烯产生量高峰出现时间提前且峰值高,有利于叶片贮藏C.t1、t2条件下呼吸速率的变化趋势相似,t1&t2,t1时不利于叶片贮藏D.t1、t2条件下乙烯产生量的变化趋势相似,t1&t2,t1时不利于叶片贮藏&
精英家教网新版app上线啦!用app只需扫描书本条形码就能找到作业,家长给孩子检查作业更省心,同学们作业对答案更方便,扫描上方二维码立刻安装!
请输入姓名
请输入手机号君,已阅读到文档的结尾了呢~~
异构网络协作通信技术的研究,协作通信,同分异构体,同课异构,顺反异构,异构体,异构网络,拓扑异构酶,异构计算,对映异构体
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
异构网络协作通信技术的研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口测·控领域专业互动媒体平台
推动测试测量,检测诊断,传感物联,遥测自控智能化发展
当前位置: &
大清河流域产汇流特性变化趋势及影响因素
《中国农村水利水电》2011年第2期
[导读] 摘要: 以大清河水系紫荆关流域和阜平流域 年的暴雨洪水资料为基础, 利用Mann- Kenda ll 秩次相关检验法研究了流域内产汇流特性的变化规律及其影响因素。结果表明: 次洪量和径流系数呈下降趋势, 洪峰滞时和汇流单位线峰现时间呈上升趋势。降水量的变化对大清河流域的产汇流规律有直接的影响, 但下垫面的变化在一定程度上影响了流域的产汇流规律, 引起产汇流特性的变化。
中图分类号: P333 & 文献标识码: A文章编号: 11) 02-0043- 03
Trend Analysis of Runoff Generation and Convergence Characteristics and Influencing Factors in DaqingheWatershed
CHEN Fu-long1 , LI Jian-zhu2
Abstract: To st udy the tr end of runoff generation and convergence characteristics and the influencing factors, Zijingguan and Fuping sub-water sheds are selected. Mann-Kendall Rank Correlation Test is used to analyze the storm-runoff data during
in the two sub-watersheds. The results show that runoff volume and coefficients have a decreasing trend, and lag time of peak flow and time of peak are increasing . The decrease in precipitation has a direct effect on runoff generation and convergence, but t he underlying surface change also contributes to runoff generation and convergence in Daqinghe Watershed.
Key words: Daqinghe W char acteristics of runoff genera trend analysis
气候变化和人类活动的影响导致流域的水文要素发生了一定的变化, 从而引起流域产汇流的变化。水文序列是揭示水文要素变化的主要方法。刘昌明等采用M ann-Ken-dall 方法, 对黄河流域的兰州站和花园口站的水循环要素进行了分析, 研究了用水量的增加、降水减少以及径流系数减小与黄河流域水循环变化的关系[1] 。水文参数的趋势变化受到气候因素和人类活动的共同影响[2- 6] , 郝芳华等分析了黄河小花间石山林区产汇流特征, 结果表明, 年径流量的变化主要受控于降水特性, 下垫面的改变和人类活动对年降水径流关系影响并不显著[7] 。冯平等研究了潘家口水库入库水资源的变化趋势, 并指出降雨量的减少及下垫面的变化是导致入库水资源呈减少趋势的原因[8] 。
从近年来的实测资料分析看, 环境变化已对大清河水系的水资源及洪水产生了巨大影响。在变化环境下重新认识径流的变化规律, 对暴雨洪水预报、水资源规划以及水资源统一管理调度等方面有着重要的意义。本文选取流域内紫荆关和阜平典型山区的实测暴雨洪水资料, 分析了其变化趋势及其影响因素。
1 研究区域和方法
1. 1&研究区域
大清河系地处海河流域的中部, 位于东经113&39&~ 117&34&, 北纬38&10&~ 40&102&, 西起太行山区, 东至渤海湾, 北界永定河, 南临子牙河, 长10 km以上的山区河道有9 条, 呈扇形分布。流域面积43 060 km2 (其中山区面积18 659 km2 , 占43. 3%, 平原面积24 401 km2 , 占56. 7%) , 流经山西、河北、北京和天津4 省(市) 。见图1。
图1 大清河水系及研究流域
Fig. 1 Daqinghe watershed and the study area
紫荆关位于北支拒马河上游, 流域内设有12处雨量站, 本次分析采用了斜山、艾河、涞源、石门、东团堡、插箭岭、王安镇、紫荆关8 个雨量资料系列长、在流域上分布较均匀的站。紫荆关以上流域面积1 760 km2, 实测最高水位523. 20 m, 最大洪峰流量为4 490 m3 / s(1963 年) ; 最大年雨量 463. 6 mm(1956 年) , 多年平均雨量约650 mm。
阜平位于大清河南支沙河支流上, 阜平以上流域控制面积2 210 km2 , 流域多年平均降雨量约600 mm。阜平水文站实测最高水位254. 10 m, 最大洪峰流量3 380 m3 / s(1963 年) ; 本次分析了庄旺、下庄、冉庄、不老台、沙窝、龙泉关、桥南沟、阜平8个雨量资料系列长、在流域上分布较均匀的站。
1. 2&研究方法
水文序列的分析方法主要有Mann-Kenda ll 秩次相关检验法、滑动平均法和线性回归法等。本文采用M ann-Kendall 秩次相关检验法对产汇流特征值变化趋势进行分析。Mann-Kendall 检验由Mann 和Kendall 提出[9, 10] , 已广泛应用于分析降水、径流和水质等要素时间序列的趋势变化[11, 12] 。
对于具有n 个样本量的时间序列x , 确定所有对偶值(x i ,x j ) (j & i) 中x i & x j 的出现个数k , 构造统计量:
给定显著性水平&, 查U&/2 , 当| U| & U&/2 时, 趋势不显著;反之, 趋势显著。
2 产流特性变化
在紫荆关流域和阜平流域分别选取了 和 年的实测暴雨洪水资料, 并从中选取每年量级最大的洪水及其对应的降雨进行分析, 计算其次洪径流系数。取显著性水平&= 0. 05情况下, 临界值为&1.96。表1 为紫荆关流域和阜平流域产流特性参数Mann-Kendall 秩次检验的统计变化情况。
2. 1&降雨量
紫荆关流域和阜平流域的次降雨量Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平&= 0. 05 情况下,次降雨量变化趋势不显著, 因为检验值均为负值, 这说明呈下降趋势。其中, 紫荆关变化相对较大, 达到- 1. 75, 阜平检验值为- 0. 19, 具有微弱的下降趋势。
表1 典型区产流特征参数检验统计值
Tab. 1 Test values of runoff generation parameters in study area of Daqinghe Watershed
2. 2&径流量
同样可以给出紫荆关站和阜平站次洪量Mann-Kendall 秩次检验的统计变化情况。与次降雨量相比, 次洪量整体具有更为明显的下降趋势, 其中紫荆关流域达到了-3.16, 说明在显著性水平&=0.05 情况下, 紫荆关流域次洪量具有明显的下降趋势。阜平流域次洪量虽有下降趋势, 但不明显, 没有达到95%的显著性水平。
2. 3&径流系数
紫荆关流域和阜平流域的径流系数Kendall 秩次相关检验值均为负值, 这说明呈下降趋势。紫荆关流域统计检验值为- 2. 58, 在显著性水平&= 0. 05 情况下, 具有明显的下降趋势。阜平流域为- 1. 77, 说明下降趋势不显著。
3 汇流特性变化
根据每年量级最大的洪水及其对应的降雨过程, 统计了洪峰滞时, 推导了每次洪水的地表汇流单位线, 并分析了它们的变化趋势, 表2为紫荆关流域和阜平流域汇流特性参数Mann-Kendall 秩次检验的统计变化情况。
表2 典型区洪峰滞时、单位线峰值及单位线峰现时间检验统计值
Tab. 2 Test values of runoff convergence parameters in study area of Daqinghe watershed
3. 1&洪峰滞时
紫荆关流域和阜平流域的洪峰滞时Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平&= 0. 05 情况下,次降雨量变化趋势不显著, 因为检验值均为正值, 这说明呈上升趋势。其中, 阜平流域变化相对较大, 为0. 91。
3. 2&单位线峰值
紫荆关流域和阜平流域的单位线峰值Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平?= 0. 05 情况下, 单位线峰值变化趋势不显著, 因为检验值均为负值, 这说明呈下降趋势。
3. 3&单位线峰现时间
从单位净雨的中心到单位线洪峰的时距称为单位线峰现时间。紫荆关流域和阜平流域的单位线峰值Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平&= 0. 05 情况下, 单位线峰现时间变化趋势不显著, 因为检验值均为正值, 这说明呈上升趋势。
4 影响变化的因素
4. 1&降雨因素
降雨量是影响径流量的直接因素, 从而影响径流系数。由前面分析可知, 紫荆关流域和阜平流域降雨量都呈现下降趋势, 因此导致洪量和次洪径流系数的减少。
4. 2&下垫面因素
4. 2. 1&土地利用和覆被变化
紫荆关流域和阜平流域的土地利用情况在发生着很大的变化, 分析2 个流域的1980 年和2000 年资料, 可得到流域的土地利用变化情况(见表3) 。
年土地利用结构变化
Tab. 3 The variations of land use during
3. 2&单位线峰值
紫荆关流域和阜平流域的单位线峰值Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平&= 0. 05 情况下, 单位线峰值变化趋势不显著, 因为检验值均为负值, 这说明呈下降趋势。
3. 3&单位线峰现时间
从单位净雨的中心到单位线洪峰的时距称为单位线峰现时间。紫荆关流域和阜平流域的单位线峰值Kendall 秩次相关检验值的绝对值均小于1. 96, 说明在显著性水平?= 0. 05 情况下, 单位线峰现时间变化趋势不显著, 因为检验值均为正值, 这说明呈上升趋势。
4 影响变化的因素
4. 1&降雨因素
降雨量是影响径流量的直接因素, 从而影响径流系数。由前面分析可知, 紫荆关流域和阜平流域降雨量都呈现下降趋势, 因此导致洪量和次洪径流系数的减少。
4. 2&下垫面因素
4. 2. 1&土地利用和覆被变化
紫荆关流域和阜平流域的土地利用情况在发生着很大的变化, 分析2 个流域的1980 年和2000 年遥感资料, 可得到流域的土地利用变化情况(见表3) 。
年土地利用结构变化
Tab. 3 The variations of land use during
从表3 可以看出: 1980 - 2000 年, 紫荆关流域的旱地、林地、建筑用地、水域呈减少趋势, 灌木林、草地、滩地略有增加;阜平以上流域的旱地呈明显的增加趋势, 林地呈减少趋势, 灌木林和草地略有增加。土地利用和覆被变化改变了降雨下渗量及地面径流汇流速度, 对产生了影响。
4. 2. 2&土壤蓄水容量变化
流域最大蓄水容量I m , 即包气带中影响土层的最大蓄水容量, 由实测雨洪资料中选取久旱不雨后较大或全流域产流的一次降雨量资料求得, 因雨前干旱, 故:
I m = P - R - Fc T c - E (2)
式中: P 为流域次平均降雨量; R 为次降雨产生的径流量; Fc 为稳定下渗率; Tc 为稳定历时; E 为蒸发量。
根据式( 4) 可以计算紫荆关流域1980 年前平均流域最大蓄水容量为110 mm, 阜平流域为115 1980 年后均紫荆关流域最大蓄水容量为130 mm, 阜平流域为128 mm。
这说明, 流域蓄水容量的增大, 导致更多的降雨下渗到土壤中, 补充了土壤含水量, 导致洪水量级的减少, 从而使汇流速度减小, 汇流单位线峰现时间增大, 峰值减小。
4. 2. 3&下垫面变化对产流量的影响
从紫荆关流域和阜平流域实测降雨径流资料中分别选取96 场和87 场暴雨洪水过程, 计算每场洪水对应的洪水总量R以及降雨总量P , 并求出该场洪水的前期影响雨量P a, 将P +Pa 与R 的关系分为20 世纪80 年代前和80 年代后2 个时段,在同一张图上点绘不同时期的(1980 年前、后) P+ Pa ~ R 相关点据, 并根据点据分布趋势建立相应的P + Pa ~ R 相关关系。如图2 所示。
图2 1980 年前后降雨径流关系变化图
Fig. 2 The relationship between precipitation and runoff pre and post 1980
从图2 中可以看出, 20 世纪80 年代后的点据大致分布在20 世纪80 年代前点据的左侧, 从趋势线也可看出, 相同降雨量情况下, 80 年代后的产流量小于80 年代前产流量。这说明, 气候条件稳定的情况下, 流域下垫面条件的变化对产流量产生了影响, 从而影响汇流速度、洪峰滞时等特性。
由于气候变化和人类活动的影响, 大清河水系山区发生了变化。选择紫荆关流域和阜平流域为代表区, 根据实测暴雨洪水资料, 分析了产汇流参数的变化趋势, 得出了以下主要结论:
(1) 径流量和径流系数呈减少的趋势, 其中紫荆关流域径流量和径流系数减少趋势显著, 阜平流域径流量和径流系数减少趋势不显著。
(2) 洪峰滞时和单位线峰现时间均呈不明显的增加趋势; 单位线峰值呈减少的趋势, 但减少趋势不显著。
(3) 变化是气候因素和下垫面因素共同作用的结果。降雨量的减少直接导致了洪量和径流系数的减少。另外, 下垫面的变化导致降雨径流关系发生变化, 相同降雨量产生的次洪量减少, 且洪水量级的减小影响了汇流单位线峰值和峰现时间。
[1]&刘昌明, 郑红星. 黄河流域水循环要素变化[J] . 自然资源学报, ) : 129- 133.
[2]&黄国如, 芮孝芳, 石朋. 泾洛渭河流域分析[J] . 水利水电科技进展, ) : 21- 23.
[3]&李艳, 陈晓宏, 王兆礼. 人类活动对北江流域径流系列变化的影响初探[J] . 自然资源学报, ) : 910- 914.
[4]&许珂艳, 王秀兰, 赵书华, 等. 小理河流域变化[J] . 水资源与水工程学报, ) : 24- 27.
[5]&李强, 李占斌, 鲁克新, 等. 黄土丘陵区不同植被格局产流产沙试验研究[J] . 中国农村水利水电, 2008, (4) : 100- 102.
[6]&胡尧文, 郭磊, 唐巨山, 等. 平原河网区产流实用模型研究[J] .中国农村水利水电, 2008, (8) : 22- 24.
[7]&郝芳华, 杨桂莲, 吴险峰, 等. 黄河小花间石山林区产汇流特征[J] . 地理研究, ) : 165- 173.
[6]&冯平, 李建柱, 徐仙. 潘家口水库入库水资源变化趋势及影响因素[J] . 地理研究, ) : 213- 220.
[9]&Kendall M G. A new measure of rank correlation[M] . Biomet rika, - 93.
[10]&Kendall M G. Rank Correlation Methods [M] . Charles Grif fin ,London, 1973.
[11]&陈华, 郭生练, 郭海晋, 等. 汉江流域 年降水气温时空变化[J] . 长江流域资源与环境, ) : 340- 345.
[12]&冯晓黎, 李霏霏. 长江流域中下游历史旱涝演变特征[J] . 中国农村水利水电, 2008, (12) : 89- 91.
作者简介: 陈伏龙(1978-) , 男, 讲师, 主要从事水文学及水资源问题的研究。
[整理编辑:中国测控网]
&&[6]&&&&[8]&&&&[5]
大清河流域相关论文
产汇流特性相关论文
版权与免责声明:
①凡本网注明"来源:中国测控网"的所有作品,版权均属于中国测控网,转载请必须注明中国测控网 。违反者本网将追究相关法律责任。
②本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。
③如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
产汇流特性
还没有 产汇流特性 相关的测控名词的解释您可以点击
第八届中国卫星导航学术年会(China Satellite Navigation Conference, CSNC 2017)是一个开放的学术交流平台。旨在加强学术创新,
68%的网友读了:
电动汽车的动力和储能电池均是采用电池组的形式,但基于现有的制造水平,单体电池之间尚不能达到性能的
42%的网友读了:
VDMR8M32是珠海欧比特公司自主研发的一种高速、大容量的TTL同步静态存储器(MRAM),可利用其对大容量数据
注册成为中国测控网会员
可以无需任何费用浏览专业技术文章
&&[6]&&&&[8]&&&&[5]
京公网安备:09号
Copyright (C)
All Rights Reserved 版权所有}

我要回帖

更多关于 生成峰值文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信