gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

Spark写数据到Doris报错node and exceeded the max retry times

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 作者: east
  • ( 页面37 )
doris, Spark 6月 16,2023

Spark写数据到Doris报错node and exceeded the max retry times

用spark dataframe向doris写数据时,报下面错误:

Failed to load data on BE: http://192.168.50.10:18040/api/mydb/dwd_virtual_table/_stream_load? node and exceeded the max retry times.

发现表没写入成功。刚开始很困惑,后来发现是 dataFrame中的字段和目标表不一致 。

这种提示很不友好,有没有更好方式提示,方法是有的,可以用jdbc写入,发现错误时可以看到具体的提示。代码参考如下:

def writeByJDBC(dataframe: DataFrame, dorisTable: String): Unit = {
    dataframe.write.format("jdbc")
      .mode(SaveMode.Append)
      .option("driver", "com.mysql.jdbc.Driver")
      .option("url", "jdbc:mysql://" + DORIS_HOST + ":9030/" +DATABASE_NAME + "?rewriteBatchedStatements=false")
      .option("batchsize", "" + WRITE_BATCH_SIZE)
      .option("user", DORIS_USER)
      .option("password", DORIS_PASSWORD)
      .option("isolationLevel", "NONE")
      //  .option("doris.write.fields","case_id,defendant_name,finance_name,mediation_name,mediator_name,dt")
      .option("dbtable", dorisTable)
      .save()
  }

不过这种方式还是没有Spark Doris Connector的方式写效率高,可以用上面jdbc方式调试,没问题再切换 Spark Doris Connector 方式:

def writeByDoris(dataframe: DataFrame, dorisTable: String): Unit = {
dataframe.write.format(“doris”)
.option(“doris.table.identifier”, dorisTable)
.option(“doris.fenodes”, DORIS_HOST + “:” + DORIS_FE_HTTP_PORT)
.option(“user”, DORIS_USER)
.option(“password”, DORIS_PASSWORD)
.option(“sink.batch.size”, WRITE_BATCH_SIZE)
.option(“sink.max-retries”, 3)
.option(“doris.request.retries”, 6)
.option(“doris.request.retries”, 100)
.option(“doris.request.connect.timeout.ms”, 60000)
.save()
}

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
Spark 6月 16,2023

spark sql多个指标合并为1条sql

在 Spark SQL 指标开发中,使用一条 SQL 语句来计算多个指标是常见的做法。以下是几种常用的方法:

  1. 使用子查询:将多个指标的计算逻辑放在子查询中,再在外层 SELECT 语句中进行聚合。这种方式可以避免代码冗余,但可能会降低 SQL 语句的可读性。
  2. 使用 Window 函数:使用 Window 函数可以在一条 SQL 语句中计算多个指标,并且可以避免对同一个数据集进行多次扫描。具体操作是使用 over() 函数配合 sum、avg、max、min等聚合函数。这种方式相比子查询可以提升 SQL 的效率,但需要熟练掌握 Window 函数的使用方法。
  3. 使用 UDAF:如果需要计算的指标比较复杂,可以考虑开发自定义聚合函数(UDAF),这样可以将计算逻辑封装到统一的函数中,提高代码的可复用性和可维护性。

例子:

  1. 使用子查询进行多指标计算

假设我们有一个订单表 orders,包含以下字段:order_id, customer_id, order_date, amount。我们需要计算每个客户在 2022 年的订单数量和总订单金额。可以使用如下 SQL 语句实现:

SELECT 
  customer_id, 
  (SELECT COUNT(*) 
   FROM orders 
   WHERE customer_id = o.customer_id AND YEAR(order_date) = 2022) AS order_count, 
  (SELECT SUM(amount) 
   FROM orders 
   WHERE customer_id = o.customer_id AND YEAR(order_date) = 2022) AS total_amount 
FROM orders o 
GROUP BY customer_id;

这个 SQL 语句使用了两个子查询来计算每个客户在 2022 年的订单数量和总订单金额。子查询返回的结果会作为 select 语句中的一个列,因此可以使用 group by 对客户进行分组。

  1. 使用 Window 函数进行多指标计算

使用 Window 函数可以更方便地对查询结果进行分析。假设我们有一个销售表 sales,包含以下字段:sale_id, customer_id, product_id, sale_date, sale_amount。我们需要计算以下指标:每个客户的总销售额、每个客户的最大销售额、每个客户的销售额排名。可以使用如下 SQL 语句实现:

SELECT 
  customer_id, 
  SUM(sale_amount) OVER (PARTITION BY customer_id) AS total_sale, 
  MAX(sale_amount) OVER (PARTITION BY customer_id) AS max_sale, 
  RANK() OVER (PARTITION BY customer_id ORDER BY sale_amount DESC) AS sale_rank 
FROM sales;

这个 SQL 语句使用了三个 Window 函数,分别计算每个客户的总销售额、最大销售额和销售额排名。这里我们将结果按客户分组,然后使用了 Partition By 子句指定了客户维度。

  1. 使用自定义聚合函数进行多指标计算

自定义聚合函数(UDAF)可以针对特定的需求编写自己的聚合逻辑。以计算最小值、最大值和平均值为例,我们可以实现一个自定义平均值 UDAF:

import org.apache.spark.sql.expressions.MutableAggregationBuffer
import org.apache.spark.sql.expressions.UserDefinedAggregateFunction
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
 
class CustomAvg extends UserDefinedAggregateFunction {
 
  // 输入参数的数据类型
  def inputSchema: StructType = new StructType().add("inputColumn", DoubleType)
 
  // 中间结果的数据类型
  def bufferSchema: StructType = new StructType().add("sum", DoubleType).add("count", LongType)
 
  // 输出结果的数据类型
  def dataType: DataType = DoubleType
 
  // 是否固定输入参数类型
  def deterministic: Boolean = true
 
  // 初始化中间结果缓存
  def initialize(buffer: MutableAggregationBuffer): Unit = {
    buffer(0) = 0.0 // sum
    buffer(1) = 0L // count
  }
 
  // 更新中间结果缓存
  def update(buffer: MutableAggregationBuffer, input: Row): Unit = {
    if (!input.isNullAt(0)) {
      buffer(0) = buffer.getDouble(0) + input.getDouble(0)
      buffer(1) = buffer.getLong(1) + 1
    }
  }
 
  // 合并中间结果缓存
  def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = {
    buffer1(0) = buffer1.getDouble(0) + buffer2.getDouble(0)
    buffer1(1) = buffer1.getLong(1) + buffer2.getLong(1)
  }
 
  // 计算最终结果
  def evaluate(buffer: Row): Any = {
    buffer.getDouble(0) / buffer.getLong(1)
  }
}

这里我们实现了一个 CustomAvg UDAF,可以通过输入若干个 Double 类型的值,计算它们的平均值并返回。我们可以在 SparkSQL 中使用这个 UDAF 计算多个指标的平均值:

SELECT 
  CustomAvg(column1) AS avg1, 
  CustomAvg(column2) AS avg2, 
  CustomAvg(column3) AS avg3 
FROM table;

这个 SQL 语句使用了 CustomAvg UDAF 计算了三个列的平均值,可以根据实际需求进行扩展。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
doris 6月 13,2023

Spark 写入数据到doris异常

用spark写入到doris,由于服务器配置不高, sink.batch.size 设置过大时,超出服务器内存限制,doris be端直接闪崩。如果 sink.batch.size 设置过小,则出现写入次数太频繁无法写入。 调整 write 的
sink.batch.size 参数大小,逐步增加 batchsize 大小,以达到更好的写入性能与内存占用的平衡。例如,可以逐渐将 batchsize 参数的值从 200 调整到 500,1000,2000,以找到最好的性能与内存占用平衡点。 刚开始设置10000时服务器be端闪崩,后来设置200时又写到中途报错,最后找到2000这个平衡点。

def writeDoris(dataframe: DataFrame, dorisTable: String): Unit = {
dataframe.write.format(“doris”)
.option(“doris.table.identifier”, dorisTable)
.option(“doris.fenodes”, DORIS_HOST + “:” + DORIS_FE_HTTP_PORT)
.option(“user”, DORIS_USER)
.option(“password”, DORIS_PASSWORD)
.option(“sink.batch.size”, 2000)
.save()
}

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
doris 6月 8,2023

spark运行写入doris的任务报错park.DorisStreamLoad: Doris BE’s response cannot map to schema

在CDH的集群上跑spark任务,运行报错:
ERROR spark.DorisStreamLoad: Doris BE’s response cannot map to schema. res: “Access denied for user ‘default_cluster:hdfs@10.0.10.101’ (using password: YES)”
org.apache.doris.shaded.com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of org.apache.doris.spark.rest.models.BackendV2 (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (‘Access denied for user ‘default_cluster:hdfs@10.0.10.101′ (using password: YES)’)
at [Source: (String)””Access denied for user ‘default_cluster:hdfs@10.0.10.101’

查了一下,连接doris的用户名和密码没错。后来发现,spark-submit的参数–conf spark.user=hdfs 影响了,把这个参数去掉就正常了。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
doris 6月 1,2023

spark jdbc模式写入异常

用spark jdbc模式写入doris报下面错误:

java.sql.BatchUpdateException: Insert has filtered data in strict mode, tracking_url=http://192.168.1.40:8040/api/_load_error_log?file=__shard_49/error_log_insert_stmt_8384ff7a733e4ce5-bc24c049a085fdd2_8384ff7a733e4ce5_bc24c049a085fdd2
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.util.Util.handleNewInstance(Util.java:192)
	at com.mysql.cj.util.Util.getInstance(Util.java:167)
	at com.mysql.cj.util.Util.getInstance(Util.java:174)
	at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchedInserts(ClientPreparedStatement.java:755)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:426)
	at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:800)
	at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:667)
	at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:834)
	at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:834)
	at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
	at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
	at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2121)
	at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2121)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
	at org.apache.spark.scheduler.Task.run(Task.scala:121)
	at org.apache.spark.executor.Executor$TaskRunner$$anonfun$11.apply(Executor.scala:407)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1408)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:413)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: Insert has filtered data in strict mode, tracking_url=http://10.0.80.54:8040/api/_load_error_log?file=__shard_49/error_log_insert_stmt_8384ff7a733e4ce5-bc24c049a085fdd2_8384ff7a733e4ce5_bc24c049a085fdd2
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1098)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1046)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1371)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchedInserts(ClientPreparedStatement.java:746)
	... 17 more

点开上面的=http://192.168.1.40:8040/api/_load_error_log?file=__shard_49/error_log_insert_stmt_8384ff7a733e4ce5-bc24c049a085fdd2_8384ff7a733e4ce5_bc24c049a085fdd2,发现报下面的错误:

Reason: no partition for this tuple. tuple=

查看要写入doris对应的表,这个表是动态分区的,发现这个表没有插入数据的分区。后来匹配对应的doris表动态分区后,插入数据果然正常了。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
python 5月 28,2023

解决cannot import name ‘EVENT_TYPE_OPENED’ from ‘watchdog.events’ (/root/anaconda3/lib/python3.9/site-packages/watchdog/events.py)

这个错误表明在尝试从watchdog.events模块导入EVENT_TYPE_OPENED时发生了问题。在搜索结果中,我没有找到与你的问题直接相关的解决方案。但是,我们可以尝试一些方法来解决这个问题。

首先,检查你的代码中是否正确导入了watchdog.events模块。确保你的代码中有以下导入语句:

from watchdog.events import EVENT_TYPE_OPENED

如果你的代码中已经有了这个导入语句,那么问题可能是watchdog库的版本。尝试更新watchdog库到最新版本。你可以使用以下命令来更新:

pip install --upgrade watchdog

如果更新watchdog库之后问题仍然存在,你可以尝试查看watchdog.events模块的源代码,看看EVENT_TYPE_OPENED是否存在。你可以在你的Python环境的site-packages目录下找到watchdog库。在你的问题描述中,watchdog.events模块的路径是/root/anaconda3/lib/python3.9/site-packages/watchdog/events.py。

如果在watchdog.events模块中找不到EVENT_TYPE_OPENED,那么你可能需要查找使用了EVENT_TYPE_OPENED的代码,并尝试替换为watchdog.events模块中存在的其他事件类型。你可以参考watchdog库的文档来了解更多关于事件类型的信息。

如果在尝试上述方法后问题仍然存在,请提供更多关于你的代码和环境的信息,以便我们能够更好地帮助你解决问题

作者 east
doris 5月 26,2023

datax写入doris报错:Writing records to Doris failed

用datax同步数据到doris,报下面错误:

java.lang.RuntimeException: Writing records to Doris failed.
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.close(DorisWriterManager.java:113)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriter$Task.post(DorisWriter.java:150)
 at com.alibaba.datax.core.taskgroup.runner.WriterRunner.run(WriterRunner.java:65)
 at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: Writing records to Doris failed.
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.checkFlushException(DorisWriterManager.java:189)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.waitAsyncFlushingDone(DorisWriterManager.java:150)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.flush(DorisWriterManager.java:98)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.close(DorisWriterManager.java:111)
 ... 3 more
Caused by: java.io.IOException: java.io.IOException: Failed to flush data to Doris.
{"TxnId":-1,"Label":"datax_doris_writer_fed9613c-8d95-4284-a9a2-949985cf3f8d","TwoPhaseCommit":"false","Status":"Fail","Message":"errCode = 7, detailMessage = unknown table, tableName=mediation","NumberTotalRows":0,"NumberLoadedRows":0,"NumberFilteredRows":0,"NumberUnselectedRows":0,"LoadBytes":0,"LoadTimeMs":0,"BeginTxnTimeMs":0,"StreamLoadPutTimeMs":0,"ReadDataTimeMs":0,"WriteDataTimeMs":0,"CommitAndPublishTimeMs":0}
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.asyncFlush(DorisWriterManager.java:170)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager.access$000(DorisWriterManager.java:19)
 at com.alibaba.datax.plugin.writer.doriswriter.DorisWriterManager$1.run(DorisWriterManager.java:134)
 ... 1 more
Caused by: java.io.IOException: Failed to flush data to Doris.

在这种情况下,错误是由于未知表引起的。这可能是由许多因素引起的,例如:

表不存在。
表不可访问。
表配置不正确。
要修复错误,您需要确定错误的原因并采取措施进行纠正。如果表不存在,则需要创建表。如果无法访问表,则需要授予用户对表的写入权限。如果表配置不正确,则需要正确配置它。

一旦您纠正了错误的原因,就应该能够无问题地将数据写入Doris中。

以下是一些解决此错误的附加提示:

检查Doris日志以获取更多有关错误的信息。
尝试使用其他工具(例如Doris CLI或Doris API)将数据写入Doris。
如果仍然遇到问题,您可以联系Doris支持团队寻求帮助。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
云计算 5月 25,2023

IT 项目管理基础:衡量云的成功

最重要的 IT 项目管理基础之一是衡量成功。对于基于云的 IT 项目,这尤其复杂且重要。

当您在云中运营时,很容易超支、扩展速度过快或过慢、失去可见性或犯一系列其他错误。看一个 IT 云项目是成功还是失败是至关重要的。这种可见性使企业和项目管理公司能够确定他们做对了什么,哪里做错了,以及下次可以吸取什么教训。

公司如何通过定义然后取得成功来确保他们保持 IT 项目管理基础一致?

IT 项目是任何涉及与 IT 基础设施、云计算、本地服务、信息系统等相关的投资、实施和改进的业务。它代表了大量工作,可以包括 IT 的许多领域,例如 Web 开发、软件开发、数据库管理和网络配置等等。

IT 项目经理必须了解 IT 项目会影响多个部门和垂直领域。基于云的项目也是如此。 IT 云项目跨越不同的部门和团队。其中许多可能不会经常互动。

大型企业一旦开始涉及云的 IT 项目,许多部门需要循环:安全、合规、销售等。独立的部门需要联合起来以实现整体 IT 目标。因此,一个成功的 IT 项目可以推动整体增长;失败的一个可能对整个组织有害。

IT 投资,尤其是在云计算方面的投资,已大幅增加,到 2021 年底,支出将达到近 4 万亿美元。有如此多的资金和资源专门用于 IT 云项目,了解投资回报率至关重要。这就是衡量项目成功与否的主要 IT 项目管理基础之一。

此外,随着数据收集和分析变得越来越普遍,衡量云 IT 项目的成功为所有相关方提供了一个更大、更清晰的画面,包括业务中的工作、偏离目标的内容、可以改进的内容等等。

通过从以往的成功和失败中吸取教训并将其整合到未来的项目中,您和您的团队能够减少错误,做出更准确的项目预算分配,有效地管理您的费用,实现您的项目目标,并交付预期的结果.整个组织以各种重要方式成为更精明的云用户。

由于 IT 项目的成功是 IT 项目管理基础的关键,因此了解如何衡量成功非常重要。在评估 IT 云项目是否成功时,这些 IT 项目管理指标是关键:

1. 时间表:每个 IT 项目都有一个时间表或时间框架。项目经理和团队的目标是在该时间范围内交付和移交项目,并证明他们能够准确估计完成给定项目所需的时间。

2. 生产力:这一特定指标表明资源管理在 IT 项目中的重要性。项目经理必须评估其团队对资产的整体利用率。团队是否最大化了他们的资源?他们在项目期间是否有效?总工作量是否符合预算工作量?对这些问题的积极回答意味着对底线的积极影响。未能最大限度地利用资源会导致巨大的经济损失。每年,公司都会因为闲置和未充分利用的计算资源而损失 88 亿美元。

3. 预算:许多高管将预算和成本管理列为项目的最高优先事项,因此评估项目在财务上的表现至关重要。简而言之,您是否设法将项目费用控制在预算范围内,还是超支了?对于许多企业来说,预算是一个棘手的领域。我们的 2021 年大数据云技术报告发现,对于 40% 的企业而言,云支出预计会超出预算 40% 或更多。

4. 质量和满意度:质量控制是一种关注客户及其满意度的 IT 项目管理指标。整个项目每个阶段的工作水平都应该很好,从而产生符合甚至超过标准和期望的高质量交付物。

5. 投资回报率 (ROI):ROI 是另一个关键的 IT 项目管理基本指标。通常,项目的最终目标是通过增加利润为组织做出贡献。管理人员使用 ROI 来确定项目是否会产生积极的回报,并根据项目的财务损益与项目总成本来确定项目是否具有业务价值。

每个项目通常都有不同的目标。适用于一个企业或一个业务部门的 IT 项目管理指标可能不适用于另一个企业。因此,根据您企业的独特需求定制指标和报告非常重要。

您现在能够更快地运行 Spark 作业了吗?或者在特定时间内有更多的 Spark 作业?停机时间是否低于某个阈值?

这些可能是适合您的问题,或者完全不同的指标可能是合适的。如果 IT 项目管理指标根据您企业的独特需求精心定制,则量化和衡量项目成功要容易得多。

自云计算出现以来,IT 云项目激增。在提高业务效率、提高数据安全性和减少运营支出的承诺的推动下,许多企业被鼓励将其流程和应用程序迁移到基于云的环境。

87% 的企业现在实施混合云战略,而 93% 目前实施多云方法。令人惊讶的是,大多数企业迁移到云端是为了“更好地优化他们现有的云资产”。

大型 IT 云项目代表着时间、资源、金钱和努力的投资——所有这些都具有隐含的可衡量的投资回报率。使用项目管理系统来跟踪和衡量 IT 云项目的成功势在必行。然而,完全利用本地工具来管理项目是违反直觉的,因为这种方法变得越来越过时,并进一步增加了 IT 项目的预算和支出。

选择基于云的项目管理解决方案有望取得更大的成功。除了明显的成本效益外,在云中管理项目还为项目经理和团队提供了在本地应用程序中无法获得的灵活性和可扩展性。基于云的项目管理解决方案使用户能够根据需求变化扩展团队或添加新功能。

项目管理团队现在是分散的,不再局限于办公室。拥有云托管应用程序可确保他们能够随时随地访问它,这样他们就可以与其他成员同步工作。

项目是有时间限制的努力。一旦 IT 项目到达其生命周期的终点(或未能到达终点),只需考虑三个步骤:终止、延期或过渡。

在项目的所有权和责任正式移交(或部门)之前,项目经理必须进行项目收尾。收尾是另一个重要的 IT 项目管理基础。

项目管理的最后阶段使项目团队能够重新审视项目,确保满足所有项目,并为未来的 IT 计划收集和存储尽可能多的信息。

可靠的项目收尾清单包括以下步骤:

利益相关者可能会发表评论。接受他们并向他们学习。他们的评论是 IT 项目管理基础,因为这些将帮助您在未来交付更好的项目。

每个 IT 项目都需要开发人员提供持续的 IT 支持,尤其是在过渡、入职、培训、错误、修复和更新方面。 IT 供应商可以根据他们的合同协议提供免费的基本 IT 支持或高级支持服务。

交付 IT 云项目后,您和您的团队就需要确保从云投资中获得最大价值。云托管的基础架构、流程和应用程序无疑可以加速任务、提高效率并简化产品周期等。

然而,80% 的企业最终花费超过了他们最初的云预算。为什么?他们未能优化其云基础架构性能和成本。 IT 云项目旨在减少您的运营开支,而不是增加运营开支。但您需要深入了解您的云 IT 项目,看看问题出在哪里。

作者 east
Java 5月 25,2023

Java 中的梯度下降

今天的大多数人工智能都是使用某种形式的神经网络实现的。在我的前两篇文章中,我介绍了神经网络并向您展示了如何在 Java 中构建神经网络。神经网络的力量主要来自于它的深度学习能力,而这种能力建立在梯度下降反向传播的概念和执行之上。我将通过快速深入了解 Java 中的反向传播和梯度下降来结束这个简短的系列文章。
有人说人工智能并不是那么智能,它主要是反向传播。那么,现代机器学习的基石是什么?
要了解反向传播,您必须首先了解神经网络的工作原理。基本上,神经网络是称为神经元的节点的有向图。神经元有一个特定的结构,它接受输入,将它们与权重相乘,添加一个偏差值,并通过激活函数运行所有这些。神经元将它们的输出馈送到其他神经元,直到到达输出神经元。输出神经元产生网络的输出。 (有关更完整的介绍,请参阅机器学习风格:神经网络简介。)
从这里开始,我假设您了解网络及其神经元的结构,包括前馈。示例和讨论将集中在梯度下降的反向传播上。我们的神经网络将有一个输出节点、两个“隐藏”节点和两个输入节点。使用一个相对简单的例子可以更容易地理解算法所涉及的数学。图 1 显示了示例神经网络的图表。
图 1. 我们将用于示例的神经网络图。
梯度下降反向传播的思想是将整个网络视为一个多元函数,为损失函数提供输入。损失函数通过将网络输出与已知的良好结果进行比较来计算一个表示网络执行情况的数字。与良好结果配对的输入数据集称为训练集。损失函数旨在随着网络行为远离正确而增加数值。
梯度下降算法采用损失函数并使用偏导数来确定网络中每个变量(权重和偏差)对损失值的贡献。然后它向后移动,访问每个变量并调整它以减少损失值。
理解梯度下降涉及微积分中的一些概念。首先是导数的概念。 MathsIsFun.com 对导数有很好的介绍。简而言之,导数为您提供函数在单个点处的斜率(或变化率)。换句话说,函数的导数为我们提供了给定输入的变化率。 (微积分的美妙之处在于它可以让我们在没有其他参考点的情况下找到变化——或者更确切地说,它可以让我们假设输入的变化非常小。)
下一个重要的概念是偏导数。偏导数让我们采用多维(也称为多变量)函数并仅隔离其中一个变量以找到给定维度的斜率。
导数回答了以下问题:函数在特定点的变化率(或斜率)是多少?偏导数回答了以下问题:给定方程的多个输入变量,仅这一个变量的变化率是多少?
梯度下降使用这些思想来访问方程中的每个变量并对其进行调整以最小化方程的输出。这正是我们训练网络时想要的。如果我们将损失函数视为绘制在图表上,我们希望以增量方式向函数的最小值移动。也就是说,我们要找到全局最小值。
请注意,增量的大小在机器学习中称为“学习率”。
当我们探索梯度下降反向传播的数学时,我们将紧贴代码。当数学变得过于抽象时,查看代码将有助于让我们脚踏实地。让我们首先查看我们的 Neuron 类,如清单 1 所示。
Neuron 类只有三个 Double 成员:weight1、weight2 和 bias。它也有一些方法。用于前馈的方法是 compute()。它接受两个输入并执行神经元的工作:将每个输入乘以适当的权重,加上偏差,然后通过 sigmoid 函数运行它。
在我们继续之前,让我们重新审视一下 sigmoid 激活的概念,我在神经网络简介中也讨论过它。清单 2 显示了一个基于 Java 的 sigmoid 激活函数。
sigmoid 函数接受输入并将欧拉数 (Math.exp) 提高到负数,加 1 再除以 1。效果是将输出压缩在 0 和 1 之间,越来越大和越来越小的数字逐渐接近极限。
DeepAI.org 对机器学习中的 sigmoid 函数有很好的介绍。
回到清单 1 中的 Neuron 类,除了 compute() 方法之外,我们还有 getSum() 和 getDerivedOutput()。 getSum() 只是进行权重 * 输入 + 偏差计算。请注意,compute() 采用 getSum() 并通过 sigmoid() 运行它。 getDerivedOutput() 方法通过一个不同的函数运行 getSum():sigmoid 函数的导数。
现在看一下清单 3,它显示了 Java 中的 sigmoid 导数函数。我们已经从概念上讨论了衍生品,下面是实际应用。
记住导数告诉我们函数在其图中的单个点的变化是什么,我们可以感受一下这个导数在说什么:告诉我给定输入的 sigmoid 函数的变化率。您可以说它告诉我们清单 1 中的预激活神经元对最终激活结果有何影响。
您可能想知道我们如何知道清单 3 中的 sigmoid 导数函数是正确的。答案是,如果它已经被其他人验证过,并且如果我们知道根据特定规则正确微分的函数是准确的,我们就会知道导数函数是正确的。一旦我们理解了它们在说什么并相信它们是准确的,我们就不必回到第一原理并重新发现这些规则——就像我们接受并应用简化代数方程式的规则一样。
所以,在实践中,我们是按照求导法则来求导数的。如果您查看 sigmoid 函数及其导数,您会发现后者可以通过遵循这些规则得出。出于梯度下降的目的,我们需要了解导数规则,相信它们有效,并了解它们的应用方式。我们将使用它们来找出每个权重和偏差在网络最终损失结果中所扮演的角色。
符号 f prime f'(x) 是“f 对 x 的导数”的一种表达方式。另一个是:
两者是等价的:
您很快就会看到的另一种表示法是偏导数表示法:
这就是说,给我变量 x 的 f 的导数。
最令人好奇的衍生规则是链式法则。它说当一个函数是复合的(函数中的函数,又名高阶函数)时,你可以像这样扩展它:
我们将使用链式法则来解压我们的网络并获得每个权重和偏差的偏导数。

作者 east
chatgpt 5月 24,2023

90% 的亚太地区企业计划在未来 12 个月内部署人工智能:报告

预计到 2023 年底,人工智能 (AI) 将成为亚太地区的主流,该地区超过 88% 的企业已经在使用或计划在未来 12 个月内使用人工智能或机器学习 (ML) 应用程序。一份由联想和 AMD 联合委托的 IDC 报告。
“AI 应用程序使 CIO 能够分析大量信息并创建实时洞察力,以推动客户参与和客户体验,管理快速扩展的地理分散基础架构的日益复杂性以实现更高水平的弹性和敏捷性,并确保他们的 IT 运营免受勒索软件和恶意软件攻击发生率不断上升的背景下,”IDC 报告表示,该报告基于对亚太地区 900 多名首席信息官和 IT 决策者的研究。
该研究指出,预计企业将采用 AI/ML 的前三大业务流程包括 IT 运营、网络安全以及客户支持和服务。
联想 ISG 印度董事总经理 Amit Luthra 表示:“组织正在寻求 AI/ML 来简化 IT 运营,直到今天,有些组织还需要时间才能将虚拟机分配给客户。” Luthra 指出,鉴于在当前的业务环境中,一些工作负载在公共云中,而在混合云中则有一些工作负载,因此很难定义操作并确定谁负责哪些数据。 “因此,人工智能通过提供适当的见解来帮助做出明智的决定。”
报告指出,人工智能可以在确保网络安全弹性方面发挥重要作用。垂直行业中不同规模的组织根据他们的要求使用 AI 来简化安全性。 “在不依赖(最少或零接触点)人类的情况下识别、预测、响应和了解潜在威胁将是 AI 可以带来的最好的东西,当你拥有一个完整的基于 AI 的安全框架时,就会发生这种情况, ”卢瑟拉说。 “网络安全不是一种产品。根据对框架的理解程度,可以使用各种人工智能工具来构建成功的网络弹性。”
人工智能在提供卓越的客户服务方面一直发挥着重要作用。多年来,各个垂直行业的组织一直在依靠人工智能来提升客户体验。根据行业的不同,人工智能工具在不同组织中的使用程度也不同。 “例如,在汽车行业,人工智能被用于通过提供互联汽车的功能和增强的娱乐系统来确保客户体验,因为汽车的销量在很大程度上取决于此。同样在另一方面,汽车制造商在车间使用 AI 来确保将零件报废率降到最低。同样,银行业使用人工智能通过实时报告事件而不是事后报告来打击洗钱活动。与此同时,医疗保健行业正在使用 AI 来提供预防性医疗保健,”Luthra 说。
报告称,制造、零售、物流、运输和能源等垂直行业的企业越来越注重提供卓越的客户体验,以推动数字经济取得成功,而这正是人工智能可以发挥重要作用的地方。
随着 ChatGPT 和 Google Bard 等高级人工智能工具的出现,企业正在考虑不同的用例,将此类高级聊天机器人集成到他们的技术堆栈中。然而,Luthra 指出,“一些人工智能工具已经被用于各个领域。现在,随着 ChatGPT 和 Google Bard 的下一级自动搜索的出现,它将进一步推进。我们必须看看它是如何演变的。”
然而,正如报告指出的那样,打算真正利用 AI 应用程序的组织将需要进行文化转型。随着 CIO 成为当今董事会讨论的一部分,这可能不再那么困难了。 “首席信息官们希望回头在他们经营的行业中创造差异化。技术与业务保持一致并使用 AI 作为推动因素的组织能够实现这一愿景,”Luthra 说。

作者 east
云计算 5月 24,2023

适当调整工作负载以在云中取得成功

IT 和运营团队的任务是制定一项战略,以确保组织通过基于云的服务取得成功。当他们将工作负载迁移到公共云后,承诺的效率和节省没有实现时,他们常常感到失望。 Bain & Company 的一份报告,Rightsizing Your Way to the Cloud,包括对 60,000 多个工作负载的分析结果。贝恩咨询了 350 多位 IT 决策者,他们的云部署的哪些方面最令人失望且未达到他们的期望。抱怨最多的是拥有成本没有下降。在某些情况下,成本增加了。为什么没有达到预期?

该报告发现,当公司不执行必要的评估和准备时,将工作负载迁移到公共云的成本可能比将它们保留在遗留的本地环境中高出 15%。换句话说,尽管云计算的前景十分可观,但保持不变可能更具成本效益。

问题?现有的低效率正在转移到云端

Bain 的分析显示,84% 的本地工作负载被过度配置,其计算能力、内存和存储超出了高效运行所需。当 IT 运营购买的硬件多于确保它们具有足够的性能来满足工作负载需求高峰期所需的硬件时,任务关键型工作负载通常会发生过度配置。这包括使用更多装有硬盘驱动器的服务器进行横向扩展,以增加计算能力并最大程度地减少延迟。虽然硬盘驱动器成本合理,但像这样的大规模横向扩展会增加电力、冷却和管理成本。

当组织对基于云的服务采用这种方法时,他们会随之发送多余的计算和存储容量。他们并没有提高效率,而是使用一种称为“提升和转移”的方法,将现有的低效率转移到一个新的位置。贝恩发现,剥离多余的资源容量可以将云迁移成本降低多达 60%,同时降低在云中运行工作负载的长期成本。其他 IT 咨询专家也同意这一观点。根据 Forrester Research 最近的一项云成本优化研究,解决浪费的云使用和激增的云支出是云管理重要的第一步。

解决方案?合适的尺寸

调整工作负载大小涉及重新评估其所需的真实存储量和计算能力。为确定这一点,组织可以监控一段时间内的工作负载需求,以确定平均和峰值计算资源消耗。预期迁移到基于云的服务的组织应采取严格的方法来调整其工作负载,包括对整个企业的计算和存储实践进行全面评估。贝恩的经验表明,适当调整 IT 资源规模可以将运营和资本支出削减多达 30% 至 60%。

云迁移是一个长期过程,而不是一个事件

云迁移是一个长期过程,对于大规模、横向扩展的 Hadoop 和 Spark 分布式计算环境来说可能会持续数年。大多数组织一次迁移一个工作负载/应用程序。并非每个工作负载都属于云,组织将希望评估哪些是合适的候选者。由于涉及多个预迁移步骤,完成将工作负载实际迁移到云的任务需要时间。在迁移过程中,许多工作负载仍在本地运行。在可预见的未来,不适合云计算的工作负载将保留在本地。

作者 east
云计算 5月 23,2023

开始获得实时性能数据的优势

IT 基础架构服务需要不断调整和优化以维护 SLA,同时最大限度地提高您的投资。大数据的出现和随后的使用在这方面提供了巨大帮助。实时性能数据是最大限度发挥大数据力量的下一步发展。

虽然实时性能数据现在对现代企业的成功至关重要,但许多组织尚未完全由数据驱动。在 NewVantage Partners 最近的大数据和人工智能高管调查中,69% 的受访者表示他们尚未建立数据驱动的组织。在同一项研究中,72% 的受访者表示他们没有现成的数据文化。最重要的是,超过一半的参与者表示他们不将数据视为商业资产 (53%),并且不在数据和分析方面展开竞争 (52%)。

然而,随着消费者需求的增长和资源需求变得更加复杂,企业现在必须接受实时性能数据,以确保他们的 IT 架构能够跟上发展并且运营成本保持在可控范围内。

每个系统、流程、工作流和应用程序都会生成内部实时性能数据。为了提高效率和降低成本,企业利用这些数据来查看哪些任务运行缓慢,问题出在哪里,并消除瓶颈。

数据越新鲜,您就能越快地识别和解决问题。这导致更高效的流程和更快的决策制定。当来自系统、工作流和任务的数据可立即用于实时性能分析时,它们得出的见解质量更高且更具可操作性。

实时性能数据之所以强大,是因为它提供了最新的信息来改进优化工作、增强决策制定过程并实现更深入的调试、故障排除和规划。

速度是实时分析和数据处理的主要优势。企业及其 IT 团队无需等待数小时或数天才能处理和分析其性能数据。快速、实时的分析和数据处理为他们提供了执行必要调整、做出关键和战略决策以及在需要时启动干预所需的可靠信息。

应用程序数据的实时性能分析使您能够充分利用基础架构。通过对应用程序性能的实时观察,您可以快速收集来自所有层和堆栈的所有信息,并创建一个完整的画面。您会立即明白为什么您的应用程序会以它们现在的方式运行。您还知道如何快速果断地解决问题,将停机时间限制在最低限度,并确保为您的应用程序维护 SLA。

除了对您的 IT 基础设施、应用程序、工作流和流程进行快速可靠的观察之外,实时分析和数据处理还可以帮助预测资源消耗,从而允许用户为每个应用程序和任务分配适量的资源。在具有可扩展性和机器学习 (ML) 功能的 IT 堆栈优化系统中,实时性能分析有助于自动为应用程序和工作流分配和部署资源,以确保它们以最佳水平运行。

相当多的企业仍在使用过时的解决方案,几乎没有实时数据功能。这意味着他们的数据不会不断更新,也不是为与现代系统集成而设计的。数据变得停滞、孤立和无用。

对于某些组织而言,由于缺乏更新和更先进的绩效管理工具,他们需要手动收集和管理绩效数据。因此,分析和优化无法完全自动化。

如果依赖手动调整,数据的“实时新鲜度”将被浪费。要充分利用实时性能数据,企业需要同时利用自动优化和机器学习。

通过自动优化,该解决方案对整个 IT 基础架构中的所有数据执行实时性能分析。然后,该解决方案使用最理想的配置和资源数量自动扩展资源并运行应用程序和任务,以维护 SLA,同时降低成本。

作者 east

上一 1 … 36 37 38 … 93 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 如何在Chrome中设置启动时自动打开多个默认网页
  • spark内存溢出怎样区分是软件还是代码原因
  • MQTT完全解析和实践
  • 解决运行Selenium报错:self.driver = webdriver.Chrome(service=service) TypeError: __init__() got an unexpected keyword argument ‘service’
  • python 3.6使用mysql-connector-python报错:SyntaxError: future feature annotations is not defined
  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?

文章归档

  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (45)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (5)
  • 大数据开发 (493)
    • CDH (6)
    • datax (4)
    • doris (31)
    • Elasticsearch (15)
    • Flink (79)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (41)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (100)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (35)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (71)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (7)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.