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的功能基础上开发出来的。