您的位置 主页 正文

怎样设计hbase储存程序架构?

一、怎样设计hbase储存程序架构? 1. HBase是schema free的,加字段完全没问题2. 用ES存日志数据,成本会很高3. 偏分析还是偏存储?还是两者结合?应用场景是什么?4. 推荐的架构:ES给日志

一、怎样设计hbase储存程序架构?

1. HBase是schema free的,加字段完全没问题2. 用ES存日志数据,成本会很高3. 偏分析还是偏存储?还是两者结合?应用场景是什么?4. 推荐的架构:ES给日志建索引(看业务是否需要),日志原始内容存HBase。

二、架构设计-架构设计原则?

八大原则:1、管理明确原则。即避免多头指挥和无人负责现象;2、职责权对等原则。3、有效管理幅度原则。即管理人员的直接下级人数应在一定范围内。4、灵活性原则。即能够对外部环境变化作出适应的调整和变化。5、客户导向原则。应保证组织运行有利于为客户创造价值。6、执行和监督分设原则。7、专业分工和协作的原则。即兼顾专业效率和组织目标统一性。8、精干、高效原则。在保证任务完成的前提下,做到机构精干、人员精简。

三、怎样的架构设计才是真正的数据仓库架构?

一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:

整合公司所有业务数据,建立统一的数据中心;

提供各种报表,有给高层的,有给各个业务的;

为网站运营提供运营上的数据支持,就是通过数据,让运营及时了解网站和产品的运营效果;

为各个业务提供线上或线下的数据支持,成为公司统一的数据交换与提供平台;

分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;比如广告定向精准投放、用户个性化推荐等;

开发数据产品,直接或间接为公司盈利;

建设开放数据平台,开放公司数据;

。。。。。。

上面列出的内容看上去和传统行业数据仓库用途差不多,并且都要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,除了数据量大之外,越来越多的业务要求时效性,甚至很多是要求实时的 ,另外,互联网行业的业务变化非常快,不可能像传统行业一样,可以使用自顶向下的方法建立数据仓库,一劳永逸,它要求新的业务很快能融入数据仓库中来,老的下线的业务,能很方便的从现有的数据仓库中下线;

其实,互联网行业的数据仓库就是所谓的敏捷数据仓库,不但要求能快速的响应数据,也要求能快速的响应业务;

建设敏捷数据仓库,除了对架构技术上的要求之外,还有一个很重要的方面,就是数据建模,如果一上来就想着建立一套能兼容所有数据和业务的数据模型,那就又回到传统数据仓库的建设上了,很难满足对业务变化的快速响应。应对这种情况,一般是先将核心的持久化的业务进行深度建模(比如:基于网站日志建立的网站统计分析模型和用户浏览轨迹模型;基于公司核心用户数据建立的用户模型),其它的业务一般都采用维度+宽表的方式来建立数据模型。这块是后话。

整体架构下面的图是我们目前使用的数据平台架构图,其实大多公司应该都差不多:

逻辑上,一般都有数据采集层、数据存储与分析层、数据共享层、数据应用层。可能叫法有所不同,本质上的角色都大同小异。

我们从下往上看:

数据采集数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些简单的清洗。

数据源的种类比较多:

网站日志:

作为互联网行业,网站日志占的份额最大,网站日志存储在多台网站日志服务器上,

一般是在每台网站日志服务器上部署flume agent,实时的收集网站日志并存储到HDFS上;

业务数据库:

业务数据库的种类也是多种多样,有Mysql、Oracle、SqlServer等,这时候,我们迫切的需要一种能从各种数据库中将数据同步到HDFS上的工具,Sqoop是一种,但是Sqoop太过繁重,而且不管数据量大小,都需要启动MapReduce来执行,而且需要Hadoop集群的每台机器都能访问业务数据库;应对此场景,淘宝开源的DataX,是一个很好的解决方案(可参考文章 《异构数据源海量数据交换工具-Taobao DataX 下载和使用》),有资源的话,可以基于DataX之上做二次开发,就能非常好的解决,我们目前使用的DataHub也是。

当然,Flume通过配置与开发,也可以实时的从数据库中同步数据到HDFS

来自于Ftp/Http的数据源:

有可能一些合作伙伴提供的数据,需要通过Ftp/Http等定时获取,DataX也可以满足该需求;

其他数据源:

比如一些手工录入的数据,只需要提供一个接口或小程序,即可完成

数据存储与分析毋庸置疑,HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。

离线数据分析与计算,也就是对实时性要求不高的部分,在我看来,Hive还是首当其冲的选择,丰富的数据类型、内置函数;压缩比非常高的ORC文件存储格式;非常方便的SQL支持,使得Hive在基于结构化数据上的统计分析远远比MapReduce要高效的多,一句SQL可以完成的需求,开发MR可能需要上百行代码;

当然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算;Spark是这两年非常火的,经过实践,它的性能的确比MapReduce要好很多,而且和Hive、Yarn结合的越来越好,因此,必须支持使用Spark和SparkSQL来做分析和计算。因为已经有Hadoop Yarn,使用Spark其实是非常容易的,不用单独部署Spark集群,关于Spark On Yarn的相关文章,可参考:《Spark On Yarn系列文章》

实时计算部分,后面单独说。

数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库;

前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据; 和数据采集层到HDFS刚好相反,这里需要一个从HDFS将数据同步至其他目标数据源的工具,同样,DataX也可以满足。

另外,一些实时计算的结果数据可能由实时计算模块直接写入数据共享。

数据应用

业务产品

业务产品所使用的数据,已经存在于数据共享层,他们直接从数据共享层访问即可;

报表

同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层;

即席查询

即席查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、甚至是部门老大,他们都有即席查询数据的需求;

这种即席查询通常是现有的报表和数据共享层的数据并不能满足他们的需求,需要从数据存储层直接查询。

即席查询一般是通过SQL完成,最大的难度在于响应速度上,使用Hive有点慢,目前我的解决方案是SparkSQL,它的响应速度较Hive快很多,而且能很好的与Hive兼容。

当然,你也可以使用Impala,如果不在乎平台中再多一个框架的话。

OLAP

目前,很多的OLAP工具不能很好的支持从HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行;

这时候,需要做相应的开发,从HDFS或者HBase中获取数据,完成OLAP的功能;

比如:根据用户在界面上选择的不定的维度和指标,通过开发接口,从HBase中获取数据来展示。

其它数据接口

这种接口有通用的,有定制的。比如:一个从Redis中获取用户属性的接口是通用的,所有的业务都可以调用这个接口来获取用户属性。

实时计算现在业务对数据仓库实时性的需求越来越多,比如:实时的了解网站的整体流量;实时的获取一个广告的曝光和点击;在海量数据下,依靠传统数据库和传统实现方法基本完成不了,需要的是一种分布式的、高吞吐量的、延时低的、高可靠的实时计算框架;Storm在这块是比较成熟了,但我选择Spark Streaming,原因很简单,不想多引入一个框架到平台中,另外,Spark Streaming比Storm延时性高那么一点点,那对于我们的需要可以忽略。

我们目前使用Spark Streaming实现了实时的网站流量统计、实时的广告效果统计两块功能。

做法也很简单,由Flume在前端日志服务器上收集网站日志和广告日志,实时的发送给Spark Streaming,由Spark Streaming完成统计,将数据存储至Redis,业务通过访问Redis实时获取。

任务调度与监控在数据仓库/数据平台中,有各种各样非常多的程序和任务,比如:数据采集任务、数据同步任务、数据分析任务等;

这些任务除了定时调度,还存在非常复杂的任务依赖关系,比如:数据分析任务必须等相应的数据采集任务完成后才能开始;数据同步任务需要等数据分析任务完成后才能开始; 这就需要一个非常完善的任务调度与监控系统,它作为数据仓库/数据平台的中枢,负责调度和监控所有任务的分配与运行。

前面有写过文章,《大数据平台中的任务调度与监控》,这里不再累赘。

总结在我看来架构并不是技术越多越新越好,而是在可以满足需求的情况下,越简单越稳定越好。目前在我们的数据平台中,开发更多的是关注业务,而不是技术,他们把业务和需求搞清楚了,基本上只需要做简单的SQL开发,然后配置到调度系统就可以了,如果任务异常,会收到告警。这样,可以使更多的资源专注于业务之上。

四、程序架构原则?

1.单一职责原则

对于一个类而言,应该只有一个引起他变化的原因,说白了就是不同的类有不同的责任,各施其责,就像一个团队一样,分工合作每个人负责每个人的事情

在我们做系统设计的时候,如果发现一个类有两种职责,那就问自己,可以分成两个类吗,如果可以,那就分吧,不要嫌麻烦,如果以前项目大了,两个责任互相影响,就会更加的难以维护

2.开放封闭原则

说白了就是对扩展开放,对修改关闭

当有需求改变的时候,就尽量的不去修改原来的代码而去在原来的代码上进行继承扩展,而不是直接的去修改这个类的代码,当然如果对整体系统的架构不影响的情况下,那修改就去修改吧

在你的系统进行升级和更新的时候,你如果改了原来的代码的前提下,有人还在用你以前的项目,而没有去更新,那你改动之后,别的用户就会出问题,

3.里氏替换原则

在你继承一个类的时候,务必重写父类的所有方法

4.最少知识原则

只与你最直接的朋友交流

尽量的减少对象之间的交互,从而减少类的耦合度,就是:高内聚,低耦合的意思

简单点说就是不要让一个类依赖于过多的类,尽量减少类之间的关系,否则你死都不知道怎么死的

5.接口隔离原则

不要对外暴露没有实际意义的接口。也就是说接口是给别人用的,不要去为难别人,尽量保证接口的实用性,对谁都好

就是你对外暴露接口的时候,想一想这个接口有没有必要对外暴露,如果是没有用的接口,那就删了吧,一旦提供了,就意味着你以后还要多做一件事,何必没事找事呢

6.依赖倒置原则

应该是面向接口编程,而不是面向类编程,想当于就事论事,那是正向依赖(正常人思维);

面向接口编程,相当于通过事物的表象来看本质,那是反向依赖,即依赖倒置(程序员思维)

五、大数据 架构设计

大数据架构设计的重要性

随着大数据技术的不断发展,架构设计成为了大数据领域中至关重要的一环。在大数据时代,数据量呈爆炸式增长,如何有效地存储、处理和分析这些数据成为了亟待解决的问题。而架构设计则是解决这些问题的基础和关键。

在大数据架构设计中,需要考虑到数据的规模、类型、访问模式、处理需求等多个因素。通过对这些因素的综合分析,可以设计出高效、稳定、可扩展的架构。同时,架构设计还需要考虑到数据的安全性、隐私保护、容灾等方面的问题,以确保数据的安全和可靠性。

另外,大数据架构的设计也需要考虑应用场景的不同。不同行业、不同规模的企业,以及不同类型的应用程序,对于大数据的需求和应用方式也是不同的。因此,在架构设计中需要充分考虑这些差异,以便更好地满足实际需求。

总的来说,大数据架构设计是大数据技术体系的核心组成部分,是实现大数据价值的关键所在。一个优秀的架构设计不仅可以提高数据处理效率,降低成本,还可以提高系统的稳定性和可扩展性,为企业的数字化转型提供强有力的支持。

大数据架构设计的挑战与机遇

虽然大数据架构设计的重要性不言而喻,但也面临着诸多挑战和机遇。

首先,随着数据量的不断增加,对存储和处理能力的需求也在不断提高。如何选择合适的技术和工具,如何构建高效的大数据平台,成为了大数据架构设计面临的难题。

其次,数据类型的多样性和复杂性也对架构设计提出了更高的要求。不同类型的数据需要采用不同的处理方式,如何根据数据的特点进行分类和优化,成为了架构设计的重要任务。

此外,数据的安全性和隐私保护也是一大挑战。如何在保证数据安全的同时,实现数据的共享和交换,成为了大数据架构设计需要解决的重要问题。

然而,这些挑战也带来了新的机遇。随着大数据技术的不断发展和完善,越来越多的企业和组织开始重视大数据的应用和发展。这为大数据架构设计提供了更多的机会和空间。

总之,大数据架构设计是一项复杂而又重要的任务。只有通过不断的研究和实践,才能更好地应对挑战,抓住机遇,实现大数据的价值。

六、数据结构与程序设计的关系大么?

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关。所以数据结构与程序设计的关系是很大的,学好数据结构,可以使你编写的程序运行效率更高,占用内存更少。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。  在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。  选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

七、大屏数据可视化系统架构?

大屏数据可视化系统是一种基于数据分析和可视化技术的监控、分析和管理工具。其架构主要包括以下几个部分:

1. 数据采集层:负责从各个数据源采集数据,并将采集的数据进行清洗、处理、转换和存储。常见的数据源包括数据库、API接口、文件、第三方服务等。

2. 数据处理层:负责将采集的数据进行加工处理、计算和分析,并将分析结果存储到数据存储层中。数据处理层通常也包括数据预处理、数据挖掘、数据建模等功能模块。

3. 数据存储层:负责存储采集的数据和处理后的结果。数据存储层可以采用关系型数据库、非关系型数据库、数据仓库等技术。

4. 可视化展示层:负责将处理后的数据通过可视化手段展示出来,供用户进行数据分析和决策。可视化展示层包括大屏幕展示、Web界面、移动端应用等。

5. 用户管理和数据权限控制:负责对用户进行权限管理,确保用户只能看到其有权限查看的数据。用户管理和数据权限控制可以基于角色、用户、数据分类等进行授权管理。

针对大屏数据可视化系统,一般采用分布式架构可以加强系统的可扩展性和性能。同时,为了保证系统的稳定性,还需要考虑高可用性和容灾备份。

八、程序架构是什么?

程序设计中的架构是指是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。

在软件架构所描述的对象就是直接的进行系统抽象组件构成。连接系统的各个组件之间就是做到把组件之间所存在的通讯比较明确与相对细致的实施描述。

处于相应的系统实现环节,那么就会使得细化这些抽象组件成为现实的组件,比如可以是具体的某个类或者是对象。从面向对象领域进行分析,那么各个组件之前实施的连接实现往往是接口。

九、小程序信息架构?

微信小程序是一个典型的 hybrid 架构,简单来说 Hybrid App(混合模式移动应用)就是原生 APP 和 HTML5 混合开发。

十、架构设计原理?

结构设计的基本原理主要是钢筋混凝土结构中的力学性能及受弯构件、受压构件的强度计算、裂缝和变形的计算(包括容许应力法和极限状态法)、预应力混凝土结构构件的计算,混凝土与石结构、少筋混凝土结构的有关计算。 结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。

它把系统作为一系列数据流的转换,输入数据被转换为期望的输出值,通过模块化来完成自顶而下实现的文档化,并作为一种评价标准在软件设计中起指导性作用,通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。 结构化设计所使用的工具有结构图和伪代码。结构图是一种通过使用矩形框和连接线来表示系统中的不同模块以及其活动和子活动的工具。

SD方法尤其适用于变换型结构和事务型结构的目标系统。结构化设计是数据模型和过程模型的结合。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。结构化设计的步骤如下:

①评审和细化数据流图;

②确定数据流图的类型;

③把数据流图映射到软件模块结构,设计出模块结构的上层;

④基于数据流图逐步分解高层模块,设计中下层模块;

⑤对模块结构进行优化,得到更为合理的软件结构;

⑥描述模块接口。

为您推荐

返回顶部