皮皮网

【linux 0.96 源码分析】【社区博客源码】【公交网站源码】phoenix索引源码_phoenix 索引

时间:2024-12-29 01:41:59 分类:休闲 来源:property的源码

1.MapReduce用途
2.HBASE 1.0
3.Apache Phoenix(一)答疑
4.第1章 Phoenix简介
5.数据存储扫盲:hbase,索索引cassandra,clickhouse,pg,neo4j...
6.大数据平台的软件有哪些?

phoenix索引源码_phoenix 索引

MapReduce用途

       在Google中,MapReduce技术的引源应用领域极其广泛,涉及到众多实用场景,索索引如“分布式grep搜索,引源大规模排序,索索引Web链接图的引源linux 0.96 源码分析反转,机器上的索索引词向量计算,Web访问日志的引源深入分析,反向索引的索索引构建,文档聚类,引源以及复杂的索索引机器学习任务,甚至包括基于统计的引源机器翻译等。”值得一提的索索引是,MapReduce技术的引源引入极大地提升了效率,它曾被用于重建Google的索索引整个索引,取代了旧有的即兴解决方案以保持索引的实时更新。

       MapReduce在执行过程中会生成大量的临时文件,为了优化性能,Google文件系统被巧妙地应用,负责管理和访问这些文件,确保数据处理的高效进行。

       此外,Nutch项目曾开发了一个实验性的社区博客源码MapReduce实现,这个项目后来发展成为了大名鼎鼎的Hadoop。这表明,MapReduce技术在开源社区中得到了广泛应用和扩展。

       另一值得一提的是,Phoenix是斯坦福大学研发的MapReduce实现,它特别针对多核/多处理器环境和共享内存架构进行了优化,为高性能计算提供了强大的支持。

扩展资料

       MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(化简)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组

HBASE 1.0

       å‰èº«ï¼šBigTable

        网页搜索:

        google分布式存储系统BigTable依赖GFS

        Hbase(bigtable的开源实现): 高可靠、高性能、面向列、可伸缩

        存储结构化和半结构化的数据

        优点:

        水平可扩展性特别好:

        依赖:

        文件存储系统:HDFS

        海量数据处理:MapReduce

        协同管理服务:Zookeeper

       æ»¡è¶³äº†ï¼šå¤§æ•°æ®é‡çš„实时计算

       æ•°æ®ç±»åž‹ï¼š

            RDBMS:关系数据模型、多种数据类型

            Hbase:

        数据操作:

        存储模式:

        索引:

        数据维护:

        可伸缩性:

                纵向扩展:

                水平扩展:

        Hbase的访问接口:

                    JAVA API

                    shell

                    thrift Gateway

                    restful Gateway

                    SQL接口:pig编写类sql  hive用hivesql访问Hbase

        Hbase的数据类型:

                列限定符

                每个值都是未解释的bytes

                一个行可以有一个行键和多列

                表由列族组成

       Hbase数据模型:

            列族支持动态扩展、保留旧版本(HDFS只能追加数据)

        基础元素:

            行键 : rowkey

            列族

            列限定符

            单元格 (时间戳概念、对应数据版本)

        坐标概念:

            四维定位:行键、列族、列限定符、时间戳

        稀疏表

        HBASE:面向列的存储:高数据压缩率、分析便捷

        RDBMS :面向行存储,事务性操作(记录完整)、不便于分析(需要全表扫描)

       4.3 HBASE 的实现原理

        4.3.1 库函数 、master服务器、region服务器

        Master服务器:

        分区信息进行维护和管理

        维护region服务器列表

        确认当前工作的region服务器

        负责对region进行分配和负载平衡

        对表的增删改查

        region服务器:

        客户端不依赖于Master获取位置信息

        用户数据的存储和管理

        Region服务器---个region -----Store是一个列族----每个列族就是一个Hfile----所有region公用1个Hlog

        写数据流程:Region服务器---写缓存Memstore---写日志(Hlog)

        读数据流程:Region服务器-读缓存Memstore(最新数据)----StoreFile

        缓存刷新:周期性将缓存内容刷写到Storefile 清空缓存---Hlog写入标记

        每次刷写会生成新的StoreFile 每个Store包含多个StoreFile

        每个Region服务器都有一个自己的Hlog,将启动检查确认缓存刷新是否有新的内容需要刷写,发现则刷写新的storefile,完成后删除Hlog,开始对外提供服务

        Storefile的合并,storefile 的数量达到阈值后,会进行合并。当Storefile超过大小阈值则会触发Region的分裂

       4.4 Hlog的工作原理

        Zookeeper负责监听region服务器,由master处理故障,通过故障服务器的Hlog恢复,按region切分Hlog,将region和对应的Hlog分配到新的region服务器上

       ä¸€ä¸ªHBASE表会被划分成多个Region(1G-2G 取决于服务器性能)

        同一个region不会被拆分到不同服务器上

        Region的寻找:

        Meta表:regionID 服务器ID 存储元数据

        Root表:只有一个region

        三级寻址:

        zookeeper文件---root表-多个meta表--多个用户数据表

        客户端会有Hbase三层寻址的缓存,调用访问Hbase的接口,缓存失效后,再次寻址

        zookeeper决定master服务器,确保只有一个master

        4.5 Hbase的应用方案

        性能优化:

        1)时间靠近存放----将时间戳引入行键,使用Long.max-时间戳进行排序

        2)提升读写性能,创建表时设置HcloumnDescriptor.setMemory=true,会将表放入内存的缓存中

        3)节省存储·空间----设置最大版本数、保存最新版的数据,将最大版本参数设置为1

        4)timetolive参数,会将过期数据自动清空

        检测Hbase性能:

        Maste-status(web浏览器查询)

        ganglia

        OpenTSDB

        Armbari

        sql 查询HBASE

        1)hive整合hbase

        2)Phoenix

        Hbase 二级索引 (辅助索引)

        默认只支持对rowkey进行索引

        Hbase行访问:

        1)单行键访问

        2)确定起点和终点访问区间数据

        3)全表扫描

       äºŒçº§ç´¢å¼•æ ·ä¾‹ï¼š

            Hindex    Hbase+redis  Solr+ Hbase

        二级索引的机制:

                Hbase Coprocessor 

                endpoint  ---存储过程

                observer----触发器

                通过Observer监测数据插入动作,同步写入索引表,完成对表和列的索引

              Hbase 主表 索引表

        4.6 HBASE的shell命令

        三种部署模式:单机 伪分布式  分布式

        HDFS

        创建表

        create table, F1, F2, F3

        list table

        每次只能为1行的1列添加数据

        put  table R1,R1:C1 ,“1,2,3”

        scan  table  R1,{ column='R1:C1'}

        get  table

        删除表:

        disable table +drop table

        4.7 JAVA API +HBASE

Apache Phoenix(一)答疑

        创建test.java 文件包含如下内容:

        在命令行中编译和执行

        Phoenix Thick驱动的JDBC的URL格式如下([]内的元素可选择的)

        最简单的例子:

        最复杂的例子:

        请注意,URL中的每个可选元素都需要前面所有可选元素。例如,去指定Hbase的zk节点,那么zk的端口必须是指定的。

        这些信息最初包含在 该页 。

        Phoenix Thin驱动(与Phoenix查询服务一起使用)JDBC格式如下:

        这里暴露了数个key供客户端使用。最经常使用的key为url 和serialization 。url key直接影响到需要查询的Phoenix查询服务器的地址。

        最简单的URL例子:

        非常复杂的URL例子:

        这里记录着所有有关于Thin 客户端JDBC URL涉及到的支持项,可以参考 Apache Avatica documentation 和 Query Server Documentation 。

        查看 相关例子 。

        CSV数据可以批量导入通过psql的通用功能。一般插入的速度在K-K行数据每秒。(取决于一行数据有多大)。

        创建表例子:

        插入数据例子:

        你可以创建Phoenix 表(table)和视图(view)通过 CREATE TABLE/CREATE VIEW在已存在的HBase表上执行DLL语句。两种情况下都不会改变Hbase的元数据。对于CREATE TABLE,我们会创建任何不存在的元数据(table,column families)。我们会增加空键在每一行,所以查询的行为符合预期(不需要所有的列都进行扫描)。

        需要注意的是字节的序列化必须匹配Phoenix的字节序列化。比如varchar、char和unsigned_ 类型,我们使用Hbase字节方法。char类型预期只有单字节字符和无符号类型预期值大于或者等于0。 对于有符号的类型(tinyint,smallint,integer 和bigint),phoenix会翻转第一个字节,这样负值会在正值之前排序。因为Hbase排序row key按照ASCII正序排列,负值的第一位是1 而正值的第一位是0,那么负值大于正值,党我们不进行第一位翻转时。所以你存储整数时通过Hbase本地API接口和想通过Phoenix访问整数,确认你的数据类型是否是无符号类型。

        我们复合row key可以将简单的值进行拼接在一起,在可变长类型上使用0字节作为分隔符。

        如果你创建Hbase表如下:

        如果你已经有了一张带有名称为't1'和列簇为'f1'的Hbase表。那么请记住,在Hbase中你不用对可能的键值和row key结构进行建模。这是你在phoenix指定的表和列簇之外的信息。所以在phoenix,你不需要像这样创建view:

        这个‘pk’列定义,你的row key是varchar类型(类似字符串),而'f1'.val列定义你的Hbase表包含键值形式和列成员及列限定符为'f1'.val还有他们的类型为varchar。

        注意,你不需要使用双引号,当你创建你的hbase表包含所有的大写名称(Phoenix会标准化字符串,将字符串转大写)。比如:

        你可以这样创建phoenix视图:

        或者如果你创建了新的hbase表,不需要借助hbase shell,直接在phoenix操作。

        注意:理想情况下4æ ¸CPU的个region server,可以选择salt buckets在-最佳性能。

        始于Phoenix 2.1版本,Phoenix开始支持索引在可变和不可变的数据中。注意,Phoenix在2.0.x中仅支持不可变数据的索引。索引写性能在不可变索引表中,稍微快一些于可变数据表,不可变数据表即是数据不支持更新。

        例子:

        更新行信息在test表中,Phoenix查询优化器会选择正确的索引去使用。你可以查看 explain plan 如果Phoenix使用这个索引表。你还可以在Phoenix查询中给出使用特定索引的 提示 。

        除非查询中使用到的所有列都在二级索引中,否作不会使用二级索引(作为直接索引,或者覆盖索引)。构成数据表中的主键全部列都会自动包含在索引中。

        在lastname不是索引或者覆盖所有一部分时,索引是没有被使用到。这点可以在"explain plan"中被证实。在创建索引时固定lastname字段存在索引中一部分,或者时覆盖索引的覆盖字段。

        例子:

        Phoenix速度非常快,全表扫描M的数据,通常情况下在秒内完成(中等规模的集群上的小表)。如果查询包含到关键列的过滤器,则降低到毫秒级。你可以添加索引在导致性能等同于过滤键的列上,使用索引列作为键的一部分复制表。

        为什么Phoenix即使做了全扫描,速度依然快:

        检阅Anil Gupta的优秀 文章 。

        Hadoop2的配置存在Phoenix的pom.xml中即可。

        在默认情况下,Phoenix让Hbase管理时间戳,并只让你查看最后的版本数据。但是,Phoenix也给用户提供支持任意的时间戳。要做到这一点,使用连接属性"CurrentSCN",像这样:

        上面的操作等同于Hbase API中的:

        通过指定CurrentSCN,你可以告诉Phoenix。所有东西在这次连接中按该时间戳被完成。注意的是,这也适用于对连接执行的查询。举个例子,一个查询在myTable表的数据是不会看到刚插入的数据,因为它只看到创建连接时指定CurrentSCN属性之前的数据。这样提供了一种类似于快照的功能,或者是时间点查询。

        请记住,创建个新的连接不是一个很昂贵的操作。相同的底层Hbase的连接用于全部连接的相同的集群,所以或多或少实例出一些对象。

        RANGE SCAN:意味着只扫描表中一部分数据。如果使用主键约束中的一个或者多个组成主键的列会出现这种情况。没有过滤PK列的查询,例子:select * from test where pk2='x' and pk3='y';将会出现全扫描,然而在select * from test where pk1='x' and pk2='y';中却是范围扫描(range scan)。注意,你可以添加二级索引在"pk2"和"pk3"列上,会触发范围扫描(range scan)在第一次查询中。

DEGENERATE SCAN:意味着一个查询不能返回行数据。如果我们决定在编译时完成。我们甚至不需要运行扫描。

FULL SCAN:意味着所有行都被扫描到。(如果你有一个where子句,可能会应用到一个过滤器)

SKIP SCAN:将扫描一个表中的子集或者全部行。无论如何它将会根据过滤器跳过大分组的行。可以查看 博客 了解更多。如果主键上没有过滤器的列,那我们就不做SKIP SCAN,但是你可以强制SKIP SCAN通过使用/+ SKIP_SCAN/去命中。在一些条件下,也就是说当你的主键基数比较少时,它将会更有效超过FULL SCAN。

        不,它不是必须的Phoenix jDBC连接池。

        Phoenix的连接对象时不同大部分的JDBC连接,原因在于底层是Hbase的连接。Phoenix连接对象在设计时就是为了更精细便宜的代价去创建。如果Phoenix的连接被再利用,底层的HBase连接可能并不总是由前一个用户保持在健康状态。更好的方式是去创建一个新的Phoenix连接,保证避免潜在的问题。

        实行Phoenix连接池可以简单的创建实例化委派,对外部而言,创建出新的Phoenix连接,实际是需要时从池中获取,对外部而言的关闭,实际是返回到池中去,可以参考 Phoenix- 。

        空键值或者伪键值(_列限定符)必须的,去保证列都有有效的在全部行中。

        数据存储在Hbase是以键值对形式存在,意味着存储每个列值完整的行键。这还意味着,除非至少存储了一个列,否则根本不存储行键。

        现在考虑到JDBC的行存在int类型的主键,和若干列可能是空(null)的。为了可以存储主键,键值必须去存储去展示这行数据的全部(现在的时间戳,考虑的时间戳版本)。你会注意到这些列是空列。这允许执行“SELECT * FROM TABLE”并接收所有行的记录,即使那些非pk列为空的记录也是如此。

        即使对于某些(或所有)记录只有一个列为空,也会出现相同的问题。在Phoenix上的扫描将包括空列,以确保只包含主键的行(所有非键列都为空)将包含在扫描结果中。

第1章 Phoenix简介

       Phoenix是一个用于HBase的开源SQL层,它允许用户使用标准的JDBC API来创建表、插入数据和查询HBase数据,而无需直接操作HBase客户端API。公交网站源码Phoenix具备以下特点:易于集成,包括与Spark、Hive、Pig、Flume和Map Reduce的整合;性能优异,能够为小型查询提供毫秒级响应,对大量数据查询提供秒级响应;操作简单,支持DML命令和通过DDL命令创建表及版本化增量更改;拥有安全功能,支持GRANT和REVOKE;完美支持HBase的二级索引创建。

       Phoenix的快速入门步骤包括安装、部署以及使用Phoenix进行表操作。首先,从官方网址下载并解压Phoenix的jar包,复制server和client这两个包到各节点的hbase/lib目录下。接着,在/etc/profile中添加必要的环境变量,以确保可以在任何目录使用Phoenix命令。启动Zookeeper、Hadoop和HBase,然后启动Phoenix服务。在Phoenix服务启动后,用户可以通过使用SQL命令来操作表,java社交网站源码如显示所有表、创建表、插入记录、查询记录、删除记录和删除表。退出命令行时,可以使用"!quit"命令。

       Phoenix表操作包括基本的CRUD操作。用户可以使用"!table"或"!tables"命令显示所有表。创建表时,可以使用CREATE TABLE命令,例如"CREATE TABLE IF NOT EXISTS us_population (State CHAR(2) NOT NULL, City VARCHAR NOT NULL, Population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city));"。插入记录时,使用"upsert"命令,如"upsert into us_population values('NY','NewYork',);"。查询记录时,可以使用"select"命令,如"select * from us_population;"或"select * from us_population where state='NY';"。删除记录和表时,分别使用"delete"和"drop table"命令。银河帝国 源码

       为了在Phoenix中操作HBase中的表,用户需要进行表映射。表映射分为视图映射和表映射两种方式。视图映射是创建只读视图,只能用于查询,不支持对源数据进行修改等操作。表映射允许用户直接在Phoenix中操作HBase中的表,当HBase中已经存在表时,可以使用类似创建视图的方式创建关联表。当HBase中不存在表时,可以直接使用CREATE TABLE指令创建表,系统会在Phoenix和HBase中自动创建表,并根据指令内的参数初始化表结构。

       使用Spark与Phoenix进行读写操作是通过Spark SQL与Phoenix连接实现的,可以在Spark代码中使用Phoenix连接查询表数据。更多关于Spark与Phoenix的使用详情,可以参考Phoenix的官方文档。

       视图映射与表映射之间的对比表明,视图映射的查询效率较低,因为创建映射表时Phoenix会在表中创建空键值对,这些键值对用于提高查询效率。而使用CREATE TABLE创建的关联表,如果对表进行修改,源数据也会相应改变。如果关联表被删除,源表也会被删除,而视图则不会发生这种情况。删除视图不会影响源数据。

数据存储扫盲:hbase,cassandra,clickhouse,pg,neo4j...

       本文分享了关于数据存储系统HBase、Cassandra、ClickHouse、PostgreSQL和Neo4j的基本知识,适合数据存储初学者参考。

       HBase

       作为列族数据库,HBase基于Hadoop HDFS,由Apache项目支持,Google和Bigtable的灵感之作。它使用JAVA实现,支持分布式、KV存储,可处理稀疏表和高并发写入。SQL操作需配合Phoenix,强调CP一致性,且支持单行ACID。相关资源包括官方文档、中文教程和源码。

       Cassandra

       Cassandra是Apache项目,Facebook开发,适合大数据写入和实时查询,尤其在欺诈检测和位置服务领域。它采用Dynamo和Bigtable技术,无主架构,提供CQL查询,主副本设计。与HBase相比,Cassandra更偏向OLTP场景,且对写多读少的需求更友好。

       ClickHouse

       ClickHouse是列式关系型数据库,专为OLAP设计,由Yandex研发,支持SQL和高性能读取。它不提供ACID特性,但适合日志分析和时间序列数据。ClickHouse的数据结构和部署特点使其在特定场景下表现出色。

       PostgreSQL

       PostgreSQL作为行式RDBMS,对SQL标准支持好,支持索引和全文检索,可用于OLTP和OLAP。相比MySQL,提供更灵活的复制选项。索引结构丰富,适应多种查询需求。

       Neo4j

       Neo4j是图数据库,专长于存储和查询复杂的图数据,适合知识图谱和社交网络应用。它支持弱模式设计,但不支持碎片处理和复杂的图算法。

       在选择时,需要根据具体应用场景和性能需求来决定,比如HBase适合大量写入和简单查询,而ClickHouse则在分析性能上更胜一筹。

大数据平台的软件有哪些?

       一、Phoenix

       简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。

       Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒

       二、Stinger

       简介:原叫Tez,下一代Hive,Hortonworks主导开发,运行在YARN上的DAG计算框架。

       某些测试下,Stinger能提升倍左右的性能,同时会让Hive支持更多的SQL,其主要优点包括:

       ❶让用户在Hadoop获得更多的查询匹配。其中包括类似OVER的字句分析功能,支持WHERE查询,让Hive的样式系统更符合SQL模型。

       ❷优化了Hive请求执行计划,优化后请求时间减少%。改动了Hive执行引擎,增加单Hive任务的被秒处理记录数。

       ❸在Hive社区中引入了新的列式文件格式(如ORC文件),提供一种更现代、高效和高性能的方式来储存Hive数据。

       三、Presto

       简介:Facebook开源的数据查询引擎Presto ,可对PB以上的数据进行快速地交互式分析。该项目始于 年秋季开始开发,目前该项目已经在超过 名 Facebook 雇员中使用,运行超过 个查询,每日数据在 1PB 级别。Facebook 称 Presto 的性能比诸如 Hive 和 Map*Reduce 要好上 倍有多。

       Presto 当前支持 ANSI SQL 的大多数特效,包括联合查询、左右联接、子查询以及一些聚合和计算函数;支持近似截然不同的计数(DISTINCT COUNT)等。

copyright © 2016 powered by 皮皮网   sitemap