首页 > 代码库 > Hadoop配置文件
Hadoop配置文件
部分内容參考:http://www.linuxqq.net/archives/964.html http://slaytanic.blog.51cto.com/2057708/1100974/
hadoop的重要配置文件有下面几个:
在1.2.1版本号中。core-default.xml有73个属性。hdfs-default.xml有76个属性,mapred-default.xml有136个属性。
很多其它内容请參考P328
一、masters/slaves
1、masters记录的是须要启动secondary namenode的节点, 不是namenode,它也和mapreduce没不论什么关系。
slaves记录的是须要运行start-all.sh(或相关命令)时,须要远程启动tasktracker与datanode的节点。
2、这2个文件不须要分发至各个工作节点。
3、哪个机器运行启动脚本,那它就是jobtracke与namenode,再依据masters确定secondary namenode, 依据slaves文件确定tasktracker与datanode,并远程启动这些守护进程。
演示样例:
二、hadoop-env.sh
1、JAVA_HOME必须设置,其余均为可选项。
2、HADOOP_HEAPSIZE:分配给各个守护进程的内存大小,默觉得1000M
另外,能够使用HADOOP_NAMENODE_OPTS等单独设置某一守护进行的内存大小
这个參数的分配參考P322。
大型集群一般设置2000M或以上。开发环境中设置500M足够了。
3、HADOOP_LOG_DIR:日志文件的存放文件夹,能够设置为/var/log/hadoop
4、HADOOP_SLAVES:slaves文件的位置,一般无需改动
5、HADOOP_SSH_OPTS:P335
6、HADOOP_SLAVE_SLEEP:P335
7、HADOOP_IDEN_STRING:影响日志文件的名称
完整文件例如以下:
# Set Hadoop-specific environment variables here. # The only required environment variable is JAVA_HOME. All others are # optional. When running a distributed configuration it is best to # set JAVA_HOME in this file, so that it is correctly defined on # remote nodes. # The java implementation to use. Required. # export JAVA_HOME=/usr/lib/j2sdk1.5-sun # Extra Java CLASSPATH elements. Optional. # export HADOOP_CLASSPATH= # The maximum amount of heap to use, in MB. Default is 1000. # export HADOOP_HEAPSIZE=2000 # Extra Java runtime options. Empty by default. # export HADOOP_OPTS=-server # Command specific options appended to HADOOP_OPTS when specified export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS" export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS" export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS" export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS" export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS" # export HADOOP_TASKTRACKER_OPTS= # The following applies to multiple commands (fs, dfs, fsck, distcp etc) # export HADOOP_CLIENT_OPTS # Extra ssh options. Empty by default. # export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR" # Where log files are stored. $HADOOP_HOME/logs by default. # export HADOOP_LOG_DIR=${HADOOP_HOME}/logs # File naming remote slave hosts. $HADOOP_HOME/conf/slaves by default. # export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves # host:path where hadoop code should be rsync'd from. Unset by default. # export HADOOP_MASTER=master:/home/$USER/src/hadoop # Seconds to sleep between slave commands. Unset by default. This # can be useful in large clusters, where, e.g., slave rsyncs can # otherwise arrive faster than the master can service them. # export HADOOP_SLAVE_SLEEP=0.1 # The directory where pid files are stored. /tmp by default. # NOTE: this should be set to a directory that can only be written to by # the users that are going to run the hadoop daemons. Otherwise there is # the potential for a symlink attack. # export HADOOP_PID_DIR=/var/hadoop/pids # A string representing this instance of hadoop. $USER by default. # export HADOOP_IDENT_STRING=$USER # The scheduling priority for daemon processes. See 'man nice'. # export HADOOP_NICENESS=10
三、log4j.properties
日志文件的相关配置參考http://blog.csdn.net/jediael_lu/article/details/43989689 或者权威指南P190
四、hadoop-metrics.properties
度量相关配置參考??或者权威指南P382
五、core-site.xml
1、fs.default.name:默认的文件系统。一般将其改为hdfs。如:
<property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property>
2、hadoop.tmp.dir:临时保存文件的文件夹。默认是/tmp/hadoop-$user,此位置有可能在重新启动时被清空。因此必须另外配置。
<property> <name>hadoop.tmp.dir</name> <value>/mnt/tmphadoop</value> </property>
这个属性会影响namenode/secondary namenode中的元数据与datanode中的数据文件存放位置。
见以下hdfs-site.xml中的描写叙述。
六、hdfs-site.xml
1、dfs.name.dir:
保存namenode元数据的位置,能够指定多个文件夹,元数据文件会同一时候写入这几个文件夹。从而支持冗余备份。最好有一个是NFS网络硬盘。
默认是${hadoop.tmp.dir}/dfs/name
2、dfs.data.dir:
保存datanode数据文件的位置。能够指定多个文件夹,这多个文件夹位于不同的磁盘能够提高IO使用率。
默认是${hadoop.tmp.dir}/dfs/data
3、fs.checkpoint.dir:
保存secondary namenode元数据的位置,能够指定多个文件夹,元数据文件会同一时候写入这几个文件夹,从而支持冗余备份。最好有一个是NFS网络硬盘。
默认是${hadoop.tmp.dir}/dfs/namesecondary
注意,fs.checkpoint.dir与dfs.name.dir设置多个路径,是为了冗余备份,而dfs.data.dir设置多个路径是为了负载均衡。
<property> <name>dfs.name.dir</name> <value>${hadoop.tmp.dir}/dfs/name,/mnt/backup/dfs/name</value> </property> <property> <name>dfs.checkpoint.dir</name> <value>${hadoop.tmp.dir}/dfs/namesecond,/mnt/backup/dfs/namesecond</value> </property>
4、dfs.replication:
复本数量,默觉得3
<property> <name>dfs.replication</name> <value>2</value> </property>
七、mapred-site.xml
1、mapred.job.tracker:执行jobtracker的主机名和port号
演示样例:
<property> <name>mapred.job.tracker</name> <value>master:9001</value> </property>
2、mapred.local.dir:存储作业中间数据的文件夹,作业终止时,文件夹被清空,以逗号分隔多个文件夹
3、mapred.system.dir:作业执行期间存储共享文件的位置。相对于fs.default.name。默认是${hadoop.tmp.dir}/mapred/system
4、mapred.tasktracker.map.tasks.maximum:同一时间同意执行的最大map任务数,默觉得2
mapred.tasktracker.reduce.tasks.maximum:同一时间同意执行的最大map任务数,默觉得2
5、mapred.child.java.opts:每一个map/reduce任务的JVM内容容量。默觉得-Xmx200m
八、经常使用的port配置
HTTPport用于提供以页面形式查看集群内容。
1 HDFSport
參数 | 描写叙述 | 默认 | 配置文件 | 样例值 |
fs.default.name | namenode RPC交互port | 9000 | core-site.xml | hdfs://master:9000/ |
dfs.http.address | NameNode web管理port | 50070 | hdfs- site.xml | 0.0.0.0:50070 |
dfs.datanode.address | datanode 控制port | 50010 | hdfs -site.xml | 0.0.0.0:50010 |
dfs.datanode.ipc.address | datanode的RPCserver地址和port | 50020 | hdfs-site.xml | 0.0.0.0:50020 |
dfs.datanode.http.address | datanode的HTTPserver和port | 50075 | hdfs-site.xml | 0.0.0.0:50075 |
2 MRport
參数 | 描写叙述 | 默认 | 配置文件 | 样例值 |
mapred.job.tracker | job-tracker交互port | 9001 | mapred-site.xml | master:9001/ |
job | tracker的web管理port | 50030 | mapred-site.xml | 0.0.0.0:50030 |
mapred.task.tracker.http.address | task-tracker的HTTPport | 50060 | mapred-site.xml | 0.0.0.0:50060 |
3 其他port
參数 | 描写叙述 | 默认 | 配置文件 | 样例值 |
dfs.secondary.http.address | secondary NameNode web管理port | 50090 | hdfs-site.xml | 0.0.0.0:50090 |
core-site.xml
name | value | Description |
fs.default.name | hdfs://hadoopmaster:9000 | 定义HadoopMaster的URI和port |
fs.checkpoint.dir | /opt/data/hadoop1/hdfs/namesecondary1 | 定义hadoop的name备份的路径。官方文档说是读取这个。写入dfs.name.dir |
fs.checkpoint.period | 1800 | 定义name备份的备份间隔时间,秒为单位,仅仅对snn生效。默认一小时 |
fs.checkpoint.size | 33554432 | 以日志大小间隔做备份间隔。仅仅对snn生效。默认64M |
io.compression.codecs | org.apache.hadoop.io.compress.DefaultCodec, | Hadoop所使用的编解码器,gzip和bzip2为自带,lzo需安装hadoopgpl或者kevinweil,逗号分隔,snappy也须要单独安装 |
io.compression.codec.lzo.class | com.hadoop.compression.lzo.LzoCodec | LZO所使用的压缩编码器 |
topology.script.file.name | /hadoop/bin/RackAware.py | 机架感知脚本位置 |
topology.script.number.args | 1000 | 机架感知脚本管理的主机数,IP地址 |
fs.trash.interval | 10800 | HDFS垃圾箱设置,能够恢复误删除,分钟数。0为禁用。加入该项无需重新启动hadoop |
hadoop.http.filter.initializers | org.apache.hadoop.security. | 须要jobtracker,tasktracker |
hadoop.http.authentication.type | simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# | 验证方式,默觉得简单,也可自定义class,需配置全部节点 |
hadoop.http.authentication. token.validity (排版调整,实际配置不要回车) | 36000 | 验证令牌的有效时间,需配置全部节点 |
hadoop.http.authentication. signature.secret (排版调整,实际配置不要回车) | 默认可不写參数 | 默认不写在hadoop启动时自己主动生成私密签名,需配置全部节点 |
hadoop.http.authentication.cookie.domain | domian.tld | http验证所使用的cookie的域名,IP地址訪问则该项无效。必须给全部节点都配置域名才干够。 |
hadoop.http.authentication. simple.anonymous.allowed (排版调整,实际配置不要回车) | true | false | 简单验证专用,默认同意匿名訪问,true |
hadoop.http.authentication. | HTTP/localhost@$LOCALHOST | Kerberos验证专用。參加认证的实体机必须使用HTTP作为K的Name |
hadoop.http.authentication. kerberos.keytab (排版调整。实际配置不要回车) | /home/xianglei/hadoop.keytab | Kerberos验证专用,密钥文件存放位置 |
hadoop.security.authorization | true|false | Hadoop服务层级验证安全验证。需配合hadoop-policy.xml使用,配置好以后用dfsadmin,mradmin -refreshServiceAcl刷新生效 |
io.file.buffer.size | 131072 | 用作序列化文件处理时读写buffer的大小 |
hadoop.security.authentication | simple | kerberos | hadoop本身的权限验证,非http訪问,simple或者kerberos |
hadoop.logfile.size | 1000000000 | 设置日志文件大小。超过则滚动新日志 |
hadoop.logfile.count | 20 | 最大日志数 |
io.bytes.per.checksum | 1024 | 每校验码所校验的字节数,不要大于io.file.buffer.size |
io.skip.checksum.errors | true | false | 处理序列化文件时跳过校验码错误,不抛异常。 默认false |
io.serializations | org.apache.hadoop.io. (排版须要。实际配置不要回车) | 序列化的编解码器 |
io.seqfile.compress.blocksize | 1024000 | 块压缩的序列化文件的最小块大小,字节 |
webinterface.private.actions | true | false | 设为true。则JT和NN的tracker网页会出现杀任务删文件等操作连接,默认是false |
hdfs-site.xml
name | value | Description |
dfs.default.chunk.view.size | 32768 | namenode的http訪问页面中针对每一个文件的内容显示大小,通常无需设置。 |
dfs.datanode.du.reserved | 1073741824 | 每块磁盘所保留的空间大小。须要设置一些,主要是给非hdfs文件使用,默认是不保留。0字节 |
dfs.name.dir | /opt/data1/hdfs/name, /opt/data2/hdfs/name, /nfs/data/hdfs/name | NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也能够在一台server的多块硬盘上使用 |
dfs.web.ugi | nobody,nobody | NN,JT等所使用的web tracker页面server所使用的用户和组 |
dfs.permissions | true | false | dfs权限是否打开,我一般设置false,通过开发工具培训别人界面操作避免误操作,设置为true有时候会遇到数据由于权限訪问不了。 |
dfs.permissions.supergroup | supergroup | 设置hdfs超级权限的组,默认是supergroup。启动hadoop所使用的用户一般是superuser。 |
dfs.data.dir | /opt/data1/hdfs/data, /opt/data2/hdfs/data, /opt/data3/hdfs/data, ... | 真正的datanode数据保存路径,能够写多块硬盘。逗号分隔 |
dfs.datanode.data.dir.perm | 755 | datanode所使用的本地目录的路径权限,默认755 |
dfs.replication | 3 | hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,可是须要的存储空间也很多其它。 有钱人能够调5或者6 |
dfs.replication.max | 512 | 有时dn暂时故障恢复后会导致数据超过默认备份数。 复制份数的最多数,通常没什么用,不用写配置文件中。 |
dfs.replication.min | 1 | 最小份数,作用同上。 |
dfs.block.size | 134217728 | 每一个文件块的大小,我们用128M,默认是64M。这个计算须要128*1024^2,我碰上过有人直接写128000000,十分浪漫。 |
dfs.df.interval | 60000 | 磁盘用量统计自己主动刷新时间,单位是毫秒。 |
dfs.client.block.write.retries | 3 | 数据块写入的最多重试次数。在此次数之前不会捕获失败。 |
dfs.heartbeat.interval | 3 | DN的心跳检測时间间隔。秒 |
dfs.namenode.handler.count | 10 | NN启动后展开的线程数。 |
dfs.balance.bandwidthPerSec | 1048576 | 做balance时所使用的每秒最大带宽,使用字节作为单位。而不是bit |
dfs.hosts | /opt/hadoop/conf/hosts.allow | 一个主机名列表文件,这里的主机是同意连接NN的,必须写绝对路径。文件内容为空则觉得全都能够。 |
dfs.hosts.exclude | /opt/hadoop/conf/hosts.deny | 基本原理同上,仅仅只是这里放的是禁止訪问NN的主机名称列表。 这在从集群中摘除DN会比較实用。 |
dfs.max.objects | 0 | dfs最大并发对象数,HDFS中的文件。文件夹块都会被觉得是一个对象。 0表示不限制 |
dfs.replication.interval | 3 | NN计算复制块的内部间隔时间。通常不需写入配置文件。 默认就好 |
dfs.support.append | true | false | 新的hadoop支持了文件的APPEND操作,这个就是控制是否同意文件APPEND的,可是默认是false,理由是追加还有bug。 |
dfs.datanode.failed.volumes.tolerated | 0 | 可以导致DN挂掉的坏硬盘最大数,默认0就是仅仅要有1个硬盘坏了,DN就会shutdown。 |
dfs.secondary.http.address | 0.0.0.0:50090 | SNN的tracker页面监听地址和port |
dfs.datanode.address | 0.0.0.0:50010 | DN的服务监听port。port为0的话会随机监听port,通过心跳通知NN |
dfs.datanode.http.address | 0.0.0.0:50075 | DN的tracker页面监听地址和port |
dfs.datanode.ipc.address | 0.0.0.0:50020 | DN的IPC监听port,写0的话监听在随机port通过心跳传输给NN |
dfs.datanode.handler.count | 3 | DN启动的服务线程数 |
dfs.http.address | 0.0.0.0:50070 | NN的tracker页面监听地址和port |
dfs.https.enable | true | false | NN的tracker是否监听在HTTPS协议,默认false |
dfs.datanode.https.address | 0.0.0.0:50475 | DN的HTTPS的tracker页面监听地址和port |
dfs.https.address | 0.0.0.0:50470 | NN的HTTPS的tracker页面监听地址和port |
dfs.datanode.max.xcievers | 2048 | 相当于linux下的打开文件最大数量,文档中无此參数。当出现DataXceiver报错的时候,须要调大。默认256 |
mapred-site.xml
name | value | Description |
hadoop.job.history.location | job历史文件保存路径,无可配置參数。也不用写在配置文件中。默认在logs的history目录下。 | |
hadoop.job.history.user.location | 用户历史文件存放位置 | |
io.sort.factor | 30 | 这里处理流合并时的文件排序数。我理解为排序时打开的文件数 |
io.sort.mb | 600 | 排序所使用的内存数量。单位兆。默认1,我记得是不能超过mapred.child.java.opt设置,否则会OOM |
mapred.job.tracker | hadoopmaster:9001 | 连接jobtrackserver的配置项,默认不写是local。map数1。reduce数1 |
mapred.job.tracker.http.address | 0.0.0.0:50030 | jobtracker的tracker页面服务监听地址 |
mapred.job.tracker.handler.count | 15 | jobtracker服务的线程数 |
mapred.task.tracker.report.address | 127.0.0.1:0 | tasktracker监听的server。无需配置,且官方不建议自行改动 |
mapred.local.dir | /data1/hdfs/mapred/local, /data2/hdfs/mapred/local, ... | mapred做本地计算所使用的目录,能够配置多块硬盘,逗号分隔 |
mapred.system.dir | /data1/hdfs/mapred/system, /data2/hdfs/mapred/system, ... | mapred存放控制文件所使用的目录,可配置多块硬盘,逗号分隔。 |
mapred.temp.dir | /data1/hdfs/mapred/temp, /data2/hdfs/mapred/temp, ... | mapred共享的暂时目录路径。解释同上。 |
mapred.local.dir.minspacestart | 1073741824 | 本地运算目录剩余空间低于该值则不在本地做计算。 字节配置,默认0 |
mapred.local.dir.minspacekill | 1073741824 | 本地计算目录剩余空间低于该值则不再申请新的任务,字节数,默认0 |
mapred.tasktracker.expiry.interval | 60000 | TT在这个时间内没有发送心跳,则觉得TT已经挂了。单位毫秒 |
mapred.map.tasks | 2 | 默认每一个job所使用的map数,意思是如果设置dfs块大小为64M。须要排序一个60M的文件。也会开启2个map线程。当jobtracker设置为本地是不起作用。 |
mapred.reduce.tasks | 1 | 解释同上 |
mapred.jobtracker.restart.recover | true | false | 重新启动时开启任务恢复。默认false |
mapred.jobtracker.taskScheduler | org.apache.hadoop.mapred. CapacityTaskScheduler org.apache.hadoop.mapred. JobQueueTaskScheduler org.apache.hadoop.mapred. FairScheduler | 重要的东西,开启任务管理器。不设置的话,hadoop默认是FIFO调度器,其它能够使用公平和计算能力调度器 |
mapred.reduce.parallel.copies | 10 | reduce在shuffle阶段使用的并行复制数,默认5 |
mapred.child.java.opts | -Xmx2048m -Djava.library.path= | 每一个TT子进程所使用的虚拟机内存大小 |
tasktracker.http.threads | 50 | TT用来跟踪task任务的http server的线程数 |
mapred.task.tracker.http.address | 0.0.0.0:50060 | TT默认监听的httpIP和port,默认能够不写。 port写0则随机使用。 |
mapred.output.compress | true | false | 任务结果採用压缩输出,默认false,建议false |
mapred.output.compression.codec | org.apache.hadoop.io. compress.DefaultCodec | 输出结果所使用的编解码器。也能够用gz或者bzip2或者lzo或者snappy等 |
mapred.compress.map.output | true | false | map输出结果在进行网络交换前是否以压缩格式输出,默认false。建议true,能够减小带宽占用。代价是会慢一些。 |
mapred.map.output.compression.codec | com.hadoop.compression. lzo.LzoCodec | map阶段压缩输出所使用的编解码器 |
map.sort.class | org.apache.hadoop.util. QuickSort | map输出排序所使用的算法,默认快排。 |
mapred.hosts | conf/mhost.allow | 同意连接JT的TTserver列表,空值所有同意 |
mapred.hosts.exclude | conf/mhost.deny | 禁止连接JT的TT列表,节点摘除是非常有作用。 |
mapred.queue.names | ETL,rush,default | 配合调度器使用的队列名列表,逗号分隔 |
mapred.tasktracker.map. tasks.maximum | 12 | 每server同意启动的最大map槽位数。 |
mapred.tasktracker.reduce. tasks.maximum | 6 | 每server同意启动的最大reduce槽位数 |
Hadoop配置文件