Hadoop大数据平台架构与实践

2505
3

江湖人称潇洒哥 数据达人Lv4

发表于2018-11-20 17:19

楼主
一、什么是Apache Hadoop?

1.1 定义和特性
可靠的、可扩展的、分布式计算开源软件。
Apache Hadoop软件库是一个框架,允许使用简单的编程模型,在计算机集群分布式地处理大型数据集。
它可以从单个服务器扩展到数千台机器,每个机器都提供本地计算和存储。
每一台计算机都容易出现故障,库本身的目的是检测和处理应用层的故障,因此在一组计算机上提供高可用性服务,而不是依靠硬件来提供高可用性。

1.2 主要模块:
Hadoop Distributed File System(HDFS): 一个分布式文件系统,它提供对应用程序数据的高吞吐量访问。
Hadoop YARN: 作业调度和集群资源管理的框架。
Hadoop MapReduce: 基于YARN的大型数据集并行处理系统。


二、Hadoop安装(以hadoop-1.2.1为例)

2.1 准备条件
Linux操作系统
安装JDK以及配置相关环境变量
下载Hadoop安装包,如:hadoop-1.2.1.tar.gz(官网下载地址:http://hadoop.apache.org/releases.html)


2.2 安装
将hadoop-1.2.1.tar.gz解压到指定目录,如:/opt/hadoop-1.2.1/


2.3 配置hadoop环境变量
在/etc/profile中配置如下信息:
  1. <font face="微软雅黑" size="3">export JAVA_HOME=/opt/jdk1.8.0_131

  2. export JRE_HOME=/opt/jdk1.8.0_131/jre

  3. export HADOOP_HOME=/opt/hadoop-1.2.1

  4. export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/Lib

  5. export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH</font>
复制代码


2.4 修改四个配置文件
这四个配置文件均在/opt/hadoop-1.2.1/conf/目录下。
(a)修改hadoop-env.sh,设置JAVA_HOME:
  1. <font face="微软雅黑" size="3"># The java implementation to use.  Required.
  2. export JAVA_HOME=/opt/jdk1.8.0_131</font>
复制代码


(b)修改core-site.xml,设置hadoop.tmp.dir,dfs.name.dir,fs.default.name:


  1. <font face="微软雅黑" size="3"><configuration>
  2.   <property>
  3.     <name>hadoop.tmp.dir</name>     <!-- hadoop临时工作目录 -->
  4.     <value>/home/jochen/hadoop</value>
  5.   </property>
  6.   <property>
  7.     <name>dfs.name.dir</name>       <!-- hadoop源数据目录 -->
  8.     <value>/home/jochen/hadoop/name</value>
  9.   </property>
  10.   <property>
  11.     <name>fs.default.name</name>    <!-- 文件系统namenode => 地址:端口号 -->
  12.     <value>hdfs://localhost:9000</value>
  13.   </property>
  14. </configuration></font>
复制代码
©修改mapred-site.xml,设置mapred.job.tracker:
  1. <font face="微软雅黑" size="3"><configuration>
  2.   <property>
  3.     <name>mapred.job.tracker</name>
  4.     <value>localhost:9001</value>
  5.   </property>
  6. </configuration></font>
复制代码


(d)修改hdfs-site.xml,设置dfs.data.dir:
  1. <font face="微软雅黑" size="3"><configuration>

  2.   <property>

  3.     <name>dfs.data.dir</name>       <!-- dfs文件块存放目录 -->

  4.     <value>/home/jochen/hadoop/data</value>

  5.   </property>

  6. </configuration></font>
复制代码


2.5 格式化
执行命令:
  1. <font face="微软雅黑" size="3">$ hadoop namenode -format</font>
复制代码
正确执行的结果如下所示:
  1. <font face="微软雅黑" size="3">Warning: $HADOOP_HOME is deprecated.
  2. 17/05/19 23:46:05 INFO namenode.NameNode: STARTUP_MSG:
  3. /************************************************************
  4. STARTUP_MSG: Starting NameNode
  5. STARTUP_MSG:   host = ubuntu/127.0.0.1
  6. STARTUP_MSG:   args = [-format]
  7. STARTUP_MSG:   version = 1.2.1
  8. STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
  9. STARTUP_MSG:   java = 1.8.0_131
  10. ************************************************************/
  11. 17/05/19 23:46:05 INFO util.GSet: Computing capacity for map BlocksMap
  12. 17/05/19 23:46:05 INFO util.GSet: VM type       = 64-bit
  13. 17/05/19 23:46:05 INFO util.GSet: 2.0% max memory = 932184064
  14. 17/05/19 23:46:05 INFO util.GSet: capacity      = 2^21 = 2097152 entries
  15. 17/05/19 23:46:05 INFO util.GSet: recommended=2097152, actual=2097152
  16. 17/05/19 23:46:05 INFO namenode.FSNamesystem: fsOwner=jochen
  17. 17/05/19 23:46:05 INFO namenode.FSNamesystem: supergroup=supergroup
  18. 17/05/19 23:46:05 INFO namenode.FSNamesystem: isPermissionEnabled=true
  19. 17/05/19 23:46:05 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
  20. 17/05/19 23:46:05 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
  21. 17/05/19 23:46:05 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
  22. 17/05/19 23:46:05 INFO namenode.NameNode: Caching file names occuring more than 10 times
  23. 17/05/19 23:46:05 INFO common.Storage: Image file /home/jochen/hadoop/dfs/name/current/fsimage of size 112 bytes saved in 0 seconds.
  24. 17/05/19 23:46:06 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/jochen/hadoop/dfs/name/current/edits
  25. 17/05/19 23:46:06 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/jochen/hadoop/dfs/name/current/edits
  26. 17/05/19 23:46:06 INFO common.Storage: Storage directory /home/jochen/hadoop/dfs/name has been successfully formatted.
  27. 17/05/19 23:46:06 INFO namenode.NameNode: SHUTDOWN_MSG:
  28. /************************************************************
  29. SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.0.1
  30. ************************************************************/</font>
复制代码


2.6 启动
  1. <font face="微软雅黑" size="3">$ cd /opt/hadoop-1.2.1/bin
  2. $ ./start-all.sh</font>
复制代码


2.7 查看当前运行的java进程
在Terminal输入命令,出现如下结果表示hadoop安装成功:
  1. <font face="微软雅黑" size="3">$ jps
  2. 12785 JobTracker
  3. 1161 Jps
  4. 23626 TaskTracker
  5. 23275 DataNode
  6. 21659 NameNode
  7. 23436 SecondaryNameNode</font>
复制代码


三、HDFS简介

3.1 HDFS基本概念
HDFS设计架构

块(Block):
HDFS的文件被分成块进行存储
HDFS块的默认大小为64MB
块是文件存储处理的逻辑单元
管理节点(NameNode),存放文件元数据:
文件与数据块的映射表
数据块与数据节点的映射表
DataNode:
DataNode是HDFS的工作节点
存放数据块


3.2 数据管理策略与容错
数据块副本:每个数据块至少3个副本,分布在两个机架内的多个节点
心跳检测:DataNode定期向NameNode发送心跳消息

二级NameNode:二级NameNode定期同步元数据映像文件和修改日志,NameNode发生故障时,二级NameNode替换为主NameNode



3.3 HDFS中文件的读写操作
HDFS读取文件的流程

HDFS写入文件的流程



3.4 HDFS的特点
数据冗余,硬件容错
流式的数据访问(一次写入、多次读取)
适合存储大文件
适用性和局限性
适合数据批量读写,吞吐量高
不适合交互式应用,低延迟很难满足
适合一次写入多次读取,顺序读写
不支持多用户并发写相同文件
3.5 HDFS使用
HDFS命令行操作:
  1. <font face="微软雅黑" size="3">hadoop fs -ls dirpath           // 列出某目录下的文件和目录
  2. hadoop fs -mkdir dirname        // 在HDFS中新建目录
  3. hadoop fs -put filepath dirpath // 将本地文件上传到HDFS
  4. hadoop fs -get filepath dirpath // 从HDFS下载文件到本地
  5. hadoop fs -cat filepath         // 查看文件内容
  6. hadoop dfsadmin -report         // 查看HDFS信息</font>
复制代码


四、MapReduce简介

4.1 MapReduce的原理
分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)



4.2 MapReduce的运行流程
基本概念
Job(作业) & Task(任务)
一个Job可以分成多个Task(MapTask & ReduceTask)
JobTracker(作业管理节点)
客户端提交Job,JobTracker将其放入候选队列中,在适当的时候进行调度,将Job拆分成多个MapTask和ReduceTask,分发给TaskTracker执行。JobTracker的角色:
作业调度
分配任务、监控任务执行进度
监控TaskTracker的状态
TaskTracker(任务管理节点)
通常TaskTracker和HDFS的DataNode属于同一组物理节点,实现了移动计算代替移动数据,保证读取数据开销最小。TaskTracker的角色:
执行任务
汇报任务状态
MapReduce的体系结构

MapReduce作业执行过程



MapReduce的容错机制
重复执行
默认为最多4次后放弃
推测执行
原因:所有Map端运算完成,才开始执行Reduce端。
作用:保证整个任务的计算,不会因为某一两个TaskTracker的故障,导致整个任务执行效率很低。


五、YARN - Hadoop 资源管理器

YARN的基本思想是将资源管理和作业调度/监控的功能拆分到不同的守护进程。这种思想需要有一个全局的资源管理器(RM)和(每个应用程序都要有的)应用程序管理器(AM)。
资源管理器(RM)和节点管理器(NodeManager)形成了数据计算框架。资源管理器(RM)是在系统中所有应用程序间仲裁资源的最终权威。节点管理器(NodeManager)是每台机器的框架代理,负责容器的管理,监控他们的资源使用情况(cpu、内存、磁盘、网络),并向资源管理器(RM)/调度器报告该情况。
每个应用程序的应用程序管理器(AM)实际上是一个特定的框架的库,它的任务是与资源管理器(RM)协商资源,并与节点管理器(NodeManager)一起工作来执行和监视任务。
资源管理器(RM)有两个主要组件:调度程序和应用程序管理器(AM)。
调度程序负责将资源分配给各种运行的应用程序。调度程序是纯粹的调度器,因为它不执行应用程序的状态监视或跟踪。另外,它也不能保证重新启动失败的任务,无论是由于应用程序失败还是硬件故障。
应用程序管理器(AM)负责接收提交的工作,协商执行应用程序的第一个容器,并并提供在失败时重新启动应用程序管理器(AM)容器的服务。每个应用程序管理器(AM)负责从调度程序中协商适当的资源容器,跟踪它们的状态并监视进程。
YARN 还支持资源预定的概念,保留资源以确保重要工作的可预见性执行。预订系统会对资源进行跟踪,对预订进行控制,并动态地指导底层的调度程序,以确保预订是满的。

---------------------
作者:Jochen_M
来源:CSDN


最近看过此主题的会员

esen_4Y3L5ADO80

xzm

前进者

伶俐

ss1017

455842990

399A8B5IQH0A

yy2993

西瓜

缱绻

韦韬然

辰哥

jxchencong

admin

liu1997

lium

3个回答

只看楼主

韦韬然 数据老手Lv5

发表于2018-11-20 17:49

只看该作者

取消 关注该作者的回复

沙发

江湖人称潇洒哥 数据达人Lv4

发表于2018-11-21 11:18

只看该作者

取消 关注该作者的回复

板凳


感谢点赞

韦韬然 数据老手Lv5

发表于2018-11-21 11:27

只看该作者

取消 关注该作者的回复

地板



我就是来水个经验,嘿嘿

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号