数据处理

小米流式平台架构演进与实践

旧巷老猫 提交于 2020-01-17 17:12:19
小米业务线众多,从信息流,电商,广告到金融等覆盖了众多领域,小米流式平台为小米集团各业务提供一体化的流式数据解决方案,主要包括数据采集,数据集成和流式计算三个模块。目前每天数据量达到 1.2 万亿条,实时同步任务 1.5 万,实时计算的数据 1 万亿条。 伴随着小米业务的发展,流式平台也经历三次大升级改造,满足了众多业务的各种需求。最新的一次迭代基于 Apache Flink,对于流式平台内部模块进行了彻底的重构,同时小米各业务也在由 Spark Streaming 逐步切换到 Flink。 背景介绍 小米流式平台的愿景是为小米所有的业务线提供流式数据的一体化、平台化解决方案。具体来讲包括以下三个方面: 流式数据存储 :流式数据存储指的是消息队列,小米开发了一套自己的消息队列,其类似于 Apache kafka,但它有自己的特点,小米流式平台提供消息队列的存储功能; 流式数据接入和转储 :有了消息队列来做流式数据的缓存区之后,继而需要提供流式数据接入和转储的功能; 流式数据处理 :指的是平台基于 Flink、Spark Streaming 和 Storm 等计算引擎对流式数据进行处理的过程。 下图展示了流式平台的整体架构。从左到右第一列橙色部分是数据源,包含两部分,即 User 和 Database。 User 指的是用户各种各样的埋点数据,如用户 APP 和 WebServer

Hadoop MapReduce Shuffle 详解

孤街醉人 提交于 2020-01-17 17:04:49
一、什么是Shuffle机制 在MapReduce中,shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。其在MapReduce中所处的工作阶段是 map输出后到reduce接收前 ,具体可以分为map端和reduce端前后两个部分。在shuffle之前,也就是在map阶段,MapReduce会对要处理的数据进行分片(split)操作,为每一个分片分配一个MapTask任务。接下来 map()函数会对每一个分片中的每一行数据进行处理得到键值对(key,value),其中key为偏移量,value为一行的内容 。此时得到的键值对又叫做“中间结果”。此后便进入shuffle阶段,由此可以看出shuffle阶段的作用是处理“中间结果”,Shuffle机制是整个MapReduce框架中最核心的部分。 二、Shuffle的执行阶段流程 上图是官方对Shuffle过程的描述,通过图片我们可以大致的了解到Shuffle的工作流程。Shuffle并不是Hadoop的一个组件,只是map阶段产生数据输出到reduce阶段取得数据作为输入之前的一个过程。 所以Shuffle阶段应该分为map之后( map的shuffle阶段 )以及 reduce之前( reduce的shuffle阶段 ),如下图所示: 1

Hadoop面向行和面向列格式详解

你说的曾经没有我的故事 提交于 2020-01-17 13:58:42
前言 说到HDFS上面存储数据的格式,一般会想到面向行存储的Avro、SequenceFile(现在较少用);面向列存储的Parquet、ORC等,那么在存储的时候如何选择呢? 面向行存储格式(以Avro和SequenceFile为例) Avro基本概念 Avro是一个 独立于编程语言 的 数据序列化 系统。 引入的原因: 解决Writable类型缺乏语言的可移植性。 Avro数据文件主要是面向跨语言使用而设计的,因此,我们可以用Python语言写入文件,并用C语言来读取文件。 这样的话,Avro更易于与公众共享数据集;同时也更具有生命力,该语言将使得数据具有更长的生命周期,即使原先用于读/写该数据的语言已经不再使用。 Avro的数据格式 Avro和SequenceFile的格式:(Avro与SequenceFile最大的区别就是Avro数据文件书要是面向跨语言使用而设计的) SequenceFile由文件头和随后的一条或多条记录组成(如下图)。SequenceFile的前三个字节为SEQ(顺序文件代码),紧随其后的一个字节表示SequenceFile的版本号。文件头还包括其他字段,例如键和值类的名称、数据压缩细节、用户定义的元数据以及同步标识(这些字段的格式细节可参考SequenceFile的文档http://bit.ly/sequence_file_docs和源码)。如前所述

数据处理奇技巧——hive篇

自古美人都是妖i 提交于 2020-01-17 06:02:48
1、pmod(int a, int b):返回a除以b的余数的绝对值; cast(aaa as int):将string转化成int; cast(aaa as decimal(10, 2)):将string转化成float,保留两位小数; 2、trim(String A):去除A两侧的空格; ltrim(String A):去除左边空格; rtrim(String A):去除右边空格 select trim('abc') from lxw_dual; 3、concat_ws (separator,str1,str2,...) :根据固定的分隔符连接后侧字符串; concat_ws第一个参数是其它参数的分隔符,分隔符的位置放在要连接的两个字符串之间,分隔符可以是一个字符串,也可以是其他参数。 select concat_ws(',','11','22','33');  11,22,33 4、collect_list/collect_set列转行函数: 在本地文件系统创建测试文件: 存储在hive表中: 按用户分组,取出每个用户每天看过的所有视频的名字: 上面结果中,由于霸王别姬李四看了两遍,所以列表中存在重复,去重处理collect_set() 突破group by限制: 还可以利用collect来突破group by的限制,hive中在group

Hadoop 数据库 - HBase

谁说胖子不能爱 提交于 2020-01-17 05:19:50
转自: http://blog.csdn.net/iAm333 1 什么是HBase? HBase,是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。使用HBase技术可以在廉价的PC服务器上搭建起大规模结构化的存储集群。它底层的文件系统使用HDFS,使用Zookeeper来管理集群的HMaster和各Region server之间的通信,监控各Region server的状态,存储各Region的入口地址等。 2. 何时用HBase? 首先想想传统的关系型数据库都有哪些特点,大概的特点有: 支持事务,ACID(原子性、一致性、隔离性和持久性)特性; 行式存储; SQL语句使用起来比较方便; 支持索引、视图等; 在下面几种情况下,可以考虑使用HBase替代关系数据库: 系统需要适应不同种类的数据格式和数据源,不能预先严格定义模式,需要处理大规模数据; 不强调数据之间的关系,所要存储的数据是半结构化或非结构化的; 数据非常稀疏; 想要更好的进行扩展; 比如谷歌就将BigTable用来存储网页的索引数据,索引数据就很好的满足了上面的几点要求。 3. 与Hive、Pig的区别? HBase是低延迟、非结构化和面向编程的,而Hive是高延迟、结构化和面向分析的; Hive本身不存储和计算数据,它完全依赖与HDFS和MapReduce

【Spark SQL】5、DataFrame&DataSet的简单使用

孤人 提交于 2020-01-17 02:51:54
DataFrame与RDD的互操作 /** * DataFrame和RDD的互操作 */ object DataFrameRDDApp { def main ( args : Array [ String ] ) { val spark = SparkSession . builder ( ) . appName ( "DataFrameRDDApp" ) . master ( "local[2]" ) . getOrCreate ( ) //inferReflection(spark) program ( spark ) spark . stop ( ) } def program ( spark : SparkSession ) : Unit = { // RDD ==> DataFrame val rdd = spark . sparkContext . textFile ( "file:///Users/data/infos.txt" ) val infoRDD = rdd . map ( _ . split ( "," ) ) . map ( line = > Row ( line ( 0 ) . toInt , line ( 1 ) , line ( 2 ) . toInt ) ) val structType = StructType ( Array (

Bigdata-hadoop基础

倖福魔咒の 提交于 2020-01-17 01:08:50
思考 1、Hadoop 是什么?Hadoop 是怎么产生的? 2、Hadoop 应用在哪里?Hadoop 能解决什么问题? 3、Hadoop 怎么使用?Hadoop 是如何工作的? 4、Hadoop 的核心设计思想和底层实现原理是什么? 数据 (data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加 工的的原始素材。 数据可以是连续的值,比如声音、图像,称为 模拟数据 。 也可以是离散的,如符号、文字,称为 数字数据 。 在计算机系统中,数据以二进制信息单元 0,1 的形式表示。 大数据 指的是传统数据处理应用软件不足以处理(存储和计算)它们的大而复杂的数据集 单位 数据量最小的基本单位是 bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、 ZB、YB、BB、NB、DB 大数据特点 容量大,种类多,速度快,价值高 容量(Volume):数据的大小决定所考虑的数据的价值和潜在的信息 新浪微博,3 亿用户,每天上亿条微博 朋友圈,8 亿用户,每天亿级别朋友圈 种类(Variety):数据类型的多样性,包括文本,图片,视频,音频 结构化数据:可以用二维数据库表来抽象,抽取数据规律 半结构化数据:介于结构化和非结构化之间,主要指 XML,HTML 等,也可称非结构化 非结构化数据:不可用二维表抽象,比如图片,图像,音频,视频等 速度

Sqoop的概述与安装

て烟熏妆下的殇ゞ 提交于 2020-01-17 01:00:43
Sqoop的概述与安装 简介 Sqoop是连接RDBMS关系型数据库与Hadoop的桥梁,可以将关系型数据库(MySQL、Oracle)中的数据与Hadoop中的(Hbase、Hive)数据相互转换。 可以高效、可控的利用资源,控制任务发生的并发数,配置数据库的访问时间等 可自动完成数据类型转化与映射 利用MapReduce加快数据的传输速度,使用批处理的方式 4.导入(import) 从传统的数据库中读取元数据信息(Schema、table、Field、field type),把导入功能转化为只有Map 的MapReduce,每个Map获取一块数据,多个数据块并行传输 导出(export) 获取导出表的schema、metahdfs信息,和Hadoop中的字段match;多个map only作业同时进行,完成hdfs中数据导出到关系型数据库 安装 官网下载两个包,地址:http://mirror.bit.edu.cn/apache/sqoop/ 传输到Linux的目录下 配置环境变量 vi /etc/profile export SQOOP_HOME=/home/hadoop/sqoop-1.4.7 export PATH=/home/yoodb/mysql/bin: S Q O O P H O M E / b i n : SQOOP_HOME/bin: S Q O O P H

【Spark SQL】1、初探大数据及Hadoop的学习

China☆狼群 提交于 2020-01-16 19:41:59
初探大数据 centos 6.4 CDH5.7.0 系列http://archive.cloudera.com/cdh5/cdh/5/ 生产或测试环境选择对应CDH版本时,一定要采用尾号一样的版本 OOPTB apache-maven-3.3.9-bin.tar.gz Jdk-7u51-linux-x64.tar.gz Zeppelin-0.7.1-bin.tgz Hive-1.1.0-cdh5.7.0.tar.gz hadoop-2.6.0-cdh5.7.0.tar.gz Mysql-connector-java.5.1.27.bin.jar Scala-2.11.8.tar.gz spark-2.1.0-bin-2.6.0-cdh5.7.0 大数据概述 数据量 速度 多样性、复杂性 基于高度分析的新价值 Hadoop 一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储 Apache顶级项目 访问网站 projetName.apache.org 包括 HSFS/YARN/MapReduce 狭义Hadoop VS 广义Hadoop 狭义的Hadoop:是一个适合大数据分布式存储HDFS、分布式计算MapReduce和资源调度YARN的平台 广义的Hadoop:指的是Hadoop生态系统

MR的shuffle和Spark的shuffle之间的区别

核能气质少年 提交于 2020-01-16 05:04:00
mr的shuffle mapShuffle 数据存到hdfs中是以块进行存储的,每一个块对应一个分片,maptask就是从分片中获取数据的 在某个节点上启动了map Task,map Task读取是通过k-v来读取的,读取的数据会放到环形缓存区,这样做的目的是为了防止IO的访问次数,然后环形缓存区的内存达到一定的阀值的 时候会把文件益写到磁盘,溢出的各种小文件会合并成一个大文件,这个合并的过程中会进行排序,这个排序叫做归并排序 map阶段会涉及到 1.sort排序(默认按字典排序) 2.合并(combiner合并) 3.文件合并(merage 合并 总共有三种,默认是内存到磁盘) 4.压缩(设置压缩就会执行) reduce Shuffle 归并排序完成后reduce端会拉取map端的数据,拉取的这个过程叫做copy过程,拉取的数据合并成一个文件,GroupComparator(默认,这个我们也可以自定义)是专门对文件夹里面的key进行分组 然后就形成k-List(v1,v2,v3)的形式,然后reduce经过业务处理,最终输出到hdfs,如果设置压缩就会执行,不设置则不执行 reduce阶段会涉及到: 1.sort排序 2.分组(将相同的key的value放到一个容器的过程) 3.merge文件合并 4.压缩 spark shuffle的版本一 1