鉴于客户需求,有一个12w列的大宽表,那么这么一个大宽表如何实现呢?数据要存储在hadoop的hdfs中,而且要创建索引,多维分析与多维检索
12W列意味着生成的schema文件就要20多m,由于太大,读取这个表的配置一是耗费很多内存,二是解析也很慢。
12w列在hive表中(spark 的hive sql模式),也意味着占用太多的元数据库信息,而且建表也容易失败,要知道hadoop的configuration也是有大小限制的。
让我们来一步一步的通过YDB与ya100来搞定这个12万列的大宽表吧,并且数据是通过kafka实时导入进来的。
具体ydb的使用步骤,这里不详细介绍 ,大家另行参考ydb的官网下载YDB后有详细的文档 http://ycloud.net.cn/yyydb
这里只重点介绍跟12W列有关的注意事项。
第一、ydb_site.yaml的如下配置参数都要改
ydb.realtime.doclist.buffsize: 8
ydb.directory.blockbuffer.percent: 8
ydb.realtime.buffer.ram.writepartion.each.percent: 1
ydb.directory.fieldvalue.reuse.blocksize: 0
ydb.reader.rawdata.start.delay.secs: 60
ydb.realtime.binlog.usebinlog: "false"
ydb.realtime.index.disk.maxcount: 6
ydb.realtime.buffer.maxcount: 6
ydb.realtime.ram.maxcount: 6
ydb.realtime.ram.maxcount: 6
ydb.realtime.buffer.merger.factor: 2
ydb.realtime.ram.merger.factor: 2
ydb.realtime.index.disk.merger.factor: 2
ydb.realtime.index.merger.final.factor: 2
ydb.realtime.doclist.pending.thread.pral: 2
ydb.realtime.doclist.flush.process.threads: 1
kafka.queue.size.kafka_json: 6
第二,ya100_env.sh 如下配置都要改,要至少分配20G以上内存
export YA100_MEMORY=25000m
export YA100_DRIVER_MEMORY=15000m
export YA100_EXECUTORS=2 --根据实际能启动的进程数而修改-注意yarn里的配置
第三,在YDB中创建一个空的表 (注意这里,没有12万的列哦,后面会使用隐藏的动态列)
create table ydb12w (
id string
)
第四、通过kafka或者文件导入数据,数据格式类似下面这样
message.max.bytes与replica.fetch.max.bytes 这两个参数 别忘记调了,不然kafka也导入不了这么大的单条数据
{"tablename":"ydb12w","ydbpartion":"20151011","list":[{"id":7614190,"c0_l":1,"c1_l":15,"c2_l":13,"c3_l":8,"c4_l":0,"c5_l":15,"c6_l":11,"c7_l":5,"c8_l":8,"c9_l":7,"c10_l":13,"c11_l":14,"c12_l":3,"c13_l":7,"c14_l":11,"c15_l":10,"c16_l":4,"c17_l":7,"c18_l":4,"c19_l":5,"c20_l":1,"c21_l":11,"c22_l":9,"c23_l":15,"c24_l":3,"c25_l":5,"c26_l":13,"c27