大数据及hadoop相关知识介绍
一、大数据的基本概念
1.1什么是大数据
互联网企业是最早收集大数据的行业,最典型的代表就是Google和百度,这两个公司是做搜索引擎的,数量都非常庞大,每天都要去把互联网上的各种各样的网页信息抓取下来存储到本地,然后进行分析,处理,当用户想通过搜索引擎搜索一些他们关心的信息时,Google和百度就从海量的数据当中提取出相对于对用户而言是有用的信息,然后将提取到的结果反馈给用户,据说Google存储的数据量已经到达了上百个PB,这个数据量是非常惊人的。类似于Fackbook这样的SNS(社交网站)因为用户量比较多,用户每天在网站上面分享一些文章,图片,视频,音频等信息,因此每天产生的数据量也是非常庞大的。
在大数据比较火,几乎人人都在说大数据,但到底什么是大数据,恐怕没有多少人知道,鱼目混珠的人太多。大数据不是指很多很多数据。大数据指的就是要处理的数据是TB级别以上的数据,大数据是以TB级别起步的。TB级是什么概念呢?一般计算机中文件的大小都以以下单位来表示:
1Byte(Byte 字节) = 8Bit
1KB (Kilobyte 千字节) = 1024Byte,
1MB (Megabyte,兆字节,简称“兆”) = 1024KB,
1GB (Gigabyte,吉字节,又称“千兆”) = 1024MB,
1TB (Terabyte,太字节,或百万兆字节) = 1024GB,其中1024=2^10 ( 2 的10次方)。
1、电脑中,计数使用的都是二进制,它是以2的次方数来计算的。
千,1KB=2的10次方=1024B,
兆,1MB=2的20次方=1024*1024B=1024KB,
吉,1GB=2的30次方=1024*1024*1024B=1024MB,
太,1TB=2的40次方=1024*1024*1024*1024B=1024GB,
拍,1PB=2的50次方=1024*1024*1024*1024*1024B=1024TB,
艾,1EB=2的60次方=1024*1024*1024*1024*1024*1024B=1024PB,
泽,1ZB=2的70次方=1024*1024*1024*1024*1024*1024*1024B=1024EB,
尧,1YB=2的80次方=1024*1024*1024*1024*1024*1024*1024*1024B=1024ZB.
从上边的换算关系我们可以看出:TB级的数据是比较庞大的,我们普通的计算机硬盘容量大的也就1TB左右,要存储这么庞大的数据量,是根本做不到的,所以数据到达这个规模的时候,普通的数据存储、处理方式已经变得不再适用,大数据的概念也就由此而生。
1.2、大数据的特征
1)大容量
当前,移动互联网的核心网络节点是人,不再是网页,人人都成为数据制造者,短信、微博、照片、录像都是其数据产品;数据来自无数自动化传感器、自动记录设施、生产监测、环境监测、交通监测、安防监测等;来自自动流程记录,刷卡机、收款机、电子不停车收费系统,互联网点击、电话拨号等设施以及各种办事流程登记等。所以第一个特征便是:存储大,计算量大。
2)多样性
随着传感器、智能设备以及社交协作技术的飞速发展,组织中的数据也变得更加复杂,因为它不仅包含传统的关系型数据,还包含来自网页、互联网日志文件(包括点击流数据)、搜索索引、社交媒体论坛、电子邮件、文档、主动和被动系统的传感器数据等原始、半结构化和非结构化数据。在大数据时代,数据格式变得越来越多样,涵盖了文本、音频、图片、视频、模拟信号等不同的类型;数据来源也越来越多样,不仅产生于组织内部运作的各个环节,也来自于组织外部。例如,在交通领域,北京市交通智能化分析平台数据来自路网摄像头/传感器、公交、轨道交通、出租车以及省际客运、旅游、化危运输、停车、租车等运输行业,还有问卷调查和地理信息系统数据。4万辆浮动车每天产生2000万条记录,交通卡刷卡记录每天1900万条,手机定位数据每天1800万条,出租车运营数据每天100万条,电子停车收费系统数据每天50万条,定期调查覆盖8万户家庭等等,这些数据在体量和速度上都达到了大数据的规模。
多样化的数据来源正是大数据的威力所在。
3)快速度
在数据处理速度方面,有一个著名的“1秒定律”,即要在秒级时间范围内给出分析结果,超出这个时间,数据就失去价值了。例如,IBM有一则广告,讲的是“1秒,能做什么”?1秒,能检测出台湾的铁道故障并发布预警;也能发现得克萨斯州的电力中断,避免电网瘫痪;还能帮助一家全球性金融公司锁定行业欺诈,保障客户利益。越来越多的数据挖掘趋于前端化,即提前感知预测并直接提供服务对象所需要的个性化服务,例如,对绝大多数商品来说,找到顾客“触点”的最佳时机并非在结账以后,而是在顾客还提着篮子逛街时。
4)真实性
无论数据量有多么庞大,但是如果数据量不真实的话,再多的数据量也变得毫无意义。数据的重要性就在于对决策的支持,数据的规模并不能决定其能否为决策提供帮助,数据的真实性和质量才是获得真知和思路最重要的因素,是制定成功决策最坚实的基础。追求高数据质量是一项重要的大数据要求和挑战,即使最优秀的数据清理方法也无法消除某些数据固有的不可预测性,例如,人的感情和诚实性、天气形势、经济因素以及未来。在处理这些类型的数据时,数据清理无法修正这种不确定性,然而,尽管存在不确定性,数据仍然包含宝贵的信息。我们必须承认、接受大数据的不确定性,并确定如何充分利用这一点,例如,采取数据融合,即通过结合多个可靠性较低的来源创建更准确、更有用的数据点,或者通过鲁棒优化技术和模糊逻辑方法等先进的数学方法。
二、大数据技术要解决的技术难题
2.1大数据的存储
对于数据来说,我们是要得到里边的信息,信息的获取一个是数据的存储,一个是数据的计算。面对如此庞大的数据量如何进行存储和计算呢?由于历史原因,有些公司在很早对于庞大数据量的存储就想出了比较好的办法,最早采用大数据量存储是NFS网络文件系统。NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS的出现解决了数据的存储问题:它有一些优点:
1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
但是,NFS虽然是解决了海量数据的存储问题,但是在大数据背景下,这种存储方案不再适用,因为大数据不光是要解决数据存储问题,更重要的是海量数据的分析,而NFS在海量数据分析方面不能够充分利用多台计算机同时进行分析。
2.2大数据的计算
面对如此庞大的数据量,怎么进行计算呢?例如移动公司要进行流量日志分析,传统的方法是:
1、读取一行日志
2、抽取手机号和流量字段
3、累加到HashMap中
4、遍历输出结果
那么问题来了,如果数据量变得很大呢,比如一个日志文件里面有几个GB数据,如果仍然一行一行去读,那么就会因为磁盘的IO瓶颈导致效率太低,速度太慢,如果一次性加载到内存,那么就会因为单台计算机的内存空间有限而导致内存溢出,如果将中间结果全部缓存到HashMap中,那么也会因为单台计算机的内存空间有限而导致内存溢出。可以选择采用多线程处理,但是依然无法改变资源瓶颈的现实,因为一台计算器的CPU资源,内存资源,磁盘IO瓶颈是定,创建再多的线程也无法改变这个现实。
三、Hadoop相关概念
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。hadoop的出现,为海量数据的存储和计算提供了可能。
Hadoop的思想来源于Google的几篇论文,Google的那篇MapReduce论文里说:Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages。这就是MapReduce思想,意思是说,MapReduce的出现来源于函数式语言(比如Lisp)中的内置函数map和reduce。函数式语言中,map表示对一个列表(List)中的每个元素做计算,reduce表示对一个列表中的每个元素做迭代计算。它们具体的计算是通过传入的函数来实现的,map和reduce提供的是计算的框架。那么问题来了,reduce既然能做迭代计算,那就表示列表中的元素是相关的,比如对列表中的所有元素做相加求和,那么列表中至少都应该是数值吧。而map是对列表中每个元素做单独处理的,这表示列表中可以是杂乱无章的数据。这样看来,就有点联系了。在MapReduce里,Map处理的是原始数据,自然是杂乱无章的,每条数据之间互相没有关系;到了Reduce阶段,数据是以key后面跟着若干个value来组织的,这些value有相关性,至少它们都在一个key下面,于是就符合函数式语言里map和reduce的基本思想了。
这样我们就可以把MapReduce理解为,把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。Map面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取出key和value,也就是提取了数据的特征。经过MapReduce的Shuffle阶段之后,在Reduce阶段看到的都是已经归纳好的数据了,在此基础上我们可以做进一步的处理以便得到结果。这就回到了最初,终于知道MapReduce为何要这样设计。
3.1、Hadoop的核心组件
海量存储——HDFS(Hadoop分布式文件系统,Hadoop Distributed File System)
- 分布式易扩展
- 廉价易得
- 高吞吐量
- 高可靠性
分布式并行计算——资源调度(Yarn)+编程模型(MapReduce)
- 大容量高并发
- 封装分布式实现细节
- 大大提高分析效率
3.2、Hadoop的学习路线
- Linux系统基本操作能力
- java开发语言
- Hadoop核心组件
- MapReduce或Spark等编程模型
- Zookeeper-Sqoop-Flume等工具组件
- NoSQL技术,Hbase
- 数据分析挖掘、机器学习、Mahout