Hadoop官方参数表
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml
| 配置文件名 | 配置对象 | 主要内容 |
|---|---|---|
| core-site.xml | 集群全局参数 | 用于定义系统级别的参数,如HDFS URL、Hadoop的临时目录等 |
| hdfs-site.xml | HDFS参数 | 如名称节点和数据节点的存放位置、文件副本的个数、文件读取权限等 |
| mapred-site.xml | Mapreduce参数 | 包括JobHistory Server和应用程序参数两部分,如reduce任务的默认个数、任务所能够使用内存的黑认上下限等 |
| yarn-site.xml | 集群资源管理系统参数 | 配置ResourceManager,NodeManager的通信端口,web监控端口等 |
core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

Hadoop三机集群部署

usr/hadoop-2.4.1/etc/hadoop/hadoop-env.sh
usr/hadoop-2.4.1/etc/hadoop/yarn-env.sh
/usr/hadoop-2.4.1/etc/hadoop/mapred-env.sh
usr/hadoop-2.4.1/etc/hadoop/slaves
usr/hadoop-2.4.1/etc/hadoop/core-site.xml
usr/hadoop-2.4.1/etc/hadoop/hdfs-site.xml
usr/hadoop-2.4.1/etc/hadoop/mapred-site.xml
usr/hadoop-2.4.1/etc/hadoop/yarn-site.xml
hadoop-env.sh,yarn-env.sh,mapred-env.sh配置Java环境
works配置数据结点:注意啊:前提是你已经为每个节点进行了hostname的命名。而且每个节点的hosts文件你修改了本地dns的指向,让这些主机指向约定好的IP。然后每个节点的hosts文件保持同步。
core-site.xml
<configuration>
<!-- 指定hdfs的namenode主机的hostname,这个属性的作用就是定义hdfs文件系统的主机和端口号的。不管在是伪分布式下,还是在完全分布式下,我们都会在etc/hadoop/core-site.xml配置文件里重新定义它的值。主机名可以使用ip,也可以使用主机名称。端口号我们可以自定义,不过在hadoop1.x版本默认使用的是9000,而在hadoop2.x中默认使用的是8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://yutong:9000</value>
</property>
<!--io操作流的配置,这个属性设置的是集群在进行读写操作时,缓冲区的大小。默认是,4096,即4K-->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!--hadoop临时数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/temp</value>
</property>
<!--zookeeper-->
<property>
<name>ha.zookeeper.quorum</name>
<value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cloud01:9001</value>
</property>
<!--namenode元数据存储目录-->
<!--我们可以借助有道翻译,将每个属性的描述翻译一下,而这个属性,有道是这样翻译的:确定DFS名称节点应该在本地文件系统的何处存储名称表(fsimage)。如果这是一个以逗号分隔的目录列表,那么name表将复制到所有目录中,以实现冗余。这样的解释应该很清楚了吧,而且用到了core-default.xml/core-site.xml里的属性hadoop.tmp.dir。当然我们可以在etc/hadoop/hdfs-site.xml进行指定设置。-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<!--工作节点的数据块存储目录 -->
<!--用于定义DFS数据节点应将其块存储在本地文件系统的何处。如果这是一个以逗号分隔的目录列表,那么数据将存储在所有命名的目录中,通常存储在不同的设备上。对于HDFS存储策略,应该用相应的存储类型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK])标记目录。如果目录没有显式标记存储类型,则默认存储类型为磁盘。如果本地文件系统权限允许,将创建不存在的目录。
可以在etc/hadoop/hdfs-site.xml进行指定设置。-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<!--block的副本数-->
<!--DFS上的数据库的副本数,缺省值是3。可以在创建文件时进行指定,如果没有指定,就使用缺省值。-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定block块的的大小-->
<!--文件系统中的块大小,以字节为单位,如134217728表示128 MB。你也可以使用以下后缀(不区分大小写):k,m,g,t,p,e以指定大小(例如128k, 512m, 1g等)。-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!--dfs namenode web ui使用的监听地址和基本端口。可以在etc/hadoop/hdfs-site.xml进行指定设置。-->
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:50070</value>
</property>
<!--在namenode和datanode中启用WebHDFS (REST API)。false表示不启用。-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!--这个属性用于指定在进行mapreduce作业时,yarn使用mapreduce_shuffle混洗技术。这个混洗技术是hadoop的一个核心技术,非常重要。可以在yarn-site.xml里进行设置。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--用于指定混洗技术对应的字节码文件。-->
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--用于指定resourcemanager的主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<!--用于指定在RM中的应用程序管理器接口的地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<!--用于指定调度程序接口的地址。-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<!--用于指定rm下的resource-tracker的地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<!--用于指定RM管理界面的地址。-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
<!--用于指定RM的web访问的地址-->
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
</property>
</configuration>
mapred-site.xml
<configuration>
<!--指定运行mapreduce的环境是yarn -->
<!--这个属性用于指定执行MapReduce作业的运行时框架。属性值可以是local,classic或yarn。我们可以在etc/hadoop/mapred-site.xml里来重新指定值。不过呢,在etc/hadoop/目录下没有mapred-site.xml文件,倒是有一个mapred-site.xml.template样板。我们可以复制一份,将名称改为mapred-site.xml。-->
<property>
<!---- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--指定了查看运行完mapreduce程序的服务器的IPC协议的主机名和端口号。可以通过mapred-site.xml进行设置-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<!--指定了使用webui查看mapreduce程序的主机名和端口号。可以通过mapred-site.xml进行设置。-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
<description>MapReduce JobHistory Server Web UI host:port</description>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*, $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
works
<!--datanode机器群-->
如果集群是第一次启动,需要格式化namenode
hdfs namenode -format
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
再次总结,我们配置文件中出现的端口:
主namenode有个hdfs协议的访问地址:singlehost:9000 (是一个IPC协议,可见是给本机hadoop进程用的)
secondNamenode有个http协议的访问地址:singlehsot:9001 (这是个secondnamenode的http地址)
hdfs开启了web监视后,主namenode有个默认的http访问地址:singlehost:50070 (通过他来查看hdfs状况)
MapReduce内部的一个通讯地址:singlehost:10020 (估计是TCP协议)
MapReduce外部web访问的地址:singlehost:19888 (肯定是http协议,不过暂时无法访问)
singlehost:8030 (Yarn的内部IPC通讯地址)
singlehost:8031 (Yarn的内部IPC通讯地址)
singlehost:8032 (Yarn的内部IPC通讯地址)
singlehost:8033 (Yarn的内部IPC通讯地址)
singlehost:8088 (Yarn的外部HTTP通讯地址)
IP动态问题
xcall脚本
#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if [ ! -n "$cmd" ]
then
echo "command can not be null !"
exit
fi
# 获取当前登录用户
user=`whoami`
# 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致,同上
for (( host=1;host<=3;host++ ))
do
echo "================current host is node0$host================="
echo "--> excute command \"$cmd\""
ssh $user@node0$host $cmd
done
echo "excute successfully !"
#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if [ ! -n "$cmd" ]
then
echo "command can not be null !"
exit
fi
# 获取当前登录用户
user=`whoami`
# 执行指令
for host in yutong1 yutong2 yutong3
do
echo "================ $host ================"
ssh $user@$host $cmd
done
echo "All excute successfully!"
#修改脚本权限
chmod +x xcall.sh