• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > Understanding Cubert Concepts 之 BLOCK(一),cubertconcepts

Understanding Cubert Concepts 之 BLOCK(一),cubertconcepts

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含cubert,cubert uhd185,cubert gmbh,德国cubert,concepts等服务器相关知识,网友希望可以进行参考

Understanding Cubert Concepts 之 BLOCK(一),cubertconcepts


Understanding Cubert Concepts:

Cubert Concepts

对于Cubert,我们要理解其核心的一些概念,比如BLOCK。这些概念也是区别于传统的关系型范式(Pig,Hive)等数据处理流程并使得Cubert在大规模数据下JOIN和Aggregation中取胜的关键因素。(自己测下来,CUBE的计算效率比Hive高好多倍。)

BLOCK

Cubert定义了一个BLOCK的概念,分为两种:Partitioned Blocks & Co-ParitionedBlocks

Hubert将这些Block存储为特殊的格式,叫做Rubix Format

Partitioned Blocks

从字面上来看,叫做分区块。
比如说有一个pageviews表,有三个列,分别为:memberId(int),pagekey(string),timestamp(long)
通常在HDFS中,这些数据会被切分为一个个的文件(part-00000.avro, part-00001.avro, etc),然后置于某一个目录下,这些数据默认是没有被分区和排序的。

然而,在Cubert的世界里,我们鼓励数据能被更加结构化的存储。

更确切的来说,我们希望数据能够根据一些分区键来进行分区成一些数据单元,这些数据单元就是Cubert中的Partitioned Blocks, 而且我们希望在每个Block中的数据能够在某些列上是有序的。

PS:这里面涉及到2个概念:PartitionKeys 和 SortKeys,对应于上述的分区键和排序键。

BLOCKGEN

将Raw data转化为partitioned和sorted的data units的过程称为BLOCKGEN。这个是Cubert语法里一个非常重要的操作符。

image

这张图告诉我们:
1. 我们有一个table,2列,JK和GK
2. BLOCKGEN的过程就是选择一个partitionKey为JK,根据这个分区键来对数据块分区。然后对分区后的数据块内部选择GK作为排序键,来对分区后的数据块排序。
3. 这样原始数据划分称为了2个partitionedBlocks即BLOCK#1,BLOCK#2

BLOCKGEN Checklist

作为一个Cubert的开发者,我们需要遵从4个规范:

1.定义PartitionKeys

从这个数据集的列中选择要根据哪几个列进行分区。
举个来说:
对于pageviews这个表:
如果指定分区键为memberId,那么我们可以确定的是,所有memberId=1234的数据Row都会被分区到一个partitionedBlock中去.

2.定义SortKeys(可选)

从这个数据集的列中选择要根据哪几个列进行排序,如果不指定,默认和分区键相同。
Note:这个排序操作不是全局排序,只是在每个已经分区好的block内部进行局部排序。
举个来说:
还是pageviews这个表:
我们分区后的数据,可以根据timestamp这个时间字段,在对block内部的rows进行排序。

3.定义代价函数CostFunction

前面一直提到分区,具体如何来划分block呢?这时候cost function起到了作用:

  • BY ROW 根据数据行数来划分,每个block中最多油多少行记录。如果超出阀值,则新生成一个block。
  • BY PARTITION KEYS 根据分区键来划分,每个block要有指定数目的partition keys。如果partition keys是主键的话,那么和BY ROW这个cost function效果类似。
  • BY SIZE 根据数据块的大小来划分,单位bytes。超过指定阀值,就会新建一个block。
4.存储结果数据格式(必须)为RUBIX格式

RUBIX是一种特殊的数据格式,它存储了数据的一些索引细信息和BLOCKGEN过程需要的一些metadata

Creating Partitioned Blocks(Demo)

Note: BLOCKGEN是一个shuffle command

该程序的分区键:memberId
排序键:timestamp

JOB "our first BLOCKGEN"
        REDUCERS 10;
        MAP {
                data = LOAD "/path/to/data" USING AVRO();
        }
        // Create blocks that are (a) partitioned on memberId, (b) sorted on timestamp, and
        // (c) have a size of 1000 rows
        BLOCKGEN data BY ROW 1000 PARTITIONED ON memberId SORTED ON timestamp;

        // ALWAYS store BLOCKGEN data using RUBIX file format!
        STORE data INTO "/path/to/output" USING RUBIX();
END

由于我们设定了reducer的个数为10,那么将会有10个part-xxx.rbx文件,e.g.:(part-r-00000.rbx through part-r-00009.rbx)

Note:每个rbx文件中可以包含>=1个block。所以不用担心会生产太多的file.

参考

Cubert官方文档blocks

Ps:本文的写作是基于对Cubert官方文档的翻译和个人对Cubert的理解综合完成 :)

原创文章,转载请注明:

转载自:OopsOutOfMemory盛利的Blog, 作者: OopsOutOfMemory

本文链接地址:

注:本文基于署名-非商业性使用-禁止演绎 2.5 中国大陆(CC BY-NC-ND 2.5 CN)协议,欢迎转载、转发和评论,但是请保留本文作者署名和文章链接。如若需要用于商业目的或者与授权方面的协商,请联系我。

image

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Understanding Cubert Concepts(二)Co-Partitioned Blocks,partitioned
  • LinkedIn Cubert 实践指南,linkedincubert
  • Understanding Cubert Concepts 之 BLOCK(一),cubertconcepts
  • LinkedIn Cubert安装指南,linkedincubert

相关文章

  • 一步一步跟我学习hadoop(3)----hadoop命令手册,hadoop----hadoop
  • 与Greenplum度过的三个星期,greenplum三个星期
  • kerberos下HBase访问Zookeeper的ACL问题,hbasezookeeper
  • Hadoop源代码分析(三七),hadoop源代码
  • 【解决】 CentOS6.6安装CM5.4的问题,centos6.6cm5.4
  • Java 调用Hive 自定义UDF,java调用hiveudf
  • flume 组件概述与列表
  • 《转》openstack中删除虚拟主机,状态一直deleting,《转》openstack
  • Linux索引节点(Inode:no space for device)用满导致的一次故障,linuxinode
  • Zookeeper常见问题整理,zookeeper常见问题

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • word2vec.c源码分析,word2vec.c源码
    • Map/Reduce原理
    • Hive作为Mondrian的数据源,hivemondrian
    • 可穿戴KEY带来的身份认证的革命,key身份认证
    • 如何解决Greenplum master node与seg node元数据不一致,greenplumseg
    • hadoop distcp 实现不同集群之间数据同步,hadoopdistcp
    • The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path,httpservlet
    • 系统监控软件Ganglia的安装,监控软件ganglia
    • Web.xml配置详解,web.xml详解
    • 高阶MapReduce_3_reducer侧联结原理,mapreduce原理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有