Airbnb架构要点分享——阅读心得
目前,Airbnb已经使用了大约5000个AWS EC2实例,其中大约1500个实例用于部署其应用程序中面向Web的部分,其余的3500个实例用于各种分析和机器学习算法。而且,随着Airbnb的发展,相比于业务处理所需的计算能力,分析和机器学习的计算能力需求增长更快。这是因为,随着Airbnb的用户越来越多,其挑战不是找到一个可供出租的地方,而是找到一个合适的地方,并且让房主和房客都满意。
关键就是,根据房客和房主的偏好(个人资料及在Airbnb上的交易和搜索历史),使用搜索引擎和机器学习,找出最好的租房/出租选择。而且,选项不能太多,否则用户会很难决定。因此,Airbnb需要借助机器学习强化搜索,为用户(房客和房主)提供5到10个选项。这缩短了交易时间,降低了Airbnb系统的负载,而用户也更满意。
同许多公司一样,Airbnb开始时也使用了若干开源软件,但进行了大量的修改和扩展,以便创建一个机器学习强化的搜索引擎。其核心索引技术使用了Lucene,但只用了反向文本部分。而所有的排序和机器学习功能则是他们自己编写的。他们的第一个机器学习实验就将预订率提升了4%。Airbnb的动态定价也是由机器学习算法所支撑。据Curtis说,当房主按照Airbnb推荐的价格上下浮动不超过5%定价,其出租成功率提升了4倍。
为了使机器学习更容易嵌入应用程序,Airbnb创建了一个名为Aerosolve的工具(GitHub页面)。该工具有许多功能,但最重要的是让数据科学家可以了解机器学习算法(房屋推荐或定价建议)内部正在执行什么操作,然后运用直觉获得更好的结果。
驱动Airbnb站点和分析的核心数据平台是Hadoop,所有东西都存储在Hadoop分布式文件系统中。之前,他们使用Amazon Elastic MapReduce服务,并在AWS EC2计算实例上部署了自己的Hadoop,但去年,他们已经迁移到Cloudera的企业级Hadoop上。此外,Airbnb使用S3存储Web站点的图片和Hadoop集群的备份数据。
在HDFS文件之上,Airbnb使用由Facebook创建并开源的Hive和Presto创建了一个数据仓库。对于长时间运行的查询,他们使用MapReduce。Hive不支持子查询,使用MapReduce可以获得同子查询类似的结果。Curtis指出,Presto非常强大,它兼容SQL,使得数据查询非常容易,而且速度很快,虽然功能不如Hadoop MapReduce或Hive多,但在日常分析中非常有用。他们还创建了一个名为Airpal的工具(GitHub页面),用于设计SQL查询,并发送到数据仓库的Presto层。
这两个Hadoop集群使用Kafka保持同步。Airbnb创建有自己的工作流和ETL工具Airflow(GitHub页面)。该工具已经钩入HDFS、Hive、Presto、S3、MySQL和Postgres。此外,Airflow接收来自Airbnb站点的非结构化数据流,增加结构后转储到HDFS上的Hive表中。曾经很长一段时间,他们使用成百上千的CRON任务来做这项工作,那很容出问题。而Airflow提供了一种简洁、可编程的系统,使他们能够查看、编辑、监控和调试ETL系统。
原文地址:https://mp.weixin.qq.com/s?__biz=MzAwMzI3Njc1MA==&mid=208369717&idx=1&sn=1ca5bb16413dccbbf4de8169409ad986&scene=21#wechat_redirect
Airbnb架构要点分享——阅读心得的更多相关文章
- 《Airbnb架构要点分享》阅读笔记
Airbnb成立于2008年8月,总部位于加利福尼亚州旧金山市.Airbnb是一个值得信赖的社区型市场,在这里人们可以通过网站.手机或平板电脑发布.发掘和预订世界各地的独特房源,其业务已经覆盖190个 ...
- AcFun 的视频架构演化实践——阅读心得
视频的核心技术栈 AcFun 弹幕视频网(acfun.tv)是中国最早上线的弹幕视频网站,也是最具影响力的弹幕视频平台.“AcFun”原取意于“AnimeComic Fun”.自2007年6月6日成立 ...
- 腾讯架构师分享的Java程序员需要突破的技术要点
一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...
- 阿里Java架构师分享自己的成长经历,教你如何快速成长为架构师
架构师是公司的“金领”,很少需要考虑生存的问题,从而有更多的精力思考关键技术,形成“强者愈强”的良性循环.当然,冰冻三尺非一日之寒,成为一名合格的架构师是一个漫长的积累过程.对于大部分的软件开发人员来 ...
- 十年Java架构师分享
看到一篇十年java架构师分享需要掌握的技术点,有时间对照一下,好好学习一下. ------------------------------------------------------------ ...
- php框架tp3.2.3和js写的微信分享功能心得,分享的标题内容图片自定义
https://blog.csdn.net/weixin_42231483/article/details/81585322 最近用PHP的tp3.2.3框架和js写的微信分享功能心得,分享的标题内容 ...
- "Mathematical Analysis of Algorithms" 阅读心得
"Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms" ...
- “大话架构”阿里架构师分享的Java程序员需要突破的技术要点
一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...
- 一名Java架构师分享自己的从业心得,从码农到架构师我用了八年
工作了挺久,发现有个挺有意思的现象,从程序员.高级程序员,到现在挂着架构师.专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了. 这些疑问有些来自于跟小伙伴的交流,有些是我的自问自答 ...
随机推荐
- kbmMW 5.10.10 SmartBinding问题修正
千呼万唤始出来,最新的kbmMW 5.10.01终于发布了,详情可以看xalion发的更新日志. 我期待的Smartbinding for Listview终于来了,在这一版本中,对SmartBind ...
- TSN(Temporal Segment Networks)
一.算法详解 二.代码解析(pytorch版) 训练代码:https://blog.csdn.net/u014380165/article/details/79058147 测试代码:https:// ...
- 【问题】bzip2 --version 2>&1 < /dev/null
https://unix.stackexchange.com/questions/230887/what-does-dev-null-mean https://stackoverflow.com/qu ...
- Linux网络管理——nslookup
使用参考: https://www.computerhope.com/unix/unslooku.htm https://www.thegeekstuff.com/2012/02/dig-comman ...
- PHP通过iconv将字符串从GBK转换为UTF8字符集
PHP通过iconv将字符串从GBK转换为UTF8字符集的方法,需要的朋友可以参考下. 1. iconv()介绍 iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件.例如:从GB23 ...
- excel单元格数据与文本框数据同步
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Shapes().TextFrame2.TextRan ...
- visual studio code(vscode) 配置在terminal进行运行代码并且支持c++11特性
1.点击设置 点击CodeRunner的小齿轮,点击configure extension settings 2.点击映射 点击executor map中的Edit in settings.json ...
- Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final
笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...
- 09—mybatis注解配置join查询
今天来聊mybatis的join查询,怎么说呢,有的时候,join查询确实能提升查询效率,今天举个left join的例子,来看看mybatis的join查询. 就不写的很细了,把主要代码贴出来了. ...
- Linux下恢复误删除的文件
原文地址:http://www.libenfu.com/vim-分区下误删的文件,恢复文件全记录-转 当时我的工作目录是/source/needrecovered. $ pwd /source/nee ...