0%

HBase

1. 特性

rowkey 行键(自定义,但是必须有,而且唯一);列族,列族里储存的是 k,v 的形式,并且 v 可以储存多个不同的值,根据时间戳来判断版本,默认返回最近更新的版本;根据 rowkey 的范围来划分不同的 region 区域,然后由不同的 hbase 服务器(region server)来管理不同的 region,这样可以缓解服务器的压力;表在 hdfs 存储时,会按照 region 来创建不同的文件夹,然后再根据列族划分更细的文件夹,最后才是最终文件数据(如果数据量很小的话,会直接保存在 region server 下的一个 memstore 里,另外热数据也会保存在 memstore 里,保证快速查找,缓存空间满了后会写入文件)

Read more »

Hive 建模

1. 存储格式

  • textFile
  • sequenceFile:一种Hadoop API提供的二进制文件,使用方便、可分割、可压缩。将数据以<key,value>的形式序列化到文件中。序列化和反序列化使用Hadoop 的标准的Writable 接口实现。key为空,用value 存放实际的值, 这样可以避免map 阶段的排序过程。
  • rcFile:一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。但是不好用。
  • orc:ecFile升级版。常用于Hive、Presto。
  • parquet:Parquet和ORC都以列的形式存储数据。面向列的数据存储针对读取繁重的分析工作负载进行了优化。常用于Impala、Drill、Spark、Arrow。
  • avro:基于行的格式存储数据。基于行的数据库最适合于大量写入的事务性工作负载。常用于Kafka、Druid。

数据压缩比例上ORC最优,相比textfile节省了50倍磁盘空间,parquet压缩性能也较好
SQL查询速度而言,ORC与parquet性能较好,远超其余存储格式

Read more »

Flume

1. Flume

日志采集

  1. 读数据 组件是 resource
  2. 缓存数据 channel 原因是读写速度的不一致,可以缓存在内存或本地文件,临时储存。看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件
  3. 写数据 组件是 sink
Read more »

Spark

VM options: -Dspark.master=local 还可以是 cluster,local[*], Standalone(只支持简单的固定资源分配策略)

Spark Streaming 用来获取不同的源数据流DStream,为了初始化Spark Streaming就需要先创建一个StreamingContext对象,一个StreamingContext对象可以用SparkConf对象创建。

Read more »

DataSkew 数据倾斜

1. Hive 里的数据倾斜

1.1 null值 空值

尽量提前过滤,或者把无效值替换成随机字符串,比如 if(a is null or trim(a) = "" or trim(a) = "NULL", rand(1)+""),由于是无效值所以不影响最终的取数,但是因为把关联字段打散了,所以就不会把所有的key发送到同一个reduce上,但是需要控制rand(1)的数据范围,小数点位数过多会导致分配的reduce太多,也会影响最终效率。

打散key的方式同样适用于MapReduce和Spark。

Read more »