某10+经验大数据老师略讲大数据启蒙

有很多人想学大数据,但不知道从何下手。掌握这几点入门大数据。

分治思想

分治思想是学习大数据的必备思想。思考下面几个问题,体会一下什么是分治思想。

1、如何存储一万个元素(数字或单词)?

可以用array、hash、table

2、如何查找某一个元素?最简单的遍历方式复杂度是多少?

如果元素是数组存的,复杂度是logN太高了。

3、如果我期望复杂度是O(4)呢?

最多遍历4次。这怎么可能!

解决方法:把数据存到n个链表中。假设有10000个元素,把他们存到2500个链表中。在数据极尽分散的情况下,每个链上大概有4个元素。不考虑数据倾斜的问题,查找某一个元素的复杂度就是O(4)。

如何把10000个元素存到2500个链表中?假设每个值都不一样,拿到每个值的hashCode,用hashCode对2500取模,取模相同的放到一个链中。这本质上就是用的分治思想,把数据放到多个链里,提高查询效率。

 

 

在大数据领域,有很多技术都是采用分治思想:Redis集群、ElasticSearch、Hbase、Hadoop等。

再思考一个单机处理大数据的问题

需求:有一个非常大的文本文件,里面有很多很多的行,只有两行一样,他们出现在未知的位置,需要查找他们。

要求:单机,而且可用的内存很少,无法将文件全部加载到内存中。

循环遍历:先把大文件的第一行放入内存,再读剩下的行,找有没有和它一样的。这样一个一个的往下找。

分治思想:一行一行地读取这个大文件,计算每行的hashCode跟2000取模,模相同的放到一个文件中。经过一遍遍历之后,这个大文件就被分成了2000个小文件。我可以确定的是,相同的行一定被分到同一个文件里了。因为相同的数据的hashCode一定相同,模就一定相同,相同的行就一定会落到某一个文件里。最后挨个遍历小文件就能找到相同的行了。这样作最多要遍历两次。

已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击进入

 

假设Io速度是500MB每秒,1T文件读取一遍需要约30分钟。循环遍历需要N次io时间分治思想可以使时间变为2次io。所以分治思想对解决大数据问题很有用。下面再举一个分治思想的例子:

还是一个很大的文件,里面每一行存的都是数字,现在要用分治思想对数字排序

解决方法:先把这个大文件拆成一个个的小文件,拆成小文件的方法有很多,比如x>=0&&x<100放到一个小文件,依次类推。这样拆出来的小文件和小文件之间是有序的,而小文件内部是无序的。接下来只需要把小文件加载到内存中排一下序就行了。

上面的三个案例:

1、使用O(4)的复杂度查找某个元素。

2、用很小的内存,查找重复的行。

3、排序。

这三个案例都是使用的分治思想。只要把分治思想把握到位,拿捏好了,学习大数据是轻而易举的。大数据几乎99%的技术采用的是分治思想。

并行计算

继续上面查找重复行的问题,使用并行计算,把时间缩短到分钟、秒级别。

假设我们用2000台机器,每台存储1/2000,约500MB的数据。每一行取hashCode模上2000,会拆分成2000个小文件。把每台服务器相同的小文件汇总到一起,读取到内存进行判断。

 

 

假设磁盘io速度是500M/s,拆分500M的文件需要1s,因为可以并行计算,拆分文件的过程只需要1s。

假设网卡速度是100M/s,并行计算只看一台就可以了,500M的文件需要4s,汇总的时间是4s,我们可以夸大到1分钟。

最后再内存中判定的速度很快,假设是1s。

整体需要的时间就是1s+1min+1s,所以使用多态服务器并行计算是可以达到分钟级别的。

计算向数据移动

再并行计算的例子中。有2000台服务器,每台有500M数据。还有2000台是存放计算程序的服务器。我是把数据拉到程序服务器上,还是把程序发到数据服务器上。

把程序拉到数据服务器上,因为程序只有几KB大小,而数据一般都很大,这样做可以减少网络io。

数据本地化读取

数据本地化也是为了减少网络io,本地读取数据一定是比网络传输快。

分治思想、并行计算、计算向数据移动、数据本地化读取,这些思想是学习大数据的重点,掌这些思想学习大数据并不难。

Hadoop

hadoop之父是Doug Cutting。hadoop是象的意思。是Doug Cutting的儿子的一个玩具,因玩具而得名。

Hadoop时间简史

2003年,google的GFS发布了一篇论文《The Google File System》

2004年,google发布《MapReduce:Simplified Data Processing on Large Clusters》

2006年,《Bigtable:A Distributed Storage System for Structured Data》

Hadoop的开发者基于上面3篇论文,研究出了HDFS、MapReduce、HBase。

2008年,Cloudera公司开始提供基于Hadoop的软件和服务,开发了CDH集成了HDFS、MapReduce、yarn、Spark等。

2016年10月hadoop-2.6.5

2017年12月hadoop-3.0.0

Hadoop项目/生态

hadoop项目中集成了很多模块:

 

 

与hadoop相关的apache项目:

  • Ambari
  • Avro
  • Cassandra
  • Chukwa
  • HBase
  • Hive
  • Mahout
  • Pig
  • Spark
  • Tez
  • ZooKeeper

大数据生态

 

 

Sqoop:可以把关系型数据库中的数据导入HDFS系统中。

Flume,Kafka:Flume数据采集,Kafka队列,Flume采集的数据可以到Kafka或者HDFS。

HDFS、Kudu、HBase、Object Store:数据存储

YARN:资源调度

Spark、Hive、MapReduce:分布式计算框架。

大数据生态归根结底是两类技术:分布式存、分布式计算。

存储模型

把1PB数据存到一台服务器上肯定不行,就像把大象(hadoop)装冰箱,哪有那么大的冰箱呀。

所以要把大文件放到N台服务器上,首先要把文件拆分成N块,放到对应的服务器中。还要有一个管理员,记录这个文件被存到了哪些服务器上。

 

 

HDFS是一个主从架构,主是Namenode,从是Datanode。Namenode存的是元数据,就是集群中有哪些文件,文件的属主是谁、文件位置在哪。

客户端读数据,先找Namenode拿到文件位置,在找对应的Datanode读数据。

强烈推荐阅读下列文章

一篇文章告诉你优酷背后的大数据秘密!【大数据开发实战技术】戳我阅读

从术语到Spark,10篇必读大数据学习资源戳我阅读

想成为云计算大数据Spark高手,看这里!戳我阅读

最全最新的大数据系统交流路径!!戳我阅读

年薪百万的大数据开发工程师要如何入门?戳我阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值