数据分析要求会hadoop的越来越多,所以课余时间搞起来看看

前提是hadoop集群安装成功. 两台虚拟机的IP地址如下:

master: 192.168.1.100 
slave: 192.168.1.101

大数据与云计算的关系

大数据的本质就是利用计算机集群来处理大批量的数据,大数据的技术关注点在于如何将数据分发给不同的计算机进行存储和处理。

云计算的本质就是将计算能力作为一种较小颗粒度的服务提供给用户,按需使用和付费,体现了:

  • 经济性,不需要购买整个服务器
  • 快捷性,即刻使用,不需要长时间的购买和安装部署
  • 弹性,随着业务增长可以购买更多的计算资源,可以需要时购买几十台服务器的1个小时时间,运算完成就释放
  • 自动化,不需要通过人来完成资源的分配和部署,通过API可以自动创建云主机等服务

云计算的技术关注点在于如何在一套软硬件环境中,为不同的用户提供服务,使得不同的用户彼此不可见,并进行资源隔离,保障每个用户的服务质量。

如果将云计算与大数据进行一些比较,最明显的区分在两个方面:

第一,在概念上两者有所不同,云计算改变了IT,而大数据则改变了业务。然而大数据必须有云作为基础架构,才能得以顺畅运营。

第二,大数据和云计算的目标受众不同,云计算是CIO等关心的技术层,是一个进阶的IT解决方案。而大数据是CEO关注的、是业务层的产品,而大数据的决策者是业务层。

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop集群

如果不懂这三个名词的小伙伴请参考下图

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop_02

hadoop中的关键名词

在早期的hadoop中可以这样理解:
Hadoop=HDFS(文件系统,数据存储技术相关)+ 数据处理框架(Mapreduce)

HDFS:Hadoop分布式文件系统。HDFS就像Hadoop系统的篮子,你把数据整整齐齐码放在里面等待数据分析大厨出手变成性感的大餐端到CEO的桌面上。

MapReduce,数据处理框架是处理数据的工具。具体来说Hadoop的数据处理框架是基于Jave的系统——MapReduce,你听到MapReduce的次数会比HDFS还要多,这是因为:MapReduce是真正完成数据处理任务的工具。

有一点容易搞混的是,Hadoop并不是一个真正意义上的数据库:它能存储和抽取数据,但并没有查询语言介入。Hadoop更多是一个数据仓库系统,所以需要MapReduce这样的系统来进行真正的数据处理。

MapRduce运行一系列任务,其中每项任务都是单独的Java应用,能够访问数据并抽取有用信息。使用MapReduce而不是查询语言让Hadoop数据分析的功能更加强大和灵活,但同时也导致技术复杂性大幅增加。
目前有很多工具能够让Hadoop更容易使用,例如Hive,可以将查询语句转换成MapReduce任务。但是MapReduce的复杂性和局限性(单任务批处理)使得Hadoop在更多情况下都被作为数据仓库使用而非数据分析工具。

Yarn是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。

大数据技术结构

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop_03

其中黄色方框的将是自己需要关注的,除了这几个核心之外其他大多是面向工具层面的编程。

zookeeper的作用是维持数据的一致性,一般是独立的服务器集群
而关于hadoop, storm, spark的区别如下图:

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop集群_04

MR: 关心的是离线数据的处理,不关心时间,所以算作离线计算框架
spark:内存计算框架
storm:实时计算框架
hbase:nosql列式分布式数据库
hive: 建立在hadoop之上的数据仓库,提供了一些用于数据整理、特殊查询和分析存储在hdfs上的数据集工具,比如可以用类似于sql的方式查询hadoop中的数据。

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_大数据_05

HDFS:

采用了主从结构,一个NN,若干个DN。一个典型的应用场景是一台机器运行一个NN实例,若干个服务器上运行若干个DN。另外,还有一个角色是client,就是需要获取分布式文件系统文件的应用程序。在hadoop 2.x版本中,NN可以通过HA 备份,如果出现故障可以实现自动切换。

HDFS主要功能组件

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_数据_06

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop集群_07

HDFS适合做什么

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_大数据_08

对于3,因为多用户多应用的并行读写是分布式文件系统产生的根源,一块硬盘的读写性能比不上多块硬盘同时读写的性能。 1 HDD =75 M/s, 1000 HDD = 75GB/s

对于4, hdfs适用于一次写入多次查询的情况.hdfs中没有修改数据这个概念,要修改只能先删除。不支持并发写

HDFS不适合做什么

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop_09

对于1,因为存的每个文件都在NN中存一份元数据,小文件太多,NN的元数据信息就会很多,由于内存的限制,如果超出就会崩掉。

MapReduce

MR是离线计算处理框架,可将任务分发到上千台服务器集群上,并以一种高容错的方式并行处理大量的数据集,实现hadoop的并行任务处理能力。MR由一个单独运行在主节点上的jobtracker和运行在每个从节点上的tasktracker共同组成。主节点负责调度构成一个作业的所有任务,这些任务分布在从节点上。主节点监控他们的执行情况,并且重新执行失败的任务,从节点仅负责执行由主节点指派的任务,同时调用任务并架空tasktracker的执行。

关于MR编程,它的编程原理利用一个数据的key/value,来产生一个输出的key/value. 用户只需要编写两个函数map和reduce。

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop集群_10

图中每一个map任务和reduce任务都可以同时运行在一个单独的计算节点上,可想而知,效率很高,具体由以下实现:

  1. 数据分布存储。由一个NN和若干个DN组成。在使用方式上很像我们熟悉的单机文件系统,可以创建,删除文件,文件夹等。但HDFS底层把文件切成了若干个block,然后这些block分散的存储在不同的DN上,每个block还可以复制副本存储在不同的DN上,达到容错的目的。NN是核心,记录了每个文件被切割了多少个block,block存储在哪些DN上,DN的状态等。
  2. 分布式并行计算。 一个主的jobtracker控制多个tasktracker。tasktracker负责执行任务,他必须运行与DN上,也就是说DN既是存储节点也是计算节点。
  3. 本地计算,减少带宽瓶颈,移动计算比移动数据的成本低。比如,有ABC三台服务器,在A上有个计算任务,如果资源在A上则不会跑到BC上找资源。
  4. 任务粒度。原始数据切割时,通常让小数据集小鱼或者等于hdfs中一个block的大小(hadoop 1.x版本默认64M,hadoop 2.x版本是128M),这样能够保证一个小数据集位于一台机器上,便于本地计算。有M个小数据集,就启动M个map任务。
  5. 数据分隔
  6. 数据合并
  7. reduce

shuffling 阶段
每个split出来的片段对应着一个map,在shuffling阶段分为paritition,sort and split to disk 问题。Partition (分区)是整数取模运算,有几组模就有几个分区,就会有几个reduce。但是这样会产生数据倾斜的问题,不如一个reduce上n多数据,另个机会没有reduce计算。

Hadoop 2.x 产生的背景

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_云计算_11

Hadoop1与2的比较

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_大数据_12


正是由于有Yarn存在,可以由其他的计算框架如spark,storm。MR等要请求HDFS资源等都需要通过yarn

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_hadoop集群_13

谈论一下大数据云计算与hadoop之间的关联关系 hadoop和云计算怎样联系_云计算_14


推荐用JN,也可以用NFS(不推荐)。ZKFC完成NN的自动切换。客户端访问的ZK

启动Hadoop

进入master使用start-all.sh 来启动集群。启动成功的话应用jps命令可以看到4个进程出现在master下面

5367 NameNode
5572 SecondaryNameNode
5710 ResourceManager
6357 Jps

在slave中会用jps查看会出现3个进程:

5197 DataNode
5324 NodeManager
6751 Jps

从web查看集群是否启动成功

http://master:50070/ 
查看namenode 和datanode 是否正常
http://master:18088/
检查yarn是否正常

运行PI实例检查集群是否成功

hadoop jar ./hadoop-2.5.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar pi 10 10

最后输出:
Estimated value of Pi is 3.20000000000000000000

验证hive是否安装成功

输入hive命令,查看是否可用