1、什么是Hadoop?
解释:Hadoop中有3个核心组件:
- 分布式文件系统:HDFS------实现文件分布式存储在很多的服务器上
- 分布式运算编程框架:MAPREDUCE--------实现在很多机器上分布式并行运算
- 分布式资源调度平台:YARN------帮用户调度大量的MapReduce程序,并合理分配运算资源
2、HDFS整体运行机制
解释:HDFS是分布式文件系统的简称,有着文件系统共同的特征,分别为:
1、有目录结构,顶层目录为/
2、系统中存放的就是文件
3、系统可以对文件进行创建、删除、修改、查看、移动等操作
HDFS的工作机制简单如下:
- 客户把一个文件存入HDFS中,其实HDFS会把这个文件切块后分散存储在N台Linux机器系统上(负责存储文件块的角色是data node)
- 一旦文件被切块存储,那么HDFS中就必须与一个机制来记录用户的每一个文件的切块信息及每一块的具体存储机器(负责记录块信息的角色就是nameNode)
- 为了保证数据的完整性,HDFS可以将每一个文件块在集群中存放多个副本(到底存放几个副本由存入该文件的客户端指定)
最后:一个HDFS系统,由一台运行的nameNode服务器和N台运行的dataNode服务器组成。
3、安装HDFS集群
- 上传Hadoop安装包到服务器
- 修改配置文件:核心参数有 1)指定Hadoop的默认文件系统为hdfs 2)指定hdfs的namenode节点为那台机器 3)指定nameNode存储元数据的本地目录 4)指定datanode存放文件的本地目录
- 修改Hadoop-env.sh ,这里主要是修改Java的安装路径:
export JAVA_HOME=/root/apps/jdk1.8.0_60
- 修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <! 指定Hadoop的默认文件系统 -->
<value>hdfs://hdp-01:9000</value> <! 指定hdfs的nameNode节点存在那个机器上 -->
</property>
</configuration> - 修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/dfs/name</value> <!--指定nameNode存放元数据的本地目录-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/dfs/data</value> <!--指定dataNode存放文件数据的本地目录-->
</property>
</configuration> - 将Java路径和Hadoop路径加入到/etc/profile下
- 启动HDFS:首先初始化nameNode的元数据目录,执行hadoop namenode-format后将会得到1)生成一个全新的元数据存储目录 2)生成记录元数据的文件fsimage 3) 生成集群的相关标识,如:集群id--clusterID
- 启动namenode的进程:hadoop-daemon.sh start namenode 启动datanode hadoop-daemon.sh start datanode,最后可以在windows上用浏览器查看:例如http://hdp-01:50070
4、HDFS的客户端
解释:HDFS的客户端有多种形式:网页,命令行。
文件的切块大小和存储的副本数量,都是由客户端决定的,所谓的客户端决定,是通过配置参数来决定的,切块大小的参数:dfs.blocksize ,副本的数量:dfs.replication
上面两个参数应该配置在客户端机器的hadoop目录中的hdfs-site.xml中配置
<property>
<name>dfs.blocksize</name>
<value>64m</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
5、hdfs的核心工作原理
什么是元数据?hdfs的目录结构以及每一个文件的块信息(块的id,块的副本数量,块的存储位置)
元数据由谁来负责?namenode
namenode 把元数据记录在哪里?namenode的实时完整元数据存放在内存,namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件
namenode会把引起元数据变化的客户端操作记录在edits日志文件中
secondarynamenode会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits文件,对内存中的元数据对象进行修改(整合),整合完成后将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像上传给namenode,这个过程叫做checkpoint
注意:secondarynamenode 每次做checkpoint操作的时候,都需要从namenode上下载上次的fsimage镜像文件吗?第一次checkpoint需要下载,以后就不需要下载了,因为自己的机器上已经有了。
secondary namenode启动位置的配置
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:50090</value>
</property>
把默认值改成你想要的机器主机名即可
secondarynamenode保存元数据文件的目录配置:
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
</property>
改成自己想要的路径即可:/root/dfs/namesecondary
6、MapReduce的运行平台YARN
mapreduce程序应该是在很多机器上并行启动,而且先执行map task,当众多的maptask都处理完自己的数据后,还需要启动众多的reduce task,这个过程如果用用户自己手动调度不太现实,需要一个自动化的调度平台——hadoop中就为运行mapreduce之类的分布式运算程序开发了一个自动化调度平台——YARN
安装YARN
yarn中有两个角色:主节点ResourceManager 从节点:Node Manager
Resourcemanager应该安装在单独一台机器上,NodeManager应该与HDFS中的datanode重叠在一起
修改配置文件yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp-04</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
启动yarn用sbin/yarn.sh,停止用sbin/stop.sh
启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:
看resource mananger是否认出了所有的node manager节点