自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 HBase在建表时的设计原则

预分区默认建表HBase默认建表有一个region,这个region的rowkey是没有边界的,即没有startkey和endkey。在数据写入时,所有的数据都会写入这个默认的region,随着数据量的不断增加,会进行split,分成两个region。产生的问题数据往一个region上写,会有写热点问题。region split会消耗宝贵的IO资源。解决问题在建表时,创建多个空的region,并确定每个regionde startkey和endkey,这样只要rowkey设计能均匀的命中各

2021-04-12 11:04:22 352

原创 RowKey的设计原则

参考文章rowkey长度原则建议越短越好,不要超过16字节,原因如下:数据的持久化文件HFile中是按照keyvalue存储的,如果rowkey过长,这样会极大影响HFile的存储效率。MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样就会降低检索效率。利用了操作系统的最佳特性。rowkey散列原则如果rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序随机生成,地

2021-04-12 10:07:38 257

原创 HBase的数据模型和架构

HBase的功能组件库函数链接到每个客户端。一个Master服务器a、负责管理和维护HBase表的分区信息,(比如,一个表被分成了哪些Region,每个Region被存储在哪台Regin服务器上)b、同时负责维护Region服务器列表。c、实时监测集群中的Region服务器,把特定的Region分配到可用的Region服务器上,并确保整个集群内部不同Region服务器之间 的负载均衡,当某个Region服务器因出现故障而失效时,Master会把该故障服务器上存储的Region重新分配

2021-04-12 08:20:06 150

原创 双亲委派机制

类加载器除了BootstrapClassLoader,其他类加载器均由java实现且全部继承自java.lang.ClassLoaderBootstrapClassLoader(启动类加载器):最顶层的加载器类,由c++实现,负责加载%JAVA_HOME%/lib目录下的jar包和类或被-Xbootclasspath参数指定的路径中的所有类。ExtensionClassLoader(扩展类加载器):主要负责加载目录%JRE_HOME%/lib/ext目录下的类,或被java.ext.dirs系统变量

2021-04-11 14:39:41 63

原创 垃圾收集算法与垃圾收集器

垃圾收集算法标记-清除算法a、首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有被标记的对象。b、产生的问题,效率问题。空间问题,标记清除后会产生大量不连续的碎片。标记-复制算法将内存分为大小相同的两块,每次使用其中的一块。标记整理算法根据老年代的特点提出的一种标记算法,标记过程与“标记-清除”一样,但后续步骤不是直接回收垃圾对象,而是将存活对象移动到一端,然后清除存活对象边界外的所有空间。分代收集算法a、将堆分为新生代和老年代,根据各个年代的特点选择合适的垃圾收集算法。b

2021-04-11 10:35:53 49

原创 判断对象死亡

引用计数法给对象添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是不可能再被使用的。目前的主流算法并没有选择这个算法来管理内存,主要的原因是很难解决对象之间相互循环引用的问题。可达性分析算法基本思想是通过一系列的GC Roots的对象作为起点,从这些节点开始向下搜索,节点走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的话,则证明此对象是不可用的。可作为GC Roots的对象虚拟机栈中引用的对象本地方法栈中引

2021-04-10 17:22:03 73

原创 java字符串

StringString,StringBuffer与StringBuilder的区别

2021-04-10 16:44:50 53

原创 HotSpot虚拟机在堆中对象分配,布局和访问的过程

对象的创建类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过,解析和初始化过,如果没有,执行相应的类加载过程。分配内存在堆中为对象分配内存。初始化零值将分配到的内存空间都初始化为零值。设置对象头对象头的内容,对象是哪个类的实例,如何能找到类的元数据信息、对象的hash码,对象的GC分代年龄等信息。执行init方法把对象按照程序员的意愿进行初始化。对象的内存布局分为3块区域:对象头,实

2021-04-10 16:12:48 102 1

原创 jvm运行时数据区

程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环,跳转、异常处理等功能都需要依赖这个计数器来完成。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各个线程之间计数器互不影响,独立存储,称这类内存区域为线程私有的内存。程序计数器是唯一一个不会出现OutOfMemoryError的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。ja

2021-04-10 15:25:22 46

原创 yarn的job提交流程

用户编写客户端应用程序,向YARN提交应用程序,提交的内容包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序。YARN中的ResourceManager负责接收和处理来自客户端的请求。接到客户端的请求后,Resource...

2021-04-08 16:00:22 158

原创 MapReduce二次排序

二次排序的原理map阶段调用job.setPartitionerClass()对这个Mapper的输出结果进行分区,每个分区映射到一个Reducer。每个分区又调用job.setSortComparatorClass()设置的key比较函数类排序。这本身就是就是一个二次排序。如果没有通过job.setComparatorClass()设置key比较函数类,则使用key实现的compareTo()方法。我们即可以使用IntPair实现的compareTo()方法,也可以专门定义key比较类函数类。R

2021-04-08 15:16:29 157

原创 MapReduce全排序

方法一:每个map任务对自己的输入数据进行排序,但是无法做到全局排序,需要将数据传递到reduce,然后通过reduce进行一次总的排序,但是这样做的要求是只有一个reduce任务来完成。并行度不高,无法发挥分布式计算的特点。方法二:使用多个partition对map的结果进行分区,且分区后的结果是有区间的,将多个分区结果拼接起来,就是一个连续的全局排序文件。hadoop自带的Partitioner的实现有两种,一种为HashPartitioner,默认的分区方式,另一种为TotalOrde

2021-04-08 11:37:26 137

原创 HDFS架构

参考文章

2021-04-08 10:11:40 58

原创 HDFS的读写过程

HDFS的读写过程相关的类FileSystem是一个通用文件系统的抽象类,可以被分布式文件系统继承,所有可能使用Hadoop文件系统的代码都要使用到这个类。Hadoop为FileSystem这个抽象类提供了多种具体的实现,DistributedFileSystem就是FileSystem在HDFS中的实现。FileSystem中的open()方法返回的是一个输出流FSDataInputStream对象,在HDFS文件系统中具体输入流就是DFSInputStream;FileSystem中的crea

2021-04-08 09:32:58 849

原创 按某个属性分组,找出每组另一属性topN

sql参考文章

2021-04-07 22:22:35 65

原创 srot by,order by,cluster by,distrbute by

参考文章order byHive中的order by 跟传统的sql语言中的order by作用是一样的,会对查询结果做一次全局排序,只有Hive的sql中制定了order by所有的数据都会到同一个reducer进行处理。对于大量数据这将会消耗很长时间执行。跟传统sql的区别:如果指定了hive.mapred.mode=strict(默认是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会都会在同一个reducer端进行,数据量大的请况下可能不能出结果,那么在这.

2021-04-05 17:18:18 114

原创 Hive有哪些方式保存元数据,各有什么特点。

Hive支持三种不同的元存储服务器,分别是内嵌式元存储服务器,本地元存储服务器,远程元存储服务器,每种存储方式使用不同的配置参数。内嵌式元存储主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby是内嵌式元存储的默认数据库。在本地模式下,每个Hive客户端都会打开到数据存储的连接并在该连接上请求SQL查询。在远程模式下,所有的Hive客户端都将打开一个到元数据服务器的连接,该服务器依次查询元数据,元数据服务器和客户端之间用Thrift协议通信。...

2021-04-05 16:29:28 1322

原创 Hive的函数:UDF,UDAF,UDTF的区别

参考文章UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。编写UDF函数自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。需要实现evaluate函数。evaluate函数支持重载。使用...

2021-04-05 15:44:41 523 1

原创 Hive分区表和分桶表

分区表Hive中的表对应位HDFS上指定的目录,在查询数据的时候,默认会对表进行全表扫描,这样时间和性能的消耗都非常大。分区为HDFS上表目录的子目录,数据按照分区存储在子目录中,如果查询的where字句中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区可以极大提高查询速度和性能。使用场景通常在管理大规模数据集的时候都需要进行分区,比如将日志文件按天进行分区,从而保证数据细粒度的划分,使得查询性能得到提升。创建分区表使用partitioned by 字句创建分区表。表可以包含

2021-04-05 13:59:21 123

原创 2021-04-05

Hive常用DDL操作Database查看数据列表show databases;使用数据库use database_name;新建数据库create (database|schema) [if not exists] database_name[comment ‘…’] 数据库注释[location hdfs_path] 存储在HDFS上的位置[with dbproperties ()] 指定额外的属性查看数据库信息desc database [extended] d

2021-04-05 13:25:39 55

原创 内部表和外部表

内部表和外部表内部表和外部表的区别创建表时,未被external修饰的是内部表,被external修饰的为外部表。内部表数据存储的位置是hive.metastore,warehouse.dir,外部表数据的存储位置由自己制定。如果没有Location,Hive将在HDFS上的/user/hive/warehouse文件夹以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里。删除内部表会直接删除元数据及存储数据,删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除。...

2021-04-05 11:22:12 213

原创 Hive数据类型

Hive简介及核心概念简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单,容易上手,提供了类似sql的查询语言,使得精通sql但是不了解java编程的人也能很好地进行大数据分析。灵活性高,可以自定义用户函数和存储格式。为超大的数据集设计的计算和存储能力,集群扩展容易。统一的元数据管理,可以与presto/impala/sparksql等共享数

2021-04-05 10:47:58 312

原创 Hive分桶表

Hive分桶表

2021-04-05 09:09:58 117

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除