Hive 终于等来了 Flink

Apache Spark 什么时候开始支持集成 Hive 功能?笔者相信只要使用过 Spark 的读者,应该都会说这是很久以前的事情了。

那 Apache Flink 什么时候支持与 Hive 的集成呢?读者可能有些疑惑,还没有支持吧,没用过?或者说最近版本才支持,但是功能还比较弱。

其实比较也没啥意义,不同社区发展的目标总是会有差异,而且 Flink 在真正的实时流计算方面投入的精力很多。不过笔者想表达的是,Apache Hive 已经成为数据仓库生态系统的焦点,它不仅是一个用于大数据分析和 ETL 的 SQL 引擎,也是一个数据管理平台,所以无论是 Spark,还是 Flink,或是 Impala、Presto 等,都会积极地支持集成 Hive 的功能。

的确,对真正需要使用 Flink 访问 Hive 进行数据读写的读者会发现,Apache Flink 1.9.0 版本才开始提供与 Hive 集成的功能。不过,值得欣慰的是,Flink 社区在集成 Hive 功能方面付出很多,目前进展也比较顺利,最近 Flink 1.10.0 RC1 版本已经发布,感兴趣的读者可以进行调研和验证功能。

架构设计

首先,笔者基于社区公开的资料以及博客,概括性地讲解 Flink 集成 Hive 的架构设计。

Apache Flink 与 Hive 集成的目的,主要包含了元数据和实际表数据的访问。

元数据

为了访问外部系统的元数据,Flink 刚开始提供了 ExternalCatalog 的概念。但是 ExternalCatalog 的定义非常不完整,基本处于不可用的状态。Flink 1.10 版本正式删除了 ExternalCatalog API (FLINK-13697),这包括:

  • ExternalCatalog(以及所有依赖的类,比如 ExternalTable)
  • SchematicDescriptor、MetadataDescriptor 和 StatisticsDescriptor

针对 ExternalCatalog 的问题,Flink 社区提出了一套全新的 Catalog 接口(new Catalog API)来取代现有的 ExternalCatalog。新的 Catalog 实现的功能包括:

  • 能够支持数据库、表、分区等多种元数据对象
  • 允许在一个用户 Session 中维护多个 Catalog 实例,从而支持同时访问多个外部系统
  • Catalog 以可插拔的方式接入 Flink,允许用户提供自定义的实现

下图展示了新的 Catalog API 的总体架构:

640.png

创建 TableEnvironment 的时候会同时创建一个 CatalogManager,负责管理不同的 Catalog 实例。TableEnvironment 通过 Catalog 来为 Table API 和 SQL Client 用户提供元数据服务。

val settings = EnvironmentSettings.newInstance().useBlinkPlanner().inBatchMode().build()val tableEnv = TableEnvironment.create(settings)
val name            = "myhive"
val defaultDatabase = "mydatabase"
val hiveConfDir     = "/opt/hive-conf"// a local path
val version         = "2.3.4"val hive = newHiveCatalog(name, defaultDatabase, hiveConfDir, version)
tableEnv.registerCatalog("myhive", hive)// set the HiveCatalog as the current catalog of the session
tableEnv.useCatalog("myhive")

目前 Catalog 有两个实现,GenericInMemoryCatalog 和 HiveCatalog。其中 GenericInMemoryCatalog 保持了原有的 Flink 元数据管理机制,将所有元数据保存在内存中。而 HiveCatalog 会与一个 Hive Metastore 的实例连接,提供元数据持久化的能力。要使用 Flink 与 Hive 进行交互,用户需要配置一个 HiveCatalog,并通过 HiveCatalog 访问 Hive 中的元数据。

另一方面,HiveCatalog 也可以用来处理 Flink 自身的元数据,在这种场景下,HiveCatalog 仅将 Hive Metastore 作为持久化存储使用,写入 Hive Metastore 中的元数据并不一定是 Hive 所支持的格式。一个 HiveCatalog 实例可以同时支持这两种模式,用户无需为管理 Hive 和 Flink 的元数据创建不同的实例。

另外,通过设计 HiveShim 来支持不同版本的 Hive Metastore,具体支持的 Hive 版本列表,请参考官方文档。

表数据

Flink 提供了 Hive Data Connector 来读写 Hive 的表数据。Hive Data Connector 尽可能的复用了 Hive 本身的 Input/Output Format 和 SerDe 等类,这样做的好处一方面是减少了代码重复,更重要的是可以最大程度的保持与 Hive 的兼容,即 Flink 写入的数据 Hive 可以正常读取,并且反之亦然。

集成 Hive 功能

Flink 与 Hive 集成的功能在 1.9.0 版本中作为试用功能发布,存在不少使用的局限性,但是不久将发布的 Flink 1.10 稳定版本会更加完善集成 Hive 的功能并应用到企业场景中。

为了让读者提前体验 Flink 1.10 集成 Hive 的功能,笔者会基于 Cloudera CDH 编译 Flink 1.10.0 RC1 版本并进行较为完整的测试。

环境信息

CDH 版本:cdh5.16.2
Flink 版本:release-1.10.0-rc1

Flink 使用了 RC 版本,仅供测试,不建议用于生产环境。
目前 Cloudera Data Platform 正式集成了 Flink 作为其流计算产品,非常方便用户使用。

CDH 环境开启了 Sentry 和 Kerberos。

下载并编译 Flink

$ wget https://github.com/apache/flink/archive/release-1.10.0-rc1.tar.gz
$ tar zxvf release-1.10.0-rc1.tar.gz
$ cd flink-release-1.10.0-rc1/
$ mvn clean install -DskipTests-Pvendor-repos -Dhadoop.version=2.6.0-cdh5.16.2

不出意外的话,编译到 flink-hadoop-fs 模块时,会报如下错误:

[ERROR] Failed to execute goal on project flink-hadoop-fs: Could not resolve dependencies for project org.apache.flink:flink-hadoop-fs:jar:1.10.0: Failed to collect dependencies at org.apache.flink:flink-shaded-hadoop-2:jar:2.6.0-cdh5.16.2-9.0: Failed to read artifact descriptor for org.apache.flink:flink-shaded-hadoop-2:jar:2.6.0-cdh5.16.2-9.0: Could not transfer artifact org.apache.flink:flink-shaded-hadoop-2:pom:2.6.0-cdh5.16.2-9.0 from/to HDPReleases (https://repo.hortonworks.com/content/repositories/releases/): Remote host closed connection during handshake: SSL peer shut down incorrectly

编译中遇到 flink-shaded-hadoop-2 找不到的问题,其实查看 Maven 仓库会发现,根本原因是 CDH 的 flink-shaded-hadoop-2 的 jar 包在 Maven 中央仓库是没有对应的编译版本,所以需要先对 Flink 依赖的 flink-shaded-hadoop-2 进行打包,再进行编译。

■ 解决 flink-shaded-hadoop-2 问题

  • 获取 flink-shaded 源码
git clone https://github.com/apache/flink-shaded.git
  • 切换依赖的版本分支

根据上面报错时提示缺少的版本切换对应的代码分支,即缺少的是 9.0 版本的 flink-shaded-hadoop-2:

git checkout release-9.0
  • 配置 CDH Repo 仓库

修改 flink-shaded 项目中的 pom.xml,添加 CDH maven 仓库,否则编译时找不到 CDH 相关的包。

在 ... 中添加如下内容:

<profile>
<id>vendor-repos</id>
<activation>
<property>
<name>vendor-repos</name>
</property>
</activation>
<!-- Add vendor maven repositories -->
<repositories>
<!-- Cloudera -->
<repository>
<id>cloudera-releases</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
  • 编译 flink-shaded

开始执行编译:

mvn clean install -DskipTests-Drat.skip=true-Pvendor-repos -Dhadoop.version=2.6.0-cdh5.16.2

建议通过科学上网方式编译,如果读者遇到一些网络连接的问题,可以试着重试或者更换依赖组件的仓库地址。

编译成功后,就会把 flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar 安装在本地 maven 仓库,如下为编译的最后日志:

Installing /Users/.../source/flink-shaded/flink-shaded-hadoop-2-uber/target/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar to /Users/.../.m2/repository/org/apache/flink/flink-shaded-hadoop-2-uber/2.6.0-cdh5.16.2-9.0/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar
Installing /Users/.../source/flink-shaded/flink-shaded-hadoop-2-uber/target/dependency-reduced-pom.xml to /Users/.../.m2/repository/org/apache/flink/flink-shaded-hadoop-2-uber/2.6.0-cdh5.16.2-9.0/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.pom

重新编译 Flink

mvn clean install -DskipTests-Pvendor-repos -Dhadoop.version=2.6.0-cdh5.16.2

漫长的等待过程,读者可以并行做其他事情。

编译过程中,如果不出意外的话,会看到类似下面的错误信息:

[INFO] Running 'npm ci --cache-max=0 --no-save' in /Users/xxx/Downloads/Flink/flink-release-1.10.0-rc1/flink-release-1.10.0-rc1/flink-runtime-web/web-dashboard [WARNING] npm WARN prepare removing existing node_modules/ before installation [ERROR] WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ECONNRESET: request to https://registry.npmjs.org/mime/-/mime-2.4.0.tgz failed, reason: read ECONNRESET [ERROR] WARN registry Using stale package data from https://registry.npmjs.org/ due to a request error during revalidation. [ERROR] WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ECONNRESET: request to https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz failed, reason: read ECONNRESET

可以看到, flink-runtime-web 模块引入了对 frontend-maven-plugin 的依赖,需要安装 node、npm 和依赖组件。

如果没有通过科学上网,可以修改 flink-runtime-web/pom.xml 文件,添加 nodeDownloadRoot 和 npmDownloadRoot 的信息:

<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeDownloadRoot>https://registry.npm.taobao.org/dist/</nodeDownloadRoot>
<npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
<nodeVersion>v10.9.0</nodeVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>ci --cache-max=0 --no-save</arguments>
<environmentVariables>
<HUSKY_SKIP_INSTALL>true</HUSKY_SKIP_INSTALL>
</environmentVariables>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
<configuration>
<workingDirectory>web-dashboard</workingDirectory>
</configuration>
</plugin>

编译成功后,Flink 安装文件位于 flink-release-1.10.0-rc1/flink-dist/target/flink-1.10.0-bin 目录下,打包并上传到部署到节点:

$ cd flink-dist/target/flink-1.10.0-bin
$ tar zcvf flink-1.10.0.tar.gz flink-1.10.0

部署和配置

Flink 部署比较简单,解压缩包即可。另外可以设置软链接、环境变量等,笔者不再介绍。

Flink 的核心配置文件是 flink-conf.yaml,一个典型的配置如下:

jobmanager.rpc.address: localhost
jobmanager.rpc.port: 6123
jobmanager.heap.size: 2048m
taskmanager.heap.size: 1024m
taskmanager.numberOfTaskSlots: 4
parallelism.default: 1
high-availability: zookeeper
high-availability.storageDir:hdfs:///user/flink110/recovery
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
state.backend: filesystem
state.checkpoints.dir: hdfs:///user/flink110/checkpoints
state.savepoints.dir:hdfs:///user/flink110/savepoints
jobmanager.execution.failover-strategy: region
rest.port: 8081
taskmanager.memory.preallocate: false
classloader.resolve-order: parent-first
security.kerberos.login.use-ticket-cache: true
security.kerberos.login.keytab:/home/flink_user/flink_user.keytab
security.kerberos.login.principal: flink_user
jobmanager.archive.fs.dir:hdfs:///user/flink110/completed-jobs
historyserver.web.address: 0.0.0.0
historyserver.web.port: 8082
historyserver.archive.fs.dir:hdfs:///user/flink110/completed-jobs
historyserver.archive.fs.refresh-interval: 10000笔者只罗列了一些常见的配置参数,读者根据实际情况修改。配置参数其实还是比较容易理解的,以后结合实战的文章再进行详细讲解。**■  集成 Hive 配置的依赖**如果要使用 Flink 与 Hive 集成的功能,除了上面的配置外,用户还需要添加相应的依赖:- 如果需要使用 SQL Client,则需要将依赖的 jar 拷贝到 Flink 的 lib 目录中
- 如果需要使用 Table API,则需要将相应的依赖添加到项目中(如 pom.xml)



org.apache.flink
flink-connector-hive_2.11
1.11-SNAPSHOT
provided

 

org.apache.flink
flink-table-api-java-bridge_2.11
1.11-SNAPSHOT
provided



org.apache.hive
hive-exec
${hive.version}
provided


笔者主要介绍使用 SQL Client 的方式,由于使用的 CDH 版本为 5.16.2,其中 Hadoop 版本为 2.6.0,Hive 版本为 1.1.0,所以需要将如下 jar 包拷贝到 flink 部署家目录中的 lib 目录下:- Flink 的 Hive connectorflink-connector-hive2.11-1.10.0.jar
flink-hadoop-compatibility2.11-1.10.0.jar
flink-orc_2.11-1.10.0.jar

flink-release-1.10.0-rc1/flink-connectors/flink-hadoop-compatibility/target/flink-hadoop-compatibility_2.11-1.10.0.jar
flink-release-1.10.0-rc1/flink-connectors/flink-connector-hive/target/flink-connector-hive_2.11-1.10.0.jar
flink-release-1.10.0-rc1/flink-formats/flink-orc/target/flink-orc_2.11-1.10.0.jar


- Hadoop 依赖flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar

flink-shaded/flink-shaded-hadoop-2-uber/target/flink-shaded-hadoop-2-uber-2.6.0-cdh5.16.2-9.0.jar

  • Hive 依赖

hive-exec-1.1.0-cdh5.16.2.jar
hive-metastore-1.1.0-cdh5.16.2.jar
libfb303-0.9.3.jar

/opt/cloudera/parcels/CDH/lib/hive/lib/hive-exec-1.1.0-cdh5.16.2.jar
/opt/cloudera/parcels/CDH/lib/hive/lib/hive-metastore-1.1.0-cdh5.16.2.jar
/opt/cloudera/parcels/CDH/lib/hive/lib/libfb303-
0.9.3.jar

其中 flink-shaded-hadoop-2-uber 包含了 Hive 对于 Hadoop 的依赖。如果不用 Flink 提供的包,用户也可以将集群中使用的 Hadoop 包添加进来,不过需要保证添加的 Hadoop 版本与 Hive 所依赖的版本是兼容的。

依赖的 Hive 包(即 hive-exec 和 hive-metastore)也可以使用用户集群中 Hive 所提供的 jar 包,详情请见支持不同的 Hive 版本。

Flink 部署的节点要添加 Hadoop、Yarn 以及 Hive 的客户端。

■ 配置 HiveCatalog

多年来,Hive Metastore 在 Hadoop 生态系统中已发展成为事实上的元数据中心。许多公司在其生产中有一个单独的 Hive Metastore 服务实例,以管理其所有元数据(Hive 元数据或非 Hive 元数据)。

如果同时部署了 Hive 和 Flink,那么通过 HiveCatalog 能够使用 Hive Metastore 来管理 Flink 的元数据。

如果仅部署 Flink,HiveCatalog 就是 Flink 开箱即用提供的唯一持久化的 Catalog。如果没有持久化的 Catalog,那么使用 Flink SQL CREATE DDL 时必须在每个会话中重复创建像 Kafka 表这样的元对象,这会浪费大量时间。HiveCatalog 通过授权用户只需要创建一次表和其他元对象,并在以后的跨会话中非常方便地进行引用和管理。

如果要使用 SQL Client 时,用户需要在 sql-client-defaults.yaml 中指定自己所需的 Catalog,在 sql-client-defaults.yaml 的 catalogs 列表中可以指定一个或多个 Catalog 实例。

以下的示例展示了如何指定一个 HiveCatalog:

execution:planner: blinktype: streaming...current-catalog: myhive  # set the HiveCatalog as the current catalog of the sessioncurrent-database: mydatabasecatalogs:  - name: myhivetype: hivehive-conf-dir: /opt/hive-conf  # contains hive-site.xmlhive-version:2.3.4

其中:

  • name 是用户给每个 Catalog 实例指定的名字,Catalog 名字和 DB 名字构成了 FlinkSQL 中元数据的命名空间,因此需要保证每个 Catalog 的名字是唯一的。
  • type 表示 Catalog 的类型,对于 HiveCatalog 而言,type 应该指定为 hive。
  • hive-conf-dir 用于读取 Hive 的配置文件,用户可以将其设定为集群中 Hive 的配置文件目录。
  • hive-version 用于指定所使用的 Hive 版本。

指定了 HiveCatalog 以后,用户就可以启动 sql-client,并通过以下命令验证 HiveCatalog 已经正确加载。

Flink SQL> show catalogs;
default_catalog
myhiveFlink SQL> use catalog myhive;

其中 show catalogs 会列出加载的所有 Catalog 实例。需要注意的是,除了用户在 sql-client-defaults.yaml 文件中配置的 Catalog 以外,FlinkSQL 还会自动加载一个 GenericInMemoryCatalog 实例作为内置的 Catalog,该内置 Catalog 默认名字为 default_catalog。

读写 Hive 表

设置好 HiveCatalog 以后就可以通过 SQL Client 或者 Table API 来读写 Hive 中的表了。

假设 Hive 中已经有一张名为 mytable 的表,我们可以用以下的 SQL 语句来读写这张表。

■ 读数据

Flink SQL> show catalogs;
myhive
default_catalogFlink SQL> use catalog myhive;Flink SQL> show databases;
defaultFlink SQL> show tables;
mytableFlink SQL> describe mytable;
root|-- name: name 
|-- type: STRING 
|-- name: value 
|-- type: DOUBLEFlink SQL> SELECT * FROM mytable;name      value
__________ __________Tom        4.72John       8.0    Tom        24.2Bob.       3.14    Bob        4.72    Tom        34.9    Mary       4.79    Tiff          2.72    Bill          4.33    Mary       77.7

■ 写数据

Flink SQL> INSERT INTO mytable SELECT 'Tom',25;Flink SQL> INSERT OVERWRITE mytable SELECT 'Tom', 25;# 静态分区
Flink SQL> INSERT OVERWRITE myparttable PARTITION (my_type='type_1', my_date='2019-08-08') SELECT 'Tom', 25;# 动态分区Flink SQL> INSERT OVERWRITE myparttable SELECT 'Tom', 25, 'type_1', '2019-08-08';# 静态分区和动态分区Flink SQL> INSERT OVERWRITE myparttable PARTITION (my_type='type_1') SELECT 'Tom', 25, '2019-08-08';

总结

在本文中,笔者首先介绍了 Flink 与 Hive 集成功能的架构设计,然后从源码开始编译,解决遇到的一些问题,接着部署和配置 Flink 环境以及集成 Hive 的具体操作过程,最后参考官方的案例,对 Hive 表进行读写操作。

后续,笔者会结合生产环境的实际使用情况,讲解通过 Flink SQL 来操作 Hive。

参考:

  • https://ci.apache.org/projects/flink/flink-docs-release-1.10/flinkDev/building.html
  • https://ververica.cn/developers/flink1-9-hive/

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

AWS拓展中国合作伙伴生态 加速企业数字化转型进程

在2020年9月9日举办的AWS合作伙伴峰会2020上&#xff0c;亚马逊云服务&#xff08;AWS&#xff09;宣布将携手APN合作伙伴进一步拓展中国合作伙伴生态&#xff0c;以更好地服务客户的数字化转型和数字创新需求。AWS宣布与毕马威、神州数码分别达成战略合作关系&#xff0c;结合…

如何在 Flink 中规划 RocksDB 内存容量?

本文描述了一些配置选项&#xff0c;这些选项将帮助您有效地管理规划 Apache Flink 中 RocksDB state backend 的内存大小。在前面的文章[1]中&#xff0c;我们描述了 Flink 中支持的可选 state backend 选项&#xff0c;本文将介绍跟 Flink 相关的一些 RocksDB 操作&#xff0…

能力差的程序员90%输在这点上!CTO:其实都是瞎努力!

在大数据浪潮当中&#xff0c;数据分析是这个时代的不二“掘金技能”。我们每一个人&#xff0c;每天无时无刻都在生产数据&#xff0c;一分钟内&#xff0c;微博上新发的数据量超过10万&#xff0c;b站的视频播放量超过600万......这些庞大的数字&#xff0c;意味着什么&#…

DNS高可用设计--软件高可用

DNS是网络的基础服务&#xff0c;网络上的各种应用对DNS的依赖性很高。DNS的稳定&#xff0c;直接决定了上层应用服务的稳定。那如何保障DNS服务的高可用呢&#xff1f; 我们先来看下高可用的概念&#xff1a; 高可用 高可用&#xff08;High availability&#xff09;&#…

十年磨一剑!支付宝自研数据库OceanBase通过阿里云向全球开放

近日&#xff0c;由支付宝自研的金融级分布式数据库OceanBase正式通过阿里云向全球开放&#xff0c;提供高可用、高性能、低成本的计算服务&#xff0c;企业可在云上获得“支付宝同款”的世界顶级数据库处理能力。 数据库和操作系统一样&#xff0c;是IT行业的重要基础软件&am…

20张图,带你搞懂高并发中的线程与线程池!

来源 | 码农的荒岛求生从这篇开始将会开启高性能、高并发系列&#xff0c;本篇是该系列的开篇&#xff0c;主要关注多线程以及线程池。一切要从CPU说起你可能会有疑问&#xff0c;讲多线程为什么要从CPU说起呢&#xff1f;原因很简单&#xff0c;在这里没有那些时髦的概念&…

React 常用UI库

流行的开源React UI组件库 http://www.material-ui.com/#/ 组件总览 - Ant Designhttps://ant.design/components/overview-cn/ 安装方式&#xff1a;yarn add antd ## 按需加载antd库样式 1. 安装&#xff1a;yarn add react-app-rewired customize-cra 2. 修改 package.j…

蚂蚁金服自研分布式关系数据库OceanBase上线阿里云

OceanBase于2020年3月在阿里云上完成了商业化&#xff0c;在公有云上正式对外开放。同步上线的还有相关的生态产品&#xff0c;包括集群管控&#xff08;OCP:OceanBase Cloud Platform&#xff09;&#xff0c;诊断&#xff08;OTA:OceanBase Tunning Advisor&#xff09;&…

【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 突如其来的新冠病毒来势汹汹&#xff0c;给这届学生带来了梦寐以求的超长豪华假期&#xff0c;同时也让毕业生的论文答辩及毕…

从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了

来源 | 网络工程师笔记前言今天和大家一起谈谈“网络”&#xff0c;之前写的文章可能不太通俗易懂&#xff0c;有人就问我可不可以写些比较容易理解的文章&#xff0c;我想了想那就从头说起吧&#xff01;那么什么是网络呢&#xff1f;百度百科的定义&#xff1a;网络是由若干节…

升级遗留代码的最佳实践

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 在传统企业甚至互联网企业中往往存在大量的遗留代码&#xff0c;这些遗留代码大多都能够正常工作&#xff0c;有的可能还运行…

字节、腾讯、阿里的开发为啥都在用Python?网友:又酸又香!

毋庸置疑&#xff0c;Python越来越被认可为程序员新时代的风口语言。 无论是刚入门的程序员&#xff0c;还是年薪百万的 BATJ 的大牛都无可否认&#xff1a;Python的应用能力是成为一名码农大神的必要项。 所以&#xff0c;很多程序员把Python当做第一语言来学习。 但对于Pytho…

【新冠疫情】5G到底能为抗疫做点啥,这篇文章终于讲清楚了

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 3月24日&#xff0c;工信部网站发布关于推动5G加快发展的五方面18条措施&#xff0c;其中包括推动“5G医疗健康”创新发展。 …

美甲帮:数加平台打造大数据架构

公司简介 美甲帮是牧云网络旗下一款专注美甲行业的社区型垂直电商APP&#xff0c;其核心业务包括美甲资讯、美甲行业认证、培训教学、商城、招聘等板块&#xff0c;目前已汇聚全国80%的美甲师&#xff0c;覆盖国内90%的美甲店&#xff0c;数以百万计的美甲从业人员和爱好者在此…

在容器上构建持续部署,这份超详细实践指南不要错过!

作者 | 倚天码农责编 | 刘静出品 | CSDN 博客要想理解持续集成和持续部署&#xff0c;先要了解它的部分组成&#xff0c;以及各个组成部分之间的关系。下面这张图是我见过的最简洁、清晰的持续部署和集成的关系图。图片来源&#xff08;https://www.sonatype.com/products-over…

docker nacos mysql nginx 集群一台

文章目录服务器编排一、mysql1. 创建挂载目录2. 赋予权限3. 运行容器4. 创建数据库5. 初始化脚本二、nacos-cluster2.1. nacos-cluster012.2. nacos-cluster022.3. nacos-cluster03三、nginx3.1. 运行临时容器3.2. 配置拷贝3.3. 删除临时容器3.4. 添加配置3.5. 运行容器四、验证…

世界备份日,您的数据足够安全吗?

据IDC的统计数字表明&#xff1a;发生过机房灾难的公司中&#xff0c;有55&#xff05;立即倒闭&#xff0c;剩下的45&#xff05;中&#xff0c;因为数据丢失&#xff0c;有29&#xff05;也在两年之内倒闭&#xff0c;生存下来的仅占16&#xff05;。Gartner Group的数据也表…

急速上线 Serverless 钉钉机器人“防疫精灵”

新型冠状病毒疫情肆虐的春节&#xff0c;大家都过得人心惶惶&#xff0c;作为被关在家的程序狗&#xff0c;总觉得要做点什么。于是阿里云 IoT 事业部的几个同学就开始了防疫精灵的开发之路。 从点子到防疫宝&#xff0c;只花了一个下午时间&#xff1b;从防疫宝到钉钉全域机器…

可怕!公司部署了一个东西,悄悄盯着你……

来源 | 编程技术宇宙责编 | Carol封图 | CSDN付费下载自视觉中国我是一个网络监控软件&#xff0c;我被开发出来的使命就是监控网络中进进出出的所有通信流量。这个网络中所有人的上网内容我都看的清清楚楚&#xff0c;是不是很可怕&#xff1f;我被一家公司老板买来运行在一个…

docker nacos mysql nginx 集群多台

文章目录服务器编排一、mysql1. 创建挂载目录2. 赋予权限3. 运行容器4. 创建数据库5. 初始化脚本二、nacos-cluster2.1. 192.168.92.1292.2. 192.168.92.1322.3. 192.168.92.133三、nginx3.1. 运行临时容器3.2. 配置拷贝3.3. 删除临时容器3.4. 添加配置3.5. 运行容器四、验证和…