最近在搞关于数据分析的项目,做了一点总结。

下图是系统的数据流向。
容易出现错误的地方。

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数据容易出现错误的地方的更多相关文章

  1. hadoop 集群常见错误解决办法

    hadoop 集群常见错误解决办法 hadoop 集群常见错误解决办法: (一)启动Hadoop集群时易出现的错误: 1.   错误现象:Java.NET.NoRouteToHostException ...

  2. Hadoop数据收集与入库系统Flume与Sqoop

    Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享. Hadoop对存储格式没有要求.可以存储用户访问日志.产品信息以及网页数据等数据. 常见的两种数据来源.一种是分散的数 ...

  3. 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法

    使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...

  4. 什么是core dump linux下用core和gdb查询出现"段错误"的地方

    什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...

  5. linux下用core和gdb查询出现"段错误"的地方【转】

    转自:http://blog.chinaunix.net/uid-30091091-id-5754288.html 原文地址:linux下用core和gdb查询出现"段错误"的地方 ...

  6. hadoop数据流转过程分析

    hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转. hadoop:数据流转图(基于hadoop 0.18.3): 这里使用一个例子说明ha ...

  7. 浅析Mysql 数据回滚错误的解决方法

    介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollbac ...

  8. hadoop数据[Hadoop] 实际应用场景之 - 阿里

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.明天在这里和大家一起学习一下hadoop数据 Hadoop在淘宝和支付宝的应用从09年开始,用于对海量数据的离线处置,例如对日志的分析,也涉及内 ...

  9. 浅析Mysql数据回滚错误的解决方法

    介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下   MYSQL的事务处理主要有两种方法.   1.用begin,rollback,commit来实现   begin 开始一个事 ...

随机推荐

  1. Nginx搭建flv视频点播服务器

    Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...

  2. 超快的 FastText

    Word2Vec 作者.脸书科学家 Mikolov 文本分类新作 fastText:方法简单,号称并不需要深度学习那样几小时或者几天的训练时间,在普通 CPU 上最快几十秒就可以训练模型,得到不错的结 ...

  3. 【面试题041】和为s的两个数字VS和为s的连续正数序列

    [面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...

  4. HDU 4148 Length of S(n)(字符串)

    题目 字符串处理 题意要猜,解析见代码: /* 这题每个S(n)是描述S(n-1)值 例如: S(1)=1; S(2)=11;即描述S(1)有1个1=11 S(3)=21;即描述S(2)有2个1=21 ...

  5. POJ 3692

    Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4787   Accepted: 2326 Desc ...

  6. iOS视频压缩

    // // ViewController.m // iOS视频测试 // // Created by apple on 15/8/19. // Copyright (c) 2015年 tqh. All ...

  7. sql连接字符串的方法

    ----乌龟代码---合并列值 --********************************************************************************** ...

  8. javascript中onclick事件能调用多个方法吗

    Q: javascript中onclick事件能调用多个方法吗? A: 可以的,方法如下onclick="aa();bb();cc();"每个方法用“;”分号隔开就行了

  9. C# 6 —— 属性

    记录一下 C# 6 有关属性的语法糖实现,C# 6 涉及到属性的新特性主要有 2 个:自动属性初始化.只读属性赋值与读取. 自动属性初始化(Auto-property initializers) C# ...

  10. mysql之select(二)

    union 联合 作用: 把2次或多次查询结果合并起来. 要求:两次查询的列数一致.推荐:查询的每一列,相对应得列类型也一样. 可以来自于多张表.多次sql语句取出的列名可以不一致,此时,以第1个sq ...