为满足不断增长的业务变化,京东京麦团队在京东的基础上采用了Hadoop等流行的开源大数据计算引擎。为京东的运营和产品提供决策数据产品——北斗平台。一、Hadoop的应用业务分析大数据是传统计算技术无法处理的大型数据集的集合。它不是单一的技术或工具,而是涉及许多业务和技术领域。目前主流的三大分布式计算系统是:Hadoop、Spark、Strom:Hadoop是目前大数据管理标准之一,在目前很多商业应用系统中都有应用。可以轻松集成结构化、半结构化甚至非结构化数据集。Spark使用内存计算。从多迭代批处理开始,它允许将数据加载到内存中以供重复查询。此外,它还集成了数据仓库、流处理、图计算等多种计算范式。Spark建立在HDFS之上,可以很好的与Hadoop集成。它的RDDs是一个很棒的特性。Storm是一个分布式实时计算系统,用于处理高速、大规模的数据流。为Hadoop添加可靠的实时数据处理能力Hadoop是一个用Java编写的开源框架,允许使用简单的编程模型处理分布在计算机集群中的大型数据集。Hadoop框架应用工程提供了跨计算机集群的分布式存储和计算环境。Hadoop旨在从单个服务器扩展到数千台机器,每台机器都可以提供本地计算和存储。Hadoop适用于海量数据、离线数据和负责任的数据。应用场景如下:场景一:数据分析,如京东海量日志分析,京东商品推荐,京东用户行为分析场景二:离线计算,(异构计算+分布式计算)天文计算场景三:海量数据存储,比如京东的存储集群基于京麦业务的三个实际场景京麦用户分析京麦流量分析京麦订单分析是线下数据,决定使用Hadoop作为京麦数据产品后续会根据数据添加计算引擎到业务的发展,比如Storm等流计算的计算引擎。下图是京麦的北斗系统架构图:(图1)京东北斗系统2.浅谈Hadoop的基本原理Hadoop分布式HDFS:(HadoopDistributedFileSystem)分布式文件系统MapReduce:是一种计算模型和软件2.1HDFS架构HDFS(HadoopFileSystem),是Hadoop的分布式文件存储系统。将一个大文件分解成多个块,每个块保存多个副本。提供容错机制,当副本丢失或宕机时自动恢复。默认每个block保存3份,64M为1个block。根据key-value将Block映射到内存中。(图2)向HDFS写入数据(图3)从HDFS读取数据2.2MapReduceMapReduce是一种编程模型,封装了并行计算、容错、数据分布、负载均衡等细节。MapReduce实现从一个映射映射开始,它将操作映射到集合中的每个文档,然后根据生成的键对它们进行分组,并将生成的键值列表放入对应的键中。缩减(reduce)是将列表中的值缩减为单个值,返回这个值,然后再对key进行分组,直到每个key的list只有一个值。这样做的好处是任务分解后,可以利用大量的机器进行并行计算,减少整个运算的时间。但是如果要我用更通俗的方式来介绍,那么,说白了,Mapreduce的原理就是分而治之的算法。算法:MapReduce程序分三个阶段执行,即map阶段、shuffle阶段和reduce阶段。映射阶段:映射或映射器的工作是处理输入数据。输入数据一般以文件或目录的形式存储在Hadoop文件系统(HDFS)中。输入文件通过线映射器函数传递给线。映射器处理这些数据并创建小块数据。Reduce阶段:这个阶段是:Shuffle阶段和Reduce阶段的结合。reducer的工作是处理来自mapper的数据。处理后,它会产生一组新的输出,这些输出将存储在HDFS中。(图4)MapReduce2.3HIVEhive是一个基于Hadoop的数据仓库工具。可以将结构化数据文件映射成数据库表,并提供完整的sql查询功能。它可以将sql语句转换为MapReduce任务进行操作。这套SQL被称为HQL。方便不熟悉mapreduce的用户使用SQL语言查询、汇总、分析数据。并且mapreduce开发者可以使用自己的mapper和reducer作为插件来支持Hive进行更复杂的数据分析。(图5)HIVE系统架构图从上图可以看出,hadoop和mapreduce是hive架构的基础。Hive架构包括以下组件:CLI(命令行界面)、JDBC/ODBC、ThriftServer、WEBGUI、Metastore和Driver(Complier、Optimizer和Executor)。3、Hadoop进行HIVE操作时遇到的坑,HQL写法不当很容易造成数据倾斜,大致分为以下几类:null数据倾斜,不同数据类型关联造成的数据倾斜,join数据倾斜.只有了解Hadoop的原理,熟练使用HQL,才能避免数据倾斜,提高查询效率。
