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

分类归档大数据开发

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

  • 首页   /  
  • 分类归档: "大数据开发"
  • ( 页面24 )
Flink 4月 8,2022

Flink面试题汇总

1、Flink如何保证精确一次性消费

Flink 保证精确一次性消费主要依赖于两种Flink机制

1、Checkpoint机制

2、二阶段提交机制

Checkpoint机制

主要是当Flink开启Checkpoint的时候,会往Source端插入一条barrir,然后这个barrir随着数据流向一直流动,当流入到一个算子的时候,这个算子就开始制作checkpoint,制作的是从barrir来到之前的时候当前算子的状态,将状态写入状态后端当中。然后将barrir往下流动,当流动到keyby 或者shuffle算子的时候,例如当一个算子的数据,依赖于多个流的时候,这个时候会有barrir对齐,也就是当所有的barrir都来到这个算子的时候进行制作checkpoint,依次进行流动,当流动到sink算子的时候,并且sink算子也制作完成checkpoint会向jobmanager 报告 checkpoint n 制作完成。

二阶段提交机制

Flink 提供了CheckpointedFunction与CheckpointListener这样两个接口,CheckpointedFunction中有snapshotState方法,每次checkpoint触发执行方法,通常会将缓存数据放入状态中,可以理解为一个hook,这个方法里面可以实现预提交,CheckpointListyener中有notifyCheckpointComplete方法,checkpoint完成之后的通知方法,这里可以做一些额外的操作。例如FLinkKafkaConumerBase使用这个来完成Kafka offset的提交,在这个方法里面可以实现提交操作。在2PC中提到如果对应流程例如某个checkpoint失败的话,那么checkpoint就会回滚,不会影响数据一致性,那么如果在通知checkpoint成功的之后失败了,那么就会在initalizeSate方法中完成事务的提交,这样可以保证数据的一致性。最主要是根据checkpoint的状态文件来判断的。

2、flink和spark区别

flink是一个类似spark的“开源技术栈”,因为它也提供了批处理,流式计算,图计算,交互式查询,机器学习等。flink也是内存计算,比较类似spark,但是不一样的是,spark的计算模型基于RDD,将流式计算看成是特殊的批处理,他的DStream其实还是RDD。而flink吧批处理当成是特殊的流式计算,但是批处理和流式计算的层的引擎是两个,抽象了DataSet和DataStream。flink在性能上也表现的很好,流式计算延迟比spark少,能做到真正的流式计算,而spark只能是准流式计算。而且在批处理上,当迭代次数变多,flink的速度比spark还要快,所以如果flink早一点出来,或许比现在的Spark更火。

3、Flink的状态可以用来做什么?

Flink状态主要有两种使用方式:

  1. checkpoint的数据恢复
  2. 逻辑计算

4、Flink的waterMark机制,Flink watermark传递机制

Flink 中的watermark机制是用来处理乱序的,flink的时间必须是event time ,有一个简单的例子就是,假如窗口是5秒,watermark是2秒,那么 总共就是7秒,这个时候什么时候会触发计算呢,假设数据初始时间是1000,那么等到6999的时候会触发5999窗口的计算,那么下一个就是13999的时候触发10999的窗口

其实这个就是watermark的机制,在多并行度中,例如在kafka中会所有的分区都达到才会触发窗口

5、Flink的时间语义

Event Time 事件产生的时间

Ingestion time 事件进入Flink的时间

processing time 事件进入算子的时间

6、Flink window join

1、window join,即按照指定的字段和滚动滑动窗口和会话窗口进行 inner join

2、是coGoup 其实就是left join 和 right join,

3、interval join 也就是 在窗口中进行join 有一些问题,因为有些数据是真的会后到的,时间还很长,那么这个时候就有了interval join但是必须要是事件时间,并且还要指定watermark和水位以及获取事件时间戳。并且要设置 偏移区间,因为join 也不能一直等的。

7、flink窗口函数有哪些

Tumbing window

Silding window

Session window

Count winodw

8、keyedProcessFunction 是如何工作的。假如是event time的话

keyedProcessFunction 是有一个ontime 操作的,假如是 event时间的时候 那么 调用的时间就是查看,event的watermark 是否大于 trigger time 的时间,如果大于则进行计算,不大于就等着,如果是kafka的话,那么默认是分区键最小的时间来进行触发。

9、flink是怎么处理离线数据的例如和离线数据的关联?

1、async io

2、broadcast

3、async io + cache

4、open方法中读取,然后定时线程刷新,缓存更新是先删除,之后再来一条之后再负责写入缓存

10、flink支持的数据类型

DataSet Api 和 DataStream Api、Table Api

11、Flink出现数据倾斜怎么办

Flink数据倾斜如何查看:

在flink的web ui中可以看到数据倾斜的情况,就是每个subtask处理的数据量差距很大,例如有的只有一M 有的100M 这就是严重的数据倾斜了。

KafkaSource端发生的数据倾斜

例如上游kafka发送的时候指定的key出现了数据热点问题,那么就在接入之后,做一个负载均衡(前提下游不是keyby)。

聚合类算子数据倾斜

预聚合加全局聚合

12、flink 维表关联怎么做的

1、async io

2、broadcast

3、async io + cache

4、open方法中读取,然后定时线程刷新,缓存更新是先删除,之后再来一条之后再负责写入缓存

13、Flink checkpoint的超时问题 如何解决。

1、是否网络问题

2、是否是barrir问题

3、查看webui,是否有数据倾斜

4、有数据倾斜的话,那么解决数据倾斜后,会有改善,

14、flinkTopN与离线的TopN的区别

topn 无论是在离线还是在实时计算中都是比较常见的功能,不同于离线计算中的topn,实时数据是持续不断的,这样就给topn的计算带来很大的困难,因为要持续在内存中维持一个topn的数据结构,当有新数据来的时候,更新这个数据结构

15、sparkstreaming 和flink 里checkpoint的区别

sparkstreaming 的checkpoint会导致数据重复消费

但是flink的 checkpoint可以 保证精确一次性,同时可以进行增量,快速的checkpoint的,有三个状态后端,memery、rocksdb、hdfs

16、简单介绍一下cep状态编程

Complex Event Processing(CEP):

FLink Cep 是在FLink中实现的复杂时间处理库,CEP允许在无休止的时间流中检测事件模式,让我们有机会掌握数据中重要的部分,一个或多个由简单事件构成的时间流通过一定的规则匹配,然后输出用户想得到的数据,也就是满足规则的复杂事件。

17、 Flink cep连续事件的可选项有什么

18、如何通过flink的CEP来实现支付延迟提醒

19、Flink cep 你用过哪些业务场景

20、cep底层如何工作

21、cep怎么老化

22、cep性能调优

23、Flink的背压,介绍一下Flink的反压,你们是如何监控和发现的呢。

Flink 没有使用任何复杂的机制来解决反压问题,Flink 在数据传输过程中使用了分布式阻塞队列。我们知道在一个阻塞队列中,当队列满了以后发送者会被天然阻塞住,这种阻塞功能相当于给这个阻塞队列提供了反压的能力。

当你的任务出现反压时,如果你的上游是类似 Kafka 的消息系统,很明显的表现就是消费速度变慢,Kafka 消息出现堆积。

如果你的业务对数据延迟要求并不高,那么反压其实并没有很大的影响。但是对于规模很大的集群中的大作业,反压会造成严重的“并发症”。首先任务状态会变得很大,因为数据大规模堆积在系统中,这些暂时不被处理的数据同样会被放到“状态”中。另外,Flink 会因为数据堆积和处理速度变慢导致 checkpoint 超时,而 checkpoint 是 Flink 保证数据一致性的关键所在,最终会导致数据的不一致发生。

Flink Web UI

Flink 的后台页面是我们发现反压问题的第一选择。Flink 的后台页面可以直观、清晰地看到当前作业的运行状态。

Web UI,需要注意的是,只有用户在访问点击某一个作业时,才会触发反压状态的计算。在默认的设置下,Flink的TaskManager会每隔50ms触发一次反压状态监测,共监测100次,并将计算结果反馈给JobManager,最后由JobManager进行反压比例的计算,然后进行展示。

在生产环境中Flink任务有反压有三种OK、LOW、HIGH

OK正常

LOW一般

HIGH高负载

24、Flink的CBO,逻辑执行计划和物理执行计划

Flink的优化执行其实是借鉴的数据库的优化器来生成的执行计划。

CBO,成本优化器,代价最小的执行计划就是最好的执行计划。传统的数据库,成本优化器做出最优化的执行计划是依据统计信息来计算的。Flink 的成本优化器也一样。Flink 在提供最终执行前,优化每个查询的执行逻辑和物理执行计划。这些优化工作是交给底层来完成的。根据查询成本执行进一步的优化,从而产生潜在的不同决策:如何排序连接,执行哪种类型的连接,并行度等等。

// TODO

25、Flink中数据聚合,不使用窗口怎么实现聚合

  • valueState 用于保存单个值
  • ListState 用于保存list元素
  • MapState 用于保存一组键值对
  • ReducingState 提供了和ListState相同的方法,返回一个ReducingFunction聚合后的值。
  • AggregatingState和 ReducingState类似,返回一个AggregatingState内部聚合后的值

26、Flink中state有哪几种存储方式

Memery、RocksDB、HDFS

27、Flink 异常数据怎么处理

异常数据在我们的场景中,一般分为缺失字段和异常值数据。

异常值: 例如宝宝的年龄的数据,例如对于母婴行业来讲,一个宝宝的年龄是一个至关重要的数据,可以说是最重要的,因为宝宝大于3岁几乎就不会在母婴上面购买物品。像我们的有当日、未知、以及很久的时间。这样都属于异常字段,这些数据我们会展示出来给店长和区域经理看,让他们知道多少个年龄是不准的。如果要处理的话,可以根据他购买的时间来进行实时矫正,例如孕妇服装、奶粉的段位、纸尿裤的大小,以及奶嘴啊一些能够区分年龄段的来进行处理。我们并没有实时处理这些数据,我们会有一个底层的策略任务夜维去跑,一个星期跑一次。

缺失字段: 例如有的字段真的缺失的很厉害,能修补就修补。不能修补就放弃,就像上家公司中的新闻推荐过滤器。

28、Flink 监控你们怎么做的

1、我们监控了Flink的任务是否停止

2、我们监控了Flink的Kafka的LAG

3、我们会进行实时数据对账,例如销售额。

29、Flink 有数据丢失的可能吗

Flink有三种数据消费语义:

  1. At Most Once 最多消费一次 发生故障有可能丢失
  2. At Least Once 最少一次 发生故障有可能重复
  3. Exactly-Once 精确一次 如果产生故障,也能保证数据不丢失不重复。

flink 新版本已经不提供 At-Most-Once 语义。

30、Flink interval join 你能简单的写一写吗

DataStream<T> keyed1 = ds1.keyBy(o -> o.getString("key"))
DataStream<T> keyed2 = ds2.keyBy(o -> o.getString("key"))
//右边时间戳-5s<=左边流时间戳<=右边时间戳-1s
keyed1.intervalJoin(keyed2).between(Time.milliseconds(-5), Time.milliseconds(5))

31、Flink 提交的时候 并行度如何制定,以及资源如何配置

并行度根据kafka topic的并行度,一个并行度3个G

32、Flink的boardcast join 的原理是什么

利用 broadcast State 将维度数据流广播到下游所有 task 中。这个 broadcast 的流可以与我们的事件流进行 connect,然后在后续的 process 算子中进行关联操作即可。

33、flink的source端断了,比如kafka出故障,没有数据发过来,怎么处理?

会有报警,监控的kafka偏移量也就是LAG。

34、flink有什么常用的流的API?

window join 啊 cogroup 啊 map flatmap,async io 等

35、flink的水位线,你了解吗,能简单介绍一下吗

Flink 的watermark是一种延迟触发的机制。

一般watermark是和window结合来进行处理乱序数据的,Watermark最根本就是一个时间机制,例如我设置最大乱序时间为2s,窗口时间为5秒,那么就是当事件时间大于7s的时候会触发窗口。当然假如有数据分区的情况下,例如kafka中接入watermake的话,那么watermake是会流动的,取的是所有分区中最小的watermake进行流动,因为只有最小的能够保证,之前的数据都已经来到了,可以触发计算了。

36、Flink怎么维护Checkpoint?在HDFS上存储的话会有小文件吗

默认情况下,如果设置了Checkpoint选项,Flink只保留最近成功生成的1个Checkpoint。当Flink程序失败时,可以从最近的这个Checkpoint来进行恢复。但是,如果我们希望保留多个Checkpoint,并能够根据实际需要选择其中一个进行恢复,这样会更加灵活。Flink支持保留多个Checkpoint,需要在Flink的配置文件conf/flink-conf.yaml中,添加如下配置指定最多需要保存Checkpoint的个数。

关于小文件问题可以参考代达罗斯之殇-大数据领域小文件问题解决攻略。

37、Spark和Flink的序列化,有什么区别吗?

Spark 默认使用的是 Java序列化机制,同时还有优化的机制,也就是kryo

Flink是自己实现的序列化机制,也就是TypeInformation

38、Flink是怎么处理迟到数据的?但是实际开发中不能有数据迟到,怎么做?

Flink 的watermark是一种延迟触发的机制。

一般watermark是和window结合来进行处理乱序数据的,Watermark最根本就是一个时间机制,例如我设置最大乱序时间为2s,窗口时间为5秒,那么就是当事件时间大于7s的时候会触发窗口。当然假如有数据分区的情况下,例如kafka中接入watermake的话,那么watermake是会流动的,取的是所有分区中最小的watermake进行流动,因为只有最小的能够保证,之前的数据都已经来到了,可以触发计算了。

39、画出flink执行时的流程图。

40、Flink分区分配策略

41、Flink关闭后状态端数据恢复得慢怎么办?

42、了解flink的savepoint吗?讲一下savepoint和checkpoint的不同和各有什么优势

43、flink的状态后端机制

Flink的状态后端是Flink在做checkpoint的时候将状态快照持久化,有三种状态后端 Memery、HDFS、RocksDB

44、flink中滑动窗口和滚动窗口的区别,实际应用的窗口是哪种?用的是窗口长度和滑动步长是多少?

45、用flink能替代spark的批处理功能吗

Flink 未来的目标是批处理和流处理一体化,因为批处理的数据集你可以理解为是一个有限的数据流。Flink 在批出理方面,尤其是在今年 Flink 1.9 Release 之后,合入大量在 Hive 方面的功能,你可以使用 Flink SQL 来读取 Hive 中的元数据和数据集,并且使用 Flink SQL 对其进行逻辑加工,不过目前 Flink 在批处理方面的性能,还是干不过 Spark的。

目前看来,Flink 在批处理方面还有很多内容要做,当然,如果是实时计算引擎的引入,Flink 当然是首选。

46、flink计算的UV你们是如何设置状态后端保存数据

可以使用布隆过滤器。

47、sparkstreaming和flink在执行任务上有啥区别,不是简单的流处理和微批,sparkstreaming提交任务是分解成stage,flink是转换graph,有啥区别?

48、flink把streamgraph转化成jobGraph是在哪个阶段?

49、Flink中的watermark除了处理乱序数据还有其他作用吗?

还有kafka数据顺序消费的处理。

50、flink你一般设置水位线设置多少

我们之前设置的水位线是6s

52、Flink任务提交流程

Flink任务提交后,Client向HDFS上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配Container资源并通知对应的NodeManager启动
ApplicationMaster,ApplicationMaster启动后加载Flink的jar包和配置构建环境,然后启动JobManager;之后Application Master向ResourceManager申请资源启动TaskManager
,ResourceManager分配Container资源后,由ApplicationMaster通知资源所在的节点的NodeManager启动TaskManager,NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,TaskManager启动向JobManager发送心跳,并等待JobManager向其分配任务。

53、Flink技术架构图

54、flink如何实现在指定时间进行计算。

55、手写Flink topN

57、Flink的Join算子有哪些

一般join是发生在window上面的:

1、window join,即按照指定的字段和滚动滑动窗口和会话窗口进行 inner join

2、是coGoup 其实就是left join 和 right join,

3、interval join 也就是 在窗口中进行join 有一些问题,因为有些数据是真的会后到的,时间还很长,那么这个时候就有了interval join但是必须要是事件时间,并且还要指定watermark和水位以及获取事件时间戳。并且要设置 偏移区间,因为join 也不能一直等的。

58、Flink1.10 有什么新特性吗?

内存管理及配置优化

Flink 目前的 TaskExecutor 内存模型存在着一些缺陷,导致优化资源利用率比较困难,例如:

  • 流和批处理内存占用的配置模型不同
  • 流处理中的 RocksDB state backend 需要依赖用户进行复杂的配置

为了让内存配置变的对于用户更加清晰、直观,Flink 1.10 对 TaskExecutor 的内存模型和配置逻辑进行了较大的改动 (FLIP-49 [7])。这些改动使得 Flink 能够更好地适配所有部署环境(例如 Kubernetes, Yarn, Mesos),让用户能够更加严格的控制其内存开销。

Managed 内存扩展

Managed 内存的范围有所扩展,还涵盖了 RocksDB state backend 使用的内存。尽管批处理作业既可以使用堆内内存也可以使用堆外内存,使用 RocksDB state backend 的流处理作业却只能利用堆外内存。因此为了让用户执行流和批处理作业时无需更改集群的配置,我们规定从现在起 managed 内存只能在堆外。

简化 RocksDB 配置

此前,配置像 RocksDB 这样的堆外 state backend 需要进行大量的手动调试,例如减小 JVM 堆空间、设置 Flink 使用堆外内存等。现在,Flink 的开箱配置即可支持这一切,且只需要简单地改变 managed 内存的大小即可调整 RocksDB state backend 的内存预算。

另一个重要的优化是,Flink 现在可以限制 RocksDB 的 native 内存占用,以避免超过总的内存预算—这对于 Kubernetes 等容器化部署环境尤为重要。

统一的作业提交逻辑
在此之前,提交作业是由执行环境负责的,且与不同的部署目标(例如 Yarn, Kubernetes, Mesos)紧密相关。这导致用户需要针对不同环境保留多套配置,增加了管理的成本。

在 Flink 1.10 中,作业提交逻辑被抽象到了通用的 Executor 接口。新增加的 ExecutorCLI (引入了为任意执行目标指定配置参数的统一方法。此外,随着引入 JobClient负责获取 JobExecutionResult,获取作业执行结果的逻辑也得以与作业提交解耦。

原生 Kubernetes 集成(Beta)

对于想要在容器化环境中尝试 Flink 的用户来说,想要在 Kubernetes 上部署和管理一个 Flink standalone 集群,首先需要对容器、算子及像 kubectl 这样的环境工具有所了解。

在 Flink 1.10 中,我们推出了初步的支持 session 模式的主动 Kubernetes 集成(FLINK-9953)。其中,“主动”指 Flink ResourceManager (K8sResMngr) 原生地与 Kubernetes 通信,像 Flink 在 Yarn 和 Mesos 上一样按需申请 pod。用户可以利用 namespace,在多租户环境中以较少的资源开销启动 Flink。这需要用户提前配置好 RBAC 角色和有足够权限的服务账号。

Table API/SQL: 生产可用的 Hive 集成

Flink 1.9 推出了预览版的 Hive 集成。该版本允许用户使用 SQL DDL 将 Flink 特有的元数据持久化到 Hive Metastore、调用 Hive 中定义的 UDF 以及读、写 Hive 中的表。Flink 1.10 进一步开发和完善了这一特性,带来了全面兼容 Hive 主要版本的生产可用的 Hive 集成。

Batch SQL 原生分区支持

此前,Flink 只支持写入未分区的 Hive 表。在 Flink 1.10 中,Flink SQL 扩展支持了 INSERT OVERWRITE 和 PARTITION 的语法(FLIP-63 ),允许用户写入 Hive 中的静态和动态分区。

  • 写入静态分区
INSERT { INTO | OVERWRITE } TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
  • 写入动态分区
INSERT { INTO | OVERWRITE } TABLE tablename1 select_statement1 FROM from_statement;

对分区表的全面支持,使得用户在读取数据时能够受益于分区剪枝,减少了需要扫描的数据量,从而大幅提升了这些操作的性能。

另外,除了分区剪枝,Flink 1.10 的 Hive 集成还引入了许多数据读取方面的优化,例如:

  • 投影下推:Flink 采用了投影下推技术,通过在扫描表时忽略不必要的域,最小化 Flink 和 Hive 表之间的数据传输量。这一优化在表的列数较多时尤为有效。
  • LIMIT 下推:对于包含 LIMIT 语句的查询,Flink 在所有可能的地方限制返回的数据条数,以降低通过网络传输的数据量。
  • 读取数据时的 ORC 向量化: 为了提高读取 ORC 文件的性能,对于 Hive 2.0.0 及以上版本以及非复合数据类型的列,Flink 现在默认使用原生的 ORC 向量化读取器。

59、Flink的重启策略

固定延迟重启策略

固定延迟重启策略是尝试给定次数重新启动作业。如果超过最大尝试次数,则作业失败。在两次连续重启尝试之间,会有一个固定的延迟等待时间。

故障率重启策略

故障率重启策略在故障后重新作业,当设置的故障率(failure rate)超过每个时间间隔的故障时,作业最终失败。在两次连续重启尝试之间,重启策略延迟等待一段时间。

无重启策略

作业直接失败,不尝试重启。

后备重启策略

使用群集定义的重新启动策略。这对于启用检查点的流式传输程序很有帮助。默认情况下,如果没有定义其他重启策略,则选择固定延迟重启策略。

60、Flink什么时候用aggregate()或者process()

aggregate: 增量聚合

process: 全量聚合

当计算累加操作时候可以使用aggregate操作。

当计算窗口内全量数据的时候使用process,例如排序等操作。

61、Flink优化 你了解多少

62、Flink内存溢出怎么办

63、说说Flink中的keyState包含哪些数据结构

64、Flink shardGroup的概念

作者 east
Java 4月 7,2022

地图不同坐标系的转换工具类

提供以下的坐标系互相转换:

GCJ-02(火星坐标系)转换为WGS84坐标系

BD-09(百度坐标系)转换为WGS84坐标系

BD-09(百度坐标系)转换为GCJ-02(火星坐标)

sogou转换为WGS84


/**
 * @author jy 地图转换测试/
 */
public final class MapUtil {

    /**
     * 辅助类禁止共有构造函数
     */
    private MapUtil() {

    }

    /**
     * 常量:pi
     */
    public static final double CONSTANT_PI = 3.1415926535897932384626;

    /**
     * 常量:a
     */
    public static final double CONSTANT_A = 6378245.0;

    /**
     * 常量:e
     */
    public static final double CONSTANT_E = 0.00669342162296594323;

    /**
     * 常量:ccc
     */
    private static final double[] CCC = new double[]{12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0};

    /**
     * 常量:ddd
     */
    private static final double[][] DDD = {
            new double[]{1.410526172116255e-8, 0.00000898305509648872, -1.9939833816331, 200.9824383106796,
                    -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -0.03801003308653,
                    17337981.2},
            new double[]{-7.435856389565537e-9, 0.000008983055097726239, -0.78625201886289, 96.32687599759846,
                    -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375,
                    10260144.86},
            new double[]{-3.030883460898826e-8, 0.00000898305509983578, 0.30071316287616, 59.74293618442277,
                    7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, 0.32710905363475,
                    6856817.37},
            new double[]{-1.981981304930552e-8, 0.000008983055099779535, 0.03278182852591, 40.31678527705744,
                    0.65659298677277, -4.44255534477492, 0.85341911805263, 0.12923347998204, -0.04625736007561,
                    4482777.06},
            new double[]{3.09191371068437e-9, 0.000008983055096812155, 0.00006995724062, 23.10934304144901,
                    -0.00023663490511, -0.6321817810242, -0.00663494467273, 0.03430082397953, -0.00466043876332,
                    2555164.4},
            new double[]{2.890871144776878e-9, 0.000008983055095805407, -3.068298e-8, 7.47137025468032,
                    -0.00000353937994, -0.02145144861037, -0.00001234426596, 0.00010322952773, -0.00000323890364,
                    826088.5}};

    /**
     * GCJ-02(火星坐标系)转换为WGS84坐标系<br>
     * GCJ-02:谷歌中国地图、搜搜中国地图、高德地图<br>
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    public static Coord gcj02ToWgs84(double lat, double lon) {

        Coord coord = transform(lat, lon);

        double finalLon = lon * 2 - coord.getLon();
        double finalLat = lat * 2 - coord.getLat();

        return new Coord(finalLat, finalLon);

    }

    /**
     * BD-09(百度坐标系)转换为WGS84坐标系<br>
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    public static Coord bd09ToWgs84(double lat, double lon) {

        Coord gcj02 = MapUtil.bd09ToGcj02(lat, lon);
        Coord wgs84 = MapUtil.gcj02ToWgs84(gcj02.getLat(), gcj02.getLon());

        return wgs84;
    }

    /**
     * BD-09(百度坐标系)转换为GCJ-02(火星坐标)<br>
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    public static Coord bd09ToGcj02(double lat, double lon) {

        double x = lon - 0.0065;
        double y = lat - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * CONSTANT_PI);

        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * CONSTANT_PI);

        double finalLon = z * Math.cos(theta);
        double finalLat = z * Math.sin(theta);

        return new Coord(finalLat, finalLon);

    }

    /**
     * sogou转换为WGS84
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    public static Coord sogouToWgs84(double lat, double lon) {

        Coord coord = new Coord(lat, lon);

        Coord tmp = new Coord();
        tmp.setLon(Math.abs(coord.getLon()));
        tmp.setLat(Math.abs(coord.getLat()));

        double[] obj = new double[9];
        for (int i = 0; i < CCC.length; i++) {
            if (tmp.getLat() > CCC[i]) {
                obj = DDD[i];
                break;
            }
        }

        return MapUtil.convert(coord, obj);
    }

    /**
     * sogou内部转换函数
     *
     * @param coord
     * @param varAttr
     * @return
     */
    private static Coord convert(Coord coord, double[] varAttr) {
        Coord tmp = new Coord();
        tmp.setLon(varAttr[0] + varAttr[1] * Math.abs(coord.getLon()));
        double f = Math.abs(coord.getLat()) / varAttr[9];
        double tmpLat = varAttr[2] + varAttr[3] * f + varAttr[4] * f * f + varAttr[5] * f * f * f
                + varAttr[6] * f * f * f * f + varAttr[7] * f * f * f * f * f + varAttr[8] * f * f * f * f * f * f;
        tmp.setLat(tmpLat);
        tmp.setLon(tmp.getLon() * (coord.getLon() < 0 ? -1 : 1));
        tmp.setLat(tmp.getLat() * (coord.getLat() < 0 ? -1 : 1));

        return tmp;
    }

    /**
     * 坐标点转换函数
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    private static Coord transform(double lat, double lon) {

        if (outOfChina(lat, lon)) {
            return new Coord(lat, lon);
        }

        double dLat = transformLat(lat - 35.0, lon - 105.0);
        double dLon = transformLon(lat - 35.0, lon - 105.0);

        double radLat = lat / 180.0 * CONSTANT_PI;

        double magic = Math.sin(radLat);
        magic = 1 - CONSTANT_E * magic * magic;
        double sqrtMagic = Math.sqrt(magic);
        dLat = (dLat * 180.0) / ((CONSTANT_A * (1 - CONSTANT_E)) / (magic * sqrtMagic) * CONSTANT_PI);
        dLon = (dLon * 180.0) / (CONSTANT_A / sqrtMagic * Math.cos(radLat) * CONSTANT_PI);
        double mgLat = lat + dLat;
        double mgLon = lon + dLon;

        return new Coord(mgLat, mgLon);

    }

    /**
     * 纬度转换函数
     *
     * @param lat 维度
     * @param lon 经度
     * @return
     */
    private static double transformLat(double lat, double lon) {

        double ret = -100.0 + 2.0 * lon + 3.0 * lat + 0.2 * lat * lat + 0.1 * lon * lat
                + 0.2 * Math.sqrt(Math.abs(lon));
        ret += (20.0 * Math.sin(6.0 * lon * CONSTANT_PI) + 20.0 * Math.sin(2.0 * lon * CONSTANT_PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lat * CONSTANT_PI) + 40.0 * Math.sin(lat / 3.0 * CONSTANT_PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(lat / 12.0 * CONSTANT_PI) + 320 * Math.sin(lat * CONSTANT_PI / 30.0)) * 2.0 / 3.0;

        return ret;
    }

    /**
     * 经度转换函数
     *
     * @param lat 纬度
     * @param lon 经度
     * @return
     */
    private static double transformLon(double lat, double lon) {

        double ret = 300.0 + lon + 2.0 * lat + 0.1 * lon * lon + 0.1 * lon * lat + 0.1 * Math.sqrt(Math.abs(lon));

        ret += (20.0 * Math.sin(6.0 * lon * CONSTANT_PI) + 20.0 * Math.sin(2.0 * lon * CONSTANT_PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lon * CONSTANT_PI) + 40.0 * Math.sin(lon / 3.0 * CONSTANT_PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(lon / 12.0 * CONSTANT_PI) + 300.0 * Math.sin(lon / 30.0 * CONSTANT_PI)) * 2.0 / 3.0;

        return ret;
    }

    /**
     * 判断坐标点是否在中国范围内
     *
     * @param lat
     * @param lon
     * @return
     */
    private static boolean outOfChina(double lat, double lon) {

        if (lon < 72.004 || lon > 137.8347) {
            return true;
        }

        if (lat < 0.8293 || lat > 55.8271) {
            return true;
        }

        return false;
    }

}
public class Coord implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -229841606158709053L;
    /**
     * 纬度
     */
    private double lat;
    /**
     * 经度
     */
    private double lon;

    /**
     * 默认构造参数
     */
    public Coord() {

    }

    /**
     * 重载构造方法
     *
     * @param lat 纬度
     * @param lon 经度
     */
    public Coord(double lat, double lon) {
        this.lat = lat;
        this.lon = lon;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public double getLon() {
        return lon;
    }

    public void setLon(double lon) {
        this.lon = lon;
    }

}
作者 east
Hive, 数据库 4月 4,2022

Hive对比SQL:哪个更适合数据分析

Hive 和 SQL 之间的主要区别:

架构:Hive 是一个用于数据分析的数据仓库项目; SQL 是一种编程语言。 (但是,Hive 通过称为 HiveQL 的编程语言执行数据分析,类似于 SQL。)


设置:Hive 是一个基于开源软件程序 Hadoop 的数据仓库。
数据分析:Hive 比 SQL 更有效地处理复杂数据,适合不太复杂的数据集。


价格:Hive 价格从每位用户每月 12 美元起。 SQL 是开源和免费的。


评论:Hive 在 G2 网站上的客户评论评分为 4.2/5。因为 SQL 是一种编程语言而不是“产品”,所以它在 G2 上没有评论。


大数据需要强大的工具。成功的组织查询、管理和分析来自数百个数据源的数千个数据集。这就是 Hive 和 SQL 等工具的用武之地。尽管非常不同,但查询和编程大数据都是如此。

但是哪种工具适合您的组织?在这篇评论中,我们在功能、价格、支持、用户评分等方面比较了 Hive 与 SQL。

什么是Hive?
Apache Hive 是一个用于数据查询和分析的数据仓库项目。 Hive 建立在 Apache Hadoop(一个用于处理大数据的开源程序)之上,通过查询语言 HiveQL 执行数据分析,它允许用户构建数据并生成各种有用的分析。

Hive 由 Facebook 开发,使希望从电子表格、网络日志、CRM 系统等中查询和汇总数据的用户受益。 它在 Hadoop 分布式文件系统 (HDFS) 中查询数据,并将该系统用于自己的存储。 它还运行 MapReduce 作业。

什么是 SQL?
结构化查询语言 (SQL) 是一种特定于领域的编程语言,用于管理数据和/或处理数据流。它主要管理数据并处理关系数据库管理系统中保存的实时数据。在这篇评论的上下文中,SQL 就像 HiveQL。

SQL 由 Oracle 开发,是一种用于分析查询的声明性语言。它比 Hive(和 HiveQL)更新得多。 SQL 可以追溯到 45 年前,并且在许多 IT 系统中已经无处不在。

有关我们的原生 SQL 连接器的更多信息,请访问我们的集成页面。

Hive 和 SQL 的区别
Hive 在 HDFS 中写入和查询数据。 SQL 需要多次读取和写入。
Hive 更适合分析复杂的数据集。 SQL 更适合快速分析不太复杂的数据集。
SQL 支持联机事务处理 (OLTP)。 Hive 不支持 OLTP。
Hive 查询可能具有高延迟,因为 Hive 通过 Hadoop 运行批处理。这意味着某些查询要等待一个小时(或更长时间)。更新 Hive 上的数据也可能需要很长时间。

支持和培训
HIVE
一个在线社区(Apache 软件基金会)
资源
邮件列表
语言手册


SQL
虽然没有提供官方培训,但有各种 SQL 第三方培训模块/支持社区。

价钱
HIVE
计划从每位用户每月 12 美元起。
有 14 天的免费试用期。
SQL
作为一个开源平台,SQL 是 100% 免费的。 但是,SQL 定价并未考虑您可能遇到的任何设置或维护成本。

结论
Hive 和 SQL 是处理(和驯服!)大数据的两种工具。 尽管这些工具有相似之处,但它们的差异足以保证进行比较。 我们认为 Hive 更适合分析复杂的数据集,而 SQL 更适用于不太复杂的数据集,并且在执行这些任务时速度更快。 另外,它是开源和免费的。 最终,适合您的工具取决于您如何分析组织中的大数据。

作者 east
Hadoop 4月 4,2022

Hadoop对比SQL,哪个更适合数据管理

Hadoop 与 SQL 之间的主要区别:

架构:Hadoop 是一个开源框架(或“生态系统”),它在计算机/服务器集群之间分布数据集并并行处理数据。 SQL 是一种特定领域的编程语言,用于处理关系数据库中的数据。


数据:Hadoop 一次写入数据; SQL 多次写入数据。 (Hadoop 和 SQL 多次读取数据。)


技能水平:Hadoop 比 SQL 更难学。 (但是,两者都需要代码知识。)


价格:Hadoop 和 SQL 是开源的并且可以免费使用。 但是,两者都会产生额外的设置和维护成本。


评论:Hadoop 在软件评论网站 G2.com 上的客户评分为 4.3/5。 因为 SQL 是一种编程语言,而不是作为“产品”提供,所以它在 G2 上没有得分。

组织依靠大数据为其业务提供动力,但许多团队都在为数据管理的复杂性而苦苦挣扎。 值得庆幸的是,Hadoop 和 SQL 更有效地处理大型数据集。 这些工具以独特的方式管理数据,这使得我们很难在同类的基础上比较它们。 但是,希望简化其技术堆栈的组织可能有理由选择其中一个。

在本文中,我们根据几个因素比较了 Hadoop 与 SQL,包括功能和客户评论分数。

什么是 Hadoop?
Apache Hadoop 是一个开源工具生态系统,可将数据集存储在分布式系统中并解决各种数据管理问题。

Hadoop 由四个组件组成:MapReduce、Yarn、库,以及最终在现成硬件上运行的 Hadoop 分布式文件系统 (HDFS)。 Hadoop 处理各种数据集,使其成为希望从大量来源生成有价值数据洞察的组织的绝佳选择。它有利于处理大量数据。

Hadoop 对跨计算机和服务器集群的数据集进行分布式处理。它以并行方式处理数据,因此它可以同时在多台机器上工作。 HDFS 存储提交的数据,MapReduce 处理数据,Yarn 划分数据管理任务。

世界上一些最成功的技术组织都使用 Hadoop,包括 IBM、Pivo​​tal Software、Hadapt 和 Amazon Web Services。

什么是 SQL?
结构化查询语言 (SQL) 是一种开源的特定于领域的编程语言,用于在 Oracle、SQL Server 或 MySQL 等关系数据库管理系统 (RDMS) 中进行数据管理和处理数据流。 SQL 由 Oracle 开发,是一种用于分析查询的声明性语言。

有关我们的原生 SQL 连接器的更多信息,请访问我们的集成页面。

Hadoop 与 SQL:有什么区别?
也许 Hadoop 和 SQL 之间最大的区别在于这些工具管理和集成数据的方式。 SQL 只能处理有限的数据集,例如关系数据,并且难以处理更复杂的数据集。 Hadoop 可以处理大型数据集和非结构化数据。

当然,还有很多其他的区别:

Hadoop 线性扩展; SQL 是非线性的。
Hadoop的完整性低; SQL 是高完整性的。
Hadoop只能写一次; SQL 多次写入。
Hadoop具有动态模式结构; SQL 具有静态模式结构。
Hadoop 支持批处理(通过 HDFS); SQL 没有。
Hadoop 比 SQL 更难学习,但更容易扩展。您可以轻松地将数据节点添加到 Hadoop 集群。
您选择的工具取决于您要管理的数据集。如果您需要处理大量数据,请选择 Hadoop。如果您不想要高级数据管理的复杂性,请选择 SQL。

作者 east
Spark 4月 3,2022

生产环境选型考虑:Spark和Tez有什么不同

让我们开始这场精彩的讨论。首先,退一步;我们已经指出 Apache Spark 和 Hadoop MapReduce 是两种不同的大数据利器。前者是高性能的内存数据处理框架,后者是成熟的PB级批处理平台。我们也知道 Apache Hive 和 HBase 是两个功能相似的非常不同的工具。 Hive 是运行 MapReduce 作业的类似 SQL 的引擎,而 HBase 是 Hadoop 上的 NoSQL 键/值数据库。

在纸面上,它们有很多共同点。两者都具有内存功能,都可以在 Hadoop YARN 之上运行,并且都支持来自任何数据源的所有数据类型。那么两者有什么区别呢?

Tez 非常适合 YARN 架构。 Spark 可能会遇到资源管理问题。

Spark 更适合主流开发人员,而 Tez 是专用工具的框架。

Spark 不能与 YARN 应用程序同时运行(目前)。 Tez 是专门为在 YARN 之上执行而构建的。

Tez 的容器可以在完成后关闭以节省资源。即使不处理数据,Spark 的容器也会占用资源。

这些只是高层次上的一些差异。在这里,我们将探索这些项目中的每一个。

什么是 Apache Spark?

Apache Spark 是一个用于处理大数据的开源分析引擎和集群计算框架。它是非营利性 Apache 软件基金会的创意,该基金会是一个致力于各种开源软件项目的去中心化组织。

它于 2014 年首次发布,基于 Hadoop MapReduce 分布式计算框架构建。它保留了 MapReduce 的许多优点——例如可扩展性和容错性——同时还提高了速度和易用性。

除了核心数据处理引擎,它还包括 SQL、机器学习和流处理库。该框架与 Java、Scala、Python 和 R 编程语言兼容,赢得了开发人员的广泛关注。它还支持第三方技术,如 Amazon S3、Hadoop 的 HDFS、MapR XD 和 NoSQL 数据库,如 Cassandra 和 MongoDB。

它的吸引力在于它能够将不同的流程、技术和技术整合到一个单一的大数据管道中,从而提高生产力和效率。由于其灵活性,它已成为大数据处理领域非常流行和有效的“瑞士军刀”。

什么是 Apache Tez?

Apache Tez 是一个基于 MapReduce 技术的大数据处理开源框架。两者都提供了一个执行引擎,可以使用有向无环图 (DAG) 来处理大量数据。

它通过将计算视为 DAG 来概括 MapReduce 范式。 MapReduce 任务组合成一个作业,该作业被视为 DAG 中的一个节点,执行并发和序列化。

同时,DAG 的边缘表示作业之间的数据移动。 Tez 与数据类型无关,因此它只关心数据的移动(而不是它采用的格式)。

通过改进 MapReduce 的一些限制,Tez 试图提高数据处理作业的性能。这种增加的效率使程序员能够做出他们认为最适合他们的项目的设计和开发选择。

Apache Spark 将自己标榜为“用于大规模数据处理的统一分析引擎”。同时,Apache Tez 称自己为“一个应用程序框架,它允许使用复杂的有向无环图来处理数据的任务”。

因为 Spark 也使用有向无环图,这两个工具听起来是不是很相似?可能是。但也有一些重要的区别需要考虑。以下是两者之间的根本区别:

差异#1:Hive和Pig

差异 #2:Hadoop YARN

差异#3:性能测试

我们将在下面的部分中详细介绍这些差异中的每一个。

他们支持Pig和Hive吗?

Hive 和 Pig 是两个用于大数据的开源 Apache 软件应用程序。 Hive 是一个数据仓库,而 Pig 是一个用于创建在 Hadoop 上运行的数据处理作业的平台。虽然两者都声称支持 Pig 和 Hive,但现实并不那么清楚。我们尝试使用 Spork 项目在 Spark 上运行 Pig,但遇到了一些问题;至少,在 Spark 上使用 Pig 充其量仍是不确定的。

使用YARN

YARN 是 Hadoop 的资源管理器和作业调度器。理论上,Spark 既可以作为独立应用程序执行,也可以在 YARN 之上执行。然而,Tez 是专门为在 YARN 之上执行而构建的。不过,Spark 不能与其他 YARN 应用程序同时运行(至少现在还不能)。

Tez 项目的开发人员之一 Gopal V 写了一篇关于他为什么喜欢 Tez 的详细文章。他的结论是:

“在我使用过的框架之间,这是 Tez 真正的区别特性——Tez 不需要容器保持运行来做任何事情,只需应用程序管理器在不同查询之间的空闲期间运行。您可以保留容器,但这是一种优化,而不是会话空闲期间的要求。”

他所说的“框架”也指 Spark——它的容器需要保持运行并占用资源,即使它们不处理任何数据。但是,Tez 容器可以在完成后立即关闭并释放资源。

大多数情况下,您无论如何都会使用基于 Hadoop 的应用程序,例如 Hive、HBase 甚至经典的 MapReduce。因此,您可以在任何 Hadoop 集群上安装 Spark,但您可能会遇到资源管理问题。另一方面,Tez 可以非常适合您的 YARN 架构,包括资源管理。

Apache Spark 的亮点:图形处理

GraphX 是扩展 Spark RDD 的图计算引擎。术语“图”是指图论中的图,而不是用于商业计算的图。图论中使用的图捕获数据之间的交互和依赖关系。

GraphX 最初是加州大学伯克利分校的一个研究项目。该项目后来被捐赠给了 Apache 软件基金会和 Spark 项目。

GraphX 不同于其他图计算引擎,因为它将图分析和 ETL 统一在一个平台上。 GraphX 还可以分析非图形形式的数据。其内存计算能力使 GraphX 比其他图形处理引擎更快。

图处理的常用场景

社交网络分析 – 用于识别影响者以进行目标营销

欺诈检测 – 银行、信用卡公司和在线商店使用图形分析来识别异常趋势。

供应链优化 – 公司可以使用图表分析来确定其供应链的最佳路线

贷款决策 – 抵押贷款公司和银行使用图表分析来评估申请人的数据以做出贷款决策。

Google 如何使用图形处理

Google 使用一种称为 PageRank 算法的图形分析算法。 PageRank 算法根据重要性对图中的顶点进行排名,其中重要性是指向该顶点的边数。该算法是由 Google 的创始人开发的,因此流行的搜索引擎是 PageRank 的一个典型例子。谷歌根据页面的重要性对页面进行排名,重要性是指向页面的超链接数量。

那么哪个更快?

也许最大的问题是——哪个更快?根据各种基准,这两个选项都显着提高了 MapReduce 性能;但是,获胜者可能取决于谁在进行测量。就独立第三方评估而言,陪审团仍未出局。

Spark 声称运行速度比 MapReduce 快 100 倍。在加州大学伯克利分校的 Amplab 进行的基准测试表明,它的运行速度比它的同类产品快得多(测试将 Spark 称为 Shark,它是 Spark SQL 的前身)。

然而,由于伯克利发明了 Spark,这些测试可能并非完全没有偏见。此外,这些基准测试是几年前使用运行在 MapReduce 上的 Hive 0.12 进行的。从版本 0.13 开始,Hive 使用 Tez 作为其执行引擎,从而显着提高了性能。

与此同时,Hortonworks 对两者之间的问题表现进行了基准测试。他们发现在 Tez 上运行的 Hive 0.13 的运行速度比 Hive 0.12 快 100 倍(尽管相当多的测试查询神秘地消失了)。快了 100 倍……嗯,听起来很熟悉?

因此,它们的性能都比 Hadoop MapReduce 高 100 倍。但哪个最快?

没有人可以说——或者更确切地说,他们不会承认。如果你问为 IBM 工作的人,他们会告诉你答案都不是,而且 IBM Big SQL 比两者都快。我们需要第三方来运行独立的性能测试并一劳永逸地确定分数。

小结:

这个问题最终可能归结为政治和受欢迎程度。这是大数据巨头的冲突,Cloudera 支持 Spark,Hortonworks 支持 Tez。 Spark 更为广泛,因为它可以在各种发行版中使用,而 Tez 仅在 Hortonworks 的发行版中可用。

最终,用户群可能决定框架的命运。目前,至少根据谷歌趋势,Spark 正在赢得这场比赛。

也许在炒作消退之后,在人们获得了更多与两者合作的经验之后,我们最终将能够判断谁将成为 MapReduce 王冠的继承人。

作者 east
大数据开发 4月 3,2022

大数据5种不同数据处理方式

随着商业环境的不断发展,公司越来越依赖于他们的数据。 但是,在您可以利用任何数据为公司谋取利益之前,您必须首先处理您收集的结构化和非结构化数据。

虽然最简单和最著名的数据处理形式是数据可视化,但有几种不同的数据处理方法通常用于与数据交互。

继续阅读以了解有关五种数据处理类型的更多信息,以及它们在可用性、原子性、并发性和其他因素方面的不同之处。

为什么数据处理方法很重要?

您采用的数据处理方法将决定查询的响应时间以及输出的可靠性。因此,需要谨慎选择方法。例如,在可用性至关重要的情况下,例如证券交易所门户,交易处理应该是首选方法。

重要的是要注意数据处理和数据处理系统之间的区别。数据处理是将数据转换为有用信息的规则。数据处理系统是针对特定类型的数据处理进行优化的应用程序。例如,分时系统旨在优化运行分时处理。它也可以用于运行批处理。但是,它不会很好地适应这项工作。

从这个意义上说,当我们谈论为您的需求选择正确的数据处理类型时,我们指的是选择正确的系统。以下是最常见的数据处理类型及其应用。

1. 事务处理

事务处理部署在关键任务情况下。这些情况一旦中断,将对业务运营产生不利影响。例如,如前所述,处理证券交易所交易。在事务处理中,可用性是最重要的因素。可用性可能受以下因素的影响:

硬件:事务处理系统应该有冗余硬件。硬件冗余允许部分故障,因为冗余组件可以自动接管并保持系统运行。

软件:事务处理系统的软件应设计为从故障中快速恢复。通常,事务处理系统使用事务抽象来实现这一点。简而言之,如果发生故障,未提交的事务将被中止。这允许系统快速重启。

2.分布式处理

很多时候,数据集太大而无法放在一台机器上。分布式数据处理分解这些大型数据集并将它们存储在多台机器或服务器上。它依赖于 Hadoop 分布式文件系统 (HDFS)。分布式数据处理系统具有高容错性。如果网络中的一台服务器出现故障,则可以将数据处理任务重新分配给其他可用的服务器。

分布式处理也可以极大地节省成本。企业不再需要建造昂贵的大型计算机并投资于维护和维护。

流处理和批处理是分布式处理的常见示例,下面将讨论这两者。

3.实时处理

实时处理类似于事务处理,因为它用于需要实时输出的情况。但是,两者在处理数据丢失的方式上有所不同。实时处理尽可能快地计算传入数据。如果它在输入数据中遇到错误,它会忽略错误并移动到下一个输入数据块。GPS 跟踪应用程序是实时数据处理的最常见示例。

将此与事务处理进行对比。如果出现错误,例如系统故障,事务处理将中止正在进行的处理并重新初始化。在近似答案就足够的情况下,实时处理优于事务处理。

在数据分析领域,流处理是实时数据处理的常见应用。流处理首先由 Apache Storm 推广,它在数据传入时对其进行分析。想想来自物联网传感器的数据,或实时跟踪消费者活动。 Google BigQuery 和 Snowflake 是采用实时处理的云数据平台的示例。

4.批处理

顾名思义,批处理就是将一段时间内存储的数据块一起或分批分析。当需要分析大量数据以获得详细见解时,需要进行批处理。例如,一个公司在一段时间内的销售数据通常会经过批处理。由于涉及大量数据,系统将需要时间来处理它。通过批量处理数据,可以节省计算资源。

当准确性比速度更重要时,批处理优于实时处理。此外,批处理的效率也以吞吐量来衡量。吞吐量是单位时间内处理的数据量。

5. 多并发处理

多并发处理是一种数据处理方法,其中两个或两个以上的处理器在同一数据集上工作。这听起来可能与分布式处理完全一样,但还是有区别的。在多处理中,不同的处理器驻留在同一系统中。因此,它们存在于相同的地理位置。如果出现组件故障,则会降低系统的速度。

另一方面,分布式处理使用彼此独立并且可以存在于不同地理位置的服务器。由于当今几乎所有系统都具有并行处理数据的能力,因此几乎每个数据处理系统都使用多处理。

但是,在本文的上下文中,可以将多处理视为具有本地数据处理系统。通常,处理非常敏感信息的公司可能会选择本地数据处理而不是分布式处理。例如,从事石油和天然气开采行业的制药公司或企业。

这种数据处理最明显的缺点是成本。构建和维护内部服务器非常昂贵。

作者 east
Hive 3月 31,2022

Presto vs Hive:综合比较

Presto 和 Hive 之间的 5 个最大区别是:

1、Hive 允许用户插入自定义代码,而 Preso 不允许。
2、Presto 旨在符合 ANSI SQL,而 Hive 使用 HiveQL。
3、Presto 可以处理有限数量的数据,因此在生成大型报告时最好使用 Hive。
4、 Hive 通常可以容忍失败,但 Presto 不能。
5、 Hive 使用 map-reduce 架构并将数据写入磁盘,而 Presto 使用 HDFS 架构而不使用 map-reduce。

Presto 最初是一个 Facebook 项目,让工程师可以针对公司庞大的 (300PB) 数据仓库运行交互式分析查询。 Facebook 发布了 Presto 作为 Apache Software 下的开源工具。 在创建 Presto 之前,Facebook 以类似的方式使用 Hive。 在放弃它转而支持 Presto 之后,Hive 也成为了一个开源的 Apache 工具数据仓库工具。 如今,使用大数据的公司通常对 Presto 和 Hive 有强烈的偏好。 仔细比较表明,这些选项有一些相似之处和不同之处,但都没有管理和转换大数据所需的综合功能。

Presto 与 Hive:ANSI SQL 和 HiveQL
许多数据工程师在第一次尝试 Presto 时注意到的第一件事就是他们可以使用现有的 SQL 知识。 Presto 依靠标准 SQL 来执行查询、检索数据和修改数据库中的数据。只要您了解 SQL,就可以立即开始使用 Presto。许多人认为这是一种优势。

Apache Hive 使用类似于 SQL 的语言,但它有足够的差异,初学者需要重新学习一些查询。 HiveQL 代表 Hive 查询语言,它有一些奇怪的东西可能会让新用户感到困惑。但是,任何熟悉 SQL 的人都应该发现他们可以相对快速地掌握 HiveQL。

Apache 为 HiveQL 维护了一个全面的语言手册,因此您可以在忘记命令时随时查找它们。尽管如此,查找信息会分散注意力并降低效率。

Presto vs Hive:自定义代码
由于 Presto 在标准 SQL 上运行,因此您已经拥有所需的所有命令。一些工程师认为这是一个优势,因为他们可以快速执行数据检索和修改。

然而,无法插入自定义代码可能会给高级大数据用户带来问题。在这种情况下,Hive 提供了优于 Presto 的优势。假设您非常了解该语言,您可以在查询中插入自定义代码。您可能不需要经常这样做,但在需要时它会派上用场。

在花时间在 HiveQL 中编写自定义代码之前,请访问 Hive 插件页面并搜索类似的代码。有人可能已经编写了您的项目所需的代码。如果您找不到您需要的特定代码,您可能会找到一个只需要稍作改动即可执行您的独特命令的插件。

Presto 与 Hive:数据限制
很少有人会否认 Presto 在生成频繁报告时运行良好。不幸的是,Presto 任务可以存储的数据量是最大的。一旦你碰到那堵墙,Presto 的逻辑就会崩溃。如果您生成每小时或每天的报告,您几乎可以肯定依靠 Presto 来完成这项工作。请记住,Facebook 使用 Presto,而且该公司会生成大量数据。不过,你可以达到一个极限。

Hive 似乎没有数据限制,至少不会影响实际场景。这使得 Hive 成为生成每周或每月报告的公司更好的数据查询选项。涉及的数据越多,项目所需的时间就越长。不过,Hive 不会失败。它会一直工作,直到你的命令结束。

Presto vs Hive:HDFS 和将数据写入磁盘
架构在 Presto 和 Hive 之间的差异中起着重要作用。

Hive 和 MapReduce
Hive 使用 MapReduce,这意味着它过滤和排序任务,同时在分布式服务器上管理它们。然而,在 reduce 和 map 阶段之间,Hive 必须将数据写入磁盘。写入磁盘会强制 Hive 在继续执行下一个任务之前等待一小段时间。

MapReduce 在 Hive 中运行良好,因为它可以处理多个服务器上的任务。分配任务会提高速度。尽管如此,数据必须写入磁盘,这会惹恼一些用户。

幸运的是,MapReduce 为 Hive 带来了非凡的灵活性。它可以处理大量的数据格式。 MapReduce 还可以帮助 Hive 即使在遇到数据故障时也能继续工作。它将承认失败并在可能的情况下继续前进。

Presto 和 HDFS
Presto 具有不同的架构,这使得 Give 在某些情况下有用,而在其他情况下则很麻烦。 Presto 支持 Hadoop 分布式文件系统 (HDFS),这是一种非关系源,无需在任务之间将数据写入磁盘。相反,HDFS 架构在整个分布式系统中存储数据。由于它的数据不会被锁定在一个地方,Presto 可以在不停止将数据写入磁盘的情况下运行任务。

显然,HDFS 提供了几个优点。不过,毫不奇怪,您可能会遇到架构方面的挑战。 HDFS 不能像 MapReduce 一样容忍故障。当出现问题时,Presto 往往会迷失方向并关闭。这种情况并不经常发生,但您可能会因失败而损失数小时的工作时间。你可能会发现你可以追溯你的步骤,解决问题,然后从你离开的地方继续。即使使用该解决方案,用户也会浪费宝贵的时间来追踪故障的根源并诊断问题。

Presto vs Hive:结论
许多使用大数据的专业人士更喜欢 Hive 而不是 Presto,因为他们欣赏 Hive 的稳定性和灵活性。当您专业地处理大数据时,您会发现有时您想编写自定义代码以提高项目效率。

仅仅因为有些人更喜欢 Hive,并不一定意味着你应该打折 Presto。按预期使用时效果很好。 Presto 快速处理任务。只是不要要求它一次做太多事情。如果这样做,您将面临失败的风险。

作者 east
大数据开发 3月 30,2022

怎样成为一名国外数据分析工程师

利用数据可以实现很多事情,从个性化营销活动到为自动驾驶汽车提供动力。 数据科学家负责分析数据并将其用于各种目的。 但是,他们需要高质量的数据来完成复杂的任务,例如预测业务趋势。 这就是数据工程师的用武之地。数据工程是收集和验证信息(数据)以便数据科学家可以使用它的科学。

数据工程师平均每年可以赚取 117,000 美元。 有时,他们甚至可以赚取高达 160,000 美元的年收入。 根据 Dice 的说法,企业比以往任何时候都更渴望聘请数据工程师。 2019 年,数据工程是最热门的科技工作,空缺职位数量同比增长 50%。

凭借出色的薪酬水平和高需求,数据工程可以成为一个有利可图的职业选择。

数据工程:职责是什么?

数据工程师设置和维护支持业务信息系统和应用程序的数据基础设施。他们可能会使用小型的东西,例如夫妻企业的关系数据库,或者大型的东西,例如财富 500 强公司的 PB 级数据湖。

作为其职责的一部分,数据工程师设计、构建和安装数据系统。这些系统为机器学习和人工智能分析提供了动力。他们还为大量数据任务开发信息流程。其中包括数据采集、数据转换和数据建模等。

无论是单人秀还是更大的团队,数据工程领域包括以下岗位:

数据架构师:数据架构师为整个组织或其特定部分设计数据管理系统。他们的工作使数据系统能够摄取、集成和管理业务洞察和报告所需的所有数据源。数据架构师的工作可能需要深入了解 SQL、NoSQL 和 XML 以及其他系统和工具。

数据库管理员:数据库管理员帮助设计和维护数据库系统。它们确保数据库系统为组织中的所有用户无缝运行。数据库管理员优化数据库以提高速度。他们还确保更新不会干扰工作流程,并且敏感信息是安全的。

数据工程师:数据工程师了解数据科学中使用的几种编程语言。其中包括 Java、Python 和 R 之类的。他们了解 SQL 和 NoSQL 数据库系统的来龙去脉。他们还了解如何使用分布式系统,例如 Hadoop。拥有如此广泛的知识使他们能够与数据架构师、数据库管理员和数据科学家合作。事实上,有时,他们可以自己扮演所有这些角色。从本质上讲,数据工程师负责为组织构建强大的集成数据基础架构。

数据科学家与数据工程师:有什么区别?

数据科学家使用统计建模和其他工具来分析数据。数据工程师专注于构建所需的基础架构,以生成和准备用于分析的数据

数据科学家与关键决策者密切合作,制定数据战略。数据工程师与数据科学家密切合作,为他们提供高质量的数据

数据科学家负责产生洞察力。数据工程师负责构建和维护向数据科学家提供数据的管道

数据科学家

数据科学家在现代企业中承担着许多职责。例如,帮助 Facebook 向您展示有针对性的广告、教机器人车辆自动驾驶以及帮助 Netflix 推荐完美的电影。他们的工作为公司带来了巨大的竞争优势。例如,由于通过数据分析更好地保留了客户,Netflix 每年可节省 10 亿美元。

数据科学家专注于统计建模和机器学习技术。他们开发图形显示、仪表板和其他方法来与组织中的决策者共享重要的商业智能。然而,每个数据科学家都需要访问高质量的数据,因此需要数据工程师。

数据工程师

数据工程师创建数据管道,将数据从一个系统连接到另一个系统。他们还负责将数据从一种格式转换为另一种格式,以便数据科学家可以从不同系统中提取数据进行分析。尽管数据工程师不像数据科学家那样引人注目,但在数据分析方面,他们同样重要(如果不是更重要的话)。

作为一个简单的类比,如果数据科学家是列车长,那么数据工程师就是将列车从 A 点送到 B 点的铁路网络的建设者。

现在,假设列车长想在没有铁路线的地方运送有效载荷。售票员需要铁路网络建设者将火车连接到新目的地。铁路建设者的建筑师将研究地形。他们将决定是否最好绕过、翻越或隧道穿过途中的任何山脉。他们可能会在河流上建造桥梁。他们将使用所有可用的工具来建造一条将火车连接到新目的地的铁路线。

简而言之,数据科学家通过编写查询与数据进行交互。他们负责为洞察力创建仪表板并制定机器学习策略。他们还直接与决策者合作,了解他们的信息需求并制定满足这些需求的策略。数据工程师构建和维护连接组织数据生态系统的数据基础设施。这些基础设施使数据科学家的工作成为可能。

数据工程师应该具备哪些技能?

1) 数据科学中使用的编程语言

数据工程师至少需要以下编程语言的专业知识:

SQL:设置、查询和管理数据库系统。 SQL 本身并不是一种“数据工程”语言,但数据工程师需要经常使用 SQL 数据库。

Python:创建数据管道、编写 ETL 脚本、建立统计模型和执行分析。与 R 一样,它是数据科学和数据工程的重要语言。这对于 ETL、数据分析和机器学习应用程序尤其重要。

R:分析数据,建立统计模型、仪表板和可视化展示。与 Python 一样,它是数据科学和数据工程的重要语言。它对于数据分析和机器学习应用程序特别有用。

这些脚本语言的知识使数据工程师能够排除故障并改进数据库系统。它还允许他们优化他们正在使用的业务洞察工具和机器学习系统。数据工程师也可以从熟悉 Java、NoSQL、Julia、Scala、MATLAB 和 TensorFlow 中受益。

2)关系和非关系数据库系统

数据工程师需要知道如何使用各种数据平台。 MySQL、PostgreSQL(混合 SQL 和 NoSQL 数据库)和 Microsoft SQL Server 等基于 SQL 的关系数据库系统 (RDBMS) 尤为重要。例如,他们应该对使用 SQL 构建和设置数据库系统感到自在。数据工程师还应该培养使用 NoSQL 数据库(如 MongoDB、Cassandra、Couchbase 等)的技能。

3) ETL 解决方案

数据工程师应该习惯于使用 ETL(提取、转换、加载)系统。 ETL 工具有助于提取、转换和加载数据到数据仓库。他们还应该了解如何使用 ETL 解决方案来协助将数据从一个存储系统或应用程序转换和迁移到另一个存储系统或应用程序。

4) 数据仓库

从各种业务系统中提取信息后,数据工程师可能需要准备信息以将其与数据仓库系统集成。如果他们想查询数据以获得深入的见解,数据集成至关重要。这可能涉及使用 Integrate.io 等 ETL 工具转换数据。

基于云的数据仓库构成了最先进的商业智能数据系统的支柱。数据工程师应该了解如何建立基于云的数据仓库。他们应该擅长将各种数据类型连接到它,并优化这些连接以提高速度和效率。

5) 数据湖

数据仓库只能处理结构化信息,例如关系数据库中的信息。关系数据库系统将数据存储在明确标识的列和行中。同时,数据湖可以处理任何类型的数据。这包括非结构化信息,例如流数据。 BI 解决方案可以连接到数据湖以获取有价值的见解。出于这个原因,许多公司正在将数据湖整合到他们的信息基础设施中。

要将机器学习算法应用于非结构化数据,了解如何集成数据并将其连接到商业智能平台非常重要。

6) 连接器

数据工程师开发连接各种信息系统的基本数据路径。因此,数据工程师应该对数据管道有很好的了解。他们应该知道如何帮助信息网络的不同部分相互通信。例如,他们应该能够使用 REST、SOAP、FTP、HTTP 和 ODBC,并了解尽可能高效地将一个信息系统或应用程序连接到另一个信息系统或应用程序的策略。

7) 数据摄取

数据摄取是指从不同来源提取数据。在提取过程中,数据工程师需要密切关注适用于情况的格式和协议——同时快速无缝地提取数据。

8) 配置商业智能系统

存储数据后,数据科学家建立信息源之间的重要联系。这些来源可以是数据仓库、数据集市、数据湖和应用程序。建立数据源之间的联系可能涉及将公司的数据暴露给用于商业智能的高级机器学习算法。数据工程师必须了解此过程如何为数据科学家的工作提供支持。

9) 构建仪表板以显示洞察和分析

许多商业智能和机器学习平台允许用户开发漂亮的交互式仪表板。这些仪表板展示了查询、人工智能预测等的结果。创建仪表板通常是数据科学家的责任。但是,数据工程师可以在此过程中协助数据科学家。许多 BI 平台和 RDBMS 解决方案允许用户通过拖放界面创建仪表板。不过,SQL、R 和 Python 的知识可以派上用场。它允许数据工程师协助数据科学家设置满足其需求的仪表板。

10) 机器学习

机器学习主要是数据科学家的领域。然而,由于数据工程师是构建支持机器学习系统的数据基础设施的人,因此他们对统计和数据建模感到满意是很重要的。此外,并非所有组织都会有数据科学家。因此,了解如何设置 BI 仪表板、部署机器学习算法以及独立提取深刻见解是很好的。

11) UNIX、Solaris 和 Linux 系统

未来的机器学习系统很可能是基于 UNIX 的。这是由于对硬件 root 访问的要求以及对 Windows 和 Mac OS 不提供的附加功能的需求。因此,如果数据工程师还没有这样做的话,他们现在会想要熟悉这些操作系统。

我如何学习成为一名数据工程师?

成为一名数据工程师没有明确的道路。尽管大多数数据工程师通过在工作中发展他们的技能来学习,但您可以通过自学、大学教育和基于项目的学习获得许多所需的技能。

无论您是在大学学习还是自己学习成为一名数据工程师,都有很多方法可以实现您的目标。

让我们来看看人们培养数据工程技能的四种方式:

1) 大学学位

成为数据工程师不需要大学教育。不过,获得正确的学位会有所帮助。对于数据工程师来说,工程、计算机科学、物理学或应用数学的学士学位就足够了。但是,您可能想攻读计算机工程或计算机科学的硕士学位。它将帮助您与其他求职者竞争——即使您之前没有数据工程师的工作经验。

2) 免费且廉价的在线课程

一些最好的数据工程师是通过免费且廉价的在线学习计划自学的。信不信由你,您可以通过在 YouTube 上观看视频来了解您需要了解的大部分内容。本文重点介绍了几个优秀的 YouTube 视频,这些视频有助于为成为数据工程师奠定基础。

以下是一些学习数据工程基础知识的免费在线课程:

数据工程初学者指南(第 1 部分)、(第 2 部分)、(第 3 部分):Medium 上的这些文章将帮助您了解数据工程和数据科学的基础知识。它们还将帮助您了解数据建模、数据分区以及提取、转换和加载 (ETL) 数据的策略。如果您想比我们在本文中的时间更深入,那么本指南是最好的起点。

Udacity 的数据工程纳米学位:Udacity 是一家围绕数学和技术提供高质量、免费的在线教育的公司。他们有一整条专门用于教授数据工程的课程。

随着您对学习的深入了解,您将需要掌握各种编码语言、操作系统和信息系统。以下是学习以下技能的免费资源列表:

如何使用 Linux,CS40​​1

如何使用 Python、SQL 和 NoSQL 进行编码

如何使用 Hadoop、MapReduce、Apache Spark 和机器学习

3) 基于项目的学习

找到完成在线数据工程课程的动机可能很困难。许多想成为数据科学家的人还没来得及干就辞职了。如果您遇到这种情况,请考虑基于项目的学习方法。

选择一个你觉得有趣的项目。学习完成项目所需的技能。基于项目的学习可以成为学习数据工程的更有趣和实用的方式。

要为基于项目的学习方法添加更多动力,请考虑写下您的工作和研究。打开一个 Medium 帐户并花一些时间创建一些关于数据工程主题的“操作指南”文章。您还可以将您的个人项目发布到 Github,并为 Github 上的开放项目做出贡献。这些行动 这样做将提高您对潜在雇主的数据工程街头信誉。

4) 专业认证

有许多数据科学和数据工程的专业认证课程。以下是数据工程中最受欢迎的证书课程列表:

供应商特定认证:Oracle、Microsoft、IBM、Cloudera 和许多其他数据科学技术公司为其产品提供有价值的认证培训。

认证数据管理专业人员 (CDMP):国际数据管理协会 (DAMA) 开发了 CDMP 计划作为一般数据库专业人员的证书。

Cloudera Certified Professional (CCP) 数据工程师:Cloudera CCP 称号是针对专业数据工程师的认证。它涵盖了数据转换、暂存和存储信息、数据摄取等主题。

谷歌云认证专业数据工程师:申请人成功通过两个小时的考试后,即可获得谷歌云数据工程师认证。

但是,这些课程可能没有您想象的那么有价值。数据工程是你边做边学的东西。雇用数据工程师的公司知道这一点。

如果您的雇主赞助您获得其中一项认证,那就太好了。但是,如果您是自学,请记住,边做边学比证书更有价值。

作者 east
大数据开发 3月 28,2022

国外MySQL数据仓库和数据库的8个常用 ETL 工具

在大数据时代,找到合适的 MySQL ETL 工具对于管理和分析数据至关重要。理想情况下,您需要一个能够让您轻松控制数据流、符合安全标准、与流行应用程序轻松集成并帮助团队中的每个成员构建数据管道而无需学习如何编码的解决方案。

有这么多用于 MySQL 数据仓库和数据库的 ETL 工具,您需要一个指南来帮助您选择适合您公司的选项是可以理解的。您探索的 ETL 解决方案越多,您选择的软件就越有可能使您的员工和经理能够从可靠的数据中做出明智、明智的选择。

为了帮助您选择适合您的 ETL 解决方案,这里汇总了一些可用的顶级 ETL 工具。

MySQL 数据仓库的 8个 ETL 工具:

DataExpress

Pentaho Kettle

csv2db

Apatar

Domo

AWS Glue

Benetel

Apache Spark

DataExpress

提供了许多使 MySQL 用户受益的功能。 它符合 HIPAA 和金融行业的安全要求。 DataExpress 还允许您创建数据传输计划。 设置时间表后,它将自动将数据从您的数据库传输到您的分析应用程序。

制作 DataExpress 的公司 DATA443 Risk Mitigation 有几个版本供您考虑。 不幸的是,这些选项迫使您承诺使用非常具体的软件形式。 你没有太多的灵活性。

此外,DATA443 风险缓解侧重于安全性。 这意味着 DataExpress 超出了大多数监管准则。 这也意味着 ETL 不是开发人员的主要关注点。

Pentaho Kettle

Pentaho Data Integration(或 Kettle)具有出色的用户界面,可以让没有经验的用户构建数据管道。您无需了解 SQL 或其他语言即可开始使用。这些特性使其成为商业智能和 MySQL ETL 的不错选择。

另一方面,它的一些最重要的缺陷包括:

限制您的设计的有限模板。

数据库连接超时之前令人沮丧的短暂时间。

无法真正识别问题的难以辨认的错误代码。

此选项的价格点意味着 Pentaho Kettle 可能并不适合所有人。

csv2db

如果您的需求有限,需要将 CSV 文件添加到 MySQL 数据库,那么 csv2db 可以为您工作。该工具只做一件事,但它做得非常好。

用户需要一些编码经验才能开始。 CSV2db 不是销售团队可以使用的解决方案类型。它专为希望以快速、简单的方式管理数据的技术专家而设计。

Apatar

Apatar 在 MySQL ETL 和商业智能数据分析方面相当简单。其为商业用户设计的开源软件提供对数据质量工具、集成工具等的访问。您不需要编码或数据管理经验即可使用该工具。但是,如果您确实知道如何编写脚本,则可以从 Apatar 获得更多的灵活性和自定义。

同样重要的是要注意 Apatar 没有得到很多更新。不要期望它与最新的应用程序集成。

Domo

您可能以前听说过 Domo。选择 Domo 有一些明显的优势。它比大多数 MySQL ETL 工具做得更多。例如,您可以使用它来分析和可视化数据。其他流行的用例包括将 Domo 数据引入 Amazon Redshift 并将 Domo 数据加载到 Google BigQuery。

通过包含数据分析和可视化功能,Domo 将自己定位为用户友好的选项。不幸的是,这正是该软件的不足之处。实际上,Domo 有一个陡峭的学习曲线和一个对新用户没有多大意义的用户界面。虽然它似乎是商业智能的绝佳选择,但它缺乏营销和销售专家做出数据驱动决策所需的直观功能。

AWS Glue

Amazon Web Services 是一项基于云的服务,提供 AWS Glue,这是一种利用 Python 作为其基础语言的实时 ETL 工具。当您想要完全无服务器时,AWS 是理想的选择。然而,这将是有代价的。您将按小时收费,以一秒为增量。

Benetl

Benetl 是一个免费的 MySQL ETL 工具。然而,它仍然是有代价的。您需要在编码和数据库管理方面拥有丰富的经验才能从 Benetl 获得任何东西。除了可以让您编写命令的屏幕之外,它几乎没有用户界面。要将 Benetl 连接到 MySQL,您需要下载核心软件未包含的驱动程序。对于没有计算机科学学位的人来说,即使创建 Benetl 帐户似乎也是不可能的。

Benetl 也只管理 csv、txt 和 xls 文件,这可能会给您和您的团队带来问题。

除非您是数据专家,否则您可能需要重新考虑 Benetl。尽管没有前期成本,但学习曲线非常陡峭,您最终可能会花费大量时间(以及金钱)试图弄清楚它。最好为适合您员工的软件付费。

Apache Spark

Apache Spark 是一个“闪电般快速”的统一分析引擎,能够快速高效地处理大型数据集。以速度着称的 Apache Spark 可以将工作负载的运行速度提高 100 倍。虽然功能强大,但 Apache Spark 不提供自动优化过程。如果自动化对您很重要,这是您需要考虑的事情,因为您需要手动优化代码。

这个开源 ETL 工具也不适合多用户环境,并且不提供自己的文件管理系统。

作者 east
数据仓库, 数据库 3月 25,2022

数据工程最糟糕的部分是什么

在数据工程团队中,列表很长,取决于您的个人角色。但我的一般选择是“最终数据科学家和数据分析师糟糕的 SQL 语句”。

可能不是一个明显的答案,所以让我解释一下。

如果您正在使用数据仓库,让我们从数据工程团队的三个主要工作领域的角度来看这个问题:

构建 ETL 管道 → 将数据导入您的仓库

构建转换→加入/转换不同的数据集

公开数据以供下游使用 → 报告、分析、ML/AI

数据工程师还需要对元数据进行分类和组织,并定义从仓库写入和读取数据的流程。在某种程度上,他们是数据仓库的图书馆员。

然后目标是尽可能抽象和自动化。通过自动化,数据工程师可以将他们稀缺的时间用于构建与维护/修复。

您还通过向您提供的数据添加 SLA 来向业务做出承诺。 “报告将在太平洋标准时间早上 6 点之前完成”或“我们的分析环境仅比我们的生产环境晚 15 分钟”。

瞧,您已经完成了以上所有工作,将其投入生产,稍作调整,一切正常。你可以继续做别的事情。嗯,不。

变革的驱动力

事情不是一成不变的。如果您正在为一家不断发展的企业工作,那么您将不得不应对三个挑战:

数据量在 5 年内增长约 10 倍,同时出现了越来越多的新型数据源

模型的数量正在增长。随着您将更多数据引入您的仓库,您可以以无限新的方式组合这些数据。你会听到术语“DAG”(有向无环图)。

用户和工具的数量正在增长。随着业务的增长,需要/想要访问数据的人数也在增加。他们将希望使用他们选择的工具访问这些数据。

数据工程的挑战

现在你是负责这个堆栈的数据工程师。您的公司将雇用更多的数据工程师来保持运转。例如,Netflix 每个数据源都有一名数据工程师,他们的全部工作就是保持该数据源的盘子旋转。

但并非每家公司都有 Netflix 的预算。人数有上限。但是,贵公司招聘的数据科学家和分析师的数量似乎没有限制。更多的关注数据是“数据驱动的”。

因此,“数据构建者”(数据工程师)和“数据消费者”(数据分析师、科学家、机器学习应用程序等)之间的比例猛增。

我看到(数据构建者)与(数据消费者)的比率介于 1:20 到 1:40 之间。一名数据工程师必须支持 20-40 个下游用户。

这就是问题开始的地方。回到最初的三个工作领域,将会发生以下情况:

ETL 管道运行很长时间并产生错误和问题。不过,您可能只能在运行后发现,现在您必须弄清楚是什么损坏了。这是一个巨大的干扰。

现有的模型可能无法提供企业想要的答案。分析师想要快速行动,因此他们绕过您并开始添加新模型,甚至直接在您的仓库中查询原始数据。如果基础表发生变化,这会导致模型膨胀和损坏。

您的最终用户可能正在使用为他们生成 SQL 的工具。或者他们编写自己的 SQL 语句。这两种方法都可能导致糟糕的 SQL 语法使整个仓库紧张,每个人的查询速度都很慢。

然后用户向数据工程师提交支持票(“我的查询很慢”,或者“我的查询没有完成或完成”)。你会被支持请求淹没。

我们当然是在戏剧化,但从方向上讲,这是工作中最糟糕的三个部分。让我们称之为“保持盘子旋转”。

数据工程中最糟糕的部分

我书中最糟糕的一点是最后一点——处理糟糕的 SQL。

那是因为管道和模型是您可以控制的。约定、工具、监控、警报、访问权限等——有一种方法可以在事物周围设置护栏。

但是控制最终用户和他们的 SQL 是不可能的。例如,我见过没有 WHERE 子句的“SELECT *”查询,它连接两个表,每个表有 20 亿行。输出量如此之大,以至于它会填满并取下仓库。 “谁写了那个查询??”。

不太引人注目的结果包括编写查询,例如10 分钟的执行时间,一个小的更改可能会导致 1 分钟的执行时间。这听起来可能没什么大不了的(“我会同时去喝杯咖啡”),但这是生产力的巨大损失。对于数据科学,快速迭代和测试模型就是一切。

是的,您可以设置规则来终止查询,但所做的只是增加分析师文件的支持票数,因为查询没有完成。

对于数据工程师来说,这些查询是谁编写的也不是很明显。分析师使用的工具掩盖了他们背后的用户。 Tableau、Looker 或 Mode Analytics 等仪表板工具在您的仓库中显示为一个用户。

但在他们身后,他们可能有 100-200 人在编写查询。因此,您使用“Looker”作为用户,但您不知道是“Jack”、“Anne”还是“Joe”编写了查询。因此,要找出发生了什么以及谁编写了哪个查询,需要进行大量的挖掘工作。

概括

所以你去,上面是长版本。答案的简短版本是“最终用户的 SQL 语句不佳”。

这是一个问题,原因有以下三个:

您无法控制分析师编写的 SQL 语法。您可能只有在查询运行并造成损坏后才能发现。

分析师用来编写查询的工具掩盖了他们背后的用户。在拥有数百名用户的情况下,找到编写查询的用户就像大海捞针一样。

您不能只是关闭分析师或终止他们的查询——这将导致支持票证的增加以及数据工程和数据消费者之间的摩擦。

随着数据生产者与数据消费者的比例越来越大,问题只会越来越大。您必须支持的最终用户越多,您必须处理的投诉和罚单就越多,这是一个巨大的挫败感和时间浪费。

当然,这个问题的答案是让分析师能够编写更好的 SQL,并帮助数据工程师在这方面与分析师协作。

作者 east
Hbase, Hive 3月 24,2022

生产环境选型考虑:Hive全方位对比HBase

Apache Hive 和 Apache HBase 是用于大数据的令人难以置信的工具。虽然它们的功能有一些相同之处,但 Apache Hive 和 Apache HBase 都具有独特的作用,使它们更适合特定的场景。一些主要区别包括:

Apache Hive 是建立在 Hadoop 之上的数据仓库系统,而 Apache HBase 是在 HDFS 或 Alluxio 之上的 NoSQL 键/值。

Hive 为 Spark/Hadoop 数据提供 SQL 功能,HBase 实时存储和处理 Hadoop 数据。

HBase 用于实时查询或大数据,而 Hive 不适合实时查询。

Hive 最适合用于数据的分析查询,而 HBase 主要用于将非结构化 Hadoop 数据作为湖存储或处理。

归根结底,将 Apache Hive 与 Apache HBase 进行比较就像将苹果与橘子,或 Google 与 Facebook 进行比较。虽然这两个实体相似,但它们不为用户提供相同的功能。然而,尽管存在差异,Apache Hive 和 Apache HBase 都是处理大数据时使用的绝佳工具。继续阅读以了解有关 Apache Hive、Apache HBase 的更多信息,以及它们的各种功能如何在处理大数据时改善您的业务。

什么是 Apache Hive?

让我们从 Apache Hive 开始“Hive 与 Hbase”的考试。 Apache Hive 是一个构建在 Hadoop 之上的数据仓库系统。它为大型 Hadoop 非结构化数据池提供数据汇总、分析和查询。您可以查询存储在 Apache HDFS 中的数据,甚至可以查询存储在 Apache HBase 中的数据。 MapReduce、Spark 或 Tez 执行该数据。

Apache Hive 使用一种称为 HiveQL(或 HQL)的类似 SQL 的语言来查询批量 MapReduce 作业。 Hive 还支持 ACID 事务,例如 INSERT/DELETE/UPDATE/MERGE 语句。从更新 3.0 开始,Hive 通过减少表模式约束和提供对矢量化查询的访问权限为此添加了一些额外的功能。

简而言之,Apache Hive 为 Spark/Hadoop 数据提供了 SQL 特性(MapReduce 的 Java API 不太容易使用),它既是一个数据仓库系统,也是一个具有丰富集成和大量用户友好的 ETL 工具特征。与许多类似的产品(例如 Apache Pig)一样,Hive 在技术上可以处理许多不同的功能。例如,Hive 允许您使用 SQL,而不是为 MapReduce 作业编写冗长的 Java。您在堆栈中使用 Hive 的原因将因您的需求而异。

Hive 的核心功能

Hive 可以帮助精通 SQL 查询与 Hadoop 集成的各种数据存储中的数据。由于它符合 JDBC,它还与现有的基于 SQL 的工具集成。运行 Hive 查询可能需要一段时间,因为默认情况下它们会遍历表中的所有数据。尽管如此,Hive 的分区功能限制了数据量。分区允许对存储在单独文件夹中的数据运行过滤查询,并且只读取与查询匹配的数据。例如,如果文件将日期格式作为其名称的一部分,它可以用于仅处理在特定日期之间创建的文件。

以下是 Hive 的一些功能:

它使用 SQL。

出色的 Apache Spark 和 Tez 集成。

您可以使用用户定义函数 (UDF)。

它有很棒的带有 Hive 3+ 的 ACID 表。

您可以查询庞大的 Hadoop 数据集。

大量集成(例如,BI 工具、Pig、Spark、HBase 等)。

其他基于 Hive 的功能(例如 HiveMall)可以提供一些额外的独特功能。

什么是 Apache HBase?

Apache HBase 是运行在 HDFS 或 Alluxio 之上的 NoSQL 键/值存储。与 Hive 不同,HBase 操作在其数据库而不是 MapReduce 作业上实时运行。所以,你有随机访问能力——这是 HDFS 所缺少的。由于 HDFS 不是为处理具有随机读/写操作的实时分析而构建的,因此 HBase 为 HDFS 带来了大量功能。您可以将其设置为通过 Hadoop 处理的实时数据的数据存储。您可以将它与 MapReduce 集成。更好的是,您可以将它与 Hive 和 MapReduce 集成以获得 SQL 功能。

HBase 包含表,并且表被拆分为列族。列族(在架构中声明)将一组特定的列组合在一起(列不需要架构定义)。例如,“message”列族可以包括以下列:“to”、“from”、“date”、“subject”和“body”。 HBase 中的每个键/值对都定义为一个单元格,每个键由 row-key、c​​olumn family、column 和 time-stamp 组成。 HBase 中的一行是由行键标识的一组键/值映射。 HBase 享有 Hadoop 的基础设施并横向扩展。

简而言之,HBase 可以存储或处理具有近乎实时读/写需求的 Hadoop 数据。这包括结构化和非结构化数据,尽管 HBase 擅长后者。 HBase 具有低延迟,可通过 shell 命令、Java API、Thrift 或 REST 访问。 HBase 通常是 Hadoop 集群中的存储层,Adobe 等大型品牌利用 HBase 来满足其所有 Hadoop 存储需求。

HBase的核心特性

HBase 通过将数据存储为模仿 Google 的 Bigtable 的键/值来工作。它支持四种主要操作:添加或更新行、扫描以检索一系列单元格、返回指定行的单元格以及删除以从表中删除行、列或列版本。版本控制是可用的,因此它可以获取数据的先前值(历史记录不时删除以通过 HBase 压缩清理空间)。尽管 HBase 包含表,但仅表和列族需要模式,列不需要模式,并且它包括增量/计数器功能。

以下是 HBase 的一些功能:

它支持键值

它是一个支持随机读/写操作的 NoSQL 数据库

中型对象 (MOB) 支持

HBase 支持协处理器。这对于计算海量数据非常有用,并且操作类似于 MapReduce 作业,并具有一些额外的好处。

允许您利用 Apache Phoenix

您可以执行扫描操作

Hive 和 HBase 的局限性是什么?

每个工具都有自己的优缺点。因此,Hive 和 HBase 总是存在某些限制。阅读下面的这些限制。

Hive限制

首先,Hive 具有非常基本的 ACID 功能。他们到达了 Hive 0.14,但没有 MYSQL 等产品的成熟度。也就是说,仍然有 ACID 支持,并且每个补丁都会变得更好。

Hive 查询通常也具有高延迟。由于它在 Hadoop 上运行批处理,因此可能需要几分钟甚至几小时才能获得查询结果。此外,更新数据可能既复杂又耗时。

Hive 在小数据查询(尤其是大容量数据)方面并不是最好的,大多数用户倾向于依靠传统的 RDBMS 来处理这些数据集。

HBase 限制

HBase 查询采用自定义语言,需要经过培训才能学习。类似 SQL 的功能可以通过 Apache Phoenix 实现,尽管它是以维护模式为代价的。此外,HBase 并不完全符合 ACID,尽管它确实支持某些属性。最后但同样重要的是——为了运行 HBase,你需要 ZooKeeper——一个用于分布式协调的服务器,例如配置、维护和命名。

HBase 可以通过协同处理来处理小数据,但它仍然不如 RDBMS 有用。

实践中的 Hive 和 HBase

正如 Hive 和 HBase 在某些场景中有其局限性一样,它们也有它们蓬勃发展的特定场景。在下面的实践中阅读 Hive 和 HBase。

Hive使用场景

Hive 应该用于对一段时间内收集的数据进行分析查询——例如,计算趋势或网站日志。

我们通常会看到两个 Hive 用例:

HDFS 的 SQL 查询引擎 – Hive 可以成为 SQL 查询的重要来源。您可以利用 Hive 处理 Hadoop 数据湖并将它们连接到您的 BI 工具(如 Tableau)以实现可见性。

具有 HBase、Pig、Spark 或 Tez 的表存储层。大量 HDFS 工具使用 Hive 作为表存储层。从技术上讲,这可能是其最大的全球用例。

Hive 使用的真实例子

目前有超过 4,330 家公司品牌使用 Hive。这比使用 HBase 少,但仍然有很多品牌——尤其是因为大多数公司仍在运行 SQL 堆栈。

Scribd 将 Hive 典型的数据科学用例与 Hadoop 结合使用。这包括机器学习、数据挖掘和 BI 工具的临时查询。确实,Scribd 使用 Hive 作为其整体 Hadoop 堆栈的一部分——这是它最适合的地方。您可以将 Hive 和 HBase 放在同一个集群上进行存储、处理和即席查询。

MedHelp 将 Hive 用于其 Find a Doctor 功能。他们每天在 Hadoop 堆栈上处理数百万个查询,而 Hive 像专业人士一样处理它。

Last.fm 还使用 Hive 进行临时查询。再次,这就是 Hive 的亮点。如果您需要在 Hadoop 上进行临时查询,请使用 Hive。

HubSpot、hi5、eHarmony 和 CNET 也使用 Hive 进行查询。

HBase 使用场景

HBase 非常适合实时查询大数据(例如 Facebook 曾经将其用于消息传递)。 Hive 不应该用于实时查询,因为结果需要一段时间。

HBase 主要用于将非结构化 Hadoop 数据作为湖存储和处理。您也可以使用 HBase 作为所有 Hadoop 数据的仓库,但我们主要看到它用于写入繁重的操作。

HBase 使用的真实使用场景

几乎所有这些案例都将使用 HBase 作为 Hadoop 的存储和处理工具——这是它自然适合的地方。

Adobe 自推出以来一直在运行 HBase。他们的第一个节点早在 2008 年就启动了,他们目前将 HBase 用于他们的 30 个 HDFS 节点。他们将其用于内部结构化数据和非结构化外部数据。

Flurry 使用 HBase 运行 50 个 HDFS 节点,它使用 HBase 处理数百亿行。

HubSpot 主要使用 HBase 进行客户数据存储。作为 HDFS 堆栈的一部分,他们还使用 Hive 对该 HBase 数据运行查询。

Twitter 也在他们的 Hadoop 堆栈中使用 HBase。它用于用户搜索的内部数据。

Streamy 从 SQL 切换到带有 HBase 的 Hadoop 堆栈。他们声称能够比以往更快地处理。

Sematext(为 HBase 创建 SMP)使用 HBase 和 MapReduce 堆栈。同样,这两者可以很好地协同工作(通常通过 Hive 加以利用),因为它们完美地互补了彼此的优缺点。 超过 10,000 家企业使用 HBase。而且大部分都很大。在当前的技术生态系统中,大品牌倾向于更频繁地利用 Hadoop,因此 HBase 往往处于一些大堆栈中(例如,TCS、Marin Software、Taboola、KEYW Corp 等)

作者 east
Spark 3月 24,2022

生产环境选型考虑:5款大数据流处理平台

实时分析可以让您及时了解当前正在发生的事情,例如目前有多少人正在阅读您的新博客文章,以及是否有人喜欢您最新的 Facebook 状态。对于大多数平台分析来说,实时是一个不错的功能,它不会提供任何额外的功能。然而,有时实时处理是必须的。

假设您经营一家大型广告公司。实时分析可以让您随时了解最新的在线广告活动(您的客户花费大量资金购买)是否真的有效,如果没有,您可以在预算进一步花费之前立即进行更改。另一个用例是为您自己的应用程序提供实时分析——它看起来不错,您的用户可能需要它。

实时分析可以让您及时了解当前正在发生的事情,例如目前有多少人正在阅读您的新博客文章,以及是否有人喜欢您最新的 Facebook 状态。对于大多数用例来说,实时是一个不错的功能,它不会提供任何重要的见解。然而,有时实时是必须的。

假设您经营一家大型广告公司。实时分析可以让您随时了解您的最新在线广告活动(您的客户支付了大量资金)是否真的有效。如果不是,您可以在预算进一步花费之前立即进行更改。另一个用例是为您自己的应用程序提供实时分析。毕竟,这样做看起来不错,您的用户甚至可能需要它。

那里有很多实时平台。他们中的很多人都是新人,他们之间的区别并不是每个人都清楚。我们至少可以提供所有选项供您选择,因此这里有五个可用于大数据的实时流媒体平台。

1. Apache Flink

Apache Flink 是一个开源流媒体平台,在复杂流处理方面速度极快。事实上,它能够在几毫秒内处理实时流,因为它可以被编程为仅在实时通过大数据行时处理新的、更改的数据。通过这种方式,Flink 可以轻松实现大规模的批处理和流处理,以提供实时洞察,因此这个平台以提供低延迟和高性能着称也就不足为奇了

Flink 著名的另一个特性是容错,这意味着系统故障不会影响整个集群。它还设计为在完成计算的同时在任何集群环境中运行,使其成为一种可靠、快速的解决方案,恰好可以根据需要轻松扩展。精确一次语义的添加和预定义运算符的存在有助于在该平台上进行实时处理。

请注意,Flink 可以将事件流处理为有界或无界数据集。使用无界流,没有定义的结束并且可以始终如一地处理。另一方面,有界的事件流将作为批处理进行处理,并具有定义的开始和结束。这提供了一定的灵活性,因为程序可以用多种语言编写,例如 Python、Scala、SQL 和 Java。最后,Flink 以其易用性和易于与其他开源大数据处理工具(如 Kafka 和 Hadoop)集成而闻名。

2.Spark

另一个以速度和易用性着称的开源数据处理框架是 Spark。该平台在集群的 RAM 上运行在内存中,并且不依赖于 Hadoop 的 MapReduce 两阶段范式,这在大数据处理方面增加了其闪电般的快速性能。

它不仅可以轻松完成大型数据集的处理任务,还可以将它们分布在多台计算机上。此外,它还可以创建数据管道、处理数据流和图表等等。这就是为什么它是领先的实时流媒体平台之一,从批处理和机器学习到大规模 SQL 和流式大数据。事实上,英特尔、雅虎、Groupon、趋势科技和百度等公司已经在依赖 Apache Stream。

Spark 可以在独立集群模式或 Hadoop YARN 之上运行,它可以直接从 HDFS 读取数据。它还可以在 EC2、Mesos、Kubernetes、云等上运行。此外,Spark 用户可以使用 Python、SQL、R、Scala 或 Java 轻松编写应用程序,使其用途广泛且易于使用。这些功能是 Spark 成为当今顶级实时流媒体平台之一的原因。

3. Storm

Storm 是一个免费的分布式实时计算系统,它致力于实现 Hadoop 为批处理所做的工作。换句话说,它是一种用于处理无限大数据流的简单解决方案。使用 Storm 的一些大品牌包括 Spotify、Yelp 和 WebMD。

Storm 的一大好处是它被设计用于任何编程语言,为用户提供了很大的灵活性。此外,还有几个用例,包括实时分析、机器学习、ETL、连续计算等。与当今许多最好的实时流媒体平台一样,它速度很快,可确保在几毫秒内处理大数据。

关于 Storm 的其他一些需要了解的事实是,它具有容错性、可扩展性,并且易于与您可能已经在使用的技术集成。特别是,它运行在 Hadoop YARN 之上,可以与 Flume 一起使用,将数据存储在 HDFS 上。因此,在使用 Storm 时,无论您喜欢哪种编程语言,您都可以在一个易于设置和使用的平台上快速处理您的数据。

4. Apache Samza

Samza 是一个开源分布式流处理框架,允许用户构建可以实时处理来自多个来源的大数据的应用程序。它基于 Apache Kafka 和 YARN,但也可以作为独立库运行。 LinkedIn 最初开发了 Samza,但从那时起,其他大品牌也开始使用它,例如 eBay、Slack、Redfin、Optimizely 和 TripAdvisor。

Samza 提供了一个简单的基于回调的 API,类似于 MapReduce,它包括快照管理。它还以持久和可扩展的方式提供容错,以及有状态的处理和隔离。它与其他批处理系统(例如 Spark 或 Hadoop)真正区别开来的一个特性是它提供了连续的计算和输出,使其响应时间非常快。

总体而言,Samza 以为超快速数据分析提供非常高的吞吐量和低延迟而闻名。这使其成为为处理大数据而构建的众多平台中的流行选择。

5.Amazon Kinesis

Kinesis 是 Amazon 用于在云上实时处理流数据的服务。这种分析解决方案能够避免像 Hadoop 这样的工具所存在的批处理问题。正因为如此,Kinesis 在大数据处理方面能够更好地提供实时精度,因为它每小时可以处理多达数百 TB 的数据。

该服务的功能使您可以开发需要实时数据的应用程序。毕竟,借助 Kinesis,您可以使用此服务立即摄取、缓冲和处理您的数据,无论是视频、音频、网站点击流还是其他媒体。您不必等待首先收集所有数据,因为它可以在到达时进行处理。这使您可以在几分钟内获得人工智能、机器学习等的分析。 Kinesis 也是可扩展的,因为它可以以低延迟处理来自众多来源的大量流数据。

此外,Kinesis 通过连接器与其他 Amazon 服务集成,包括 Redshift、S3、DynamoDB,以形成完整的大数据架构。该工具还包括 Kinesis Client Library (KCL),它允许您构建应用程序并将流数据用于仪表板、警报甚至动态定价。

作者 east

上一 1 … 23 24 25 … 41 下一个

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

标签

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

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?
  • 如何进行AUTOSAR模块的持续集成(CI)部署与版本控制?

文章归档

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

功能

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

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