前言
HashMap是Java中常用的数据结构,是集合类中的重要存在,其中包含了散列表、链表和红黑树。散列表解决冲突的方法是链地址法,即将散列值相同的元素存放在一个链表中。当冲突过多,链表过长会造成查找效率降低,因此java8中在HashMap中引入红黑树进行优化,当某个散列值下的链表长度过长(长度大于8),会将其转变为红黑树存储,优化查询。涉及到红黑树的操作不会再这里细讲
Hadoop的搭建此次分为伪分布式和分布式,伪分布式分为windows和mac Os、Linux
Hadoop的伪分布式搭建需要提前安装好jdk1.8,选用hadoop3.0.0版本,官方提供的二进制和源码下载网址:https://archive.apache.org/dist/hadoop/common/hadoop-3.0.0/ ,此次的搭建使用二进制包安装,不涉及源码的编译,所以下载的文件为hadoop-3.0.0.tar.gz。
首先将下载好hadoop-3.0.0.tar.gz压缩包,解压到合适的目录下(目录位置用于配置环境变量,用户可以自行选择),为了接下来方便配置的讲解,假设本次例子解压目录为:E:\hadoop-3.0.0,后文的hadoop的xx目录都是该目录下的子目录。
InnoDB中数据都存放在一个空间中,就是表空间。在文件系统中就是idb文件,每个idb文件都是一个表空间。它们之间通过表空间id来区分,在默认情况下,InnoDB使用的是共享表空间,所有数据存放在一个共享表空间ibdata1中。共享表空间可以通过参数innodb_data_file_path
进行配置。
可以同时配置多个文件组成一个共享表空间,如
1 | innodb_data_file_path=/data/ibdata1:2000M;/data/ibdata2:2000M:autoextend |
这里配置了/data/ibdata1和/data/ibdata2两个文件组成表空间,如果两个文件在不同磁盘上,能降低各个磁盘的负载,可以提高数据库的性能。同时,两个文件名后跟了存储大小,表示文件的最大存放空间,而autoextend表示/data/ibdata2若用完了2000M,文件可以自动增长。
HBase的每一个put操作实际上是一个RPC操作,将客户端的数据传输到服务器再返回结果,这只适用于小数据量的操作,如果数据量多的话,每次put都需要建立一次RPC的连接(TCP连接),而建立连接传输数据是需要时间的,因此减少RPC的调用可以提高数据传输的效率,减少建立连接的时间和IO消耗。
HBase的客户端API提供了写缓存区,put的数据一开始放在缓存区内,当数量到达指定的容量或者用户强制提交是才将数据一次性提交到HBase的服务器。这个缓冲区可以通过调用 HTable.setAutoFlush(false)
来开启。而新版HBbase的API中使用了BufferedMutator替换了老版的缓冲区,通过BufferedMutator对象提交的数据自动存放在缓冲区中。
在Hbase中,数据同样是存储在表中,有行和列。但是hbase和关系型数据库(RDBMS)有很大的区别,hbase更像是多维度的map。
hbase的同样有着表(table), 行(row),列(Column),根据表、行、列可以定位到一个单元格(cell)上,这样看来hbase和关系型数据库形式一样,其实不是的,hbase的列包括列簇(column family)和列限定符(column qualifier),一般将列限定符成为列,一行有固定的列簇(由表结构决定),一个列簇包含一系列的列,列没有固定的结构,每一行的列簇下的列可以不相同,列由添加数据决定,可以将hbase的表想象成一个Map<row, Map<column family,Map