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到用户过程中,如意出错的地方,知道那可以出错了,就知道该怎么应对了。

时间: 2024-10-09 10:42:42

hadoop数据容易出现错误的地方的相关文章

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

Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享. Hadoop对存储格式没有要求.可以存储用户访问日志.产品信息以及网页数据等数据. 常见的两种数据来源.一种是分散的数据源:机器产生的数据.用户访问日志以及用户购买日志.另一种是传统系统中的数据:传统关系型数据库(MySQL.Oracle).磁盘阵列以及磁带. Flume由三部分构成.Master负责负责通信及配置管理,是集群的控制器.Collector用于对数据进行聚合.往往会产生一个更大的数据流.然后加载到HD

什么是core dump linux下用core和gdb查询出现&quot;段错误&quot;的地方

什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-3193279.html 有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误". 呵呵,这种问题我想很多人会经常遇到.遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自

MYSQL导入数据时,出现错误:Incorrect string value: &#39;\xF0\x9F...&#39; for column &#39;XXX&#39; at row 1

Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql的安装目录下找到my.ini,作如下修改: [mysqld] character-set-server=utf8mb4 [mysql] default-character-

AFNetworking请求数据总是返回错误的修改

最近我看到很多AFNet的教程,我就在想怎么那么多人不明白怎么用AFNet.很多人回答的问题都是一样的怎么还有人不会用.我估计很多人都遇到了这个错误 我运行了 这段代码 AFHTTPRequestOperationManager  * manager  =  [ AFHTTPRequestOperationManager  manager ]; [manager GET:@"http://211.154.151.249:8866/ogPortal/getCarType.do"param

hadoop数据流转过程分析

hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转. hadoop:数据流转图(基于hadoop 0.18.3): 这里使用一个例子说明hadoop中的数据流转过程,这个例子是统计一些文章中词汇的总数.首先files表示这些需要统计词汇的文章. 首先,hadoop会把初始数据分配到各个机器的mapper任务中,图中的数字表示数据的依次流向步骤. 1.格式化输入,默认情况下,hadoop会使用 TextInputFormate,也就是按照

今天备份表数据遇到一个错误 Error CODE: 1197 Multi-statement TRANSACTION required more THAN &#39;max_binlog_cache_size&#39; bytes of STORAGE

今天备份表数据遇到一个错误  Error CODE: 1197 Multi-statement TRANSACTION required more THAN 'max_binlog_cache_size' bytes of STORAGE 版本:mysql5.6.35 系统:centos6.5 下面是备份语句 CREATE TABLE FONTANA_BETSBAK AS SELECT * FROM FONTANA_BETS; Error CODE: 1197 Multi-statement T

hadoop数据去重

"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就进入这个实例的MapReduce程序设计. 1.1 实例描述 对数据文件中的数据进行去重.数据文件中的每行都是一个数据. 样例输入如下所示: 1.txt 内容 1 1 2 2 2.txt内容 4 4 3 3 样例输出如下: 1 2 3 4 将测试数据上传到hdfs上/input目录下,同时确保输出目录不存在. 1.2 设计思

数据页逻辑错误的检查及处理方法

前言:数据库越大,使用时间越长,貌似稳定性也在逐步下降.数据页逻辑错误,可能是DBA遇到比较棘手的问题之一,本文将基于实战模式给出一些检查及处理的方法.当然,任何方法都是受制于环境的限制,本文中介绍的方法也只适用于某些特定环境,仅供参考: ===================华丽丽的分割线======================== 前几天碰到一个错误,具体信息如下: SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 6:49413777,但实际为 0

JSP数据交互习题错误总结

1:如果注册完页面有中文字符需要在提交后的页面显示注册信息,切记先把接受到的request的编码方式改为中文:request.setCharacterEncoding("utf-8");不然会出现乱码2:提交表单的时候,错误的把事件绑定到了submit按钮上了,应该绑定到表单标签,获取表单信息! 因为跳转后的页面需要显示上个注册页面的信息,用request.getParameter(String name);这个方法的作用是获取上个请求页面的所有提交的表单信息, 这个方法只能获取有na