中企动力 > 商学院 > 海量数据怎么样
  • ?

    万字长文揭秘:阿里如何实现海量数据实时分析?

    彭文博

    展开

    阿里妹导读:随着数据量的快速增长,越来越多的企业迎来业务数据化时代,数据成为了最重要的生产资料和业务升级依据。本文由阿里AnalyticDB团队出品,近万字长文,首次深度解读阿里在海量数据实时分析领域的多项核心技术。

    数字经济时代已经来临,希望能和业界同行共同探索,加速行业数字化升级,服务更多中小企业和消费者。

    欢迎转发、收藏此文

    挑战

    随着数据量的快速增长,越来越多的企业迎来业务数据化时代,数据成为了最重要的生产资料和业务升级依据。伴随着业务对海量数据实时分析的需求越来越多,数据分析技术这两年也迎来了一些新的挑战和变革:

    在线化和高可用,离线和在线的边界越来越模糊,一切数据皆服务化、一切分析皆在线化。高并发低延时,越来越多的数据系统直接服务终端客户,对系统的并发和处理延时提出了新的交互性挑战。混合负载, 一套实时分析系统既要支持数据加工处理,又要支持高并发低延时的交互式查询。融合分析, 随着对数据新的使用方式探索,需要解决结构化与非结构化数据融合场景下的数据检索和分析问题。

    阿里巴巴最初通过单节点Oracle进行准实时分析, 后来转到Oracle RAC,随着业务的飞速发展, 集中式的Shared Storage架构需要快速转向分布式,迁移到了Greenplum,但不到一年时间便遇到扩展性和并发的严重瓶颈。为了迎接更大数据集、更高并发、更高可用、更实时的数据应用发展趋势,从2011年开始,在线分析这个技术领域,阿里实时数仓坚定的走上了自研之路。

    分析型数据库AnalyticDB

    AnalyticDB是阿里巴巴自主研发、唯一经过超大规模以及核心业务验证的PB级实时数据仓库。自2012年第一次在集团发布上线以来,至今已累计迭代发布近百个版本,支撑起集团内的电商、广告、菜鸟、文娱、飞猪等众多在线分析业务。

    AnalyticDB于2014年在阿里云开始正式对外输出,支撑行业既包括传统的大中型企业和政府机构,也包括众多的互联网公司,覆盖外部十几个行业。AnalyticDB承接着阿里巴巴广告营销、商家数据服务、菜鸟物流、盒马新零售等众多核心业务的高并发分析处理, 每年双十一上述众多实时分析业务高峰驱动着AnalyticDB不断的架构演进和技术创新。

    经过这2年的演进和创新,AnalyticDB已经成长为兼容MySQL 5.x系列、并在此基础上增强支持ANSI SQL:2003的OLAP标准(如window function)的通用实时数仓,跻身为实时数仓领域极具行业竞争力的产品。近期,AnalyticDB成功入选了全球权威IT咨询机构Forrester发布"The Forrester Wave™: CloudData Warehouse,Q4 2018"研究报告的Contenders象限,以及Gartner发布的分析型数据管理平台报告 (Magic Quadrant forData Management Solutions for Analytics),开始进入全球分析市场。AnalyticDB旨在帮客户将整个数据分析和价值化从传统的离线分析带到下一代的在线实时分析模式。

    整体架构

    经过过去2年的架构演进和功能迭代,AnalyticDB当前整体架构如下图。

    AnalyticDB是一个支持多租户的Cloud Native Realtime Data Warehouse平台,每个租户DB的资源隔离,每个DB都有相应独立的模块(图中的Front Node, Compute Node, Buffer Node),在处理实时写入和查询时,这些模块都是资源(CPU, Memory)使用密集型的服务,需要进行DB间隔离保证服务质量。同时从功能完整性和成本优化层面考虑,又有一系列集群级别服务(图中绿色部分模块)。

    下面是对每个模块的具体描述:

    DB级别服务组件:

    Front Node:负责JDBC, ODBC协议层接入,认证和鉴权,SQL解析、重写;分区地址路由和版本管理;同时优化器,执行计划和MPP计算的调度模块也在Front Node。Compute Node: 包含MPP计算Worker模块,和存储模块(行列混存,元数据,索引)。Buffer Node: 负责实时写入,并根据实时数据大小触发索引构建和合并。

    集群级别服务组件:

    Management Console: 管理控制台。Admin Service:集群管控服务,负责计量计费,实例生命周期管理等商业化功能,同时提供OpenAPI和InnerAPI给Management Console和第三方调用。Global Meta Service:全局元数据管理,提供每个DB的元数据管理服务,同时提供分区分配,副本管理,版本管理,分布式DDL等能力。Job Service:作业服务,提供异步作业调度能力。异步作业包括索引构建、扩容、无缝升级、删库删表的后台异步数据清理等。Connector Service:数据源连接服务,负责外部各数据源(图中右侧部分)接入到AnalyticDB。目前该服务开发基本完成,即将上线提供云服务。Monitoring & Alerting Service:监控告警诊断服务,既提供面向内部人员的运维监控告警诊断平台,又作为数据源通过Management Console面向用户侧提供数据库监控服务。Resource Management Service:资源管理服务,负责集群级别和DB级别服务的创建、删除、DNS/SLB挂载/卸载、扩缩容、升降配,无缝升级、服务发现、服务健康检查与恢复。

    数据模型

    AnalyticDB中表组(Table Group)分为两类:事实表组和维度表组。

    事实表组(Fact Table Group),表组在AnalyticDB里是一个逻辑概念,用户可以将业务上关联性比较多的事实表放在同一个事实表组下,主要是为了方便客户做众多数据业务表的管理,同时还可以加速Co-location Join计算。维度表组(Dimension Table Group),用于存放维度表,目前有且仅有一个,在数据库建立时会自动创建,维度表特征上是一种数据量较小但是需要和事实表进行潜在关联的表。

    AnalyticDB中表分为事实表(Fact Table)和维度表(Dimension Table)。

    事实表创建时至少要指定Hash分区列和相关分区信息,并且指定存放在一个表组中,同时支持List二级分区。

    Hash Partition将数据按照分区列进行hash分区,hash分区被分布到多个Compute Node中。List Partition(如果指定List分区列的话)对一个hash分区进行再分区,一般按照时间(如每天一个list分区)。一个Hash Partition的所有List Partition默认存放于同一个Compute Node中。每个Hash Partition配有多个副本(通常为双副本),分布在不同的Compute Node中,做到高可用和高并发。

    维度表可以和任意表组的任意表进行关联,并且创建时不需要配置分区信息,但是对单表数据量大小有所限制,并且需要消耗更多的存储资源,会被存储在每个属于该DB的Compute Node中。

    下图描述了从Database到List分区到数据模型:

    对于Compute Node 来说,事实表的每个List分区是一个物理存储单元(如果没有指定List分区列,可认为该Hash分区只有一个List分区)。一个分区物理存储单元采用行列混存模式,配合元数据和索引,提供高效查询。

    海量数据

    基于上述数据模型,AnalyticDB提供了单库PB级数据实时分析能力。以下是生产环境的真实数据:

    阿里巴巴集团某营销应用单DB表数超过20000张云上某企业客户单DB数据量近3PB,单日分析查询次数超过1亿阿里巴巴集团内某单个AnalyticDB集群超过2000台节点规模云上某业务实时写入压力高达1000w TPS菜鸟网络某数据业务极度复杂分析场景,查询QPS 100+

    导入导出

    灵活的数据导入导出能力对一个实时数仓来说至关重要,AnalyticDB当前既支持通过阿里云数据传输服务DTS、DataWorks数据集成从各种外部数据源导入入库,同时也在不断完善自身的数据导入能力。整体导入导出能力如下图(其中导入部分数据源当前已支持,部分在开发中,即将发布)。

    ★ 数据导入

    首先,由于AnalyticDB兼容MySQL5.x系列,支持通过MySQL JDBC方式把数据insert入库。为了获得最佳写入性能,AnalyticDB提供了Client SDK,实现分区聚合写的优化,相比通过JDBC单条insert,写入性能有10倍以上提升。对于应用端业务逻辑需要直接写入AnalyticDB的场景,推荐使用AnalyticDB Client SDK。

    同时,对于快速上传本地结构化的文本文件,可以使用基于AnalyticDB Client SDK开发的Uploader工具。对于特别大的文件,可以拆分后使用uploader工具进行并行导入。

    另外,对于OSS,MaxCompute这样的外部数据源,AnalyticDB通过分布式的Connector Service数据导入服务并发读取并写入到相应DB中。Connector Service还将支持订阅模式,从Kafka,MQ,RDS等动态数据源把数据导入到相应DB中。AnalyticDB对大数据生态的Logstash,Fluentd,Flume等日志收集端、ETL工具等通过相应插件支持,能够快速把数据写入相应DB。

    今天在阿里巴巴集团内,每天有数万张表从MaxCompute导入到AnalyticDB中进行在线分析,其中大量导入任务单表数据大小在TB级、数据量近千亿。

    ★ 数据导出

    AnalyticDB目前支持数据导出到OSS和MaxCompute,业务场景主要是把相应查询结果在外部存储进行保存归档,实现原理类似insert from select操作。insert from select是把查询结果写入到内部表,而导出操作则是写入外部存储, 通过改进实现机制,可以方便地支持更多的导出数据源。

    核心技术

    高性能SQL Parser

    AnalyticDB经过数年的发展,语法解析器也经历了多次更新迭代。曾经使用过业界主流的 Antlr(http://antlr.org),JavaCC(https://javacc.org)等Parser生成器作为SQL 语法解析器,但是两者在长期、大规模、复杂查询场景下,Parser的性能、语法兼容、API设计等方面不满足要求,于是我们引入了自研的SQL Parser组件FastSQL。

    ★ 领先业界的Parser性能

    AnalyticDB主打的场景是高并发、低延时的在线化分析,对SQL Parser性能要求很高,批量实时写入等场景要求更加苛刻。FastSQL通过多种技术优化提升Parser性能,例如:

    快速对比:使用64位hash算法加速关键字匹配,使用fnv_1a_64 hash算法,在读取identifier的同时计算好hash值,并利用hash64低碰撞概率的特点,使用64位hash code直接比较,比常规Lexer先读取identifier,在查找SymbolTable速度更快。高性能的数值Parser:Java自带的Integer.parseInt()/Float.parseFloat()需要构造字符串再做parse,FastSQL改进后可以直接在原文本上边读取边计算数值。分支预测:在insert values中,出现常量字面值的概率比出现其他的token要高得多,通过分支预测可以减少判断提升性能。

    以TPC-DS99个Query对比来看,FastSQL比Antlr Parser(使用Antlr生成)平均快20倍,比JSQLParser(使用JavaCC生成)平均快30倍,在批量Insert场景、多列查询场景下,使用FastSQL后速度提升30~50倍。

    ★ 无缝结合优化器

    在结合AnalyticDB的优化器的SQL优化实践中,FastSQL不断将SQL Rewrite的优化能力前置化到SQL Parser中实现,通过与优化器的SQL优化能力协商,将尽可能多的表达式级别优化前置化到SQL Parser中,使得优化器能更加专注于基于代价和成本的优化(CBO,Cost-Based Optimization)上,让优化器能更多的集中在理解计算执行计划优化上。FastSQL在AST Tree上实现了许多SQL Rewrite的能力,例如:

    常量折叠:

    SELECT * FROM t1 tWHERE comm_week BETWEEN CAST(date_format(date_add('day',-day_of_week('20180605'),date('20180605')),'%Y%m%d') AS bigint)AND CAST(date_format(date_add('day',-day_of_week('20180605'),date('20180605')),'%Y%m%d') AS bigint)------>SELE...

  • ?

    都在说大数据好,带你看看大数据到底怎么样?

    徐不斜

    展开

    近几年,大数据这个词突然变得很火,不仅纳入阿里巴巴、谷歌等互联网公司的战略规划中,同时也在我国国务院和其他国家的政府报告中多次提及,大数据无疑成为当今互联网世界中的新宠儿。

    而近期朋友圈疯转的“马云无人超市迎客,再不努力你将无工可打”,“看李彦宏如何谈AI”等新闻热点,无不展示着人工智能的快速发展,但在直木看来,人工智能之所以能取得突飞猛进的进展的背后,不能不说这些年来大数据长足发展的结果。

    人工智能和大数据有什么关系呢?

    如果我们把人工智能看成一个嗷嗷待哺拥有无限潜力的婴儿,某一领域专业的海量的深度的数据就是喂养这个天才的奶粉。奶粉的数量决定了婴儿是否能长大,而奶粉的质量则决定了婴儿后续的智力发育水平。

    据数联寻英发布《大数据人才报告》显示,目前全国的大数据人才仅46万,未来3-5年内大数据人才的缺口将高达150万,越来越多人加入到大数据培训,都希望在大数据培训机构中学习最前沿的知识,找一份不错的工作。

    本文从4个方向让大家充分了解大数据,望对同学们的大数据从业有帮助:

    大数据就业前景

    大数据就业方向

    大数据就业薪资

    大数据职业发展

    一、大数据就业前景

    据职业社交平台LinkedIn发布的《2016年中国互联网最热职位人才报告》显示,研发工程师、产品经理、人力资源、市场营销、运营和数据分析是当下中国互联网行业需求最旺盛的六类人才职位。其中研发工程师需求量最大,而数据分析人才最为稀缺。领英报告表明,数据分析人才的供给指数最低,仅为0.05,属于高度稀缺。数据分析人才跳槽速度也最快,平均跳槽速度为19.8个月。根据中国商业联合会数据分析专业委员会统计,未来中国基础性数据分析人才缺口将达到1400万,而在BAT企业招聘的职位里,60%以上都在招大数据人才。

    二、大数据就业方向

    大数据领域三个大的技术方向,这些不同的技术方向,对应企业的哪些招聘岗位?

    1. Hadoop大数据开发方向

    市场需求旺盛,大数据培训的主体,目前IT培训机构的重点

    对应岗位:大数据开发工程师、爬虫工程师、数据分析师 等

    2. 数据挖掘、数据分析&机器学习方向

    学习起点高、难度大,市面上只有很少的培训机构在做。

    对应岗位:数据科学家、数据挖掘工程师、机器学习工程师等

    3. 大数据运维&云计算方向

    市场需求中等,更偏向于Linux、云计算学科

    对应岗位:大数据运维工程师

    精通任何方向之一者,均会 “ 前(钱)”途无量。

    三个方向中,大数据开发是基础。以Hadoop开发工程师为例,Hadoop入门月薪已经达到了 8K 以上,工作1年月薪可达到 1.2W 以上,具有2-3年工作经验的hadoop人才年薪可以达到 30万—50万,一般需要大数据处理的公司基本上都是大公司,所以学习大数据专业也是进大公司的捷径。

    三、大数据就业薪资

    1、基础人才-数据分析师

    北京数据分析平均工资: 10630/月,取自 15526 份样本,较 2016 年,增长 9.4%。

    2、大数据开发工程师

    北京大数据开发平均工资:30230/月。

    3、Hadoop开发工程师

    北京hadoop平均工资: 20130/月,取自 1734 份样本。

    4、数据挖掘工程师

    北京数据挖掘平均工资:21740/月,取自 3449 份样本,较 2016 年,增长 20.3%;

    5、算法工程师

    北京算法工程师平均工资: 22640/月,取自 10176 份样本。

    四、大数据职业发展

    最后一个问题,到底哪些公司需求大数据人才?

    事实上,大到世界500强,BAT这样的公司,小到创业公司,他们都需求数据人才。

    目前,大数据人才数量较少,因此大多数公司的数据部门一般都是扁平化的层级模式,大致分为数据分析师、资深研究员、部门总监3个级别。、

    大公司可能按照应用领域的维度来划分不同团队,而在小公司则需要身兼数职。有些特别强调大数据战略的互联网公司则会另设最高职位—如阿里巴巴的首席数据官。这个职位的大部分人会往研究方向发展,成为重要数据战略人才。另一方面,大数据工程师对商业和产品的理解,并不亚于业务部门员工,因此也可转向产品部或市场部,乃至上升为公司的高级管理层。

    马云说“我们已从IT时代进入了DT时代,未来我们的汽车、电灯泡、电视机、电冰箱等将全部装上操作系统,并进行数据集成,数据将会让机器更“聪明”。DT时代,数据将成为主要的能源,离开了数据,任何组织的创新都基本上是空壳。”

    我们从大哥大,小灵通,到诺基亚塞班,到今天的人手一部智能手机,每天各大企业会收到多少数据,如何从这些数据里面分析础客户的需求,这都是企业所要做的事,总之,数据,是未来的一切。

  • ?

    大数据是怎么毁掉你的生活的?

    亦尘俗

    展开

    本文选自中信书院阅读时差栏目。阅读时差动态实时同步全球前沿新知,为你打破知识的国界。

    本期阅读时差为你分享的这本书是《大数据的真相》。

    透过书名不难看出,本书的目的就是让读者看清楚大数据的暗黑面,从而对大数据保持清醒、客观的认识。在今天,大数据已经不再是陌生的事物,从上网购物的广告精准投放,再到驾车出行的路线规划,都可以看到大数据的身影。在大数据的支持下,人们的生活越来越便捷,越来越智能。

    但是大数据的背后同样也隐藏着不为人知的阴暗面。因为大数据是依靠算法模型得来的,而算法模型是由人来设计的。所以,只要有人的参与,就势必会掺杂个人情感或认知偏见,导致得出的结论也难免会有失公允甚至还可能会带来歧视、扭曲事实、失去正义,造成不公平泛滥。

    所以,如果不能对大数据加以正确的引导,则可能会带来歧视、扭曲事实、失去正义,造成不公平泛滥。只有明确地将更好的价值观加入到大数据的算法中,我们才能创造出符合道德准则的大数据模型,从而更好地为人类服务。

    全文提纲

    围绕算法模型中存在的阴暗面,我们来分享一下大数据滥用的“四宗罪”:

    首先是偏见,看看大数据是怎样用技术包装偏见的;

    第二是逐利,看看掠夺式广告是怎样兜售虚假或高价承诺的;

    第三是剥削,分析大数据对底层人民的压榨式调度;

    最后一个是歧视,揭露大数据是如何给民众带来不公平待遇的。

    1

    偏见,大数据用技术包装偏见

    首先来看第一个重点内容:偏见,看看大数据是怎样用技术包装偏见的。

    我们知道,大数据的基础在于数据和模型,其中模型处于主导地位,能够从海量的数据中抽离出相对有用的部分,对外部环境进行抽象概括,从而得出结论指导现实。值得注意的是,模型的本性就是简单化,不可能囊括现实世界的复杂性或者人类交流的细微差别。在人的设置和干预下,有些信息不可避免地会被遗漏或突出,从而体现为偏见。这种偏见在大数据出现之前,是体现在过程之中,而大数据出现之后,偏见就提前埋伏在算法模型里了。因此,冰冷的计算机和数据化风险模型得出的结论,虽然看起来就是一副公正无私的样子,其实是把偏见隐藏在了更深的地方。

    来看一个带有种族偏见的数据模型。长期以来,种族是美国审判的一个主要因素。研究表明,在休斯顿市,对于同样罪行的犯人,检察官判非裔美国人死刑的几率比白人高三倍,判西班牙裔美国人死刑的几率比白人高四倍。为改变这种情况,美国有24个州的法院采用了一种再犯模型,帮助法官评估每一个罪犯构成的危险,减少法官的情绪和偏见所带来的影响。其中,一个叫做LSI–R的普及模型应用最为广泛。这个模型要求罪犯填写冗长的问卷调查。比如“你之前犯罪次数是多少?”“其他人对这次犯罪起了多大的作用?毒品和酒精对于你犯罪起了多大作用?”等等。

    这些问题看起来很正常,没毛病,但在实际操作中却存在问题。来自有特权背景的罪犯和来自治安差的平民街区的罪犯,答案肯定不一样。

    比如,同样问“你第一次遭遇警察”的原因,在舒适郊区长大的罪犯也许会告诉你这是第一次入狱,而来自平民街区的年轻的黑人男性很可能已经被警察多次拦截,即使他们什么错事也没做。

    研究报告显示,14-24岁的黑人男性和拉丁美洲男性仅占该市总人口的4.7%,但他们占被警察拦截盘查总人数的40.6%。而且,那些被盘查的人中90%多都是无辜的。然而根据模型统计,经常被拦截的嫌犯判分更高,更容易被模型分类为高风险等级,从而误导法官量刑。

    更严重的是,罪犯还会被问到出生和成长的环境,他们的朋友和亲戚是否有过犯罪记录等等。事实上,法官应该对所做的事情进行审判,而不是对嫌犯的身份进行审判。这些细节不应该和刑事案件或者量刑相关。

    然而,在LSI-R这样的数据模型下,原本身处底层社会的有色人种受到了更加严重的种族问题。“高风险”得分等级的人很可能是失业人员,而他的许多朋友和家人都触犯过法律。而且多年和一群罪犯关在一起,又增加了他再次犯罪的可能性。等他出狱时会回到同样的贫穷社区,有了犯罪记录,找工作就更难。如果他再犯罪,再犯模型又一次成功验证。事实上,正是这一模型导致了恶性循环,且一再地自行巩固。

    面对真实现状,作者禁不住提出疑问,我们是利用大数据彻底根除了人类偏见,还是只是用技术包装了人类偏见?答案其实就在眼前。

    2

    逐利,掠夺式广告通过大数据兜售虚假承诺

    说完偏见的问题,再来看看大数据的第二宗罪,逐利,来看看掠夺式广告,怎样通过大数据精确找出弱势群体,兜售虚假或高价承诺的。

    经常网上购物的朋友会发现,互联网会利用我们点击、阅读的习惯,确定偏好和模式,为我们在数百种模型中进行排名、分类以及评分。这为合法的广告奠定了强大的基础,但同时也助长了掠夺式广告的泛滥。

    掠夺式广告是什么呢?

    打个比方,如果人们缺钱,就提供大量高息发薪日贷款;如果他们的电脑运转缓慢,那它可能中了一个掠夺式广告携带的病毒,然后广告商提供修理服务。总的来说,在人们既有需求又很无知的任何地方,你都能看到掠夺式广告。

    掠夺式广告发现不平等,并大肆利用,最终的结果是巩固了现存的社会分层,加速对穷人的掠夺。

    作者认为,美国的营利性大学之所以如此繁荣,就是掠夺式广告的功劳。这些营利性大学就像江湖骗子一样,倾向于锁定最贫困地区的人,尤其是特别关注那些点击过贷款广告的人,然后利用他们的私密信息攻击他们。他们是怎样找到这些私密信息的呢?很多人在Google上搜索答案或者在填写问卷时,不知不觉中就暴露了自己的隐私。

    2010年,一条引人注目的广告刊登了奥巴马总统的照片,广告词为:“奥巴马呼吁妈妈们回到学校:完成你的学位,把助学金给有资格的人。”这则广告暗示,总统签署了一项旨在让母亲重返校园的新法案。但这是一个谎言。当消费者点击这个广告时,会被问到几个问题,包括年龄和电话号码,然后就会接到一所营利性学校的电话,主动提出帮她借钱申请入学。据报道,营利性大学20%-30%的广告预算都用于开发潜在客户。大学每收到一个最有希望的学生,就支付给提供者高达150美元的费用。

    美国底层40%的人口没有财富,普通家庭的负债平均为14800美元,其中大部分是利率过高的信用卡账户。而他们一直被灌输“赚钱的关键是接受教育”这样的理念。这些以盈利为目的的大学就通过大数据的模型,筛选出这些弱势群体,然后向他们承诺,只要接受教育就能够给他们一个美好未来。然而当学生入校之后,就会告知要通过各种贷款来解决学费问题,从而增加更多的债务。贫穷学生因此变得无望、绝望,怀疑教育的价值,加剧美国的贫富差距。

    不幸的是,除了营利性大学,还有很多利用掠夺式广告的公司。你只需要想一下人们的痛点在哪里,就会发现广告商在哪里使用掠夺性模型。数据支持的模型在不断地筛选我们的数据,搜寻我们的习惯、意愿、忧虑和渴望,推送的每一条广告都能够锁定最有效的信息,在对的时间出现在潜在客户眼前。

    精准信息触发顾客决定,从而成功地拖住又一个付费客户,使得掠夺者所花的每一分钱都能产生最大的效益。所以,站在掠夺式广告商的角度来看,穷人在搜索引擎上的查询和点过的优惠券,实际上是在呼叫特别关注。

    3

    剥削,大数据对底层人民的压榨式调度

    大数据模型不但干预生活,还能够给工作带来重大影响,有些负面影响甚至比周扒皮的半夜鸡叫有过之而无不及。这就是大数据的第三宗罪:剥削,来看看大数据对底层人民的压榨式调度。

    这主要体现在人力调度软件上。这种软件可以利用大数据分析顾客流量,精确计算出每一天、每小时他们需要多少人力,从而降低人力资源成本。比如,某天中午下雨,公园里的人可能会跑进咖啡店;每周五晚上大街上将出现更多的行人等等。软件能够根据这些情况变化合理配置人力,来匹配不断波动的需求。乍看之下,你会觉得这套机制很先进,但事实上却是一种赤裸裸的压榨。

    在低效率的经营模式下,职员有可预测的工作时间和固定的闲暇时间。有些人可以在工作时间读书,甚至做研究。现在,由电脑程序进行人力配置,职员每一分钟都很忙,几乎连个人时间也都被压榨一空。2014年,《纽约时报》报道过一个单亲妈妈简奈特·纳薇欧的遭遇,她的生活被大数据监控并影响。她一边努力读大学,一边在星巴克担任咖啡师,同时还得照顾她四岁的孩子。大数据指导下的工作调整,让纳薇欧的生活陷入混乱,无法安排固定的托儿服务,只好暂停学业。

    《纽约时报》这篇文章报道后几周内,遭到点名的大公司宣布将调整这种调度方式。但追踪报道显示,这些公司压根就没有信守承诺。归根结底,还是利润在作怪,像星巴克这种上市公司的商业模型,都是以提高盈利为目的的。

    人力调度软件对社会同样造成了极大的影响。像纳薇欧这样的群体,因为工作时间非常不稳定,不可能回学校念书,而这又损害了她的就业前途,只能当一名供大于求的低薪劳工。于是他们会格外焦虑,睡眠不足,继而产生剧烈的情绪波动。据统计,美国死在公路上的人估计有13%是因为睡眠不足。更糟糕的是,因为这种软件是来替企业省钱的,它们往往会将员工每周工作时间限制在30小时之内,这样公司就不必为他们提供医疗保险。在这种情况下,低薪劳工永无出头之日。

    4

    歧视,大数据给民众带来不公平待遇

    大数据不但成为资本家为虎作伥的帮凶,甚至还会加剧社会的不公。这就是大数据的第四宗罪:歧视,我们来看看大数据是如何给民众带来不公平待遇的。

    现在,大多数人都相信,数据越多越好。对于大数据来说确实如此。如果只关注很少的数据,那么只能呈现出相互独立、毫无关联的点;而将更多的数据纳入模型,就能够构建出事物的整体面貌。但同时,这些大量的数据来源于规模巨大的群体,忽略了相对较少的个体。而且,这种模型使用频率越高、数据量越大,越能够增加这种不公平的待遇。

    我们来看暴力犯罪的大数据模型案例。有一款软件叫做“预防政策”,原本这是一个地震预测软件,但应用到犯罪预测领域,不但能够定位犯罪最有可能发生的地方,还能预测连续犯罪。这主要是源于警察局把“轻微犯罪”的数据纳入“预防政策”这个软件中。这些数据包括天天发生的商店行窃、小额欺诈,甚至是违规停车。

    英国肯特郡警察局在2013年尝试使用“预防政策”软件,确实奏效了。根据“预防政策”的指引,在指定广场巡逻的效率是随机巡逻的十倍,精确度是警方情报分析的两倍。那么,模型最擅长预测的是什么类型的犯罪呢?答案是包括随意大小便的醉汉、小偷小摸的偷车贼等等的轻微犯罪。

    但最令人可悲的是,大数据勾勒出的犯罪地图证实,大部分罪行都是穷人干的。为什么会得出这样的结论呢?这里面固然有穷人的比例远高于富人的原因,同时也有数据模型和警察的原因。为了支撑大量的数据,警察就会把各种轻微犯罪录入模型,而模型又反馈出穷人犯罪的高概率。

    反过来看,那些富人实施的犯罪行为都哪去了?是他们奉公守法吗?当然不是。作者写道,在本世纪头十年,金融大亨通过撒谎、欺诈几乎摧毁了全球经济,使得数以百万计的人失去了家园、工作和医疗保障,犯下了滔天罪行。但是,联邦调查局和证券交易委员会的调查人员却拿他们没有任何办法。富人们在政治家身上投入了大量资金,而且他们经营的银行直接影响到国家经济,因此受到了保护。除了一些像庞氏骗局操作者伯纳德·马多夫这样的极端犯罪,金融家不会被逮捕。更何况这个群体在2008年的市场崩盘中几乎毫发无损,现在依然逍遥法外,享受特权。

    在这种情况下,尽管“预防政策”是一个非常有益、甚至高尚的软件工具,但它也成为了数学毁灭武器。“预防政策”软件授权警察局锁定穷人,拦截更多穷人,逮捕一部分穷人,把一些穷人罪犯关进监狱。现在,有了大数据的支持,警方更加捍卫了他们在这一行为的合法性,与此同时增加了办案的精确性和“科学性”。结果是,我们把贫困看作是犯罪,相信我们的工具既科学又公平。

    这突出了数学毁灭武器的另一个常见特征,即往往惩罚穷人。部分原因是数学模型是用来评估数量多的人群。相反...

  • ?

    中国人到底有多少资产?(海量数据支撑!)

    迷夜

    展开

    来源:进击波(ID:jinbubo)

    我认为:

    『流动性收入更能够决定对应周期的生活品质。

    而金融资产更能够决定相对地位。

    这解释了为什么很多人年入百万依然认为自己是屌丝。有的人看起来“一分不赚”,依然是食物链顶层。

    很多时候,这是new money 和 old money的区别所在。』

    传承下来的资产,往往称为“old money”无论是核心地段的房产,土地,矿产,优质企业股份都是资产。资产或许不能带来短期的流动性收入。但是无数人倾尽一生,不过是为了获得资产。

    故而,流动性只要不造成不枯竭,不断裂。我们应当不断去累积资产。

    那么,中国人到底有多少金融资产?

    ▎回望2014

    2014年的时候。西南财经大学中国家庭金融调查与研究中心在北京金融街了全国首份《中国家庭金融调查报告》。该报告是西南财大与中国人民银行联手基于全国25个省、80个县、320个社区共8438个家庭的抽样调查数据汇总分析形成,涉及家庭资产、负债、收入、消费、保险、保障等各个方面的数据,全面客观地反映了当时我国家庭金融的基本状况。

    下面放核心数据:

    『中国家庭资产平均为121.69万元

    城市家庭平均资产247.60万元

    中国10%最高收入家庭储蓄占全国储蓄总额74.9%

    77%的炒股家庭没从股市赚钱

    0.5%的中国家庭年可支配收入超过100万元,

    有150万中国家庭年可支配收入超过100万元,

    10%的收入最高的家庭收入占整个社会总收入的57%,

    说明中国家庭收入不均等的现象已经较为严重。

    而在2014年的时候。中国家庭负债平均为6.26万元,总体资产负债率为4.76%。其中,城市家庭平均负债100815元,农村家庭平均负债36504元。

    从今天来看,这个负债率其实是偏低的。』

    ▎鸿沟的出现

    对于西方而言,三年多的时间,变化不大。但对于我国而言,三年可以说是沧海桑田了。尤其是2015年-2016年周期的又一次房地产猛增。使得以上的数据无法对今天提供准确的参考。

    自此,中国家庭因为拥有不动产和不拥有不动产,而产生了一条巨大的鸿沟。

    不知为何,这份报告,从2015年之后就没有更新过了。以至于我对数据的梳理花了更多的时间。

    拿2016年这一年来看,全国居民的房产净值增长达17.95%,房产净值的增长额已占到家庭人均财富增长额的68.24%。

    中国家庭已经不再是量入为出的了,债务问题凸显

    每年央行都会发布一份《城镇储户问卷调查报告》,是对全国储户,国家经济、家庭财政状况的一个分析。根据2017年的数据,中国家庭的“负债率”是58%。

    『2013年初至2016年底,中国家庭债务占GDP的比重已经由30.7%提升到44.4%,到2017年底高达58%。已经超过2008年美国金融危机前的家庭债务累积速度。但这还不包括公积金贷款等其他渠道的家庭债务,如果将这些因素均考虑其中,这里面个人房贷每年增速都在20%以上。』

    那么也就是说大多数正常的家庭,账面有多少资产,那么除以2-1.5 就是他们的负债了。这印证了为什么那么多新晋级的高薪家庭,过得很胆战心惊的原因。

    当然,中国也有很多不负债的人。比如大城市国营工厂的老职工,过去分配了1-2套房子,拆迁户等等。这些人的杠杆率极低或者不存在。但是他们往往并不富裕。

    如果他们想上更高的资产规模进阶,只有一条路:那就是负债。

    事实上,适当的负债是财富进阶的正确方式。

    王健林也好,孙宏斌也好,许家印也好。基本靠负债。

    在过去长达30年的超发周期里,用明天的价值还今天借到的价格,无疑约等于“财富转移”。

    ▎高净值资产的家庭有多少?

    根据美国波士顿咨询公司的分析报告,2017年全球共有1850万个百万富豪家庭,其中美国拥有超过800万个富豪家庭,中国有207万个,日本有108万个。

    即中国有207万个家庭的净资产是高于650万左右的人民币。

    而根据胡润研究院数据,中国资产千万(人民币)以上人数是100多万,占人口总数千分之一。一线城市比例百分之一,平均年龄约为39岁。

    故而,虽然互联网和媒体让我们产生巨大的错觉,是全中国都是有钱人,但其实总量并不多。

    根据胡润研究院的数据,中国新增中产阶级中,私营业主这个职业的家庭百万年收入的比例是17.26%,为所有职业中最高比例。超过了专业技能人员和职业经理人非常多。

    ▎中国到底有多少汽车?

    (虽然汽车算消费品及损耗品,但在中国民间大量人依然把它列为资产属性)

    『根据中新社北京1月15日电,截至2017年底,中国机动车保有量达3.10亿辆,其中汽车2.17亿辆;机动车驾驶人达3.85亿人,其中汽车驾驶人3.42亿人。

    其中以个人名义登记的小型和微型载客汽车(私家车)达1.70亿辆,占载客汽车的91.89%,也就说中国有1.7亿辆的私家车,每8个人一辆车。』

    ▲上图是2012年-2016年的私家汽车增长图。

    从城市的维度来看,北京汽车保有量是全国第一的,2017年底达564万辆。

    全国有49个城市的汽车保有量超过100万辆,23个城市超200万辆,北京、成都、重庆、上海、苏州、深圳6个城市则超过了300万辆。

    按照数量的排行是:北京、成都、重庆、上海、深圳、苏州、天津、郑州、西安、杭州、武汉、广州、石家庄、东莞、南京、青岛、宁波、佛山。

    『根据北京2150万的常住人口来算,每3.8个人拥有一辆私家车,也就说大约1.5个家庭(平均每个家庭2.5人)就有一辆私家车。而这个数值是7.5-8之间(根据 上海2418万常住人口推算。)这和上海多年来对牌照发放的严控、城市的拥挤度有关。

    根据奔驰官网数据。奔驰去年在亚太地区共计售出875,250辆,激增19.2%。中国依然是其最大的单一市场,在中国市场的销量达到587,868辆,攀升25.9%,创下新高。』

    2017年中国市场,BMW和MINI两品牌共交付594388辆新车,相比去年同期增长15.1%。而去年奥迪(含进口车)在华累计交付595288辆新车,同比增长1.05%。

    第二梯队中,捷豹路虎在中国市场销量为146399辆。凯迪拉克175489辆。

    第三梯队约为5-10万的量级(沃尔沃,雷克萨斯,英菲尼迪)

    也就说除去一定比例的企业采购,原车主换购,一人购买多台车等。据我粗略估算,中国去年约有180-250万人成为了高档车的车主。(如果谁有这些厂商的汽车会员数据就更精准了。)

    值得注意的是:中国再度成为保时捷全球最大单一市场,销量突破71,000台,同比增长10%。宾利在华销售超过2399台。

    也就说,中国已然成为顶级豪车最重要的市场。侧面证明了,中国人的财富正在向一小群人迅速集中。

    约财MeetMoney

    点击关注可弹出隐藏图片

    ▎中国人的海外配置规模达到了什么程度?

    根据2017年11月30日,中华人民共和国国家发展和改革委员会发布的《中国对外投资报告》我们可以看到:中国对海外的投资已经累计达到1.357万亿美元,大约相当于9万亿元人民币。这里面不包括相当数量的资金,以虚假贸易、刷卡购物等方式逃脱了外汇管制,流向世界各地。

    光2016年中国投资者海外商业和住宅房地产投资额达到330亿美元,并仍然保持迅速增长。

    ▎奢侈品 珠宝 字画 黄金等

    2008年的时候,中国对全球奢侈品的贡献率是12%,截止2016年已经达到32%,到2025年,有望达到44%,形成一万亿的市场规模。

    目前奢侈品行业的门店布局已经体现出巨大的不合理性。GDP前15城市的奢侈品门店比例为80%,但是居住在GDP排名前15城市的中国富裕群体人口仅占25%。

    也就说中国高净值人群已经下沉。

    ▲上图是美国,日本,中国三国的珠宝消首饰人均消费额(美元)可以看到人均来看,中国还是偏低的。

    『对于黄金,中国人是有一定的偏爱的。

    2017年,全国黄金实际消费量1089.07吨,与去年同期相比增长9.41%。

    2017年全国黄金消费量连续5年保持世界第一位。但个人认为:随着中国大妈的逐渐老去,黄金在华增长或许很快就接近峰值。』

    在所有的饰品销售量中,黄金占比47%于是只有19%。

    ▎ 股权投资市场

    如果你要问我,错过买房,中国下一个致富的跑道在哪里?我认为只有股权投资。

    根据清科中心数据:2017年中国股权投资市场:总计有1.2万家投资机构。7.7亿元的管理资本量。13万登记从业人员。

    根据上图,上海/浙江/广东/北京 依然是中国股权投资最活跃的地区。青海省很尴尬,去年前三季度股权交易基本为0。

    『而在二级市场,截止2018年4月25日收盘,上证总市值37.62万亿。创业板 5.35万亿。深证23.1万亿。 总计65万亿。

    那么我们再看下 《回望》那节的数据:77%的炒股家庭没从股市赚钱。

    我估计2018年这个数据会变成85%以上。平均一个散户亏一万元左右。(一首凉凉送给你)』

    ▎ 总结

    综上,随着四十年的改革开放,中国普遍性地解决了大面积的贫困,并已经形成了一批拥有一定资产的中产阶级,以及足够大量的小康家庭,但也受到较高负债率的困扰。财富的分配不均匀仍在加剧。以及资产阶层跨界越来越难的问题。

    而实现真正的财富飞跃,或许只有用智慧+奋斗+投资的方式才可以完成。

  • ?

    海量数据分析,告诉你男女交往的几个“大忌”,别再犯错了!

    所罗门

    展开

    如今社会,单身青年的数量越来越巨大,在某些单身人士的眼中,谈恋爱似乎是很繁琐又耗费精力的事情。很多单身人士都有这种“不是不去爱,只是怕麻烦”的想法,也有很多在恋爱中的青年说“搞不懂他/她心里到底在想些什么,稍微有点矛盾就发火,还不如自己一个人来的轻松惬意。”不少对于爱情比较迷糊的人,时不时的踩到感情的雷区,因此免不了又有一番不必要的争吵。本次生活馆将告诉你:当男生和女生进行一段感情的时候有哪些举动是极其不明智的;在彼此的恋爱期间,男生女生到底在想什么?情侣究竟怎样才能科学地相处?

    一、对方给你的爱,从来都不是理所应当的

    男女在交往期间,男生是十分反感一个女生对他的付出以及努力视若,在她享受男生对她的各种福利的时候,满嘴都是“男女平等”,而当她需要为男生做出一点妥协的时候,她又会搬出“女权理论”这一套。曾经有个朋友,男友对她百依百顺,她前一分钟说想吃早餐,下一分钟男友就把早餐送到楼下,当姐妹们羡慕地说她男票真好时,她得意地说:“他说过愿意为我做一切的。”好景不长,女生被分手了,男生表示和她谈恋爱太累了。其实在恋爱期间是十分忌讳一方付出大量时间精力,而另一方把却把这种付出视作她本就应得的福利,那么这段感情的“祸根”在此刻已经种下。恋爱里有种关系叫“壁垒”,指的是恋爱中两个人彼此付出,建立“爱情壁垒”,在发生矛盾时会念及对方的好,提高分手成本。建立“壁垒”需要互动式付出,恋爱中两人的关系是平等的,没有什么爱是“你本应该”。

    二、双方产生矛盾,处于争执阶段时,不留情面,狠戳痛处

    男性是一种极度爱惜面子的物种,女生不留情面的讽刺挖苦是他们十分难以接受和容忍的。交往期间的磕磕绊绊小小争执都没关系,但如果女生恃宠而骄、口不择言,男生是十分反感的。主持人寇乃馨曾经在节目中提到,她和老公黄国伦都是强势的人,每次吵起架来都互不相让。有次吵得很凶,她怒气冲冲说了句:“黄国伦,你哪一点比得上我寇乃馨啊,你知不知道你离过婚,你是二手货,你配不上我。”黄国伦说了句:“你知道吗?有些话是不能说出口的。”随即消失了3天毫无音讯。恋爱中最无意义的就是贬损了,有些话一旦说出就收不回来,也会拆毁彼此为恋情付出的努力。

    三、意见出现分歧,女生就是不言语,让男生猜他的心思

    男性和女性对同一件事情上的思考模式的差异真不是一星半点,当一个女生对男生说一些含糊不清的话时候:男生是很害怕去猜女生心思,因为不仅不容易猜到正确答案,而且如果猜错了的 话后果可是相当严重的!女人心海底针,一个糙汉子有能猜到多少,毕竟能心领神会一下子就猜到女朋友此时此刻的想法的男生是十分稀少的,对于一个男生而言,他更希望的是:你的情绪你的想法都能不兜圈子说出来,不然你的需求我怎么去满足?你的情绪我怎么去照顾呢?

  • ?

    大数据就业率高吗?大数据就业情况怎么样

    旧梦

    展开

    大数据就业情况怎么样?这是很多想要从事大数据的人共同的问题,作为一个大数据工程师,今天向大家介绍下大数据工作的一些内容。

    我们从大数据工作现状、薪资待遇、工作内容、发展前景这四部分来说明下大数据工作如何。

    大数据工作的薪资

    通过查询了拉勾网的大数据开发的工作相关薪资情况,目前刚入行的大数据工程师平均薪资在1万左右,而随着工作时间的增加,3~5年经验的大数据工程师的薪资待遇将达到3万元左右,从薪资待遇来看,大数据工作还是很高的。

    大数据工作现状

    据相关机构统计,未来的3~5内大数据人才的缺口将达到150万,而且随着大数据的发展,人才缺口将不断扩大,所以大数据不管是目前还是未来长期都将是紧缺人才,受到各大互联网企业的关注。

    大数据工作内容

    以下是小编了解大的一个企业对于大数据工程师的岗位要求:

    1、负责公司大数据产品/项目的后台研发;

    2、参与大数据相关的算法和模型分析实现。

    3、负责技术预研,产品设计以及文档编写等工作。

    4、参与大数据的数据治理和数据处理相关java开发工作。

    5、参与海量数据处理,业务数据体系的设计、数据统计、分析及数据建模

    从上面的工作内容来看,大数据开发工作流程与其他的开发工程师类似,只不过主要是与数据打交道,基础技能容易掌握,需要在工作中多参与项目,积累项目经验,才能够快速的成长。

    大数据工作前景

    目前大数据人才缺口达到150万,并且还在不断增加,而且国家也支持大数据的发展,这两年建立了好几个大数据中心,所以长远来看,从事大数据的工作,未来的前景是很好的,发展的空间是比较大的。

    大数据就业情况怎么样?综合以上四点来看,大数据的工作不管是目前还是未来,都将是一个不错的选择。想要从事大数据工作的朋友可以通过自学或者参加大数据培训,想要了解更多的大数据相关的内容,可以去深圳大数据官网了解。

  • ?

    教你如何迅速秒杀掉:99%的海量数据处理面试题

    Zebulon

    展开

    前言

    一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名 :-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。

    毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且各个场景下需要考虑的细节也远比本文所描述的任何一种解决方法复杂得多。

    OK,若有任何问题,欢迎随时不吝赐教。谢谢。

    01

    何谓海量数据处理?

    所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。

    那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小,分而治之(hash映射),你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。

    至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。

    再者,通过本blog内的有关海量数据处理的文章:Big Data Processing,我们已经大致知道,处理海量数据问题,无非就是:

    分而治之/hash映射 + hash统计 + 堆/快速/归并排序;双层桶划分Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序;分布式处理之Hadoop/Mapreduce。

    下面,本文第一部分、从set/map谈到hashtable/hash_map/hash_set,简要介绍下set/map/multiset/multimap,及hash_set/hash_map/hash_multiset/hash_multimap之区别(万丈高楼平地起,基础最重要),而本文第二部分,则针对上述那6种方法模式结合对应的海量数据处理面试题分别具体阐述。

    02

    第一部分、从set/map谈到hashtable/hash_map/hash_set

    稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备。一般来说,STL容器分两种,

    序列式容器(vector/list/deque/stack/queue/heap),关联式容器。关联式容器又分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表),这些容器均以RB-tree完成。此外,还有第3类关联式容器,如hashtable(散列表),以及以hashtable为底层机制完成的hash_set(散列集合)/hash_map(散列映射表)/hash_multiset(散列多键集合)/hash_multimap(散列多键映射表)。也就是说,set/map/multiset/multimap都内含一个RB-tree,而hash_set/hash_map/hash_multiset/hash_multimap都内含一个hashtable。

    所谓关联式容器,类似关联式数据库,每笔数据或每个元素都有一个键值(key)和一个实值(value),即所谓的Key-Value(键-值对)。当元素被插入到关联式容器中时,容器内部结构(RB-tree/hashtable)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。

    包括在非关联式数据库中,比如,在MongoDB内,文档(document)是最基本的数据组织形式,每个文档也是以Key-Value(键-值对)的方式组织起来。一个文档可以有多个Key-Value组合,每个Value可以是不同的类型,比如String、Integer、List等等。

    { "name" : "July",

    "sex" : "male",

    "age" : 23 }

    set/map/multiset/multimap

    set,同map一样,所有元素都会根据元素的键值自动被排序,因为set/map两者的所有各种操作,都只是转而调用RB-tree的操作行为,不过,值得注意的是,两者都不允许两个元素有相同的键值。

    不同的是:set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值,而map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为键值,第二个元素被视为实值。

    至于multiset/multimap,他们的特性及用法和set/map完全相同,唯一的差别就在于它们允许键值重复,即所有的插入操作基于RB-tree的insert_equal()而非insert_unique()。

    hash_set/hash_map/hash_multiset/hash_multimap

    hash_set/hash_map,两者的一切操作都是基于hashtable之上。不同的是,hash_set同set一样,同时拥有实值和键值,且实质就是键值,键值就是实值,而hash_map同map一样,每一个元素同时拥有一个实值(value)和一个键值(key),所以其使用方式,和上面的map基本相同。但由于hash_set/hash_map都是基于hashtable之上,所以不具备自动排序功能。为什么?因为hashtable没有自动排序功能。

    至于hash_multiset/hash_multimap的特性与上面的multiset/multimap完全相同,唯一的差别就是它们hash_multiset/hash_multimap的底层实现机制是hashtable(而multiset/multimap,上面说了,底层实现机制是RB-tree),所以它们的元素都不会被自动排序,不过也都允许键值重复。

    所以,综上,说白了,什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基于hashtable之上,所以不含有自动排序功能,至于加个前缀multi_无非就是允许键值重复而已。如下图所示:

    此外,关于什么hash,请看blog内此篇文章;关于红黑树,请参看blog内系列文章,关于hash_map的具体应用:请看这里,关于hash_set:请看此文。

    OK,接下来,请看本文第二部分、处理海量数据问题之六把密匙。

    03

    第二部分、处理海量数据问题之六把密匙

    密匙一、分而治之/Hash映射 + Hash_map统计 + 堆/快速/归并排序

    1、海量日志数据,提取出某日访问百度次数最多的那个IP。

    既然是海量数据处理,那么可想而知,给我们的数据那就一定是海量的。针对这个数据的海量,我们如何着手呢?对的,无非就是分而治之/hash映射 + hash统计 + 堆/快速/归并排序,说白了,就是先映射,而后统计,最后排序:

    1、分而治之/hash映射:针对数据太大,内存受限,只能是:把大文件化成(取模映射)小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决

    2、hash_map统计:当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。

    3、堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。

    具体而论,则是: “首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如%1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map对那1000个文件中的所有IP进行频率统计,然后依次找出各个文件中频率最大的那个IP)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。”--十道海量数据处理面试题与十个方法大总结。

    关于本题,还有几个问题,如下:

    1、Hash取模是一种等价映射,不会存在同一个元素分散到不同小文件中的情况,即这里采用的是mod1000算法,那么相同的IP在hash取模后,只可能落在同一个文件中,不可能被分散的。因为如果两个IP相等,那么经过Hash(IP)之后的哈希值是相同的,将此哈希值取模(如模1000),必定仍然相等。

    2、那到底什么是hash映射呢?简单来说,就是为了便于计算机在有限的内存中处理big数据,从而通过一种映射散列的方式让数据均匀分布在对应的内存位置(如大数据通过取余的方式映射成小树存放在内存中,或大文件映射成多个小文件),而这个映射散列方式便是我们通常所说的hash函数,设计的好的hash函数能让数据均匀分布而减少冲突。尽管数据映射到了另外一些不同的位置,但数据还是原来的数据,只是代替和表示这些原始数据的形式发生了变化而已。

    OK,有兴趣的,还可以再了解下一致性hash算法,见blog内此文第五部分http://blog.csdn/v_july_v/article/details/6879101。

    2、寻找热门查询,300万个查询字符串中统计最热门的10个查询

    原题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

    解答:由上面第1题,我们知道,数据大则划为小的,如如一亿个Ip求Top 10,可先%1000将ip分到1000个小文件中去,并保证一种ip只出现在一个文件中,再对每个小文件中的ip进行hashmap计数统计并按数量排序,最后归并或者最小堆依次处理每个小文件的top10以得到最后的结。

    但如果数据规模比较小,能一次性装入内存呢?比如这第2题,虽然有一千万个Query,但是由于重复度比较高,因此事实上只有300万的Query,每个Query255Byte,因此我们可以考虑把他们都放进内存中去(300万个字符串假设没有重复,都是最大长度,那么最多占用内存3M*1K/4=0.75G。所以可以将所有字符串都存放在内存中进行处理),而现在只是需要一个合适的数据结构,在这里,HashTable绝对是我们优先的选择。

    所以我们放弃分而治之/hash映射的步骤,直接上hash统计,然后排序。So,针对此类典型的TOP K问题,采取的对策往往是:hashmap + 堆。如下所示:

    hash_map统计:先对这批海量数据预处理。具体方法是:维护一个Key为Query字串,Value为该Query出现次数的HashTable,即hash_map(Query,Value),每次读取一个Query,如果该字串不在Table中,那么加入该字串,并且将Value值设为1;如果该字串在Table中,那么将该字串的计数加一即可。最终我们在O(N)的时间复杂度内用Hash表完成了统计;

    堆排序:第二步、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。即借助堆结构,我们可以在log量级的时间内查找和调整/移动。因此,维护一个K(该题目中是10)大小的小根堆,然后遍历300万的Query,分别和根元素进行对比。所以,我们最终的时间复杂度是:O(N) + N' * O(logK),(N为1000万,N’为300万)。

    别忘了这篇文章中所述的堆排序思路:“维护k个元素的最小堆,即用容量为k的最小堆存储最先遍历到的k个数,并假设它们即是最大的k个数,建堆费时O(k),并调整堆(费时O(logk))后,有k1>k2>...kmin(kmin设为小顶堆中最小元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,若x>kmin,则更新堆(x入堆,用时logk),否则不更新堆。这样下来,总费时O(k*logk+(n-k)*logk)=O(n*logk)。此方法得益于在堆中,查找等各项操作时间复杂度均为logk。”--第三章续、Top K算法问题的实现。

    当然,你也可以采用trie树,关键字域存该查询串出现的次数,没有出现为0。最后用10个元素的最小推来对出现频率进行排序。

    3、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

    由上面那两个例题,分而治之 + hash统计 + 堆/快速排序这个套路,我们已经开始有了屡试不爽的感觉。下面,再拿几道再多多验证下。请看此第3题:又是文件很大,又是内存受限,咋办?还能怎么办呢?无非还是:

    1、分而治之/hash映射:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为x0,x1,...x4999)中。这样每个文件大概是200k左右。如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。

    2、hash_map统计:对每个小文件,采用trie树/hash_map等统计每个文件中出现的词以及相应的频率。

    3、堆/归并排序:取出出现频率最大的100个词(可以用含100个结点的最小堆)后,再把100个词及相应的频率存入文件,这样又得到了5000个文件。最后就是把这5000个文件进行归并(类似于归并排序)的过程了。

    4、海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。

    如果每个数据元素只出现一次,而且只出现在某一台机器中,那么可以采取以下步骤统计出现次数TOP10的数据元素:

    1、堆排序:在每台电脑上求出TOP10,可以采用包含10个元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆,比如求TOP10大,我们首先取前10个元素调整成最小堆,如果发现,然后扫描后面的数据,并与堆顶元素比较,如果比堆顶元素大,那么用该元素替换堆顶,然后再调整为最小堆。最后堆中的元素就是TOP10大)。

    2、求出每台电脑上的TOP10后,然后把这100台电脑上的TOP10组合起来,共1000个数据,再利用上面类似的方法求出TOP10就可以了。

    但如果同一个元素重复出现在不同的电脑中呢,如下例子所述:

    这个时候,你可以有两种方法:

    遍历一遍所有数据,重新hash取摸,如此使得...

  • ?

    大数据时代,海量数据应该如何解决存储问题?

    飘散

    展开

    489034603

    由于大数据的迅猛发展,数据正在呈指数级增长,各种传感器的剧增,高清晰度的图像和视频都是数据爆炸的原因。腾讯、淘宝掌握了大量的用户数据,力图描绘出用户的整体“画像”。面对大数据的汹涌来袭,传统的数据存储和数据库技术已经难以应对,那么,大数据技术如何存储海量数据并提高系统容错性?目前,较为主流的海量文件存储技术有Google的GFS和Hadoop的HDFS,HDFS是GFS的开源实现。它们均采用分布式存储的方式存储数据,用冗余存储的模式保证数据的可靠性。

    下面我们通过几个问题,来让大家更好的了解数据存储应该如何解决?

    1、大数据的处理流程包括了哪些环节?每个环节有哪些主要工具?

    数据采集: 半结构日志文件可使用flume; 结构化数据可以使用传统的E TL工具如,datastage、kettle 等等

    数据存储:hadoop hdfs存储海量数据;也可用传统的oracle、sysbase iq等数据仓库解决方案

    数据统计: 使用hive、impala对hadoop进行统计分析;

    数据挖掘:可使用mahout进行数据挖掘

    2、大数据的数据库相比于传统数据库有何变化?出现了哪些新的大数据的数据管理方式?

    量大、结构多样、速度要求高等特点; 出现了以hadoop为代表的分布式存储和nosql等数据存储管理方案

    3、大数据工程师应该都知道,现在处理大数据文件的存储,比较典型的有Google的Big Table和Hadoop的HBase,它们有哪些相似点和不同点?

    Hadoop的HBase是Google的Big 的开源实现,每个人都可以下载来使用,也可以根据自己需要进行修改和完善

    以上都为个人观点,谨供大家参考一下,如果感觉写的可以,即可给自己一个比较准确的定位,为以后的学习找准正确的方向。

    另外,如果小伙伴想学习大数据技术,可以加下图片下面的交流群,群里有很多学习视频都可以下载,而且每天大数据架构师马士兵老师都会在群里分享大数据的技术。。

  • ?

    大数据不仅仅是海量数据

    翠丝

    展开

    大数据如果仅仅是海量的结构性数据,那么解决的办法就比较单一,用户可以通过购买更多的存储设备,提高存储设备的效率等解决此类问题。然而,问题似乎没有那么简单。曾经听到过一个对于大数据所下的定义我觉得比较到位:“大数据其实是海量高维度数据的相关性分析”。什么意思呢,我们慢慢说。

    量的积累

    当类型复杂的数据汹涌袭来,那么对于用户IT系统的冲击会是另外一种处理方式。有调查发现,这些复杂数据中有85%的数据属于广泛存在于社交网络、物联网、电子商务等之中的非结构化数据。这些非结构化数据的产生往往伴随着社交网络、移动计算和传感器等新的渠道和技术的不断涌现和应用。

    如今大数据的概念也存在着很多的炒作和大量的不确定性。有人将很多TB的数据集也称作”大数据”。据市场研究公司IDC统计,数据使用预计将增长44倍,全球数据使用量将达到大约35.2ZB(1ZB=10亿TB)。但是单个数据集的文件尺寸也将增加,导致对更大处理能力的需求以便分析和理解这些数据集。

    对大企业而言,大数据的兴起部分是因为计算能力可用更低的成本获得,各类系统如今已能够执行多任务处理。其次,内存的成本也在直线下降,企业可以在内存中处理比以往更多的数据,另外是把计算机聚合成服务器集群越来越简单。IDC认为,这三大因素的结合便催生了大数据。同时,IDC还表示,某项技术要想成为大数据技术,首先必须是成本可承受的,其次是必须满足IBM所描述的三个”V”判据中的两个:多样性(variety)、体量(volume)和速度(velocity)。

    多样性是指,数据应包含结构化的和非结构化的数据;体量是指聚合在一起供分析的数据量必须是非常庞大的;速度则是指数据处理的速度必须很快。

    Garter表示,全球信息量正在以59%以上的年增长率增长,而量是在管理数据、业务方面的显著挑战,IT领袖必须侧重在信息量、种类和速度上。

    量:企业系统内部的数据量的增加是由交易量、其它传统数据类型和新的数据类型引发的。过多的量是一个存储的问题,但过多的数据也是一个大量分析的问题。

    种类:IT领袖在将大量的交易信息转化为决策上一直存在困扰:现在有更多类型的信息需要分析,主要来自社交媒体和移动(情景感知)。种类包括表格数据(数据库)、分层数据、文件、电子邮件、计量数据、视频、静态图像、音频、股票行情数据、金融交易和其它更多种类。

    速度:这涉及到数据流、结构化记录的创建,以及访问和交付的可用性。速度意味着正在被生成的数据有多快,数据必须被多快地处理以满足需求。

    综上所述,大数据的基础是多样的,包括结构和非结构的数据,而软硬件架构的进化使得这样规模的数据处理变成了可能。那么能力有了,怎么来很好的利用能力实现价值呢?

    质的变化

    虽然大数据是一个重大问题,Gartner分析师表示,真正的问题是让大数据更有意义,在大数据里面寻找模式帮助组织机构做出更好的商业决策。尽管”BigData”可以翻译成大数据或者海量数据,但大数据和海量数据是有区别的。在刚才提到的对于大数据的定义中,海量数据以及处理海量数据的能力目前已经满足,那么什么是高纬度数据的相关性分析呢?

    著名的奢侈品品牌Prada在其欧洲门店做过这样一个业务改进,他们在衣服的衣架上安装一个电磁芯片,并在试衣间中安装一套传感器装置,每当衣物被带进试衣间试穿就会被相应计数一次。这样一个简单的改进在于,它使得管理人员能够从数据中找到那些试穿多但是购买少的产品,之所以试穿多购买少说明这种产品一定是看上去不错,但是试穿后会发现一些设计上的瑕疵或者不合理的地方,那么设计人员就会有针对性的修改相关产品,这样做明显提高了门店的销售业绩。

    从上面的例子看出,prada的管理人员创造性的创立了一个新的描述产品属性的维度,这就属于维度的提升和创新,这样创新出的维度就是高维度,高维度可能是传统维度汇总后更高粒度的维度,有的可能是创造出来的描述事物的新角度。而把这些维度关联起来进行分析,将事物不同的维度作为因,将因和果关联起来分析,就能更好的了解事物属性。

    因此可见,硬件性能的提升,价格的下降,以及高扩展性软件架构的应用,使得企业高效的从更多角度,更高频度的收集并分析业务数据变成了可能。作为技术人员,在大数据时代,我们将应用更加高效的软硬件架构构建我们的平台,而要真正的发挥大数据的威力,从业务方面增强创新和创造能力、创新分析方法,提高分析多样性就显得更加至关重要。

  • ?

    遇到海量数据时如何处理?

    郦千凝

    展开

    本文将介绍一些处理海量数据问题的常见方法,也可以说是对海量数据的处理方法进行了一个简单的总结。

    (一)数据库索引

    适用范围:大数据量的增删改查

    基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理。

    (二)倒排索引(Inverted index)

    适用范围:搜索引擎,关键字查询

    基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。

    以英文为例,下面是要被索引的文本:

    T0 = “it is what it is”

    T1 = “what is it”

    T2 = “it is a banana”

    我们就能得到下面的反向文件索引:

    “a”:{2}

    “banana”:{2}

    “is”:{0,1,2}

    “it”:{0,1,2}

    “what”:{0,1}

    检索的条件”what”,”is”和”it”将对应集合的交集。

    正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序 频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档 指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。

    扩展:

    问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。

    (三)外排序

    适用范围:大数据的排序,去重

    基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树

    扩展:

    问题实例:

    1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。

    这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。

    (四)trie树

    适用范围:数据量大,重复多,但是数据种类小可以放入内存

    基本原理及要点:实现方式,节点孩子的表示方式

    扩展:压缩实现。

    问题实例:

    1).有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序。

    2).1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现?

    3).寻找热门查询:查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。

    (五)分布式处理 mapreduce

    适用范围:数据量大,但是数据种类小可以放入内存

    基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

    扩展:

    问题实例:

    1).The canonical example application of MapReduce is a process to count the appearances of

    each different word in a set of documents:

    2).海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。

    3).一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)?

    经典问题分析

    上千万or亿数据(有重复),统计其中出现次数最多的前N个数据,分两种情况:可一次读入内存,不可一次读入。

    可用思路:trie树+堆,数据库索引,划分子集分别统计,hash,分布式计算,近似统计,外排序

    所谓的是否能一次读入内存,实际上应该指去除重复后的数据量。如果去重后数据可以放入 内存,我们可以为数据建立字典,比如通过 map,hashmap,trie,然后直接进行统计即可。当然在更新每条数据的出现次数的时候,我们可以利用一个堆来维护出现次数最多的前N个数据,当 然这样导致维护次数增加,不如完全统计后在求前N大效率高。

    如果数据无法放入内存。一方面我们可以考虑上面的字典方法能否被改进以适应这种情形,可以做的改变就是将字典存放到硬盘上,而不是内存,这可以参考数据库的存储方法。

    当然还有更好的方法,就是可以采用分布式计算,基本上就是map-reduce过程, 首先可以根据数据值或者把数据hash(md5)后的值,将数据按照范围划分到不同的机子,

    最好可以让数据划分后可以一次读入内存,这样不同的机子负责处 理各种的数值范围,实际上就是map。得到结果后,各个机子只需拿出各自的出现次数最多的前N个数据,然后汇总,选出所有的数据中出现次数最多的前N个数据。

    虽然上述方法并不能完全覆盖所有的海量数据问题,但可以处理绝大多数遇到的问题。

海量数据怎么样

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP