精华内容
下载资源
问答
  • 前言我们在分析两组变量之间的相关性时,比如X=[X1,X2,...,Xm]X=[X_1,X_2,...,X_m]Y=[Y1,Y2,...,Yn]Y=[Y_1,Y_2,...,Y_n],最原始的方法就是直接计算XY的协方差矩阵,矩阵有m*n个值。有了协方差矩阵就得到了两两...

    前言

    我们在分析两组变量之间的相关性时,比如 X=[<

    展开全文
  • 近期总有朋友咨询各类云平台的性能相互关系,现整理出几个概念,希望对大家能有帮助: 理解云平台要从三个层次来理解,同时考虑其是开源还是闭源的: 1、IaaS(Infrastructure as a Service:基础设施即服务)...

    近期总有朋友咨询各类云平台的性能和相互关系,现整理出几个概念,希望对大家能有帮助:

    理解云平台要从三个层次来理解,同时考虑其是开源还是闭源的:
    1、IaaS(Infrastructure as a Service:基础设施即服务),代表企业有Amazon, Microsoft, VMWare, Rackspace和Red Hat。开源代表产品有:OpenStack、CloudStack、Eucalyptus。

    2、SaaS(Software as a service:软件即服务),代表应用有Cisco的WebEx,Salesforce的CRM、ADP、Workday和SuccessFactors。消费类服务是从网页如Netflix, MOG, Google Apps,Box.net, Dropbox或者苹果的iCloud那里进入。

    3、PaaS(Platform as a Service:平台即服务),闭源代表平台有Google App Engine,Microsoft Azure。开源代表产品有:Cloud Foundry和OpenShift。

    Hadoop是一个分布式系统基础架构,它开源的实现了Google App Engine (GAE)。

    Google云平台Google App Engine (GAE)包括:
    Google File System(GFS大型分布式文件系统)
    Google MapReduce(分布式数据处理)
    Google Bigtable(分布式结构化数据表)
    Google Chubby(分布式锁服务)
    Google Sawzall(海量数据处理语言,谷歌用这种语言来处理大量的单独的日志记录)

    Google的开源实现Hadoop
    Hadoop HDFS(Hadoop Distributed File System)
    Hadoop MapReduce
    Hadoop HBase
    Hadoop ZooKeeper
    Hadoop Pig

    IaaS:硬件的自动化管理,人与机器的解耦合,获得效率,牺牲性能
    PaaS:应用的自动化管理,应用与OS的解耦合,获得弹性,牺牲控制
    要了解云平台首先要确定其属于哪个层次。

    OpenStack,CloudStack、Google App Engine与Hadoop的关系:

    OpenStack、CloudStack和Hadoop分别属于云计算中的一部分,而不是全部。这两者做的事情完全不同,OpenStack做的比较基础一些。Hadoop完全可以和OpenStack结合,在其基础上来做事情。

    OpenStack仿照的Amazon的云,Hadoop仿照的是Google的云。

    OpenStack,CloudStack处于云计算中的同一层——IaaS层,他们只是使用不同的语言,不同的设计架构分别实现了IaaS层的功能。类似于Amazon EC2 和 S3 的云基础架构服务的架构。

    Hadoop实现了包括分布式文件系统HDFS和MapReduce框架在内的云计算软件平台的基础架构,并且在其上整合了包括数据库、云计算管理、数据仓储等一系列平台。Hadoop实现的功能实际上是PaaS层提供的服务。

    OpenStack注重的是虚拟化/虚拟机及其配套的服务,Hadoop注重的是海量的数据分析和处理。

    OpenStack是管理虚拟机的,比如xen,kvm等。它所谓的云就是一堆的虚拟机。Hadoop是负责分布式计算和分布式存储。就是把一个执行任务分开,放到不同的节点(物理机)去跑,最后汇总。


    OpenShift和CloudFoundry的关系:
    OpenShift和CloudFoundry都是PaaS,被称之为开源“云操作系统”。

    红帽在2011年5月推出了OpenShift,2012年4月其通过开源OpenShift Origin项目将OpenShift平台的代码提供给开源社区。OpenShift支持的开发语言和开发框架十分广泛,开发语言包括了Java, Ruby, Node.js, Python, PHP, Perl 等

    ,开发框架包括Spring、Seam、Weld、CDI、Rails、Rack、Symfony、Zend Framework、Twisted、Django和Java E等。同时,OpenShift还支持 MySQL, PostgreSQL, MongoDB 等数据库服务。

    红帽进入企业级PaaS领域时间较晚,但OpenShift的发展速度还是令人欣喜的。当然,由于其开源的特性,如果我们硬要和亚马逊、微软 等巨头的产品进行比较,可能实际意义并不是很大。OpenShift的主要竞争对手是Cloud Foundry。

    值得注意的是,作为PaaS平台,OpenShift是建立在亚马逊的基础设施之上,这也再次证明了亚马逊在公有云平台的巨大实力。

    Cloud Foundry也是诞生于2011年。从正式推出的时间上看,其比OpenShift要早,从而被VMware冠名为业界第一个开源PaaS云平台。Cloud Foundry支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行

    应用程序的部署和扩展,无需担心任何基础架构的问题。Cloud Foundry能够部署在私有云或公有云环境中,既可以运行在vSphere/vCloud架构之上,也可以运行在其他IaaS之上。例如,Cloud Foundry可以部署在AWS之上,还可以部署在Eucalyptus和OpenStack等开源平台技术之上。

    GFS:
    RadHat的GFS(Global File System)
    IBM的GPFS
    Sun的Lustre
    中国教育教育台的eGFS

    海量数据处理语言:
    Google的Sawzall
    Yahoo的Pig 猪
    微软的Dryad 

    云计算中的哲学智慧
    体现了天人合一的哲学中顺应客观规律的思想,暗合了“物质的能量越低越稳定”的自然规律。 
    Google:聚沙成塔,合并才是强大。谷歌模仿了银行吸收存款的“聚”,将资源聚集起来成为“强大云”,概括为“聚沙成塔”。
    Microsoft:撒豆成兵,分散才能疏通。微软模仿了电厂生产电力的“散”,将资源分散消费形成“大服务”,概括为“撒豆成兵”。

    展开全文
  • 大数据架构的典型方法方式

    万次阅读 2016-06-04 15:15:30
    NoSQL 技术为应用提供了缓存搜索特性,但既然是处理数据,就需要定义一种方法来处理各种数据流,以便能够给用户输出见解或数据服务。通过审视被IT组织使用广泛的数据架构来定义处理的拓扑结构。当考虑服务水平SLA...

    大量的IT组织如今都已自己的数据架构,因为都依赖于传统的数据架构。处理多数据源已不再新鲜;这些架构已经连接了多维度的数据源例如 CRM 系统,文件系统和其他商用系统。主要运行的关系型数据库有 Oracle, DB2和Microsoft SQL。

    如今,一般的数据分析周期是运行一些周期性脚本直接从数据库提取和处理数据。这些主要由 ETL工具如 Informatica 或者 Talend. 目标是将这些提炼的数据加载到数据仓库用于将来的分析。

    不幸的是,这一方法在周期结束后可能不适合商务的需要了。这些数据流水线可能需要几个小时,几天甚至几周才能完成,但是商务决策的需求可能已经变了。除了处理时间,还有一些数据的自然改变使这些架构难于处理,例如 数据结构重构变化导致数据模型的重构或者数据容量导致的伸缩性考虑。

    由于不是分布式系统,所以系统扩展比较困难。数据库需要高性能的CPU,RAM和存储方案,对于硬件的依赖使系统的扩展性部署非常昂贵。现在大多数IT组织已经切换到基于Hadoop的数据架构了。实际上,不仅是灵活性和技术成本,主要目标是一组商用主机分散处理负载,以及摄取海量的不同类型数据。
    Figure 3-1 给出了这一架构的拓扑图。

    F3-1 基于Hadoop的数据架构

    Figure 3-1. 基于Hadoop的数据架构

    下面看一下数据流水线的涵盖范围,包含了哪些技术,以及这种类型架构的通用实践。

    处理数据源

    如 Figure 3-1所示, 数据可以来自各种内部或者外部的源,但是大数据还可以特殊地来自内部应用和设备的日志,例如社交网络,开放数据,甚至传感器。以社交网络为例,IT组织感兴趣的信息数据会像洪水般流入,但是其中包含了大量无用的信息。

    因此,第一是存储数据,然后对提取的重要信息进行处理。这些数据对销售非常有用,尤其是当运行情感分析的时候,可以感知整个社交系统对产品或品牌的感受。

    依赖于提供商,数据可能是结构化的,半结构化,或者非结构化的。Listing 3-1 给出了一个半结构化消息的示例.

    Listing 3-1. Example of the Semistructured Data of a Tweet
    
    {
        "created_at": "Fri Sep 11 12:11:59 +0000 2015",
        "id": 642309610196598800,
        "id_str": "642309610196598785",
        "text": "After a period in silent mode, going back to tweet life",
        "source": "<a href="http://twitter.com/download/iphone" rel="nofollow">
        Twitter for iPhone</a>",
        "truncated": false,
        "in_reply_to_status_id": null,
        "in_reply_to_status_id_str": null,
        "in_reply_to_user_id": null,
        "in_reply_to_user_id_str": null,
        "in_reply_to_screen_name": null,
        "user": {
            "id": 19450096,
            "id_str": "19450096",
            "name": "Bahaaldine",
            "screen_name": "Bahaaldine",
            "location": "Paris",
            "description": "",
            "url": null,
            "entities": {
                    "description": {
                        "urls": []
                }
            },
            "protected": false,
            "followers_count": 59,
            "friends_count": 107,
            "listed_count": 8,
            "created_at": "Sat Jan 24 15:32:11 +0000 2009",
            "favourites_count": 66,
            "utc_offset": null,
            "time_zone": null,
            "geo_enabled": true,
            "verified": false,
            "statuses_count": 253,
            "lang": "en",
            "contributors_enabled": false,
            "is_translator": false,
            "is_translation_enabled": false,
            "profile_background_color": "C0DEED",
            "profile_background_image_url": "http://pbs.twimg.com/profile_background_
            images/454627542842896384/-n_C_Vzs.jpeg",
            "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_
            images/454627542842896384/-n_C_Vzs.jpeg",
            "profile_background_tile": false,
            "profile_image_url": "http://pbs.twimg.com/profile_images/448905079673094144/
            dz109X55_normal.jpeg",
            "profile_image_url_https": "https://pbs.twimg.com/profile_images/448905079673094144/
            dz109X55_normal.jpeg",
            "profile_banner_url": "https://pbs.twimg.com/profile_banners/19450096/1397226440",
            "profile_link_color": "0084B4",
            "profile_sidebar_border_color": "FFFFFF",
            "profile_sidebar_fill_color": "DDEEF6",
            "profile_text_color": "333333",
            "profile_use_background_image": true,
            "has_extended_profile": false,
            "default_profile": false,
            "default_profile_image": false,
            "following": false,
            "follow_request_sent": false,
            "notifications": false
        },
        "geo": null,
        "coordinates": null,
        "place": null,
        "contributors": null,
        "is_quote_status": false,
        "retweet_count": 0,
        "favorite_count": 0,
        "entities": {
            "hashtags": [],
            "symbols": [],
            "user_mentions": [],
            "urls": []
        },
        "favorited": false,
        "retweeted": false,
        "lang": "en"
    }

    从例子中可以看到,这个文档是一个JSON,有一组字段,其中字符串的元数据来描述tweet。但有些字段非常复杂;有点数组有时候是空的,有时候有包含了一个数据集合,也有纯文本来表示tweet的内容。这就需要思考如何存储这样的数据。把数据放到HDFS是不足够的;必须在技术的顶层建立一个元数据结构来支持数据结构的复杂性。这就是有时需要使用Hive的原因。

    当处理海量成分混杂数据的时候,社交网络是复杂性的代表。除了数据结构,还需要将数据分类成逻辑上的子集以便增强数据处理的效果。考虑以情绪分析的例子,从大数据集的非结构化数据中得到有价值信息的位置来组成数据。例如,通用的方法是对数据进行时间分片使数据处理更加聚焦,比方说一年数据中的某个特定周。

    也必须注意到要安全地访问数据,多数采用象 Kerberos 或其他的认证提供者。但是如果数据平台涉及到新的使用场景,首先要处理的是多租户技术的安全性。然后,周期性地创建数据镜像以便故障发生时从中提取。所有这些考虑都是标准的,而且可以幸运地由大量供应商提供。这些开箱即用的软件可以保证,或帮助你实现或者配置管理这些概念。

    处理数据

    当从源到目标的纯粹传输时,数据传输时由ETL工具处理。这些工具有 Talend, Pentaho, Informatica, 或者 IBM Datastage ,这是大数据项目中最常用的软件。但还是不够的,还需要一些补充的工具例如Sqoop 来简化数据导入或导出。在任何情况下,使用多种工具来摄取数据,通用的目标存储是 : HDFS. HDFS 是一个Hadoop 发布版的入口; 数据需要存储在这样的文件系统中,以便于高层应用和项目的处理。

    当HDFS存储在数据中的时候,然后如何访问和处理它们呢?
    作为一个例子可能是Hive,它在HDFS中创建了一种数据结构,可以方便地访问这些文件。这个结构自身象一个数据表。例如, Listing 3-2 展示了一个处理tweet的结构示例。

    Listing 3-2. Hive Tweet Structure

    create table tweets (
        created_at string,
        entities struct <
            hashtags: array ,
            text: string>>,
            media: array ,
            media_url: string,
            media_url_https: string,
            sizes: array >,
            url: string>>,
            urls: array ,
            url: string>>,
            user_mentions: array ,
            name: string,
            screen_name: string>>>,
        geo struct <
            coordinates: array ,
            type: string>,
        id bigint,
        id_str string,
        in_reply_to_screen_name string,
        in_reply_to_status_id bigint,
        in_reply_to_status_id_str string,
        in_reply_to_user_id int,
        in_reply_to_user_id_str string,
        retweeted_status struct <
            created_at: string,
            entities: struct <
            hashtags: array ,
            text: string>>,
            media: array ,
            media_url: string,
            media_url_https: string,
            sizes: array >,
            url: string>>,
            urls: array ,
            url: string>>,
            user_mentions: array ,
            name: string,
            screen_name: string>>>,
        geo: struct <
            coordinates: array ,
            type: string>,
        id: bigint,
        id_str: string,
        in_reply_to_screen_name: string,
        in_reply_to_status_id: bigint,
        in_reply_to_status_id_str: string,
        in_reply_to_user_id: int,
        in_reply_to_user_id_str: string,
        source: string,
        text: string,
        user: struct <
            id: int,
            id_str: string,
            name: string,
            profile_image_url_https: string,
            protected: boolean,
            screen_name: string,
            verified: boolean>>,
        source string,
        text string,
        user struct <
            id: int,
            id_str: binary,
            name: string,
            profile_image_url_https: string,
            protected: boolean,
            screen_name: string,
            verified: boolean>
    )
    PARTITIONED BY (datehour INT)
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION '/user/username/tweets';

    可以看到,tweets 是一个表中的结构,有一个子结构来描述非结构化文档数据源的复杂性。现在数据安全地存储在HDFS中了, 由Hive来结构化,准备作为处理和查询流水线的一部分。作为一个例子, Listing 3-3 展示了所选数据哈希标签的分布.

    Listing 3-3. Top Hashtags

    SELECT
    LOWER(hashtags.text),
    COUNT(*) AS hashtag_count
    FROM tweets
    LATERAL VIEW EXPLODE(entities.hashtags) t1 AS hashtags
    GROUP BY LOWER(hashtags.text)
    ORDER BY hashtag_count DESC
    LIMIT 15;

    因为提供了类SQL的查询语言,通过Hive查询数据非常方便。问题就是查询时延;基本上等同于一个 MapReduce job的时延. 实际上, Hive 查询被翻译成一个MapReduce job执行通用的处理流水线,这导致了长时处理。

    当需要实时数据传输时,这就成为了一个问题,例如实时观察最多哈希标签的时候。对例如新兴的技术如Spark来说,实时处理海量数据不再神秘。不但可以实时处理而且实现简单。例如, Listing 3-4 展示了如何在MapReduce 中实现一个单词计数功能。

    Listing 3-4. MapReduce 的Word Count (from www.dattamsha.com/2014/09/hadoop-mr-vs-spark-rdd-wordcount-program/)

    package org.apache.hadoop.examples;
    
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.input.FileSplit;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.util.GenericOptionsParser;
    
    public class WordCount {
    
        public static class TokenizerMapper extends
        Mapper<Object, Text, Text, IntWritable> {
    
            private final static IntWritable one = new IntWritable(1);
            private Text word = new Text();
    
            public void map(Object key, Text value, Context context)
            throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
            }
        }
    
        public static class IntSumReducer extends
        Reducer<Text, IntWritable, Text, IntWritable> {
    
            private IntWritable result = new IntWritable();
            public void reduce(Text key, Iterable<IntWritable> values,
            Context context) throws IOException, InterruptedException {
                int sum = 0;
                for (IntWritable val : values) {
                    sum += val.get();
                }
                result.set(sum);
                context.write(key, result);
            }
        }
    
        public static void main(String[] args) throws Exception {
            Configuration conf = new Configuration();
            String[] otherArgs = new GenericOptionsParser(conf, args)
            .getRemainingArgs();
    
            Job job = new Job(conf, "word count");
    
            job.setJarByClass(WordCount.class);
    
            job.setMapperClass(TokenizerMapper.class);
            job.setCombinerClass(IntSumReducer.class);
            job.setReducerClass(IntSumReducer.class);
    
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
    
            FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
            FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    
            System.exit(job.waitForCompletion(true) ? 0 : 1);
        }
    }
    

    Listing 3-5 展示了Spark是如何做的 (Python).

    Listing 3-5. Spark的Word Count

    from pyspark import SparkContext
    logFile = "hdfs://localhost:9000/user/bigdatavm/input"
    sc = SparkContext("spark://bigdata-vm:7077", "WordCount")
    textFile = sc.textFile(logFile)
    wordCounts = textFile.flatMap(lambda line:line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
    wordCounts.saveAsTextFile("hdfs://localhost:9000/user/bigdatavm/output")

    这就需要分割架构成多个部分来处理特定的需求,一个是批处理,另一个是流处理。

    架构分割

    当处理海量数据的时候,Hadoop 带来了大量的解决方案,但也为资源分配和管理存储数据带来了挑战,我们总是希望在保持最小时延的同时而消减成本。和其他架构类似,数据架构满足了SLA驱动的需求。因此, 每个job不应该均等地消耗每个资源,这就要求或者是可管理的,或者有一个优先级系统,或者有相互独立的架构,硬件,网络等等。

    下面,将讨论现代数据架构如何按照SLA需要来分割不同的使用水平。为了方便解释 , Figure 3-2.解释了重新分区。

    F3-2 现代数据架构

    Figure 3-2. Modern data architecture

    已经看到, 架构分成如下部分:

    • 长时处理部分

    • 短时处理部分

    • 视图融合部分

    看一下每个部分,并解释所影响的角色。

    批处理

    长时处理任务,或者批处理,是Hadoop的第一代实现,例如MapReduce, Hive, Pig, 等等. 这些jobs 趋向于处理海量数据,以及摄取数据或者聚合数据。使用HDFS作为数据的分布和调度,依赖所使用的发布版可以通过不同的工具来管控。

    一般的, 这些任务的目标是保持数据的聚合计算结果,以及分析结果。已经说过,批处理是大数据开始实现时的头等公民,因为这是处理数据的自然方式:提取或采集数据,然后调度任务。批处理在完成聚合计算时要花费大量的时间。这些任务主要满足商用系统的处理需要而不是处理数据流。 批处理非常容易管理和监控,这是由于是单次运行,而流式系统需要连续监控。现在通过 YARN, 也可以管理批处理的资源分配。这种方式,使IT组织可以依赖每个批处理的SLA来分割批处理架构。

    处理优先级

    当对待批处理的时候, IT组织希望对操作和处理进行总体控制,例如调度或优先处理某些任务。和大多数IT系统类似,一个数据平台同样开始于一个引导用例,而该用例可能影响到其他组织的其他部分,又要增加更多的用例到这个平台上。一个简单的转化就是数据平台变成了多租户数据平台,依赖不同的使用场景有着很多SLA。

    在Hadoop 2.0和基于Yarn的架构中,多租户技术提供特性是允许用户访问同样的数据平台但在不同集群有着不同的处理能力。YARN 也允许运行非MapReduce应用, 所以通过 ResourceManager和YARN 容量调度器,可以跨应用类型来提供任务的优先级。Hadoop 工作负载的分发由容量调度器完成。

    这种配置优雅地安排可预测的集群资源,给我们安全和充分利用集群。在任务队列可以设置任务的使用百分比。Figure 3-3 解释了这一概念。

    F3-3 YARN 任务队列

    Figure 3-3. YARN job 队列

    该示例解释了三种队列的不同优先级: 高,低 , 和默认. 这可以翻译成简单的 YARN 容量调度器配置,见 Listing 3-6.

    <property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>default,highPriority,lowPriority</value>
    </property>
    <property>
    <name>yarn.scheduler.capacity.root.highPriority.capacity</name>
    <value>60</value>
    </property>
    <property>
    <name>yarn.scheduler.capacity.root.lowPriority.capacity</name>
    <value>20</value>
    </property>
    <property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>10</value>
    </property>

    每个队列有一个最小的集群容量,而且是弹性的。这意味着如果有空闲资源,这个队列可以被最小化执行。当然,有可能是最大容量
    见Listing 3-7.

    Listing 3-7. 最大的Queue 容量

    <property>
    <name>yarn.scheduler.capacity.root.lowPriority.maximum-capacity</name>
    <value>50</value>
    </property>

    这一配置设置了容量, 所以一个人提交了一个(例如, 一个 MapReduce job),可以依赖所期望的需求提交到一个特殊队列,见 Listing 3-8.

    Listing 3-8. 提交一个 MapReduce Job

    Configuration priorityConf = new Configuration();
    priorityConf.set("mapreduce.job.queuename", queueName);

    通过 YARN 容量调度器, 批处理在资源管理上非常高效,在工业界有着大量的应用,例如给推荐引擎分配比非重要需求的数据处理更多的资源。但是谈到了推荐,大多数IT系统 现在是一短时处理任务,以及依赖于流架构。

    流处理

    短时处理,或者叫流式处理, 用于摄取高吞吐量数据. 流处理方案可以处理海量数据,而且是高分布,可伸缩,和容错的。这种架构解决了一系列的挑战。已经说过,一个主要目的是处理海量数据。尽管以前已经有各种流式技术,但现在是高可用,弹性和高性能的。高性能是应对数据容量,复杂性和大小的增长。

    如果数据容量增长了,这些架构能够无缝集成各种数据源和应用,例如数据仓库,文件,数据历史,社交网络,应用日志等等。这需要提供一致性的敏捷API,面向客户端的API,以及能够将信息输出到各种渠道,例如通知引擎,搜索引擎,和第三方应用。基本上,这样的技术有更多实时响应的约束。

    最后,从流式架构中,用户最想得到的就是实时分析,需求很清楚,组成如下:实时发现数据,更容易地查询数据,主动监控事件的阈值以通知用户和应用。
    流架构首先用在金融领域,这里有着高吞吐量交易的使用场景,但是已经扩展到大量其他的使用场景,主要是电子商务,电信,防伪监测,和分析。从而诞生了两个主要技术: Apache Spark 和Apache Storm.

    这里选择了Spark,有很好的社区支持,见Figure 3-4 .

    F3-4 Spark 和 Storm 的google 趋势

    Figure 3-4. Apache Spark 和 Apache Storm的Google 趋势

    有专门的章节来描述如何将不同的技术结合起来,包括Spark的实时流处理和搜索分析。

    Lambda 架构的概念

    前面谈到将数据架构分成三个部分: 批处理,流处理和服务架构. 尽管批处理还是现存IT组织中数据架构的通用实践,当还不能满足大多数流式数据的真正需求,如果需要的话,需要将数据存储在一个面向批处理的文件系统中。部署一个流式架构不像IT组织批处理架构那么简单,与之对应,流处理架构带来了更多的操作复杂性,架构必须要设计成吸收无用突发数据以维持较低的响应时间。

    当感到Hadoop 发布版部署麻烦的时候,开始的方法是简化流架构以便有相同的处理API等等。

    甚至如果SLA不能满足以及不希望以数秒或数分钟来获取数据,需要消减部署的繁琐性。在我看来,一个流式架构是现代数据架构的自然演进。它消减了软件的复杂性,就像第一代大数据架构消减了硬件那样。我们这一架构的选择可能不是通用的,但确实是广泛使用的,这一技术栈应该可以适应90%的使用场景。

    lambda 架构是两个世界中的最好品种。数据是暂态的,处理是实时的,可以重新计算和创建在批处理层的部分聚合数据,最后在服务层融化服务。为例实现这一范式,选择以下技术:

    • Logstash-数据摄取和转发
    • Apache Kafka分发数据
    • Logtash agent 处理日志
    • Apache Spark 流处理
    • Elasticsearch 作为服务层

    Figure 3-5介绍了这一架构.
    F3-5 lambda架构和服务层

    Figure 3-5. Lambda 架构的加速和服务层

    lambda 架构通常用于电子商务网站来实现推荐或者安全分析等不同的目的。例如点击流数据,可以从中提取多重有意义的见解。

    • 一方面,使用长时处理层,处理点击流,聚合数据,与其他数据源交叉使用来建立推荐引擎。这个例子中,利用 点击流数据与其他数据源包含的人口统计信息的相关性,在ElasticSearch中构建索引视图。

    • 另一方面, 同样的数据被用来点检测。实际上,大多数电子商务应用都会面对安全上的威胁,一种方式是通过流处理层分析用户的点击行为而实时地将IP地址放入黑名单。参见 Figure 3-5, 可以使用Spark 处理复杂的互相关性,或者运行机器学习进程在ElasticSearch 索引前来提取数据。

    展开全文
  • 五种典型的递推关系 1.Fibonacci数列 在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类...

    五种典型的递推关系

    1.Fibonacci数列

    所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类的题目因为解法相对容易一些,逐渐退出了竞赛的舞台。可是这不等于说Fibonacci数列没有研究价值,恰恰相反,一些此类的题目还是能给我们一定的启发的。
    Fibonacci数列的代表问题是由意大利著名数学家Fibonacci于1202年提出的“兔子繁殖问题”(又称“Fibonacci问题”)。
    问题的提出:有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
      :设满x个月共有兔子Fx对,其中当月新生的兔子数目为Nx对。第x-1个月留下的兔子数目设为Fx-1对。则:
    Fx=Nx+ Fx-1
       Nx=Fx-2 (即第x-2个月的所有兔子到第x个月都有繁殖能力)
       ∴ Fx=Fx-1+Fx-2 边界条件:F0=0,F1=1
    由上面的递推关系可依次得到:
       F2=F1+F0=1,F3=F2+F1=2,F4=F3+F2=3,F5=F4+F3=5,……。
    Fabonacci数列常出现在比较简单的组合计数问题中,例如以前的竞赛中出现的“骨牌覆盖”问题。在优选法中,Fibonacci数列的用处也得到了较好的体现。

    2.Hanoi塔问题

    问题的提出:Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图3-11所示。
    要求把a柱上n个圆盘按下述规则移到c柱上:
    这里写图片描述
      (1)一次只能移一个圆盘;
      (2)圆盘只能在三个柱上存放;
      (3)在移动过程中,不允许大盘压小盘。
      问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?
      
    :设hn为n个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a 柱上的盘子直接移动到c柱就可以了,故h1=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c 柱;最后,将b柱上的小盘子移到c柱上,共记3个盘次,故h2=3。以此类推,当a柱上有n(n2)个盘子时,总是先借助c柱把上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总共移动hn-1+1+hn-1个盘次。
       ∴hn=2hn-1+1 边界条件:h1=1

    3.平面分割问题

    问题的提出:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。
    :设an为n条封闭曲线把平面分割成的区域个数。 由图3-13可以看出:a2-a1=2;a3-a2=4;a4-a3=6。
    这里写图片描述
    这些式子中可以看出an-an-1=2(n-1)。当然,上面的式子只是我们通过观察4幅图后得出的结论,它的正确性尚不能保证。下面不妨让我们来试着证明一下。当平面上已有n-1条曲线将平面分割成an-1个区域后,第n-1条曲线每与曲线相交一次,就会增加一个区域,因为平面上已有了n-1条封闭曲线,且第n条曲线与已有的每一条闭曲线恰好相交于两点,且不会与任两条曲线交于同一点,故平面上一共增加2(n-1)个区域,加上已有的an-1个区域,一共有an-1+2(n-1)个区域。所以本题的递推关系是an=an-1+2(n-1),边界条件是a1=1。
    平面分割问题是竞赛中经常触及到的一类问题,由于其灵活多变,常常感到棘手,下面的例8是另一种平面分割问题,有兴趣的读者不妨自己先试着求一下其中的递推关系。

    4.Catalan数

    Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
    问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用hn表示,hn即为Catalan数。例如五边形有如下五种拆分方案(图3-14),故h5=5。求对于一个任意的凸n边形相应的hn。

    这里写图片描述

    这里写图片描述

    Catalan数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。

    第二类Stirling数

    五类典型的递推关系中,第二类Stirling是最不为大家所熟悉的。也正因为如此,我们有必要先解释一下什么是第二类Strling数。
    **【定义2】**n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用S(n,m)表示,称为第二类Stirling数。
    下面就让我们根据定义来推导带两个参数的递推关系——第二类Stirling数。
    :设有n个不同的球,分别用b1,b2,……bn表示。从中取出一个球bn,bn的放法有以下两种:
       ①bn独自占一个盒子;那么剩下的球只能放在m-1个盒子中,方案数为S2(n-1,m-1);
       ②bn与别的球共占一个盒子;那么可以事先将b1,b2,……bn-1这n-1个球放入m个盒子中,然后再将球bn可以放入其中一个盒子中,方案数为mS2(n-1,m)。
    综合以上两种情况,可以得出第二类Stirling数定理:
        【定理】S2(n,m)=mS2(n-1,m)+S2(n-1,m-1) (n>1,m1)
    边界条件可以由定义2推导出:
        S2(n,0)=0;S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n)
    第二类Stirling数在竞赛中较少出现,但在竞赛中也有一些题目与其类似,甚至更为复杂。读者不妨自己来试着建立其中的递推关系。

    小结:通过上面对五种典型的递推关系建立过程的探讨,可知对待递推类的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。


    一步一步算法篇

    展开全文
  • 深度残差网络(Deep Residual Network)是众多变种神经网络的一个代表,而且在某些领域确实效果不错,例如目标检测(Object Detection)。
  • 从2012年开始接触复杂网络系统,本科毕业设计读了汪小帆老师的《复杂网络理论及其应用》,对整体有了一定...代表性网络的研究内容 复杂网络的兴起始于1998年发表于Nature的 1998年康奈尔大学的WattsStrogatz发表
  • 线性linear,指量与量之间按比例、成直线的关系,在空间时间上代表规则光滑的运动,在数学上可以理解为一阶导数为常数的函数。 非线性non-linear则指不按比例、不成直线的关系代表不规则的运动突变,一阶...
  • NoSQL非关系型数据库概述

    千次阅读 多人点赞 2020-09-21 13:31:02
    Redis就是NOSQL 非关系型数据库的典型代表 关系型数据库关系型数据库的区别: 关系型数据库特点(Mysql Oracle SqlServer为代表的数据库) 数据是由一张张的表组成,而且这些表与表之间有关系(一对一,一对...
  • 数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系组织的。  1.数据结构模型  (1)数据结构  所谓数据结构是指数据的组织形式或数据之间的联系。...
  • 关系型数据库关系型数据

    千次阅读 2019-06-10 15:01:48
    关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今十大主流的关系型数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,...
  • 一、关系型数据库  关系型数据库,是指采用了关系模型来组织数据的数据库。  关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库...
  • 数据仓库、OLAP和 数据挖掘、统计分析的关系和区别分析 一、什么是数据挖掘  数据挖掘(Data Mining),又称为数据库中的知识发现(Knowledge Discovery in Database, KDD),就是从大量数据中获取有效的、新颖的、...
  • 浅析数据一致

    万次阅读 多人点赞 2016-02-19 15:27:38
    什么是数据一致?  在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 实践中,导致数据不一致的情况...
  • 一、关系型数据库 &nbsp;&nbsp;&nbsp; 关系型数据库,是指采用了关系模型来组织数据的数据库。 &nbsp;&nbsp;&nbsp; 关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几...
  • CPU和SOC的关系和区别

    千次阅读 2018-04-20 21:24:51
    目前SOC更多的集成处理器(包括CPU,GPU,DSP),存储器,基带,各种接口控制模块,各种互联总线等,其典型代表为手机芯片。2:什么是CPUCPU( 中央处理器/central processing unit )是一块超大规模的集成电路,是一台...
  • 聊聊Raft一致协议以及Apache Ratis

    千次阅读 2019-02-04 20:08:30
    但是在多机,多服务,不同网络环境下时,一致问题就是一个典型的问题了。在分布式系统中,当我们提到一致问题时,我们立马想到的是Paxos协议。而对此协议的一个开源的实现框架是目前被广泛使用的组件Zookeeper。...
  • 1 列举常见的关系型数据库关系型都有那些 关系型数据库: Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL 非关系型数据库: NoSql、Cloudant、MongoDb、redis、HBase 两种数据库之间的...
  • 1.典型相关分析:两组变量之间的相关问题 cancor() cancor(x, y, xcenter = TRUE, ycenter = TRUE) x,y为两组变量的数据矩阵;xcenterycenter是逻辑值,表示是否中心化,实际中一般采用默认值TRUE 注意...
  • 关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系 模型是...
  • CAP, BASE, 最终一致性和五分钟原则

    万次阅读 2017-02-16 16:30:34
    CAP,BASE最终一致是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储的理论依据。这个是一切的源头。 CAP     C: Consistency 一致A: Availability 可用(指的是快速获取数据)...
  • 关系数据库nosql

    千次阅读 2014-01-18 11:09:21
    http://www.infoq.com/cn/news/2011/01/relation-db-nosql-db ... NoSQL概念 随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来
  • 1. 关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库。 关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库...
  • 其中包括算法的简要描述、典型的输入、不同的细分类型以及其优点缺点。在第二第三篇中,我们将会详细介绍这些算法的区别,让你能够深入理解他们的工作原理。注:本文翻译自Building Recommende
  • JavaScriptJava之间有什么关系

    千次阅读 多人点赞 2020-07-04 21:04:54
    大概就是雷锋雷锋塔一样的关系
  • 设计模式 | 组合模式及典型应用

    千次阅读 多人点赞 2018-10-05 17:36:55
    源码分析组合模式的典型应用 java.awt中的组合模式 Java集合中的组合模式 Mybatis SqlNode中的组合模式 更多内容可访问我的个人博客:http://laijianfeng.org 推荐阅读 设计模式 | 简单工厂模式及典型应用 设计...
  •  一致是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义含义。在传统的IT时代,一致通常指强一致,强一致通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致的含义...
  • 典型相关分析原理(CCA)

    万次阅读 多人点赞 2020-01-21 12:29:17
    它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体...
  • 典型相关分析相关资料

    万次阅读 多人点赞 2012-05-20 17:29:14
    典型相关分析的基本思想 Canonical Correlation Analysis ...它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1V1(分别为两个变量组中各变量的线性组
  • 线性关系 与 非线性关系

    万次阅读 2017-08-14 06:13:42
    线性linear,指量与量之间按比例、成直线的关系,在空间时间上代表规则光滑的运动; 非线性non-linear则指不按比例、不成直线的关系代表不规则的运动突变。 线性:指量与量之间按比例、成直线的关系,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,309
精华内容 62,523
关键字:

典型性和代表性的关系