ok, 嗯,大家好,嗯,我是来自嗯天宇的大数据工程师周立旺。嗯,目前是专注于数据集成相关的领域。嗯,本次我分分享的呃主题是,呃我,我们的数据集成的平台在尝试一路齐创的过程中的一些呃探索与实践 啊,因为我们的平台主要是面向嗯政企客户啊,目前是以阿帕奇 wifi 作为这种呃呃平台的核心啊,否则以一些呃原声的 fling 可以应用 呃,在此基础上进行分装和二次开发出各种各样的数据集成应用。嗯,提供面向不同行业的这样一个解决方案 啊。所以,本次这一题我会主要讲一下西川的和 nifi 结合使用的一些经验,因为西圈的和 nifi 他是各有优劣的。嗯,在能力上可以取长补短,去对标更多的功能,满足更多的客户需求。 本次议题分成五个部分,先简单介绍介绍一下啊,新鲜的和 nifi 啊,然后说下这两两者是怎么怎么结合啊,以及我们探索出来的一些呃用他们建设数据提升提升平台的一些方案啊。最后说一下我个人的一些经验和心得。 嗯,接下来来简单介绍一下这个西圈楼。西圈楼它本质上是对这个啊 spa 和 frank 进行了一层分装。 嗯,后面新版本又加入了自然的啊,西川的啊,自然的引擎啊,用户可以通过编辑配置文件啊,来快速构建工作流 啊。配置文件它主要包括四个部分啊,因为它是呃配置整体的环境,哨子是配配置呃读取数据源的相关信息啊,全是符号,是配置数呃 数据处理相关的,嗯,声音可是配置,呃数据去向相关的,嗯,与 kato 还有 nifi 这种相对重量级一些的平台相比, citanto 更更像是 data 这种。呃 啊,清量级的数据传输工具啊,用户可以根据需要来安装 sauce, sink transform 啊这些插件啊,就数据而言,牺牲了我。他支持呃 呃关系型数据库,像麦斯口, oracle, 呃, green prawn 了,然后等等这些,呃, 非冠系型数据库,包括像芒果 db, release 啊,呃文件类型的 ftphdfsoolss, 呃,然后还有还有其他的啊,总之,总之种类是非常繁多,全是凤啊啊,转换插线啊啊他他支持啊,常见的啊, 大小写转化啊,替放分割啊,取舍口取优优 id 啊,用户也可以根据啊自己的需求,然后自己去开发出一些呃,自定义的插件。 呃,我们安装和启动汽车呢,也是非常方便的。呃,下载了这个压缩包,解压之后 根据你需要运行的这种任务类型,然后配置好对应的。呃,配置文件啊,然后你直接可以呃运行启动脚本, spa 和跟弗林克,嗯,都包含有 v v 二这两种。呃 呃,引擎版本啊,现在还支持新的这种新圈楼的引擎,嗯,启动方式就是像图上所示的都都是非常类似啊,这里他的任务是支持可以提交到 logo 一样 k 八 s, 然后这些环境上, 然后接下来我来介绍一下这个 ipad 型 nifi。 ipad 型 nifi, 它是一个呃基于外部图形界面的,通过拖拽连接配置 啊,完成基于流程的一个编程啊,它可以以单节点形式运行,也可以以集训模式运行。嗯,图上所示就是呃呃,一个集训模式的这个 wifi 集群, 然后每一个呃呃这个长发型呢,就相当于是一个那一块节点,在他最上层,他是一个握把手腕,然后接接收这种啊,孕妇请求 啊,然后每个节点它是运行在一个 jvm 之上啊,比如 processor 和 floral controller, 然后支撑起这个整个业务逻辑的一个构建,然后它的底层数据,呃呃 呃,是以一个呃 profile, 然后这样的一个形式,然后进行抽象 the profile, 它会存储在 profile repository, content repository, 然后还有 provens repository, 然后直接相呃相相关的,呃存存储里面, 呃 nifi 常用的主见,嗯,就是,呃,包括以上五个部分,有这个 profile, 然后就是 possessor, 然后 connection, possesses group, 然后 control sodius, 还有一些其他高级的,就这里我展开到了, 嗯,这个 profile 是耐车,呃是耐发底层的这个呃数据结构,嗯,它由属性跟内容组成,它的属性可以用于描述数据,呃,比如提供一个呃输出数据到本地的 profile 这样一个组件,它属 输出的啊。 follow file 的属性就可以是这个文件名,然后这个 follow file 他是一个呃抽象的概念,嗯,可以通过, 呃,用户可以通过配置,然后把它就是放在内存上,嗯,牢牢或者或者硬盘上,呃,用户可以在界面以可视化的形式看到这些 froft, 哦,它的属性以及相关内容 啊。 prsets 是 nife 里面啊最核心的一个部分啊, prsets 可以通过呃编排连接来构建工作流啊。常用的 posses, 它就会包含这个读取数据啊,转化数据,输入数据这几大类的,当然还有一些别的一些组建啊, 那发现他总的支持的主见数量啊是非常多的啊,大概有几百个啊,每个主见都 支持配置单独的这个调度策略,呃,支持定时调度跟可用表达,是这种这种形式的调度 啊,但是耐发他虽然说有这么众多主见啊,像 cdc 呃相关的啊,他是支持的比较少的啊,目前是呃只支持这种卖车口 cdc, 呃,然后还有一些像新型的一些数据源读写组建,然后目前 mfi 呃支持的也不是特别好啊,比如说像蝴蝶啊这种 spot 啊,然后呃克里一个 house 啊,然后,然后这些新型的 wifi 没有支持的很好。 嗯, connection, 它是用于连接不同的呃处理器的,相当于是一个队列啊,从上游传下来的数据啊,会进入这个队列,直到 啊被下游的组建把数据消费啊,可能要选它可以配置不同的这种优先级策略啊,以及数据过期时间啊,纯属容量等等。 processor gulup 啊,用于将一种处理器组织在一起啊,外部的数据它是可以通过呃 nifa 的端口组件来进行输入与输出,然后它 nifa 还有一种就是呃 远程的这种轱辘盘,他可以用于接收这种远程时远程的 ipad 实力,然后传传过来的数据 更抽了,收尾时他相当于是呃运行在后台的一些服务啊,我理解是呃把处理器要用到了一些公共属性,嗯给他抽取出来啊,然后达到复用的目的,比如说像数据库这,然后他的嗯 gdp 系,然后再 来个连接,呃连接配置信息,然后像 capris 认认证服务,这些都可以呃抽取出来,然后嗯共总多个 poses, 然后牢记您附用。 嗯,下面说一下这个 c channel 跟 wifi 的他的一些整合方案。嗯,第一种方式他是可以用 nifi 的 execute processor 这样一个组建来分端 c channel, 利用 wifi 的它的调动能力,可以定时运行。这种啊西餐的任务啊, 通常先要调想要调度西昌的任务,他需要呃依赖像这种高分 scan 或者其他一些调度工具啊。现在开远的西昌的一个外部平台,他内部也是把这种任务提交到这种刀片刀片上, 然后去调度,然后这种使用 wifi, 然后这种调度方式,然后也提供了一种新的思路。 然后首先我们要把这个啊西川路跟 iphone 它部署到就有一个节点上去,然后就是可以通过 xq 和下手这个主机店,然后去执行这种呃呃,这个西川路它的启动脚本,呃,然后它会产生呃运行日制 这这个日志,然后他是可以通过这个呃这个投机节点,然后就往下游进行一个传播的,这日子里面会包含他的任务相关的一些信息啊。如如果这个任务启动成功的话,我们可以通过一些呃 呃,就是过滤文本的一些组件啊,然后去拿到这个任务 id, 然后就可以进一步的啊分装啊啊啊 文章书,比如说像啊停止任务,取消任务这样这样一些接口功能, 然后这个是图是在任务队列之中才看才看到的这个啊西双龙运行日志,然后可以看到,呃,他是呃任务起到这个样上面,然后这个弗林格,嗯,叫法 id 一个一样的, oppo 类型,可以选 id, 然后其实是都可以取到。 然后另外一种啊方式是可以基于 nifi 的啊,拆图赛这种协议来构建啊,其实用 nifi connect。 那首首先说一下什么是 nifi 的,呃,这个塞图萨协议呢啊, nifer 是可以基于,呃这种塞图萨协议跟外部的 nifa 节点或者集群进行一个通信啊,也可以基于这种协议与外部的一些应用啊进行通信。 这种该协议底层它是基于一种刷卡的跟 htv 协议实现啊。然后可以利用这个 nifi 他的有端口的组建,从外部接收数据,或者呃发送数据给给外外部的系统,就如图所示,左边这个流程是从外部数据,然后 啊通过输入端口,然后给这个 ipad, 然后右边这个是用 ipad, 然后通过端口啊,从数据到外部, 嗯, ok, 嗯,这个是我做的这个西川喽,嗯,肯德克的信口,然后这样一个 demo, 然后他是基于西川喽, frank v, 然后这样一个肯德基和引擎, 嗯,目前啊做了,稍微还比较粗糙了,所以说暂时还没提交到社区啊,后面提交了啊,这个后面往上了,然后会提交,嗯,因为 wifi 的他的数据是流失的啊。首先我们记 基于啊,我们,我们实现啊,福利 inco stringing 性格,然后这样一个接口,然后去重写这种奥特库的 stringing 方法来输出数据到 wifi, 嗯, 需要在配置中指定 wifi 的,嗯,这个实力的 atyl 以及啊你所需要通讯的他的目标端口 啊,然后利用福利和内置的呃 nifi 信用和组件来输出数据啊, nifi, 它的,呃数据实际上是由这种坑配的和区别的组成的,然后这里面代码里面实际上这个区别和,然后就简单设置成了空, 实际上我们是可以根据需要,然后把一些附加信息然后放到这个水平的里面。呃,这里面 wifi, 嗯,就用到了一个,嗯数据结构,它是 nife, 嗯 datespark 的,然后这样一个这样一个结构,呃,它实际上底层是基于这种晒土 赛,然后协议,然后进行一个实现,然后这个是 nifeconicsous 这样一个组建,其实不呃实现方式跟那个信可词实际上是差不多的。首先去呃实现 flingxton south, 然后这样一个接口,然后去呃重写嗯, goodette 这样一个方法了。 然后然后就是对于比如说像这种啊是 bug 引擎的,它相关的可耐克,他也可以以类似的方式,然后然后做出来。呃, 呃,以这种西川的 wifi cunec 这样一个形式,呃, nifi 跟西川的之间数据就可以,呃比较方便的进行传输,然后可以在一些场景下替代,用这种卡不卡作为这样一个,呃消息传传出中间的中间键的这样一个方案。然后接下来介绍 报一下我们这个天云的这个数据汽车平台, 嗯,就是我们的数据集成平台。呃,目前主要是面向这个。呃,政企客户,那是有这种标准化的工友云版本,呃也会根据这种客户的需求去进行定制化的。呃改造,嗯,假体假报跟整体规划大概是,呃这个五大块, 然后其中最核心的这种 connect, 然后他是嗯基于 ipad 型 wifi, 然后分装而成,嗯,原声的 wifi 对于用户实用而言,嗯,他不是特别友好 啊,他因为很多这种呃主见,主见,非常啊,非常主见酷,非常庞大,然后就是,呃就是界面也都是全英文的啊, 然后如果是没有经过专门的这种培训的话,用户使用的成本他会非常高。嗯,但是他的 wifi 本身的他的调度能力不是,他的能力还是非常强大的,比如说像,嗯,他支持像工作流编排调度,然后还有这些任务统计,然后版本挂历,然后数据血源的一些 也分析能力,他等等他都有,甚至,呃,他的免领 wifi 还是支持从边缘端采集互联网数据。 嗯,因此我们这个平台就是在原声的这种 wifi 之上做了大量的分装。嗯,开发了很多呃常常见的数据提成应用 啊,然后右边这一部分,然后他是这个,呃,我们这个数据总线啊,他实际上,嗯,底层是基于另外一套体系,时间,他是接近了阿里的 deleta 跟华为罗马这些呃业内标杆的一些产品 啊,我们在卡不卡上面啊进行了大量的封装,嗯,提供了方便的 sdk 以老以供外外部系统来订阅。呃,发到这个消息总线上的数据,然后不认可啊,在消费这个卡不卡数据,然后写入到这个汉服数据仓库或者其他一些目标, 然后我们会在上层的这种呃数据提升应用中去啊去分装这种可耐克的发送到这个卡布卡的这样一个呃工工作流,然后再由啊数据总线,然后接接收这个卡布卡数据写入到数据中台中, 然后嗯,在这个呃探索过程,嗯,探索过程中,然后就是我们也考虑呃引路西圈喽,引路西圈喽,他有什么好处呢?首先他呃骑车,他是 可以呃补足原有系统的一些 cdc 能力的。然后另外他也可以为我们这个啊,这个平台,那个数据总线的部分提供更丰富的这种,嗯,可耐可耐。艾特,嗯, 因为 nifi 的他的 cdc 组建,他是只支持麦斯口的数据源,那 codela 官方他也呃不推荐用这种 wifi 做 cdc, 即便说 wifi 他是可以去二次开发的,然后用 wifi 定制 cdc 组建,从开发成本上就可以做经济, 呃,因为我们这套平台他更多是想作为一个通用型的产品去满足呃各个行业的需求, 但是客户的需求是多种多样的,所以说,嗯,欠缺能力,还是,嗯考虑用其他较为成熟的工具来补助比较合适。正好这个习圈,哦,他是一个这个轻量级的工具,支持主 类型也非常丰富,并且依托于弗林格的生态,嗯,比较适合做这种 cdc 的这样一个场景 啊。另外我们数据总线部分设计之初就是只是想服务服务于我们内部的数据啊,数据中台产品,然后他把数据揭露到这个,呃,就是内部受伤的,受伤害不中啊。然后我们在新版本的叠带里面也希望说能够呃支持啊,写入更多的目标 啊,同时还希望能够有一些啊简单的 etl 能力,嗯,当然我们这一次实际上是也可以去开发这个福利可程去去解决这个问题。 但是后面经过调研发现这个细圈了,他只要通过简单的对一些他的内部程序解析配置部分进行改造,就可以整合到我们原有的这个体系之中。 然后下面接下来我来说说我们是呃具体是怎么做的。 首先这个是我们这个呃整个一个数据平台,然后他的一个呃就是业务的调用逻辑,然后用户在前端,然后就是呃 嗯,就填写好一些配置参数之后,把把这参数,然后呃发到这个 rober 服务上, rober 服务再用这种呃福利和样 api, 然后去取一个福利和应用,然后当然在在在此之前我们需要部署好这种哈路口,然后 相关环境以及把弗林克他需要呃意大利相关的这种包,然后都传到这个 hdf 上面, 然后对于这呃呃我们怎么把?就是最 开始那种弗林克程序,然后改造成就是呃,就是这种牺牲了我他的内核了。嗯,首先第一步我们可以把这种呃让这个呃内函数,然后他参数了和组织成这种 map 的形式,然后在弗林克这种 commenantagonya 里面增加这种麦克类型成员变量, 然后通过这个福利和 api task execute command 这样一个方法就接收到这个仓仓鼠类,然后最后把这个 map 给他传进去啊,然后 在这种呃可可费个 beautiful 里面,然后增加一个 load by map, 这样一个一个方法去去。嗯,加咱们以 map 类型的配置他这这这个 loadback map 方法内部实际上是调用了呃就是更费格,嗯, factory, 然后帕斯 map, 然后这样一个方法,然后去解析,解析出一个很费格, 嗯,大概经过这几个步骤的修改就可以,嗯嗯,就可以,就是说嗯,把这个西川老员就原来解析这种配置文件形式改成以一个解析 map 的形式,然后然后运行,然后然后只要把这个呃这样一个 齐全拢靠福利口,然后这样这样这个程序,然后重新打成一个架包,然后就可以就录入到我们那个数据评请集上评价体系里面去, 然后这个是一个呃,就是嗯,简单的一个 demo, 然后就是,嗯,首先就是可以配置一下这个西圈 local freedom, 然后他的一个放在 hdf 上的一个路径,然后把相关的西圈的依赖的这个, 然后这里就是改一下这个啊,就是程序运行的一个主类,把它改成就是 o r g 阿帕奇,西川的靠弗林克啊,西川的弗林克,然后这样这样这样一个主类,然后就可以啊直接替换掉我们这个原声属于总线部分那个,嗯,弗林克的部分。 另外一种形式是可以以这个 nifa 二次开发的形式来封装这种西川楼的主见,那最后的结果是可以打成一个 naa 包,这个 naaa 包他就是 类似成呃类,类似那个价包,然后他就把把这个包放在这个 nifi 的上立本目录下面,就可以就可以生效。嗯,这个这种方式与这些人提到了用 用这种 accurate processor 逐渐来启动期间了不同,这种二次开发的形式它可以呃各身层次的,然后进行一个定制,比如说我们可以重写这个 wifi 处理器的公司 double 和方法,然后去控制这 十八个或者否定和任务的呃停止,或者说重新用吹格方法来啊,对数据进行进一步的处理 啊。最后他这个,嗯,这个主见他展示出来效果,他是可能是这样的,嗯,他可以把这个西窗所需要的这个环境信息,然后还有 sause 全是奉信口,然后给他传到这个呃这这个主见里面去。 因为,呃调用从前端调用这个 wifi, 他的 api 老是很容易将这种参数进行一个传传递的,因此才有这种形式。然后是很 容易将这种呃习衰老,然后置于呃耐坏这个平台里面,去使其两者能力进行一个结合。 然后最后说一些我的个人的一些经验与心得。嗯,主要说谈谈这种工,在这个工作调研的过程中,后面参与到这个啊,开元,开元的项项目,然后这个 呃这样一个呃心路历程。最开始也是说从公司的一些大佬呢,听说,听说到这个西川的这个呃工具啊,还是挺不错的,因为看看了官网的一些介绍之后, 呃发现如果把这个西川的我的语录可以对后续平台开发节省不少工作量,于是开始着手调研,然后自己开始弄一些 demo 进行验证啊,也尝试开发了些,呃,这种插件可耐克特,后面正好社区出了这个开发者激励计划, 于是我就尝试把自己开发出的插件提交给社区啊,第一次提交,呃遇到了坑也比较多,嗯,想要提交成功,嗯,他需要呃呃在代码风格,单元测试,还有 license 什么的,这些都都能够通过检验 啊,前后就是也利用了啊,快三四天啊,快三四天了,十天左右,然后,然后才弄好, 那有些坑,我从看到那个社区上的一些我也没有没有解决,后面就加了项目运营人员的一些微信,这个 运营小助手他非常热情,就有问题就直接帮帮,我联系这种社区大佬进行一个咨询,就有人一零年之后这个就是提交,呃,提交这种代码进度就快非常多了,后面再次提交插件就是轻车熟路,有问题也可以在群里面问。 通过这种参与开源,我发现他有一个直接好处,就是可以融入到这个社区当中,可以对这些一些开源的项目底层特性有可以更加深入的进行了解, 比如想要做一些更深层次二次开发,也可以得到一些知识。嗯, ok, 就大概我的演讲就等,就目前是这些。
粉丝105获赞170

众所周知,商贵股对于视频教程一直精益求精,与很多开源产品的开发团队合作,打造精品技术教程。已经合作的阿帕奇开源项目有 doris killing ctono streamx。 这不,与 doface gathering 官方合作的视频教程也来了!哈喽小伙伴们大家好,我是美玲老师。 高 fans geler 是当下最流行最轻便的工作流调度平台,本次为大家带来了由上硅谷大数据教研团队与高 fans glue 官方开发团队联合推出的视频教程。 在上硅谷教育公众号聊天窗口发送暗号 d s, 即可免费获取 douffinsgolder 视频教程在线观看及下载地址。本套教程延续了上硅谷视频教程的一贯风格,多角度调研与其他大数据框架的版本兼容性, 给出管家式的部署安装过程,并对工作流的配置、依赖设置、参数设置等做出了详尽讲解。除了讲解框架的基础架构介绍角色的主要作用也是常见的使用之外,还做了进阶讲解, 探讨了工作流传餐的相关技巧、依赖资源的引用方式、如何完成邮件告警以及如何做到工作流失败重跑等,可谓从安装到优化,所有操作一网打尽,带你轻松掌握 douffinsgolder 更多大数据视频及学习路线,你可以在上硅谷教育公众号发送暗号大数据来免费获取。有了上硅谷学习不再苦,关注我,让天下没有难学的技术!

张老师,用 cana 实时输出到 hive 会存在小文件问题吗?如何解决的?呃,会有的,就是针对这个问题呢,我们是单独有一个程序,会定时的去找这个小文件,然后会做一个合并, 目前是通过这个方式去解决的,就是他的小文件。是啊,分裂格是每一次拆个 pone 的去输出一次文件吗?我们这个拆个破案的大概是五分钟一次,所以说这个小文件还是有的,就是通过后台的一个 程序定时去扫描,然后去合并校文件啊。当时使用弗林克去输出汉武,主要是为了解决那个弗鲁姆到 hdfs, 然后再到汉武二 c 这个层面就是中间这个, 一是逻辑很长,这个炼录很长,二是嗯,很占用这个值班空间,所以说后面考虑使用写大佬的福利,可直接输出海沃尔 c 表 本录音节选字 apache sitano inca 被停五月 me top 答疑环节游组网络数据接入平台设计与实现专场收听更多回放请关注 sitano 开源社区,您可以搜索进群加入我们取得联系。



欢迎来到海狮的创新世界,海狮在二零一零年成功研发了中国第一条洗衣龙,至今已经制造了几百条,并且在全世界范围得到广泛应用和证明。 洗衣龙机组有几个功能单元组成,分拣传输系统、洗衣龙主龙,压榨脱水机、穿梭机、贯穿式烘干机, 现有七仓到十六仓的多种组合来满足不同客户喜提量的需求, 可以实现每小时七百五十千克到一千八百千克不草的洗涤烘干。洗衣龙机组从分拣称重系统开始, 得益于中央控制系统的数据收集管理,从脏污不草的称重装载或者集成化的吊带系统传输装载,就可以实现不草流和信息流的同步 称重。装载机可以实现高精度承重,并且结构简单,易于操作。轨道吊带系统可以最大利用设备上方的空间存储布槽,合理为客户节约现场空间。 主龙采用单双滚筒结合技术设计,搭配洗衣龙链条驱动系统,保证稳定的动力传输。 机械部件均由机器人焊接,可以确保机械部件 的高品质。舱内的高强度提升精可以确保洗涤过程中对布草的揉搓效果。 侧面有玻璃观察窗,可以方便观察水位。洗涤过程中一流装置可以高效去除舱内的浮沫和绒毛。为了达到节水的目的,主龙内置了水循环利用系统。 洗衣主龙所选用的元器件,比如机组控制系统、变频器、液压原件、光电传感器、把阻等,全部都是行业内顶级品牌 控制系统可以实现全洗涤系统的编程,全程的监控和客户信息识别跟踪,可以提供洗衣现场多点系统监控 以及远程控制,方便用户的管理以及直接的远程故障的诊断解除。支持压榨机采用顶级品牌液压驱动, 可无极加压至四十五八,同时配备加强型压头 进口高档膜,保证脱水品质可靠性,使用寿命长,压榨后不槽柄,可以根据客户现场情况使。

陶老师,只用弗林克蛇口可以支持生产吗?对,我觉得弗林克收口是完全可以支持生产的。其实我们也之前也很多的用户其实完全就用弗林克车口来做了弗林克色口,其实我觉得最终理解应该是这个弗林克 job 怎么去运行, 如果说弗林格教普运行的话,他运行起来之后他里边包了一个 saku, 其实跟我普通的这个普通的架这种就是通过 aps 写的这种作业的话,其实是没有区别的啊。相比来说,弗林克 saku 对于用户他屏蔽了一些底层的一些时间细节,对于用户来说反而是更友好的一点。 弗林克收获也是后续弗林克社区的一些一个一个比较重要的方向。本录音节选字 apachesitano 六月 me top 答疑环节 如何在 ctano 中使用 flink 奢口简化数据同步实践专场收听更多回放请关注 ctano 开源社区,您可以搜索进群加入我们取得联系。

it's the longest undersea tunnel in the world, it is one of the world's ten greatest projects the channel tunnel is 50.5 kilometers long the 37 kilometers of which are under the sea, it connects the southeast of england with the north of france, the channel tunnel consists of three parallel tunnels, one for trains to france, the other for trains to england, the center tunnel is a service tunnel the channel tunnel was built at a cost of 15 billion dollars in december 1987 construction, began workers began digging from both sides, but after only a few months groundwater and explicably pour it in through the cracks group was used to seal the cracks having overcome these obstacles, the two teams began to move at full speed at speeds approaching three point five meters per hour during the process workers on both sides must constantly check their coordinates to avoid any deviation after two and a half years of digging the two sides finally met the project employed more than thirteen thousand people it took eight years and finally opened in nineteen ninety four today, it takes only thirty five minutes to cross the tunnel by train paris to london in just over two hours this avoids the danger of storms on ships, it's one of the great works of mankind。
