最近部门有个大表想对每天数据根据内部数据日期进行再划分分区(我们每天采集数据按day采集,但是数据里面包含了collectday字段想进行二次分区),数据量比较大月增大概10E量,全表在50E左右。

执行步骤:

1.起初别的同事负责,发现动态分区用着说数据量不对。自己也没细看感觉sql对也就没去仔细观察。

2.自己着手处理这件事,先考虑用spark进行分区处理,感觉读取速度快的话逻辑应该不复杂,就数据创建对应文件夹到hive下,生成批次的lzo文件,给文件加索引块,修复hive索引表,后来卡在sql重分区后数据着条处理很慢。(这里可能我自己问题,具体为什么那么慢还没找出问题)

3.由于事情太急促需要出报表,改用hive动态分区处理(考虑到spark处理量原不如hive大,这个表增长比较快,为了后期考虑hive也是个不错的选择)。

4.建立动态分区表(考虑两个动态分区:1.数据按天处理好划分,2.内部第二层collectday内部文件处理失败可以按照天重跑不会影响到别的天数,3.单层数据把分层数据混合到一起后续也会有麻烦,后续数据的建立最好不要影响到前面的设计)

5.建立二层hive分区表

CREATE EXTERNAL TABLE `terminal.exter_terminal_flowcollect_collectday`(
`sdkversion`string,
`imei1`string,
`imei2`string,
`brand`string,
`model`string,
`version`string,
`masterstatus`string,
`sendtime`string,
`createtime`string,
`appkey`string,
`ip`string,
`iccid1`string,
`iccid2`string,
`imsi1`string,
`imsi2`string,
`lac1`string,
`cellid1`string,
`lac2`string,
`cellid2`string,
`collectday`string,
`dayhour`string,
`nettype1`string,
`nettype2`string,
`totalfloww`string,
`totalflowd`string,
`totalflowd2`string,
`pubnetip`string,
`mac`string)
PARTITIONED BY(
`day` string,`collect_day` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES(
'field.delim'='|',
'serialization.format'='|')
STORED AS INPUTFORMAT
'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
TBLPROPERTIES(
'transient_lastDdlTime'='1533115537')

动态分区入库

1.入库过程发现执行完入库操作一直失败

2.考虑分区中有非法数据

3.排查出有阿拉伯文一类非数字的字符串(考虑是因为这些数据无法建立表)

4. rlike (collectday,'[0x30,0x39]')采用正则方式过滤了非数字字符串

SET hive.exec.dynamic.partition=true;//设置动态分区
SET hive.exec.dynamic.partition.mode=nonstrict;//设置可以动态方式
SET hive.exec.max.dynamic.partitions=100000;//设置可分区数为十万,默认几千好像具体可查
SET hive.exec.max.dynamic.partitions.pernode=100000;//设置可分区数为十万,默认几千好像具体可查
SET mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec; //设置压缩方式
SET hive.exec.compress.output=true; //设置压缩方式
SET mapreduce.output.fileoutputformat.compress=true; //设置压缩方式,记得建立表时候需要配置输出格式,不然会压缩失败(这个资料看到过,但是自己没去测试)
insert into table terminal.exter_terminal_flowcollect_20190630 partition (day='20190627',collect_day)
select
sdkversion,
imei1,
imei2,
brand,
model,
version,
masterstatus,
sendtime,
createtime,
appkey,
ip,
iccid1,
iccid2,
imsi1,
imsi2,
lac1,
cellid1,
lac2,
cellid2,
collectday,
dayhour,
nettype1,
nettype2,
totalfloww,
totalflowd,
totalflowd2,
pubnetip,
mac,
collectday as collect_day from terminal.exter_terminal_flowcollect where day = '20190627' and rlike (collectday,'[0x30,0x39]');

跑的过程遇到过两个问题

1.个人用户队列(我们服务器分主队列和个人用户队列)资源不足,导致跑不出来,需要切换到主队列资源充分才行

2.考虑加上 distribute by collectday此选项会把map相同key的选项归类到同一个map中,不会生成太多的小数据块,但是由于50E量太大,我在数据归类后导致内存不足(不想调整服务器参数,怕引起别的问题,索引就不加这个参数了,数据块多有问题后面再考虑看看能不能做个合并程序)

3.进行数据加索引(由于第二层目录下文件数达到六万个加索引成为一个很麻烦的事),于是进行索引文件hadoop-lzo-0.4.15-cdh5.4.0.jar 的一些用法研究

发现数据块加索引方式有三种

1.单机模式进行索引添加

好处:直接单机运行不走mapreduce,大大减少了起JOB的时间

坏处:我6万个文件索引生成的过程会引起很夸张的IO流量过程,造成CDH的的那台执行环境IO阻塞,从而影响大量的应用运行,于是废弃了这个办法

2.分布式进行索引添加,分布式索引添加分为两种

1.单对参数模式

  可以对单个目录下所有LZO块进行索引添加,但是多个路径没办法添加。

2.多参数模式

  可以利用里面传递路径参数args,传递进多个路径,对多个路径下的多个LZO文件进行索引的添加

  (后期我利用shell脚本拼接了多个LZO文件存在的分区路径,进行传递到hadoop-lzo-0.4.15-cdh5.4.0.jar中,执行MR加索引。每个索引会一个map,一共6万个map过程,很慢但是不会影响环境)

总结:数据量大首先考虑MR,MR动态分区可以做根据字段建立分区,多个文件加索引过程可以拼接多个参数

转载于:https://www.cnblogs.com/yaohaitao/p/11115161.html

大数据(流量表)任务问题清洗生成新分区表过程相关推荐

  1. 大数据应用导论 Chapter02 | 大数据的采集与清洗

      大家好,我是不温卜火,是一名计算机学院大数据专业大二的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  2. 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目

    大数据项目(基于spark)–新冠疫情防控指挥作战平台项目 文章目录 第一章 项目介绍 1.1 项目背景 1.2 项目架构 1.3 项目截图 1.4 功能模块 第二章 数据爬取 2.1 数据清单 2. ...

  3. snm算法_基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用.PDF

    基于SNM算法的大数据量中文地址清洗方法-计算机工程与应用 108 2014 ,50(5 ) Computer Engineering and Applications 计算机工程与应用 基于SNM ...

  4. 大数据时代下的新生态、新洞察、新趋势 | 神策 2019 数据驱动大会

    10 月 22 日,以"矩•变"为主题的神策 2019 数据驱动大会在北京维景国际大酒店顺利举行,来自全球大数据各大行业的领袖人物聚首北京,融合国际前沿技术与行业实践,深入探讨大数 ...

  5. snm算法_基于SNM算法的大数据量中文商品清洗方法

    基于 SNM 算法的大数据量中文商品清洗方法 ∗ 张苗苗 苏 勇 [摘 要] 摘 要 SNM 算法即邻近排序算法,是英文数据清洗最常用的算法[ 1 ] . 目前为止,因为中英文语义的差异等一些原因,中 ...

  6. 交通大数据,引领交管勤务模式新变革

    [ 亿欧导读 ] 打造城市交通管理工作的 "交通大脑",将是公安交警打造未来城市交通管理"智能化.可视化.扁平化"勤务模式的又一技术实现方向. 文章来源于:黄胜 ...

  7. 问问大家作为大数据总监,刚刚到一家新单位,怎么开展工作比较好?

    群里聊天记录,记录下: 1. 先聊,以听为主,找主要的leader了解情况,找核心职工了解情况,找hrbp,找领导了解战略,期望,目标,了解下面的目标完成,阻碍,反正是各种了解. 2.然后就是去燥,找 ...

  8. 大数据在消防安全中的新应用

    数据分析现在是一个非常热门的话题.事实上,这个术语本身是企业关注的主要热门术语之一.或许是因为数据分析正在改变几乎所有的业务领域.但大数据的许多好处远远超出了这一点.数据分析在许多非商业应用中扮演着重 ...

  9. 大数据下的小媒体——访新蓝网副总监洪永和

    [文章概述] <大数据下的小媒体>作者洪永和先生认为,新媒体在广播电视构架内,目前依旧处于始发阶段,一个比较边缘的地位,并未真正进入主流布局.更多只是作为战略布点的需要存在,作为平台延伸的 ...

最新文章

  1. android native java_在Android Native层中创建Java虚拟机实例
  2. java 9宫格抽奖_前端js实现九宫格模式抽奖(多宫格抽奖)
  3. 移动端1px线的实现
  4. mysql 设置查询变量_MySQL查询优化--调整内部变量的详解
  5. python基础知识点整理(1)
  6. Servlet方法详解
  7. SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件
  8. java 数据库mysql_java是怎么连接mysql数据库的
  9. C++ 从入门到入土(English Version)Section4: Random numbers + machine code
  10. 4. Phpstorm svn
  11. python检测文件的MD5值
  12. cad2017单段线_CAD制图规定-2017最新版.doc
  13. 「 英雄哪里出来 」算法博客阅读指引
  14. photoshop印章效果制作
  15. latex中文小标题_latex定制标题样式
  16. sox处理mp3_sox :音频文件转换命令
  17. 2021-09-09【linux】丨shell使用for循环遍历文件/数组
  18. MVC依赖注入Unity应用学习
  19. 从《雪白血红》说起(1)
  20. [NOI2008]假面舞会

热门文章

  1. java 连接oracle 进行增删改查
  2. IIS+ASP部署相关
  3. FASTSCRIPT脚本实现多国语言
  4. 浅谈javascript函数劫持
  5. 下载文件byte[]
  6. Flutter PageView 使用详细概述
  7. Android Animation --ScaleAnimation
  8. 在生成.net core 3.0程序时不包含nuget库
  9. iOS事件机制,以及不同手势使用touchesBegan等表现形式
  10. 中英文对照 —— 游戏