Apache HBase

Spark常用算子解析及代码实战

回眸只為那壹抹淺笑 提交于 2020-05-06 02:06:00
Spark 一.coalesce   1.简介     coalesce常用来合并分区,第二个参数是合并分区时是否产生shuffle。true为产生shuffle,false为不产生shuffle。默认是false不产生shuffle。如果coalesce设置的分区数比原来的分区数还大的话若设置为false则不起作用。如果设置为true则效果等价于repartition。即repartition(numPartitions) = coalesce(numPartitions)。   2.测试数据     val array = Array("spark,scala,6", "hadoop,java,12", "tensorflow,python,8", "solr,java,16", "hbase,java,11")   3.代码                   /**     * coalesce算子,常用于减少分区      */     val befParNum = rdd.getNumPartitions     rdd = rdd.coalesce(1, false) // true为产生shuffle     val coalParNum = rdd.getNumPartitions     /**      * repartition与之类型,一般增大分区数  

HBase 在HDFS上的物理目录结构

我怕爱的太早我们不能终老 提交于 2020-05-06 01:05:56
根目录 配置项 <name> hbase.rootdir</name> 默认 “/hbase” 根级文件 /hbase/WALs 被HLog实例管理的WAL文件。 /hbase/WALs/data-hbase.com,60020,1443159380730 对于每个HregionServer,日志目录中都包含一个对应的子目录 hbase/WALs/data-hbase.com,60020,1443159380730/data-hbase.com%2C60020%2C1443159380730.1443787240573 在每个子目录下有多个HLog文件(因为日志滚动) /hbase/oldWALs 当/hbase/WALs 中的HLog文件被持久化到存储文件中,不再需要日志文件时,它们会被移动到/hbase/oldWALs目录。 /hbase/oldWALs/data-hbase.com%2C60020%2C1443159381290.1443787452518 具体的oldWALs文件。 /hbase/hbase.id 集群的唯一ID /hbase/hbase.version 集群的文件格式版本信息 /hbase/corrupt 损坏的日志文件,一般为空 /hbase/archive/ 存储表的归档和快照,HBase 在做 Split或者 compact 操作完成之后,会将

「从零单排HBase 09」HBase的那些数据结构和算法

大城市里の小女人 提交于 2020-05-06 00:16:19
在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引。 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tree))的索引结构。 下面,我们就结合HBase的实现,来深入了解HBase的核心数据结构与算法,包括索引结构LSM树,内存数据结构跳表、文件多路归并、读优化的布隆过滤器等。 1.LSM树 LSM树和B+树、哈希索引一样,是一种索引结构,那它们有什么区别呢? 哈希存储引擎是哈希表的持久化实现,支持增、删、改以及随机读,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作快。 B+树不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间是链表的结构),对应的存储系统就是关系数据库(Mysql等)。 LSM树存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。 LSM树的索引一般由两部分组成。 一部分在内存中,将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘(由此提升了写性能)

在linux下修改环境变量,切换不同版本的python的path

霸气de小男生 提交于 2020-05-05 12:10:30
这个Linux系统下本来装了python2,而且是好几个。还装了anaconda,自带python3。我的目的是想让python环境变量默认使用python3。 查看当前python版本: [liusiyi@localhost ~]$ python --version Python 2.7.5 用which 看一下当前使用的python的路径: [liusiyi@localhost ~]$ which python /usr/bin/python 用whereis 确认所有python路径(但这个不全,因为没有anaconda): [liusiyi@localhost ~]$ whereis python python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz 改用echo $PATH再次确认(这里也没包含anaconda): [liusiyi@localhost ~]$ echo $PATH /appcom/kylin/bin:/appcom/hadoop/bin:/appcom

HBase Replication详解

独自空忆成欢 提交于 2020-05-04 12:35:40
Replication: 复制,指的是持续的将同一份数据拷贝到多个地方进行存储,是各种存储系统中常见而又重要的一个概念,可以指数据库中主库和从库的复制,也可以指分布式集群中多个集群之间的复制,还可以指分布式系统中多个副本之间的复制。它的难点在于数据通常是不断变化的,需要持续的将变化也反映到多个数据拷贝上,并保证这些拷贝是完全一致的。 通常来说,数据复制到多个拷贝上有如下好处: 多个备份提高了数据的可靠性 通过主从数据库/主备集群之间的复制,来分离OLTP和OLAP请求 提高可用性,即使在单副本挂掉的情况下,依然可以有其他副本来提供读写服务 可扩展,通过增加副本来服务更多的读写请求 跨地域数据中心之间的复制,Client通过读写最近的数据中心来降低请求延迟 HBase中的Replication指的是主备集群间的复制,用于将主集群的写入记录复制到备集群。HBase目前共支持3种Replication,分别是异步Replication、串行Replication和同步Replication。 异步Replication 如果想把HBase的Replication搞清楚,首先需要了解下HBase的架构。 HBase集群是由一组进程组成的,进程按角色分为Master和RegionServer,其中Master负责DDL操作,比如建表、删表,而RegionServer负责DML操作

HBase sequenceId知识点略记

守給你的承諾、 提交于 2020-05-04 09:34:24
在HBase中,sequenceId是实现一致性的灵魂,这里的一致性有两方面意思: 顺序性,即先写的先被读到,未提交的写不能被读到; 完整性,包含如下几点; 未持久化到hfile的数据,对应的wal文件不能删除 如果由于wal文件过多需要清理,则需要先把对应的数据持久化 异常恢复过程中,需要能够找出wal文件中尚未持久化的部分 以下从seqId的生成、保存和使用几方面对相关知识点进行了整理; 在哪里生成 1、每个HRegion都对应了一个的MultiVersionConcurrencyControl,该类中有2个变量:readPoint和writePoint,rpcHandler处理写请求的过程中,在写wal之前,会通过将writePoint加1来得到最新的seqId,然后创建1个WriteEntry,封装了该seqId和代表是否完成的状态,最后放入到1个链表中,代码如下: synchronized (writeQueue) { long nextWriteNumber = writePoint.incrementAndGet(); WriteEntry e = new WriteEntry(nextWriteNumber); writeQueue.add(e); action.run(); return e; } 在哪些地方保存 写wal

spark成长之路(1)spark究竟是什么?

人盡茶涼 提交于 2020-05-04 04:27:28
今年6月毕业,来到公司前前后后各种事情折腾下来,8月中旬才入职。本以为终于可以静下心来研究技术了,但是又把我分配到了一个几乎不做技术的解决方案部门,导致现在写代码的时间都几乎没有了,所以只能在每天下班后留在公司研究一下自己喜欢的技术,搞得特别晚才回,身心俱疲。 唉~以前天天写代码时觉得苦逼,现在没得代码写了,反而更累了。。。 言归正传,这次准备利用空余的时间,好好研究下大数据相关的技术,也算是弥补下自己的技术短板吧。这一个系列的文章是我从一个大数据小白开始学习的过程,不知道我究竟能学到哪个程度,也不清楚自己是否会半途而废,但是希望能尽量坚持下去,也希望看到这一系列博客的读者能更我一起努力,一起进步! 首先我们来看一下spark究竟是什么。相信很多读者跟我一样,听说过hadoop,也知道spark,更知道spark是现在最火的大数据技术,所以一直有一个疑问:spark是不是替代能够hadoop的下一代大数据技术?答案是:不是! 首先我们看看spark的官网介绍:Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports

spark系列-2、Spark 核心数据结构:弹性分布式数据集 RDD

丶灬走出姿态 提交于 2020-05-03 18:15:17
一、RDD(弹性分布式数据集) RDD 是 Spark 最核心的数据结构,RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是 Spark 对数据的核心抽象,也是最关键的抽象,它实质上是一组分布式的 JVM 不可变对象集合,不可变决定了它是只读的,所以 RDD 在经过变换产生新的 RDD 时,原有 RDD 不会改变。 1.1、设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销。显然,如果能将结果保存在内存当中,就可以大量减少IO。RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的落地存储,大大降低了数据复制、磁盘IO和序列化开销。 1.2、RDD概念 一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段(HDFS上的块),并且一个RDD的不同分区可以被保存到集群中不同的节点上

Geomesa-Hbase集群部署

爱⌒轻易说出口 提交于 2020-05-03 16:30:28
本文记录一下Geomesa-Hbase集群部署,在单机部署的基础上 https: // www.cnblogs.com/help-silence/p/12817447.html 1.搭建集群 https: // www.cnblogs.com/help-silence/p/12517442.html 2.安装Hadoop分布式环境 https: // www.cnblogs.com/help-silence/p/12518731.html 3.安装Zookeeper https: // www.cnblogs.com/help-silence/p/12523466.html 4.修改Hbase配置为集群模式 https: // www.cnblogs.com/help-silence/p/12524484.html 5.Geomesa-Hbase不需要改动 6.测试环境 可以参照Geomesa-Hbase单机版的测试方法; 这里我用了idea中的代码测试,直接运行hbase的qucikstart就可以使用,由于maven编译qucikstart一直没有编译成功,我是用idea中maven插件进行编译, 一些没有找到的依赖包,我手动下载并导进工程(geotools相关的jar包,还有Geomesa-Hbase的lib下的所有jar包),可以运行

Hbase API 创建表错误记录 for Docker 容器部署集群

半城伤御伤魂 提交于 2020-05-01 17:54:22
Hbase API 创建表错误记录 Demo方法: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; public class CreateTableDemo { public static void main(String[] args) throws Exception{ Configuration config = HBaseConfiguration.create();// 获取连接信息 //创建连接 try(Connection connection =