`
zy19982004
  • 浏览: 661756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251941
社区版块
存档分类
最新评论

Hadoop学习四十:Phoenix二级索引浅谈

 
阅读更多

一.概述

  1. Hadoop2.2.0   Hbase0.96.1.1  Phoenix-2.2.0-SNAPSHOT
  2. Phoenix官网上提供了三个与Hbase兼容的版本,分别为Phoenix2.X-Hbase0.94.X ,Phoenix3.X-Hbase0.94.X,Phoenix4.X-Hbase0.98.1+,没有与Hbase0.96兼容的版本。幸运的是git上有Phoenix Hbase0.96的分支,参考https://github.com/forcedotcom/phoenix/tree/port-0.96。于是我自己编译成了Phoenix-2.2.0-SNAPSHOT 。

 

二.Phoenix二级索引介绍

  1.  在Hbase中,按字典顺序排序的rowkey是一级索引。不通过rowkey来查询数据时需要过滤器来扫描整张表。通过二级索引,这样的场景也可以轻松定位到数据。
  2. Example:
    1. DDL: create table user (id varchar primary key, firstname varchar, lastname varchar); create index user_idx on user (firstname);
    2. Query: DDL select id, firstname, lastname from user where firstname = 'foo';
  3. Phoenix支持两种形式的索引,可变索引和不可变索引。没有一个地方显示的  指定索引是否可变,它们是通过对应的主表是否可变IMMUTABLE_ROWS来默认设定的。

三.不可变索引

  1.  不可变索引的存储方式是write once, append only。不可变索引使用场景十分有限,仅仅适合于按时间先后顺序的数据(time-series data),此时主表只有新数据进来,不会更新数据。
  2. 初始化数据
    1. DDL: create table user (id varchar primary key, firstname varchar, lastname varchar) IMMUTABLE_ROWS=true; create index user_idx on user (firstname)
    2. DML:upsert into user values(‘ 1’, ‘lh5’, ‘x0b’)
    3. 此时通过phoenix客户端看到Hbase的数据如下
  3. 修改数据
    1. DML:upsert into user values(‘1’, ‘ghz, ‘wmn)
    2. 此时通过phoenix客户端看到Hbase的数据如下
    3. 可以看到,主表user的数据已经update,但索引表user_idx的索引并不是修改,而是追加,即write once, append only。
  4. 新增数据
    1. DML:upsert into user values(‘2’, ‘ghz, ‘wmn)
    2. 此时通过phoenix客户端看到Hbase的数据如下
    3. 可以看到,主表user数据新增了,索引表同时新增了这条记录

 

 

四.可变索引

  1.  通常情况下,主表里的数据并不是time-series data,主表里的数它们随时可能被修改。这个时候,必须使用可变索引来保证索引表伴随着主表的变化一起变化。
  2. 初始化数据
    1. DDL: create table user (id varchar primary key, firstname varchar, lastname varchar) ; create index user_idx on user (firstname)
    2. DML:upsert into user values(‘ 1’, ‘6ws’, ‘ecu’)
    3. 此时通过phoenix客户端看到Hbase的数据如下
  3. 修改数据
  4. 新增数据,对于这两种情况,没有测试成功。在将数据写或更新到主表前,会先将数据写或更新到索引表,就是这里出问题了。目前尚不清楚是我集群环境的问题还是Phoenix本身的问题。先把问题提到了jira https://issues.apache.org/jira/browse/PHOENIX-1051

 

 

五.容错性

  1.  在upsert操作被成功返回给客户端之前,phoenix保证所有这些数据被写入索引表和主表。对于upsert的每一行数据,phoenix保证要么同时写入到索引表和主表,要么都不更新(all-or-nothing)。
  2. 有几点需要注意的是
    1. Phoenix不保证完整的事务,所以你可能看到索引表与主表不一致的情况。如果你想自己同步,可以使用命令alter index user_idx on user rebuild。同时也要注意,建立索引的过程有可能bring down整个hbase集群。
    2. 对于一行数据来说,写入总是all-or-nothing, written or lost,不会部分写入。
    3. 更新先写入索引表,再写入主表。

六.优化

      你可以在hbase-site.xml里配置以下参数

1. index.builder.threads.max
o 为主表更新操作建立索引的最大线程数
o Default: 10
2. index.builder.threads.keepalivetime
o 上面线程的超时时间
o Default: 60
3. index.writer.threads.max
o 将索引写到索引表的最大线程数
o Default: 10
4. index.writer.threads.keepalivetime
o 上面线程的超时时间
o Default: 60
5. hbase.htable.threads.max
o 同时最多有这么多线程往索引表写入数据
o Default: 2,147,483,647
6. hbase.htable.threads.keepalivetime
o 上面线程的超时时间
o Default: 60
7. index.tablefactory.cache.size
o 缓存10个往索引表写数据的线程
o Default: 10

1
0
分享到:
评论
1 楼 yanyexin 2014-11-19  
你好,能举一个例子么: 我有一张hbase表,已存在的。我想使用phoenix去映射到这张表.

相关推荐

    Apache Hadoop---Phoenix.docx

    3. **Secondary Indexing**:Phoenix提供了二级索引功能来优化非rowKey的查询。有三种类型的二级索引: - **Covered Indexes**:仅通过索引列就能获取所需查询的所有数据。 - **Functional Indexes**:允许基于...

    hadoop学习 测试数据:手机上网日志

    hadoop学习时用到的 测试数据:手机上网日志

    Hadoop datanode启动失败:Hadoop安装目录权限的问题

    $ sudo chown -R hadoop:hadoop /opt/hadoop-0.2.203.0 ``` 这里`/opt/hadoop-0.2.203.0`是Hadoop的具体安装路径,应根据实际情况进行调整。 2. **重新启动Hadoop服务**:修改完所有权后,需要重新启动Hadoop...

    基于Hadoop的分布式索引构建

    Hadoop作为一个广泛使用的分布式计算框架,为构建分布式索引提供了有力支持。以下是关于基于Hadoop的分布式索引构建的详细知识点。 首先,分布式索引是相较于传统单机索引而言的。在大规模数据集上构建索引时,...

    Hadoop海量数据处理:技术详解与项目实战 pdf

    - **搜索引擎索引构建**:搜索引擎需要定期更新其索引库,处理大量的网页数据,这正是Hadoop的强项所在。 - **社交网络分析**:分析社交网络中的用户关系图谱,挖掘用户之间的联系和互动模式,可以帮助企业更好地...

    王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第八讲Hadoop图文训练课程:Hadoop文件系统的操作

    王家林的“云计算分布式大数据Hadoop实战高手之路”系列教程,通过三个不同的学习阶段,帮助学习者从零基础开始,逐步成为Hadoop领域的高手。 首先,课程的初级阶段“从零开始”致力于让初学者无痛入门Hadoop。在这...

    java及hadoop学习资料

    这份学习资料中的“java及hadoop学习视频百度网盘地址.txt”可能是提供的一系列视频教程链接,可以帮助学习者通过观看视频来直观地学习Java和Hadoop。而“特价淘-更多的优惠等你来.url”可能是促销信息,对于学习...

    hadoop 文档:Hadoop开发者下载

    2. **Hadoop源码**:在Hadoop的源码中,开发者可以深入理解其内部工作原理,学习如何定制和优化Hadoop。源码包含各个模块,如HDFS的NameNode、DataNode,以及MapReduce的JobTracker、TaskTracker等。 3. **开发环境...

    cdh6.3.2 集成 Phoenix

    3. **索引**:Phoenix提供了二级索引功能,可以加速对HBase表的复杂查询,尤其是在查询列不在行键中的情况下。 **三、集成步骤** 1. **准备环境**:确保已安装并配置好CDH 6.3.2,包括HBase、Hadoop等组件。同时,...

    山东大学大数据实验二:倒排索引(Hadoop实现)

    这是山东大学大数据实验二,用Hadoop实现文档的倒排索引

    Hadoop应用案例分析:雅虎、eBay、百度、Facebook.pdf

    ,Hadoop 技术已经在互联网领域得到了广泛的应用。互联网公司往往需要 存储海量的数据并对其进行处理,而这正是Hadoop 的强项。如Facebook 使用Hadoop 存储 内部的日志拷贝,以及数据挖掘和日志统计;Yahoo !利用...

    hadoop 索引相关记录

    总的来说,"hadoop 索引相关记录"涉及到的话题包括Hadoop MapReduce的索引优化、中间结果处理、HDFS文件块的索引以及可能的源码级改进。对于想要深入理解和优化Hadoop性能的开发者来说,这是一个非常有价值的主题。

    Hadoop学习总结之五:Hadoop的运行痕迹

    #### 二、Hadoop运行环境搭建 为了能够跟踪Hadoop的运行痕迹,首先需要搭建一个实验环境。本例中构建了一个包含一个NameNode和三个DataNode的Hadoop集群,具体配置如下: - **NameNode**: namenode:192.168.1.104 ...

    phoenix_wordcount.tar.gz_Hadoop Phoenix_mapReduce_phoenix wordc

    《Hadoop、Phoenix与MapReduce:探索Phoenix WordCount实例》 在大数据处理领域,Hadoop、Phoenix和MapReduce是三个至关重要的组件。本篇将详细阐述这三个技术,并以"Phoenix WordCount"为例,深入解析其在实际应用...

    hadoop的winutils.exe及hadoop.dll文件

    我的报错:Could not locate Hadoop executable: E:\big_data\hadoop-3.3.0\bin\winutils.ex hadoop的winutils.exe及hadoop.dll文件,可以用于hadoop3.3. 下载好直接将两个文件复制到我们hadoop的bin目录下就行了

    hadoop2.8.5-windows本地开发

    内容概要:windows环境下添加snappy源码,并对2.8.5的apache版本hadoop包进行编译,生成指定的hadoop.dll、snappy.dll文件,方便Windows环境下利用idea工具进行Hadoop、Spark的local模式下代码调试。 版本更新:...

    最新Hadoop学习笔记

    2. 下载Hadoop:从Apache官方网站获取最新稳定版Hadoop,根据系统选择合适的版本。 3. 解压Hadoop:将下载的压缩包解压到指定目录,如 `/opt/hadoop`。 4. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`文件中...

    启动hadoop出现ssh: connect to host master port 22: No route to host

    当启动hadoop或者使用ssh时出现: 输入ifconfig指令发现:自己之前配置的ip:192.168.79.103地址已经发生了变化 怎么解决办法呢? 如下步骤: 重新修改静态ip 输入vi /etc/udev/rules.d/70-persistent-net.rules...

Global site tag (gtag.js) - Google Analytics