如何在Hadoop上建立数据仓库?

2020-04-13 10:56发布

2条回答
闫栢汌
2楼 · 2020-04-17 18:22

1、搭建好你的文件系统(hadoop中的hdfs)。2、搭建好权限管理系统(一般用kebs)。3、选择好数据分析工具(spark、hive),部署好。5、搭建好资源管理(yarn)。6、部署好数仓集群监控系统(普罗米修斯)。7、搭建好告警系统(邮件、短信、微信)

靓猴一枚
3楼 · 2021-12-03 16:37

方法1-归一化模型

标准化逻辑模型的物理实现让我们尝试用相同的物理实现来实现标准化形式。用这种方法创建了3个表

根据表上的customerID,Item ID对数据进行存储。桶装是一种基于分发密钥上的哈希来分发数据的技术。选择分发密钥至关重要,因为我们需要确保数据在数据节点之间均匀分布。您可以看到销售数据是根据销售日期划分的,这将有助于查询仅在特定日期或几天范围内访问数据的查询。例如,其中salesDate = '01 / 31/2016'。在加入时将数据存储在同一分发密钥上会有所帮助。在上述模型中,需要连接的大多数查询连接谓词将是ItemId或customerID。由于数据是基于这些字段分配的,因此可以确保在密钥上加入的数据将不需要在网络上进行混洗或移动。这将大大减少加入时间。在Hadoop上,与在reducer端进行连接相比,在map端进行reduce范例连接可以节省时间。Hive自动检测到存储桶,并应用此优化。在以上示例中,存储区大小的256是一个数字,必须根据数据量和可用节点来确定。正常的存储桶大小必须是几个hdfs块大小,并且可以容纳到内存中。不建议使用太多的小桶尺寸的桶。

优点

当数据是确定性的并且数据模型可以很好地满足需求时很有用

当使用的查询是静态且可预测时有用

从关系数据库轻松迁移

缺点

不能用于动态查询或其他分析目的

更改模型将需要更改ETL,并且需要重新加载数据

随着数据的增长和倾斜,性能将成为问题。如果存储桶的密钥不够好,则需要对数据进行恒定的重新分配。

当数据被规范化并以星型模式存储时,我们也必须考虑对事务维护ACID。从技术上讲,我们应该能够插入,更新或删除数据。如您所知,在HDFS中进行数据修改并不容易。但是可以使用其他技术来解决此问题

用last_updated_ts附加数据,而不是更新记录

将历史数据和最新数据保存在两组文件中。

使用Hive使用如何使用Hive进行CRUD更新数据- 在Hive上运行更新和删除

在历史数据的顶部创建一个视图,以仅提取最新数据,而不使用上述技术来实现

方法2-归一化数据

第二种方法讨论在添加查询中所需的所有可能属性后对数据进行展平。可以将其与带有列族的平面Hbase表进行比较。在这种方法中,我们只有一张表可以满足我们的所有需求。归一化数据的优点是代码可以读取更大的数据块,而不是从多个小块中读取相同的数据。

数据被分区以进行搜索/选择以进行部分访问。此类分区的逻辑列将是时间戳记或日期。选择分区时,唯一需要考虑的是文件大小。文件的分区信息存储在名称节点中。小文件上的分区过多将在名称节点上繁重。从每个分区读取小文件将不会很好地利用读取器操作以及内存。如果文件很少,HDFS块大小分区将很好地工作。如果文件太小,可以将其合并在一起以具有合理的分区。例如,每日文件只有几千字节。可以根据数据量将许多此类文件放在一个月分区或每周分区中。

优点

更快的查询执行

适用于开箱即用的分析

缺点

数据冗余-您可以看到客户和物料数据在销售信息中重复出现。在Hadoop上,存储不是主要的考虑因素,如果您决定避免冗余,那么就要在空间和性能之间进行权衡。

这不是一个必须不断更新数据的好用例。

何时选择对方法1(标准化数据/星型模式)进行De Normalization?

如果联接的表很小,并且联接时一对一匹配。

当列宽(列数)较小时。如果表很宽,则会占用更多空间,并且块读取大小会变大

数据更新不多时。如果您每次必须返回并更新一些随机字段,则反规范化技术将不起作用。例如,对于age,如果age字段是交易的一部分,我们知道每年必须对其进行修改。

在非规范化数据上实现相同的逻辑模型

该组织的大多数人都使用haddop来补充现有的完善的EDW。这些模型与该平台无关,但是正如我们所看到的,与RDBMS相比,Hadoop需要一种不同的物理实现。不管相同的逻辑模型如何,都可以通过多种方式实现。

拆分为尺寸/子表

上面的非规范化销售数据可以分为维度和事实,我们已经讨论过了。

在Sales_Fact_Flat表的顶部构建非实现视图,可以使用视图重新创建客户信息 创建视图Customer_Info作为选择不同customerId BIGINT,CustomerName STRING,Email STRING,从Sales_Fact_Flat向STRING打电话同样,可以重新创建其他视图。视图的不利之处在于,每次在查询中使用视图时,地图都会减少在后台运行以实现结果。

代替视图,使用CTAS将数据具体化为表(创建表作为选择)创建表Customer_Info作为选择不同 customerId BIGINT,CustomerName STRING,Email STRING,从Sales_Fact_Flat向STRING打电话这些方法的优点是,这些视图/表可以用作其他分析的独立实体。

总而言之,讨论了在Hadoop平台上实现数据仓库的各种可行选择。我们还将讨论基于访问模式,优化和存储技术的各种文件和文件夹创建选项。


相关问题推荐

  • 回答 10

    创建test文件夹hadoop fs -mkdir /test

  • 回答 7

    Hadoop的三大核心组件分别是:1、HDFS(Hadoop Distribute File System):hadoop的数据存储工具。2、YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。3、Hadoop MapReduce:分布式计算框架。HDFS是一个高度容错性的系统,适合部...

  • 回答 18

    hbase依靠HDFS来存储底层数据。Hadoop分布式文件系统(HDFS)为HBase提供了高可靠性的底层存储支持,HBase中的所有数据文件都存储在Hadoop HDFS文件系统上。

  • 回答 24

    HBase分布式数据库具有如下的显著特点:容量大:HBase分布式数据库中的表可以存储成千上万的行和列组成的数据。面向列:HBase是面向列的存储和权限控制,并支持独立检索。列存储,其数据在表中是按照某列存储的,根据数据动态的增加列,并且可以单独对列进行...

  • 回答 19

    解决问题的层面不一样首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务...

  • 回答 14

    1、HBase写快读慢,HBase的读取时长通常是几毫秒,而Redis的读取时长通常是几十微秒。性能相差非常大。2、HBase和Redis都支持KV类型。但是Redis支持List、Set等更丰富的类型。3、Redis支持的数据量通常受内存限制,而HBase没有这个限制,可以存储远超内存大小...

  • 回答 15

    列式存储格式是指以列为单位存储数据的数据存储格式,相比于传统的行式存储格式,它具有压缩比高、读I/O少(此处指可避免无意义的读I/O)等优点,目前被广泛应用于各种存储引擎中。对于HBase而言,它并不是一个列式存储引擎,而是列簇式存储引擎,即同一列簇中...

  • 回答 14

    一、简单理解Hadoop是一个大象:一个hadoop集群主要包含三个主要的模块:Mapreduce,hdfs,yarn。mapreduce是一个分离在合并的计算框架,注意他不是一个集群,而是一个编程框架。hdfs是一个分布式文件系统,是一个分布式集群,用于存放数据。yarn集群是负责集群...

  • 回答 12

    01 网络公开数据集02 数据报采集03 网络爬虫04 日志收集05 社会调查06 业务数据集07 埋点采集08 传感器采集09 数据交易平台10 个人数据收集

  • 回答 9

    1 Hadoop 各个目录的解释bin:Hadoop管理脚本和使用脚本所在目录, sbin目录下的脚本都是使用此目录下的脚本实现的。etc:Hadoop的所有配置文件所在的目录,所有hadoop的配置在etc/hadoop目录下include:对外提供的库的头文件lib :对外提供的动态编程库和静态...

  • 回答 4

    HDFS存储机制,包括HDFS的写入过程和读取过程两个部分: 1、写入过程:  1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。2)namenode返回是否可以上传。3)客户端请求第一个 block上传到哪几个datanode服务器上。4)nam...

  • Shuffle 发生在哪里?2021-04-28 20:11
    回答 4

    adoop核心:MapReduce原理。 MR的核心是shuffle,被称为奇迹发生的地方。 shuffle,弄乱,洗牌的意思。partition 分区,sort 排序,spill溢出,disk 磁盘下面是官方对shuffle的配图: phase 阶段,fetch 最终,merge 合并...

  • 回答 2

    Shuffle阶段分为两部分:Map端和Reduce端。一 map端shuffle过程;1-内存预排序:默认每个map有100M内存进行预排序(为了效率),超过阈值,会把内容写到磁盘;    此过程使用快速排序算法;2-根据key和reducer的数量进行分区和排序;首先根据数据所属的Parti...

  • 回答 3

    大数据时代需要1存储大量数据2快速的处理大量数据3从大量数据中进行分析 

  • Hadoop有哪几种模式?2021-04-27 20:20
    回答 3

    hadoop的四种模式。1、本地模式:本地模式就是解压源码包,不需要做任何的配置。通常用于开发调试,或者感受hadoop。2、伪分布模式:在学习当中一般都是使用这种模式,伪分布模式就是在一台机器的多个进程运行多个模块。虽然每一个模块都有相应的进程,但是却...

  • 回答 1

    进入和退出安全模式 [root@localhost bin]# ./hdfs dfsadmin -safemode enter15/08/03 07:26:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where ......

没有解决我的问题,去提问