hadoop数据容易出现错误的地方
最近在搞关于数据分析的项目,做了一点总结。
下图是系统的数据流向。
容易出现错误的地方。
1、数据进入hadoop仓库
有四种来源,这四种是最基本的数据,简称ods,original data source,后续 的数据都是有这些组合而来
a、日志文件
b、http接口
c、DB查询
d、建表指向
最后数据都是以hadoop文件的形式存放在hadoop中。
日志文件:
- 新增机器没有通知数据分析组抓日志
- 根据约定获取日志是遇到错误,例如:约定获取gz的压缩日志,结果没有
- 数据提供方rsync日志出现问题
http接口:
- 接口不稳定,经常500
- 接口提供的数据本来就是错误的
DB:
- 数据结构的变化没有及时通知数据分析组
建表指向:
- 过了约定的时间,还没有提供
2、hadoop文件
hadoop.apache.org

3、hive
参考资料hive.apache.org
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
通过建立hive表,将数据load进入hive表。
drop table if exists rpt_crm_cube_kpi_reserve_room_gb_seq;
create external table rpt_crm_cube_kpi_reserve_room_gb_seq (
report_date string,
area_name string,
manager_name string,
manager_user_id string,
assistant_name string,
hotel_seq string,
hotel_name string,
hotel_grade string,
tree_code string,
city_name string,
confirmed bigint,
reserve_room bigint,
instant_confirmed bigint
) partitioned by (dt string)
*ROW FORMAT DELIMITED*
* FIELDS TERMINATED BY '\001'*
* COLLECTION ITEMS TERMINATED BY '\002'*
* MAP KEYS TERMINATED BY '\003'*
* LINES TERMINATED BY '\n'*
*STORED AS INPUTFORMAT*
* 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'*
*OUTPUTFORMAT*
* 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'*
location '/user/qhstats/rpt/rpt_crm_cube_kpi_reserve_room_gb_seq';
* *标记的地方为约定好的,不能出错,否则数据载入就会出错 *
insert overwrite table rpt_crm_cube_kpi_gb_sales partition (dt = '$DATE', kpi = 'all_lose')
select
3 as target_id,
peer.report_date,
peer.area_name,
peer.tree_code,
peer.manager_name,
peer.manager_user_id,
peer.object,
peer.completed,
rank() over (partition by peer.tree_code order by if(peer.object = 0, -1, 1 - peer.completed * 1.0 / peer.object) desc) as peer_rank,
count(1) over (partition by peer.tree_code) as peer_count,
parent.peer_rank as parent_rank,
parent.peer_count as parent_count
from (
select
report_date,
area_name,
manager_name,
manager_user_id,
tree_code,
sum(1) as object,
sum(if(is_lose = 1, 0, 1)) as completed
from
rpt_crm_cube_kpi_lose_gb_seq
where
dt = '$DATE' and type='ALL'
group by report_date, area_name, manager_name, manager_user_id, tree_code
) peer
inner join (
select
*
from
rpt_crm_cube_kpi_gb_tree_code
where
dt = '$DATE' and kpi = 'all_lose'
) parent
on peer.tree_code = parent.tree_code; EOF
}
容易出错的地方:
- 列的数据类型需要明确,否则有字符串到hive表转换的时候会发生错误。例如在文件里边是 ‘xiaoqiang’,列类型却设置为bigint,最后数据会为null。
4、hive表导入到DB
hive的数据可以导入到DB
function export_to_crm_cube {
$HIVE -e "select * from rpt_crm_cube_kpi_gb_sales where dt = '$DATE' and kpi = 'all_lose' " > $TMP_FILE
$crm_cube_DEV_STR << EOF
delete from crm_cube_kpi_gb_sales where report_date = '$FORMAT_DATE' and target_id = 3;
load data local infile '$TMP_FILE'
into table crm_cube_kpi_gb_sales (
target_id,
report_date,
area,
tree_code,
manager_name,
manager_user_id,
object_cnt,
completed_cnt,
peer_rank,
peer_cnt,
parent_rank,
parent_cnt
);
EOF
}
容易出错的地方:
- 数据类型的转换,数据分析组统计有50%多的概率出现数据类型转换的问题
5、DB到app
DB到App中,数据已经固化在DB了,剩下的就是把数据呈献给用户,这时候数据的准确性就需要保证了。
数据的准确性保证需要依赖一下几点:
取数的正确性,从那些地方取数据。
数据逻辑的正确性,产品提供的数据逻辑是否正确。
数据的准确性,数据逻辑翻译为代码是否正确
前端的呈现,数据都吐正确了,前端是否正确的展现给用户。
总结了数据从hadoop到用户过程中,如意出错的地方,知道那可以出错了,就知道该怎么应对了。
hadoop数据容易出现错误的地方的更多相关文章
- hadoop 集群常见错误解决办法
hadoop 集群常见错误解决办法 hadoop 集群常见错误解决办法: (一)启动Hadoop集群时易出现的错误: 1. 错误现象:Java.NET.NoRouteToHostException ...
- Hadoop数据收集与入库系统Flume与Sqoop
Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享. Hadoop对存储格式没有要求.可以存储用户访问日志.产品信息以及网页数据等数据. 常见的两种数据来源.一种是分散的数 ...
- 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法
使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...
- 什么是core dump linux下用core和gdb查询出现"段错误"的地方
什么是core dump linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...
- linux下用core和gdb查询出现"段错误"的地方【转】
转自:http://blog.chinaunix.net/uid-30091091-id-5754288.html 原文地址:linux下用core和gdb查询出现"段错误"的地方 ...
- hadoop数据流转过程分析
hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转. hadoop:数据流转图(基于hadoop 0.18.3): 这里使用一个例子说明ha ...
- 浅析Mysql 数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollbac ...
- hadoop数据[Hadoop] 实际应用场景之 - 阿里
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.明天在这里和大家一起学习一下hadoop数据 Hadoop在淘宝和支付宝的应用从09年开始,用于对海量数据的离线处置,例如对日志的分析,也涉及内 ...
- 浅析Mysql数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法. 1.用begin,rollback,commit来实现 begin 开始一个事 ...
随机推荐
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析--转载
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- D&F学数据结构系列——二叉排序树
二叉排序树(Binary Sort Tree) 定义:对于树中的每个结点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值. 二叉查找树声明: #ifndef _ ...
- App接口设计
关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/
- ExtJs之Ext.util.ClickRepeater
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- ARM 汇编指令
ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]
引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...
- linux登陆欢迎提示信息的设置
Linux可以设置登录前后的欢迎信息,虽然没啥技术含量,但却是非常实用的一个小技巧. 实现登录消息的功能,可以修改3个文件. 1./etc/issue 本地登陆显示的信息,本地登录前 2./etc/i ...
- (转载) .NET2.0程序集无法在.net 4.0 中运行的解决方案
首先在MSDN上看到 4.0 的更新日志中有如下这条: .NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序. 若要使用 ...
- 内存分析_.Net内存原理介绍
内存原理介绍 1. .Net应用程序中的内存 1.1.Net内存类型 Windows使用一个系统:虚拟寻址系统.这个系统的作用是将程序可用的内存地址映射到硬件内存中的实际地址上.其实际结果 ...
- 一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事
1.一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事