1、Hadoop各目录说明
文件夹名称 | 作用 |
bin | 存放对hadoop相关服务(HDFS,YARN)进行操作的脚本 |
sbin | 存放启动或停止hadoop相关服务的脚本 |
etc | hadoop的配置文件目录,存放hadoop的配置文件 |
lib | 存放hadoop的本地库(对数据进行压缩解压缩功能) |
share | 存放hadoop的依赖jar包和文档,文档可以被删除掉 |
2、各个配置文件的作用
配置文件的名称 | 作用 |
core-site.xml | 核心配置文件,主要定义了我们文件访问的格式 hdfs:// |
hadoop-env.sh | 主要配置我们的java路径 |
hdfs-site.xml | 主要定义配置我们的hdfs的相关配置 |
mapred-site.xml | 主要定义我们的mapreduce相关的一些配置 |
slaves | 控制我们的从节点在哪里 datanode nodemanager在哪些机器上 |
yarm-site.xml | 配置我们的resourcemanager资源调度 |
slaves
把所有从节点的主机名写到这儿就可以,这是告诉hadoop进程哪些机器是从节点。每行写一个,例如:
hadoop02
hadoop03
hadoop04
注:前提是你已经为每个节点进行了hostname的命名。而且每个节点的hosts文件你修改了本地dns的指向,让这些主机指向约定好的IP。然后每个节点的hosts文件保持同步。
core-site.xml
主要配置:
文件系统采用hdfs实现
临时数据存放的位置
缓冲区大小,实际工作中根据服务器性能动态调整
开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟
<configuration>
<!-- 指定namenode的hdfs协议的文件系统通信地址,默认是file:///本地文件系统 需要我们改成 hdfs://分布式文件存储系统 -->
<!-- 可以指定一个主机+端口,也可以指定为一个namenode服务(这个服务内部可以有多台namenode实现ha的namenode服务) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 临时数据存放的位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.8.3/tmp</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 10080 相当与7天 60*24*7-->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
<!-- 故障转移需要的zookeeper集群设置一下-->
<property>
<name>ha.zookeeper.quorum</name>
<value>jokerq1:2181,jokerq2:2181,jokerq3:2181</value>
</property>
</configuration>
hdfs-site.xml
主要配置:
NameNode与2nn的访问地址
NameNode与DataNode数据的存放路径
FSImage,Edits,Checkpoint的存放位置
设置文件的副本数,一份文件保存多少份
设置文件存储的block块大小 128M
<configuration>
<!-- NameNode 数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop-2.8.3/data/name</value>
</property>
<!-- NameNode 的访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>node01:50070</value>
</property>
<!-- DataNode 数据的存放地点。也就是block块存放的目录了-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop-2.8.3/data/data</value>
</property>
<!-- HDFS 的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- HDFS 的权限控制 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!-- 文件存储的block块大小 -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- secondary NameNode 的http通讯地址-->
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop01:50090</value>
</property>
<!-- secondary NameNode 的访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<!-- 元数据操作日志的存放位置 edits的存放位置 -->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/nn/edits</value>
</property>
<!-- 元数据检查点保存的位置 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/snn/name</value>
</property>
<property>
<!-- 开启hdfs的web访问接口。默认端口是50070 , 一般不配 , 使用默认值-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
hadoop-env.sh
主要配置java路径
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_102
mapred-site.xml
注意要将mapred-site.xml.template重命名为 .xml的文件
<configuration>
<!-- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 开启mapreduce的小任务模式,用于调优 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<!-- 配置mapreduce的jobhistory内部通讯地址。可以查看我们所有运行完成的任务的一些情况 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<!-- 配置mapreduce 的jobhistory的访问地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>
</property>
</configuration>
通过,mapred-site.xml,我们又出现了2个访问地址:
MapReduce内部的一个通讯地址:hadoop01:10020
MapReduce外部web访问的地址:hadoop02:19888
Yarn-Site.xml
<configuration>
<!-- 指定我们的resourceManager运行在哪台机器上面 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- NodeManager的通信方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 日志的聚合功能,方便我们查看任务执行完成之后的日志记录 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 聚合日志的保存时长 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--yarn总管理器的IPC通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop01:8032</value>
</property>
<!--yarn总管理器调度程序的IPC通讯地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop01:8030</value>
</property>
<!--yarn总管理器的IPC通讯地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop01:8031</value>
</property>
<!--yarn总管理器的IPC管理地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop01:8033</value>
</property>
<!--yarn总管理器的web http通讯地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>singlehost:8088</value>
</property>
</configuration>
这个文件就是配置资源管理系统yarn了,其中主要指定了一些节点资源管理器nodemanager,以及总资源管理器resourcemanager的配置。 可以看到这个配置中,跟mapreduce框架是相关的。
可见yarn首先是为了支持mapreduce这个模型,之后很多其他的框架都是基于mapreduce以及yarn的功能基础上开发出来的。