Alluxio(Tachyon) 作为京东计算框架的容错可插拔优化组件

转自:https://blog.csdn.net/maobaolong/article/details/79337538

京东大数据平台

规模

集群规模 

服务器规模30000台+,离线集群总规模18000+ , 用户6000+

计算能力 

离线数据日处理40PB+,日运行Job数100万+

存储能力 

总数据量400PB+,日增数据量500TB+

业务能力 

业务主题40+,数据模型450+

大数据平台架构

Alluxio介绍

Alluxio(之前的Tachyon)。是世界上第一个以内存速度统一不同存储系统的系统。在大数据生态中,Alluxio位于计算框架和各种存储系统之间。此外,Alluxio存储为中心的架构,使数据访问速度的数量级比现有解决方案快得多。

Alluxio社区的优势

Alluxio社区的以下优势使得Alluxio越来越多的被很多知名企业所应用,也吸引越来越多的贡献者。

活跃开源社区 

开源是大势所趋。800多Contributor,1723次fork。6000多次PR。社区Maintainer活跃度高,提出的PR很快就有回复

创始人为华人 

华人contributor特别多,中文文档资料特别多。加入门槛底,还有新手教程,对于新contributor非常友好。

CI完备 

alluxio-bot(PR title)、 AmplabJenkins作为PR builder(License header\Checkstyle\findbugs\test)

Alluxio in JD

Alluxio在京东的应用主要在JDPresto、Kylin、HDFS。本文主要介绍JDPresto在京东的应用。

JDPresto on Alluxio

Alluxio作为可插拔的容错组件应用于京东体系内诸多计算框架。

利用Alluxio优秀的缓存能力提供对ADHOC, 实时流计算天生的支撑,降低集群对于网络消耗的依赖。

JDPresto on Alluxio已经带来了10倍平均性能提升。Alluxio作为可插拔的优化组件,当Alluxio服务不可用时,JDPresto可以直接访问HDFS。我们的工作是扩展Alluxio,增强Alluxio和HDFS的一致性。

Alluxio已经在我们的生产环境运行1年多了。

优势

可插拔

容错

增强本地性

架构和流程介绍

下图可以看出用Alluxio与不用Alluxio的Presto集群增加了隔离性和本地性

下图可以看出Presto会优先读取本地的缓存,如果读取Alluxio异常,则会直接读HDFS

下图是部署图

下图为使用JDPresto、JDPresto on alluxio、 JDPresto混合模式的对比图

下图是测试5次Presto读时间用Alluxio和不用Alluxio的对比

对比测试——sql查询速度

下图是在Presto的交互终端执行sql查询

下图是在Presto的Web界面看到sql的执行情况

通过上边的查询结果可以看出采用Alluxio进行缓存,由于增加了本地性减少网络消耗以及使用内存进行存储减少IO,所以查询sql速度提升显著。需要说明的是采用Alluxio进行缓存,第一次查询需要从底层文件系统读取数据内容并缓存到Alluxio的Worker中,并且当时测试的版本Alluxio为1.4版本,采用的是同步缓存,所以速度反而会慢,1.5版本以后的Alluxio已经采用异步缓存,优化了第一次读取的速度。

性能压测——转发线上一天查询请求

我们开发了性能压测工具,转发线上sql到两个presto集群,一个使用Alluxio,为测试,另一个不使用Alluxio为对照。两个Presto集群在同一个HDFS集群中。

通过上图可以看出,红色线(使用Alluxio)在40分钟时已经执行完所有sql,而绿色线在60分钟也没有执行完。

我们的工作

为了让Alluxio在JD更好的发挥其作用,我们在Alluxio、Presto以及on Yarn方面做的工作如下图所示:

京东的贡献

ItemCount

PMC1

Contributor6

PR53

Merged PR50

Merged Commit221

Additions / Deletions+4153 / -2254

新界面

基于ui-grid

支持排序、分页、过滤

可以指定位置显示文件或文件夹内容

很遗憾,新界面Patch没有合并到主分支了,需要的话,可以自行打PATCH。ALLUXIO-2557

一致性检查

启动检查:在启动的时候进行一致性检查,将不一致的文件或文件夹重新加载元数据

每次访问都检查:每次访问文件或文件夹时,都会与底层文件系统进行比对,不一致则更新元数据。已经演变成目前的指纹(FingerPrint)功能。

基于水位的空间置换策略

当Alluxio存储空间不足时,需要采用一定的空间回收策略进行回收。同步回收是旧版的回收实现。它当客户请求比当前在worker上可用空间更多空间时启动回收程序释放足够的空间来满足要求。 这导致许多小的回收尝试,并不高效。而采用基于高低水位的异步空间回收器,当空间空闲达到高水位时,进行空间释放,释放到空间空闲达到低水位时停止释放空间。

JVM暂停监视器

这是一个监视JVM暂停情况的服务。该服务建立一个简单的线程。在此线程中,在循环中运行sleep一段时间方法,如果sleep花费的时间比传递给sleep方法的时间长,就意味着JVM或者宿主机已经出现了停顿处理现象,可能会导致其它问题,如果这种停顿被监测出来达到一定的阈值,线程会打印相应级别的消息。还可以把额外sleep的时间进行metrics统计,外部的监控系统可以监控Alluxio的健康状态以及进行报警。

Shell命令

由于现有的Shell命令不能满足我们的需求,于是改进了现有的命令以及实现了一些新的实用的shell命令。

整合CopyFromLocal、CopyToLocal、Cp

ls命令增加 -h 参数显示带单位的文件大小,默认显示字节大小,与标准的文件系统命令实用习惯一致。

修改bin/alluxio,支持-debug参数开启的时候,增加ALLUXIO_USER_DEBUG_JAVA_OPTS环境变量的值到JVM参数中,该环境变量可以定位成远程调试参数,例如ALLUXIO_SHELL_DEBUG_JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5603"

修改load命令,增加--local参数,如果该文件已经存在在Alluxio中,设置了--local选项,并且有本地worker,则数据将移动到该worker上。原有的逻辑如果其它worker已经存在该文件,则不会将文件load在本地worker。

修改rm命令,增加-alluxioOnly参数只删除Alluxio的元数据和缓存数据,并不会删除底层文件系统内容。

动态修改日志级别

日志库将日志分为5 个级别,分别为DEBUG、INFO、WARN、ERROR 和FATAL。这5 个级别对应的日志信息重要程度不同,它们的重要程度由低到高依次为DEBUG < INFO < WARN < ERROR < FATAL。日志输出规则为:只输出级别不低于设定级别的日志信息。比如,级别设定为INFO,则INFO、WARN、ERROR和FATAL 级别的日志信息都会被输出,但级别比INFO 低的DEBUG 则不会被输出。

我们有时希望在不重启服务的情况下动态设置某个Logger的日志级别。

所以,我们实现了Alluxio shell的一个logLevel命令,可以在特定实例上获取或更改特定类的日志级别。

语法是alluxio logLevel --logName = NAME [--target = ] [--level = LEVEL],其中logName表示日志的名称,target列出了需要设定的Alluxio master或worker列表 。 如果提供了参数level,则命令更改日志级别,否则将获取并显示当前日志级别。

例如,以下命令将foo.Bar类的日志级别在master和192.168.100.100:30000的worker上设置为调试级别。

alluxio logLevel --loggerName = foo.Bar --target = master,192.168.100.100:30000--level = DEBUG

1

以下命令获取foo.Bar类的所有worker的日志级别

alluxio logLevel --loggerName = foo.Bar --target = workers

1

问题修复

修改了若干问题,不一一列举。

未来工作

跟踪Alluxio社区PATCH,向Alluxio提高代码

完善压测工具

完善监控和预警

稳定性提升

可调试支持

扩展其他框架使用

Fix Bug

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,236评论 0 34
  • 该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A ...
    九七学姐阅读 1,766评论 0 3
  • 1 出国,一个炸弹般的决定 我一直这样觉的,黄健翔做足球解说员是上天刻意安排的,他在刚生下来时怎么也无法想到自己会...
    林舍尔阅读 339评论 0 0
  • 文/亦雨兰轩 人生只若初见,意绵绵。四月平和天气,泪涟涟。 擦不掉, 强欢笑, 惹谁怜?自此阴阳思念,分缘浅。
    亦雨兰轩阅读 401评论 12 5