MapReduce

数据运营者的福音:海量数据处理利器Greenplum

折月煮酒 提交于 2020-03-01 14:32:05
前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为很多运营者为之苦恼的问题!随着Greenplum的异军突起,以往大数据仓库所面临的很多问题都得到了有效解决,Greenplum也成为新一代海量数据处理典型代表。本文结合个推数据研发工程师李树桓在大数据领域的实践,对处理庞大的数据量时,如何选择有效的技术栈做了深入研究,探索出Greenplum是当前处理大数据仓较为高效稳定的利器。 一、Greenplum诞生的背景 时间回到2002年,那时整个互联网数据量正处于快速增长期,一方面传统数据库难以满足当前的计算需求,另一方面传统数据库大多基于SMP架构,这种架构最大的一个特点是共享所有资源,扩展性能差,因此面对日益增长的数据量,难以继续支撑,需要一种具有分布式并行数据计算能力的数据库,Greenplum正是在此背景下诞生了。 和传统数据库的SMP架构不同,Greenplum主要基于MPP架构,这是由多个服务器通过节点互联网络连接而成的系统,每个节点只访问自己的本地资源(包括内存、存储等),是一种完全无共享(Share Nothing)结构,扩展能力较之前有明显提升。 二、解读 Greenplum架构 Greenplum 主要由

hadoop2x WordCount MapReduce

孤街浪徒 提交于 2020-03-01 12:39:53
package com.jhl.haoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser;

spark内核揭秘-01-spark内核核心术语解析

和自甴很熟 提交于 2020-03-01 09:58:34
Application: Application是创建了SparkContext实例对象的spark用户,包含了Driver程序: Spark-shell是一个应用程序,因为spark-shell在启动的时候创建了一个SparkContext对象,其名称为sc: Job: 和Spark的action相对应,每一个action例如count、saveAsTextFile等都会对应一个job实例,该job实例包含多任务的并行计算。 Driver Program: 运行main函数并且创建SparkContext实例的程序 Cluster Manager: 集群资源的管理外部服务,在spark上现在有standalone、yarn、mesos等三种集群资源管理器,spark自带的standalone模式能够满足大部分的spark计算环境对集群资源管理的需求,基本上只有在集群中运行多套计算框架的时候才考虑yarn和mesos Worker Node: 集群中可以运行应用代码的工作节点,相当于Hadoop的slave节点 Executor: 在一个Worker Node上为应用启动的工作进程,在进程中赋值任务的运行,并且负责将数据存放在内存或磁盘上,必须注意的是,每个应用在一个Worker Node上只会有一个Executor,在Executor内部通过多线程的方式并发处理应用的任务。

网站日志中的UserAgent分析

允我心安 提交于 2020-03-01 08:36:29
浏览器访问网站时,会提交UserAgent信息,里面包含操作系统/浏览器类型/渲染引擎,可以据此大致评估网站的客户端分布。特别是移动设备会在UserAgent中包含设备型号信息,所以有可能根据UserAgent分析移动设备类型,进而针对不同设备实施改善用户体验等优化工作。 看一个UserAgent的例子: Mozilla/5.0 (Linux; Android 4.4.2; Che2-TL00M Build/HonorChe2-TL00M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 这是来从Android 4.4.2的华为手机Che2-TL00M的HTTP请求中提取出来的UserAgent信息,使用浏览器是Chrome30. 很多网站会根据UserAgent信息判断应该如何给客户端应答。但由于UserAgent内容没有规范可循,各个浏览器厂家可以自行定义其内容,甚至普通用户可以在访问网站时,通过工具自行修改UserAgent信息,比如Chrome就可以干这件事。各浏览器厂商为了服务器判断时得到赦免,会加入Mozilla/Safari/AppleWebKit/Geko等字样,都是欺诈。因此,网站服务器收到的UserAgent不一定完全准确

在海量数据里查询多少条数据的这类问题经常被问起,该如何回答?

旧巷老猫 提交于 2020-02-29 02:34:38
1、海量日志数据,提取出某日访问百度次数最多的那个IP IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个 IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。    假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。   典型的Top K算法,还是在这篇文章里头有所阐述。 文中,给出的最终算法是:第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成排序;然后,第二步、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。 即,借助堆结构,我们可以在log量级的时间内查找和调整/移动。因此,维护一个K

分布式学习最佳实践:从分布式系统的特征开始(附思维导图)

二次信任 提交于 2020-02-29 02:02:14
什么是分布式系统 回到顶部   分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是 利用更多的机器,处理更多的数据 。   首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。   在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是需要存储的。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。   那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片( partition) 。对于计算,那么就是对计算任务进行切换,每个节点算一些,最终汇总就行了,这就是MapReduce的思想;对于存储

100亿数据找出最大的1000个数字(top K问题)

自古美人都是妖i 提交于 2020-02-29 00:47:44
在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。例如,在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载最高的前10首歌等。 1、最容易想到的方法是将数据全部排序 。该方法并不高效,因为题目的目的是寻找出最大的10000个数即可,而排序却是将所有的元素都排序了,做了很多的无用功。 2、局部淘汰法 。用一个容器保存前10000个数,然后将剩余的所有数字一一与容器内的最小数字相比,如果所有后续的元素都比容器内的10000个数还小,那么容器内这个10000个数就是最大10000个数。如果某一后续元素比容器内最小数字大,则删掉容器内最小元素,并将该元素插入容器,最后遍历完这1亿个数,得到的结果容器中保存的数即为最终结果了。此时的时间复杂度为O(n+m^2),其中m为容器的大小。 这个容器可以用(小顶堆)最小堆来实现。我们知道完全二叉树有几个非常重要的特性,就是假如该二叉树中总共有N个节点,那么该二叉树的深度就是log2N,对于小顶堆来说移动根元素到 底部或者移动底部元素到根部只需要log2N,相比N来说时间复杂度优化太多了(1亿的logN值是26-27的一个浮点数)。基本的思路就是先从文件中取出1000个元素构建一个小顶堆数组k,然后依次对剩下的100亿

大数据技术之Hadoop(Hadoop企业优化&常见错误及解决方案)

不羁岁月 提交于 2020-02-28 23:40:49
6.1 MapReduce 跑的慢的原因 6.2 MapReduce优化方法 MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。 6.2.1 数据输入 6.2.2 Map阶段 6.2.3 Reduce阶段 6.2.4 I/O传输 6.2.5 数据倾斜问题 6.2.6 常用的调优参数 1.资源相关参数 (1)以下参数是在用户自己的MR应用程序中配置就可以生效(mapred-default.xml) 表4-12 配置参数 参数说明 mapreduce.map.memory.mb 一个MapTask可使用的资源上限(单位:MB),默认为1024。如果MapTask实际使用的资源量超过该值,则会被强制杀死。 mapreduce.reduce.memory.mb 一个ReduceTask可使用的资源上限(单位:MB),默认为1024。如果ReduceTask实际使用的资源量超过该值,则会被强制杀死。 mapreduce.map.cpu.vcores 每个MapTask可使用的最多cpu core数目,默认值: 1 mapreduce.reduce.cpu.vcores 每个ReduceTask可使用的最多cpu core数目,默认值: 1 mapreduce.reduce.shuffle.parallelcopies

【hadoop】17.MapReduce-wordcount案例

跟風遠走 提交于 2020-02-28 23:26:18
简介 从本章节您可以学习到:wordcount案例。 1、简单实现 1.1、Mapper类 package com.zhaoyi.wordcount; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; /** * 4个参数分别对应指定输入k-v类型以及输出k-v类型 */ public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { super.map(key, value, context); // 1. transport the Text to Java String, this is a line. String

mongodb执行js脚本(一)---shell执行

和自甴很熟 提交于 2020-02-28 21:52:11
mongodb执行js脚本(一)---shell执行 2015年06月09日 10:58:36 张小凡vip 阅读数 21310更多 所属专栏: mongodb基础与运用 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/46414115 作为一个数据库,MongoDB有一个很大的优势—它使用js管理数据库,所以也能够使用js脚本进行复杂的管理 mongodb 的shell是javascript实现的,如果直接使用js实现相应的功能则显得很直观和简便。 比如我们对一些数据进行 统计计算,除了使用mapreduce之外,直接使用js也是很好的选择。 还有一些批处理,数据同步都可以使用js 使用js脚本进行交互的优点与缺点 (1)无需任何驱动或语言支持; (2)方便cron或管理员定时任务; (3)注意点:任然是数据格式的问题; js脚本一般会用来执行以下任务 (1)备份; (2)调度map-reduce命令; (3)离线报告,离线任务; (4)管理员定时任务; 如何运行一个js脚本 ./mongo 127.0.0.1:3003/test –quiet test.js 说明: (1)./mongo mongo客户端-_-; (2)127.0.0.1:3003/test 服务器的ip