一.概述
- Hadoop2.2.0 Hbase0.96.1.1 Phoenix-2.2.0-SNAPSHOT
- 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二级索引介绍
- 在Hbase中,按字典顺序排序的rowkey是一级索引。不通过rowkey来查询数据时需要过滤器来扫描整张表。通过二级索引,这样的场景也可以轻松定位到数据。
- Example:
- DDL: create table user (id varchar primary key, firstname varchar, lastname varchar); create index user_idx on user (firstname);
- Query: DDL select id, firstname, lastname from user where firstname = 'foo';
- Phoenix支持两种形式的索引,可变索引和不可变索引。没有一个地方显示的 指定索引是否可变,它们是通过对应的主表是否可变IMMUTABLE_ROWS来默认设定的。
三.不可变索引
- 不可变索引的存储方式是write once, append only。不可变索引使用场景十分有限,仅仅适合于按时间先后顺序的数据(time-series data),此时主表只有新数据进来,不会更新数据。
- 初始化数据
- DDL: create table user (id varchar primary key, firstname varchar, lastname varchar) IMMUTABLE_ROWS=true; create index user_idx on user (firstname)
- DML:upsert into user values(‘ 1’, ‘lh5’, ‘x0b’)
- 此时通过phoenix客户端看到Hbase的数据如下
- 修改数据
- DML:upsert into user values(‘1’, ‘ghz, ‘wmn)
- 此时通过phoenix客户端看到Hbase的数据如下
- 可以看到,主表user的数据已经update,但索引表user_idx的索引并不是修改,而是追加,即write once, append only。
- 新增数据
- DML:upsert into user values(‘2’, ‘ghz, ‘wmn)
- 此时通过phoenix客户端看到Hbase的数据如下
- 可以看到,主表user数据新增了,索引表同时新增了这条记录
四.可变索引
- 通常情况下,主表里的数据并不是time-series data,主表里的数它们随时可能被修改。这个时候,必须使用可变索引来保证索引表伴随着主表的变化一起变化。
- 初始化数据
- DDL: create table user (id varchar primary key, firstname varchar, lastname varchar) ; create index user_idx on user (firstname)
- DML:upsert into user values(‘ 1’, ‘6ws’, ‘ecu’)
- 此时通过phoenix客户端看到Hbase的数据如下
- 修改数据
- 新增数据,对于这两种情况,没有测试成功。在将数据写或更新到主表前,会先将数据写或更新到索引表,就是这里出问题了。目前尚不清楚是我集群环境的问题还是Phoenix本身的问题。先把问题提到了jira https://issues.apache.org/jira/browse/PHOENIX-1051。
五.容错性
- 在upsert操作被成功返回给客户端之前,phoenix保证所有这些数据被写入索引表和主表。对于upsert的每一行数据,phoenix保证要么同时写入到索引表和主表,要么都不更新(all-or-nothing)。
- 有几点需要注意的是
- Phoenix不保证完整的事务,所以你可能看到索引表与主表不一致的情况。如果你想自己同步,可以使用命令alter index user_idx on user rebuild。同时也要注意,建立索引的过程有可能bring down整个hbase集群。
- 对于一行数据来说,写入总是all-or-nothing, written or lost,不会部分写入。
- 更新先写入索引表,再写入主表。
六.优化
你可以在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
相关推荐
3. **Secondary Indexing**:Phoenix提供了二级索引功能来优化非rowKey的查询。有三种类型的二级索引: - **Covered Indexes**:仅通过索引列就能获取所需查询的所有数据。 - **Functional Indexes**:允许基于...
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实战高手之路”系列教程,通过三个不同的学习阶段,帮助学习者从零基础开始,逐步成为Hadoop领域的高手。 首先,课程的初级阶段“从零开始”致力于让初学者无痛入门Hadoop。在这...
这份学习资料中的“java及hadoop学习视频百度网盘地址.txt”可能是提供的一系列视频教程链接,可以帮助学习者通过观看视频来直观地学习Java和Hadoop。而“特价淘-更多的优惠等你来.url”可能是促销信息,对于学习...
2. **Hadoop源码**:在Hadoop的源码中,开发者可以深入理解其内部工作原理,学习如何定制和优化Hadoop。源码包含各个模块,如HDFS的NameNode、DataNode,以及MapReduce的JobTracker、TaskTracker等。 3. **开发环境...
3. **索引**:Phoenix提供了二级索引功能,可以加速对HBase表的复杂查询,尤其是在查询列不在行键中的情况下。 **三、集成步骤** 1. **准备环境**:确保已安装并配置好CDH 6.3.2,包括HBase、Hadoop等组件。同时,...
这是山东大学大数据实验二,用Hadoop实现文档的倒排索引
,Hadoop 技术已经在互联网领域得到了广泛的应用。互联网公司往往需要 存储海量的数据并对其进行处理,而这正是Hadoop 的强项。如Facebook 使用Hadoop 存储 内部的日志拷贝,以及数据挖掘和日志统计;Yahoo !利用...
总的来说,"hadoop 索引相关记录"涉及到的话题包括Hadoop MapReduce的索引优化、中间结果处理、HDFS文件块的索引以及可能的源码级改进。对于想要深入理解和优化Hadoop性能的开发者来说,这是一个非常有价值的主题。
#### 二、Hadoop运行环境搭建 为了能够跟踪Hadoop的运行痕迹,首先需要搭建一个实验环境。本例中构建了一个包含一个NameNode和三个DataNode的Hadoop集群,具体配置如下: - **NameNode**: namenode:192.168.1.104 ...
《Hadoop、Phoenix与MapReduce:探索Phoenix WordCount实例》 在大数据处理领域,Hadoop、Phoenix和MapReduce是三个至关重要的组件。本篇将详细阐述这三个技术,并以"Phoenix WordCount"为例,深入解析其在实际应用...
我的报错:Could not locate Hadoop executable: E:\big_data\hadoop-3.3.0\bin\winutils.ex hadoop的winutils.exe及hadoop.dll文件,可以用于hadoop3.3. 下载好直接将两个文件复制到我们hadoop的bin目录下就行了
内容概要:windows环境下添加snappy源码,并对2.8.5的apache版本hadoop包进行编译,生成指定的hadoop.dll、snappy.dll文件,方便Windows环境下利用idea工具进行Hadoop、Spark的local模式下代码调试。 版本更新:...
2. 下载Hadoop:从Apache官方网站获取最新稳定版Hadoop,根据系统选择合适的版本。 3. 解压Hadoop:将下载的压缩包解压到指定目录,如 `/opt/hadoop`。 4. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`文件中...
当启动hadoop或者使用ssh时出现: 输入ifconfig指令发现:自己之前配置的ip:192.168.79.103地址已经发生了变化 怎么解决办法呢? 如下步骤: 重新修改静态ip 输入vi /etc/udev/rules.d/70-persistent-net.rules...