大数据:任务调度,手把手教你

大数据:任务调度https://blog.csdn.net/qq_43713049/article/details/116985497

文章目录

  • 任务调度
    • 一、任务流调度的需求
    • 二、任务流调度的工具
    • 三、Oozie的简介
    • 四、Oozie的2种使用方式
    • 五、WorkFlow 与 Fork 和 Join
    • 六、SubFlow:子工作流
    • 七、定时调度的实现
    • 八、自动化调度的实现
      • 1.自动化调度需求
      • 2.自动化调度脚本
      • 3.自动化调度实现

任务调度

一、任务流调度的需求

整体需求

  • 相同的业务线,有不同的需求会有多个程序来实现,这多个程序共同完成的需求,组合在一起就是工作流或者叫做任务流
  • 基于工作流来实现任务流的自动化运行

在这里插入图片描述
基于时间的任务运行

  • Job1和Job2是在每天固定的时间去采集昨天的数据
  • 每天00:00

基于运行依赖关系的任务运行

  • Job3必须等待Job1运行成功,才能运行
  • Job5必须等待Job3和Job4都运行成功才能运行

调度类型

  • 定时调度:基于某种时间的规律进行调度运行
  • 依赖调度:基于某种依赖关系进行调度运行

二、任务流调度的工具

Linux Crontab
Linux中自带的一个工具

  • 优点

    • 简单,不用做额外的部署,能实现大多数的定时需求
    • crontab -e
  • 缺点

    • 只能做定时任务的执行
  • 语法

    *			*			*			*			*			command
    分钟	   小时		    日			月		   周几
    
    • 1
    • 2

Oozie
Cloudera公司研发的Hadoop生态圈的调度工具

  • 官网:oozie.apache.org
  • 优点
    • 功能很强大,能满足几乎所有常规的任务流调度的需求
    • 支持DAG流程调度
  • 缺点
    • 本身不是分布式的工具,依赖于MapReduce来实现分布式
    • 原生的交互开发接口不友好
    • 整体的监控不完善
    • 学习成本比较高

Zeus
阿里巴巴最早基于Hadoop1研发的一个调度系统,目前市场上的Zeus一般都是携程版本的Zeus

  • 优点
    • 交互非常友好
    • 使用非常简单
    • 分布式的,功能相对也比较全面
  • 缺点
    • Bug非常多,阿里没有继续研发Zeus,不支持Hadoop2

Azkaban
LinkedIn公司研发的分布式调度工具

  • 优点
    • 重点着重于自身的调度功能的研发,其他的辅助性功能都通过插件来完成
    • 自身也是分布式调度系统
    • 界面交互性比较友好
    • 开发交互性:properties或者JSON
  • 缺点
    • 3.x版本开始才支持完全分布式

三、Oozie的简介

功能

  • Oozie是一个专门为管理Hadoop生态的程序调度而设计的工作流调度系统
  • 基于DAG实现依赖调度:WorkFlow
  • 基于定时器实现定时调度:Coordinator

特点

  • 优点:功能全面
  • 缺点:部署相对复杂、原生开发方式过于复杂

应用

  • 基于Hadoop平台的分布式离线任务流调度

原理

  • 底层依赖于MapReduce,将工作流变成MapReduce程序,提交个YARN
  • 由YARN来将不同的工作流分配到不同的机器上运行,用于构建分布式调度系统

四、Oozie的2种使用方式

原生方式

  • 这种方式,是通过自己写代码的方式来实现工作流的开发,效率低,容易出问题,不用

  • 实现一个效果:4个程序

    • 第一个程序:shell脚本,定时运行的
    • 第二个程序:Spark程序,必须等第一个程序运行完才能运行
    • 第三个程序:MapReduce程序,必须等第二个程序运行才能运行’
    • 第四个程序:Hive,必须等第三个程序运行完才能运行
  • 先要开发一个XML文件

    • 控制节点:start、end、kill
      • 控制程序运行的流程
    • start:开始节点
      • end:终止节点
      • kill:强制退出节点
      • fork:分支节点
      • join:合并节点
    • 程序节点:action
<start to="first">
<action name="first"><shell><path>xxx.sh</path><args></args></shell><ok to="second"> </ok><error to="kill"></error>
</action>
<action name ="second"><spark><jar></jar><class></class>……</spark><ok to="third"> </ok>
<error to="kill"></error>
<action><action name ="forth"><hive><scprit></scprit><path></path>……</hive><ok to="end"> </ok><error to="kill"></error>
<action>
<kill name="kill"> kill 
</kill><end name="end"> end 
</end>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

集成Hue

  • 由于Oozie原生的方式交互性非常差,导致用户上手非常困难

  • Cloudera基于可视化需求,在Hue中集成Oozie开发和监控
    在这里插入图片描述
    在这里插入图片描述

五、WorkFlow 与 Fork 和 Join

创建测试脚本

  • 启动Oozie:在第一台机器
    • 启动:start-oozie.sh
      在这里插入图片描述
  • 关闭:stop-oozie.sh

测试

  • 创建四个脚本
mkdir /export/data/flow
  • 1
  • /export/data/flow/test01.sh
#!/bin/bash
echo "this is test01"
  • 1
  • 2
  • /export/data/flow/test02.sh
#!/bin/bash
echo "this is test02"
  • 1
  • 2
  • /export/data/flow/test03.sh
#!/bin/bash
echo "this is test03"
  • 1
  • 2
  • /export/data/flow/test04.sh
#!/bin/bash
echo "this is test04"
  • 1
  • 2
  • 上传到HDFS
hdfs dfs -put /export/data/flow /user/oozie/
  • 1

单job工作流
需求1:构建一个工作流,执行test01
在这里插入图片描述
多job工作流
需求2:构建一个工作流,先执行test01,再执行test02,最后执行test03
在这里插入图片描述

在这里插入图片描述
分支工作流

  • 需求3

  • test01先执行

  • test01执行完成,test02和test03并行执行

  • test02和test03都执行完成,执行test04
    在这里插入图片描述

在这里插入图片描述

六、SubFlow:子工作流

需求:在调度运行一个工作流的实现,需要嵌套调用另外一个工作流
在这里插入图片描述
在这里插入图片描述

七、定时调度的实现

在这里插入图片描述
在这里插入图片描述

八、自动化调度的实现

1.自动化调度需求

  • 目标:自动化实现增量任务流调度
  • 实施
    • 第一个job:增量采集
    • 第二个job:统计昨天的订单总个数
    • 第三个job:统计昨天的订单总金额
    • 第四个job:合并二和三的结果,得到每天的订单总个数,和总金额,导出到MySQL

2.自动化调度脚本

  • 目标实现自动化脚本调度的开发

  • 路径

    • step1:增量采集脚本job1
    • step2:增量统计个数脚本job2
    • step3:增量统计金额脚本job3
    • step4:增量合并导出脚本job4
  • 实施

增量采集脚本job1

  • 创建脚本
vim /export/data/shell/01.collect.sh
  • 1
  • 开发Shell脚本
#!/bin/bash

#step1:先获取要采集的数据时间,规则:如果没有给参数,就默认处理昨天的日期,如果给了参数,就参数对应的日期
if [ $# -ne 0 ]
then
#参数个数不为0
if [ $# -ne 1 ]
then
echo “参数至多只能有一个,为处理的日期,请重新运行!”
exit 100
else
#参数个数只有1个,就用第一个参数作为处理的日期
yesterday=KaTeX parse error: Expected 'EOF', got '#' at position 13: 1 fi else #̲参数个数为0,默认处理昨天的日…{yesterday}"

echo “step2:开始运行采集的程序”
#step2:运行增量采集
SQOOP_HOME=/export/server/sqoop-1.4.6-cdh5.14.0
SQOOPHOME/bin/sqoopimport−−connectjdbc:mysql://node3:3306/dborder−−usernameroot−−password−filehdfs://node1:8020/user/oozie/shell/sqoop.passwd−−query"select∗fromtborderwheresubstring(createtime,1,10)=′SQOOP_HOME/bin/sqoop import \ --connect jdbc:mysql://node3:3306/db_order \ --username root \ --password-file hdfs://node1:8020/user/oozie/shell/sqoop.passwd \ --query "select * from tb_order where substring(create_time,1,10) = 'SQOOPHOME/bin/sqoopimport connectjdbc:mysql://node3:3306/dborder usernameroot passwordfilehdfs://node1:8020/user/oozie/shell/sqoop.passwd query"selectfromtborderwheresubstring(createtime,1,10)={yesterday}’ and $CONDITIONS "
–delete-target-dir
–target-dir /nginx/logs/tb_order/daystr=${yesterday}
–fields-terminated-by ‘\t’
-m 1

echo “step2:采集的程序运行结束”

echo “step3:开始运行ETL”
#模拟ETL的过程,将采集的新增的数据移动到表的目录下
HADOOP_HOME=/export/server/hadoop-2.6.0-cdh5.14.0
#先判断结果是否存在,如果已经存在,先删除再移动
HADOOPHOME/bin/hdfsdfs−test−e/user/hive/warehouse/tborder/daystr=HADOOP_HOME/bin/hdfs dfs -test -e /user/hive/warehouse/tb_order/daystr=HADOOPHOME/bin/hdfsdfsteste/user/hive/warehouse/tborder/daystr={yesterday}
if [ $? -eq 0 ]
then
#存在
HADOOPHOME/bin/hdfsdfs−rm−r/user/hive/warehouse/tborder/daystr=HADOOP_HOME/bin/hdfs dfs -rm -r /user/hive/warehouse/tb_order/daystr=HADOOPHOME/bin/hdfsdfsrmr/user/hive/warehouse/tborder/daystr={yesterday}
HADOOPHOME/bin/hdfsdfs−cp/nginx/logs/tborder/daystr=HADOOP_HOME/bin/hdfs dfs -cp /nginx/logs/tb_order/daystr=HADOOPHOME/bin/hdfsdfscp/nginx/logs/tborder/daystr={yesterday} /user/hive/warehouse/tb_order/
else
#不存在
HADOOPHOME/bin/hdfsdfs−cp/nginx/logs/tborder/daystr=HADOOP_HOME/bin/hdfs dfs -cp /nginx/logs/tb_order/daystr=HADOOPHOME/bin/hdfsdfscp/nginx/logs/tborder/daystr={yesterday} /user/hive/warehouse/tb_order/
fi
echo “step3:ETL结束”

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

增量统计个数脚本job2

  • 创建脚本
vim /export/data/shell/02.analysis.sh
vim /export/data/shell/02.analysis.sql
  • 1
  • 2
  • 开发Shell脚本

#!/bin/bash
#step1:先获取要采集的数据时间,规则:如果没有给参数,就默认处理昨天的日期,如果给了参数,就参数对应的日期
if [ $# -ne 0 ]
then#参数个数不为0if [ $# -ne 1 ]thenecho "参数至多只能有一个,为处理的日期,请重新运行!"exit 100else#参数个数只有1个,就用第一个参数作为处理的日期yesterday=$1fi
else#参数个数为0,默认处理昨天的日期yesterday=`date -d '-1 day' +%Y-%m-%d`
fi
echo "step1:要处理的日期是:${yesterday}"echo "step2:开始运行分析"
#step2:运行分析程序
HIVE_HOME=/export/server/hive-1.1.0-cdh5.14.0
$HIVE_HOME/bin/hive --hiveconf yest=${yesterday}  -f  hdfs://node1:8020/user/oozie/shell/02.analysis.sql
echo "step2:分析的程序运行结束"
    • 开发SQL文件
    
    
create table if not exists default.tb_order(
id string ,
pid string,
userid string,
price double ,
create_time string
)
partitioned  by (daystr string)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/tb_order';
alter table default.tb_order add if not exists partition (daystr='${hiveconf:yest}');create table if not exists default.tb_order_num_rs(
daystr string,
order_number int
)
row format delimited fields terminated by '\t';insert into table default.tb_order_num_rs
select
daystr,
count(id) as order_number
from default.tb_order
where daystr='${hiveconf:yest}'
group by daystr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

增量统计金额脚本job3

  • 创建脚本
vim /export/data/shell/03.analysis.sh
vim /export/data/shell/03.analysis.sql
  • 1
  • 2
  • 开发Shell脚本

#!/bin/bash#step1:先获取要采集的数据时间,规则:如果没有给参数,就默认处理昨天的日期,如果给了参数,就参数对应的日期
if [ $# -ne 0 ]
then#参数个数不为0if [ $# -ne 1 ]thenecho "参数至多只能有一个,为处理的日期,请重新运行!"exit 100else#参数个数只有1个,就用第一个参数作为处理的日期yesterday=$1fi
else#参数个数为0,默认处理昨天的日期yesterday=`date -d '-1 day' +%Y-%m-%d`
fi
echo "step1:要处理的日期是:${yesterday}"echo "step2:开始运行分析"
#step2:运行分析程序
HIVE_HOME=/export/server/hive-1.1.0-cdh5.14.0
$HIVE_HOME/bin/hive --hiveconf yest=${yesterday}  -f  hdfs://node1:8020/user/oozie/shell/03.analysis.sqlecho "step2:分析的程序运行结束"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 开发SQL文件

create table if not exists default.tb_order(
id string ,
pid string,
userid string,
price double ,
create_time string
)
partitioned  by (daystr string)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/tb_order';alter table default.tb_order add if not exists partition (daystr='${hiveconf:yest}');create table if not exists default.tb_order_price_rs(
daystr string,
order_price double
)
row format delimited fields terminated by '\t';insert into table default.tb_order_price_rs
select
daystr,
sum(price) as order_price
from default.tb_order
where daystr='${hiveconf:yest}'
group by daystr;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

增量合并导出脚本job4

  • 创建脚本
vim /export/data/shell/04.export.sh
vim /export/data/shell/04.export.sql      
  • 1
  • 2
  • 开发Shell脚本

#!/bin/bash#step1:先获取要采集的数据时间,规则:如果没有给参数,就默认处理昨天的日期,如果给了参数,就参数对应的日期
if [ $# -ne 0 ]
then#参数个数不为0if [ $# -ne 1 ]thenecho "参数至多只能有一个,为处理的日期,请重新运行!"exit 100else#参数个数只有1个,就用第一个参数作为处理的日期yesterday=$1fi
else#参数个数为0,默认处理昨天的日期yesterday=`date -d '-1 day' +%Y-%m-%d`
fi
echo "step1:要处理的日期是:${yesterday}"echo "step2:开始运行分析"
#step2:运行分析程序
HIVE_HOME=/export/server/hive-1.1.0-cdh5.14.0
$HIVE_HOME/bin/hive --hiveconf yest=${yesterday}  -f  hdfs://node1:8020/user/oozie/shell/04.export.sqlecho "step2:分析的程序运行结束"echo "step3:开始运行导出的程序"
#step2:运行增量采集
SQOOP_HOME=/export/server/sqoop-1.4.6-cdh5.14.0
$SQOOP_HOME/bin/sqoop export \
--connect jdbc:mysql://node3:3306/db_order \
--username root \
--password-file hdfs://node1:8020/user/oozie/shell/sqoop.passwd \
--table tb_order_rs \
--hcatalog-database default \
--hcatalog-table tb_order_rs \
--input-fields-terminated-by '\t' \
--update-key daystr \
--update-mode allowinsert \
-m 1echo "step3:导出的程序运行结束"       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 开发SQL文件

create table if not exists default.tb_order_rs(
daystr string,
order_number int,
order_price double)
row format delimited fields terminated by '\t';insert into table default.tb_order_rs
select
a.daystr,
a.order_number,
b.order_price
from default.tb_order_num_rs a join default.tb_order_price_rs b on a.daystr = b.daystr
where a.daystr='${hiveconf:yest}';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.自动化调度实现

上传

cp  /export/data/sqoop.passwd /export/data/shell/
hdfs dfs -put /export/data/shell /user/oozie/
  • 1
  • 2

在MySQL中导入最新数据

use db_order;
insert into tb_order values('o00013','p00009','u00001',121,'2021-05-17 00:01:01');
insert into tb_order values('o00014','p00010','u00002',122,'2021-05-17 10:01:02');
insert into tb_order values('o00015','p00011','u00003',123,'2021-05-17 11:01:03');
insert into tb_order values('o00016','p00012','u00004',124,'2021-05-17 23:01:04');
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸识别 | 你的论文离CVPR , 还有多远?

最近&#xff0c;一则人脸识别安全性问题的新闻上了热搜。&#xff08;图片来自网络&#xff09;虽然让不少人产生了“人在家中坐&#xff0c;债从天上来”的担忧&#xff0c;但也不由感叹人脸识别的发展与普及。人脸识别发展至今&#xff0c;已经在众多领域中占领重要地位。这…

LeetCode 455. 分发饼干(贪心)

1. 题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺…

开源开放 | 高质量体育赛事摘要数据集SGSum(CCKS2021)

OpenKG地址&#xff1a;http://openkg.cn/dataset/sgsumGitHub&#xff1a;https://github.com/krystalan/SGSum开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;苏州大学&#xff08;王佳安、张汀依、瞿剑峰、李直旭&#xff09…

消息队列设计精要

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&#xff0c;炙手可热的Kafka&#x…

数学教育中的AI:NeurIPS’21 Workshop 欢迎投稿!

Workshop主页&#xff1a;https://mathai4ed.github.io数学推理是一种人类独特的智慧能力&#xff0c;也是人类在对科学和知识的探寻道路上不可缺少的基石。不过&#xff0c;数学学习通常是一项极具挑战性的过程&#xff0c;因为它依赖于指导者对学习内容的设计、教学和评估。从…

LeetCode 696. 计数二进制子串

1. 题目 给定一个字符串 s&#xff0c;计算具有相同数量0和1的非空(连续)子字符串的数量&#xff0c;并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 : 输入: "00110011" 输出: 6 解释: 有6个子串具有相同数量…

论文浅尝 - ISWC2021 | 当知识图谱遇上零样本视觉问答

论文题目&#xff1a;Zero-shot Visual Question Answering using Knowledge Graph本文作者&#xff1a;陈卓(浙江大学)、陈矫彦(牛津大学)、耿玉霞(浙江大学)、Jeff Z. Pan(爱丁堡大学)、苑宗港(华为)、陈华钧(浙江大学)发表会议&#xff1a;ISWC 2021论文链接&#xff1a;htt…

Java 8系列之重新认识HashMap

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8对HashMap底层的实现进行了优化&#xff0c;例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别&…

LeetCode 1042. 不邻接植花(图的数据结构)

1. 题目 有 N 个花园&#xff0c;按从 1 到 N 标记。在每个花园中&#xff0c;你打算种下四种花之一。 paths[i] [x, y] 描述了花园 x 到花园 y 的双向路径。 另外&#xff0c;没有花园有 3 条以上的路径可以进入或者离开。 你需要为每个花园选择一种花&#xff0c;使得通…

我用Transformer修复代码bug

源&#xff1a;机器之心本地化 Bug 并修复程序是软件开发过程中的重要任务。在本篇论文中&#xff0c;来自微软 CloudAI 部门的研究者介绍了 DeepDebug&#xff0c;一种使用大型预训练模型 transformer 进行自动 debug 的方法。首先&#xff0c;研究者基于 20 万个库中的函数训…

论文浅尝 | 一种基于递归超图的知识图谱问答方法

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生来源&#xff1a;EACL’21链接&#xff1a;https://www.aclweb.org/anthology/2021.eacl-main.35.pdf概述与动机本文提出了一种基于递归超图的知识图谱问答方法RecHyperNet&#xff0c;作者认为人回答问题时倾向于在推理过程中递归…

模拟登录——添加cookies,使用postmanget请求网页数据

摘要&#xff1a; 在进行爬虫时&#xff0c;除了常见的不用登录就能爬取的网站&#xff0c;还有一类需要先登录的网站。比如豆瓣、知乎&#xff0c;以及上一篇文章中的桔子网。这一类网站又可以分为&#xff1a;只需输入帐号密码、除了帐号密码还需输入或点击验证码等类型。本文…

论文浅尝 | 神经网络是如何外推的:从前馈神经网络到图神经网络

笔记整理 | 王泽元&#xff0c;浙江大学在读硕士&#xff0c;研究方向为图神经网络&#xff0c;对比学习。什么是外推&#xff1f;指从已知数据的孤点集合中构建新的数据的方法。与插值&#xff08;interpolation&#xff09;类似&#xff0c;但其所得的结果意义更小&#xff0…

恕我直言,很多调参侠搞不清数据和模型谁更重要

作者&#xff1a;Dario Radecic&#xff0c;Medium 高质量技术博主编译&#xff1a;颂贤▲图源&#xff1a;[Brandon Lopez]一般的AI课程会介绍很多如何通过参数优化来提高机器学习模型准确性的方法&#xff0c;然而这些方法通常都存在一定的局限性。这是因为我们常常忽视了现代…

LeetCode 720. 词典中最长的单词(Trie树)

1. 题目 给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词&#xff0c;该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案&#xff0c;则返回答案中字典序最小的单词。 若无答案&#xff0c;则返回空字符串。 示例 1: 输入: …

论文浅尝 | 通过知识到文本的转换进行知识增强的常识问答

笔记整理&#xff1a;陈卓&#xff0c;浙江大学在读博士&#xff0c;主要研究方向为低资源学习和知识图谱论文链接&#xff1a;https://www.aaai.org/AAAI21Papers/AAAI-10252.BianN.pdf发表会议&#xff1a;AAAI 2021动机文章提出了对于未来CQA(Commonsense QA)问题的三个见解…

聊聊机器翻译界的“灌水与反灌水之战”!

文 | Willie_桶桶编 | 智商掉了一地针对机器翻译领域如何提高和判断实验可信度&#xff0c;这篇ACL2021的oustanding paper迈出了关键的一步&#xff01;&#xff08;来读&#xff01;全文在末尾&#xff09;作为不停读论文和调参炼丹的科研党&#xff0c;也许在我们的身边总会…

LeetCode 273. 整数转换英文表示

1. 题目 将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。 示例 1: 输入: 123 输出: "One Hundred Twenty Three"示例 2: 输入: 12345 输出: "Twelve Thousand Three Hundred Forty Five"示例 3: 输入: 1234567 输出: "One Mill…

数据标注平台doccano----简介、安装、使用、踩坑记录

1.doccano的安装与初始配置 1.1 doccano的用途 document classification 文本分类sequence labeling 序列标注&#xff0c;用于命名实体识别sequence to sequence seq2seq&#xff0c;用于翻译speech to text 语音转文本标注 命名实体标注 序列标注&#xff08;如机器翻译&…

月圆花美 中秋快乐!

OpenKGOpenKG&#xff08;中文开放知识图谱&#xff09;旨在推动以中文为核心的知识图谱数据的开放、互联及众包&#xff0c;并促进知识图谱算法、工具及平台的开源开放。点击阅读原文&#xff0c;进入 OpenKG 网站。