Hadoop大数据平台架构与实践

Hadoop的前世今生

Google大数据技术:

1.MapReduce:概念"Map(映射)"和"Reduce(归约)",它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

2.BigTable:是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库

3.GFS:是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。

hadoop革命性变化:

1.成本降低,能用PC机,不用大型机和高端存储

2.软件容错硬件故障视为常态,通过软件保证可靠性

3.简化并行分布式计算,无须控制节点同步和数据交换

Hadoop是一个模仿Google大数据技术的开源实现。是一个开源的分布式存储和分布式计算框架。

Hadoop的功能与优势


Hadoop是一个开源 + 分布式存储(HDFS)分布式计算平台(MapReduce)

Hadoop包括两个核心组成:

HDFS :分布式文件系统,存储海量的数据,64MB的基础块组成的存储(数据量大时也可以128MB乃至更大)

MapReduce:并行计算框架,实现任务分解和调度

Hadoop 可以用来搭建大型数据仓库,PB级数据的存储、处理、分析统计等业务

Hadoop的优势:高扩展、低成本、成熟的生态圈。

Hadoop大数据平台架构与实践_第1张图片

Hadoop的生态系统及版本

Hive:sql语句 ==> Hadoop任务,将sql转化为hadoop能执行的任务,降低了使用Hadoop的门槛

HBASE:存储结构化数据的分布式数据库,提供数据的随机读写和实时访问,实现对表数据的读写功能

zookeeper:监控Hadoop集群里的每个节点的状态,管理整个集群的配置,维护数据节点之间的一致性

Hadoop的版本:1.x和2.0版本

Hadoop的安装


Step1 :准备Linux环境

租用云主机,阿里云,UnitedStack等

Step2 :安装JDK

我使用的是阿里云,安装jdk方法参考http://blog.csdn.net/ch717828/article/details/48395245 

Step3 :配置Hadoop

参考 http://blog.csdn.net/ch717828/article/details/48440173


HDFS中的基本概念


块(Block):HDFS的文件被分成块进行存储,HDFS块的默认大小是64MB(一般设置成128M),块是文件存储处理的逻辑单元

NameNode:NameNode是管理节点,存放文件元数据(HDFS由一个NameNode多个DataNode组成)

(1)文件与数据块的映射表

(2)数据块与数据节点的映射表

DataNode:DataNode是HDFS的工作节点,存放数据块

HDFS体系结构


 HDFS的数据管理与容错

(1)每个数据块3个副本,分布在两个机架内的三个节点

(2)DataNode定期向NameNode发送心跳消息

(3)二级NameNode定期同步元数据映像文件和修改日志。NameNode发生故障时,备胎转正

NameNode发生异常,怎么容错?(Hadoop 2.x的HA,有两个NameNode节点,一台处于Active状态,为主节点,一台处于StandBy状态,为备用节点,两者数据保持一致,主节点发生异常,主动切换到备节点,这样就避免NameNode的单点问题)

HDFS读取文件的流程

1. 客户端向NameNode发起读数据请求;

2. NameNode找出距离最近的DataNode节点信息;

3. 客户端从DataNode分块下载文件;


1.客户端向NameNode发起写数据请求

2.分块写入DataNode节点,DataNode自动完成副本备份

3.DataNode向NameNode汇报储存完成NameNode通知客户端 

 HDFS 特点

(1)数据冗余,硬件容错

(2)流式的数据访问

(3)适合存储大文件

(4)适合数据批量读写,吞吐量高

(5)适合一次写入多次读取,顺序读写。不支持多用户并发写相同文件

 HDFS 优缺点

HDFS优点:

(1)适合大文件存储,支持TB、PB级别的数据存储,并有副本策略;

(2)可以构建在廉价的机器上,并有一定的容错和恢复机制;

(3)支持流式数据访问,一次写入,多次读取最高效;

HDFS缺点:

 (1)不支持大量小文件的存储;

(2)不适合并发写入,不支持文件随机修改;

(3)不支持随机读等低延时的访问方式;

HDFS命令操作演示

[plain]  view plain  copy
  1. hadoop fs -ls /  

类Linux系统:ls , cat , mkdir , rm , chmod , chown等

HDFS文件交互:copyFromLocal(从本地系统拷贝到hdfs系统), copyToLocal(从hdfs系统拷贝到本地系统) , get , put  

查看hdfs根目录: hdfs dfs -ls /

帮助文档:hdfs dfs -help 

mk.txt 上传到本地目录下改名为 mk2.txt(copyToLocal):hdfs dfs -copyToLocal /test/mk.txt /home/mk2.txt

mk.txt 上传到 test 下 (copyFromLocal):hdfs dfs -copyFromLocal /hmoe/mk.txt /test/

MapReduce原理

MapReduce是一种编程模型,是一种编程方法,是抽象的理论;

思想:分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)。

YARN(Haoop2之后的资源管理器)概念

      1.ResourceManager:分配和调度资源;启动并监控ApplicationMaster; 监控NodeManager。

      2.ApplicatonMaster:为MR类型的程序申请资源,并分配给内部任务;负责数据的切分;监控任务的执行及容错;

      3.NodeManager:管理单个节点的资源;处理来自ResourceManager的命令;处理来自ApplicationMaster的命令。

MapReduce编程模型

输入一个大文件,通过Split之后,将其分为多个分片;

每个文件分片由单独的机器去处理,这就是Map方法  ;

将各个机器计算的结果进行汇总并得到最终的结果,这就是Reduce方法; 

 MapReduce运行流程

Job & Task:一个Job可以分成多个map task和 reduce task

JobTracker:作业调度、分配任务、监控任务执行进度、监控TaskTracker的状态

TaskTracker:执行任务、汇报任务状态





MapReduce应用案例--WordCount单词计数







代码:….


在云服务器上,执行代码



编译

javac -classpath /usr/hadoop/hadoop-1.2.1/hadoop-core-1.2.1.jar:/usr/hadoop/hadoop-1.2.1/commmons-cli-1.2.jar -d word_count_class/ WordCount.java


打包

cd word_count_class

jar -cvf wordcount.jar *.class


创建输入和输出文件

cd ..

mkdir input

vim file1

内容为

hello world

hello hadoop

hadoop file system

hadoop java api

hello java

vim file2

内容为

new file

hadoop file

hadoop new world

hadoop free home

hadoop free school


将file1 和 file2提交至 hdfs中去

cd ..

hadoop fs -mkdir input_wordcount //hdfs中创建文件夹

hadoop fs -put input/* input_wordcount/   //将file1 和 file2提交至 hdfs中去


可以通过 hadoop fs -ls 命令查看 input_wordcount文件夹的位置


提交

hadoop jar word_count_class/wordcount.jar WordCount input_wordcount output_wordcount


查看结果

hadoop fs -ls output_wordcount  //查看结果文件所在位置 

hadoop fs -cat output_wordcount/part-r-00000 //打开文件










你可能感兴趣的:(大数据)