hadoop该怎么配置配置文件?
1.找到官网的配置文件,用官网的配置文件做参考,进官网找对应版本的document,找到Configuration,下面就有相应配置文件了。
2.官网的配置文件只是做参考,配置不是真实的,真实的默认配置文件是在hadoop的安装目录中使用命令:find . -name core-default.xml,从当前目录下找core-default.xml文件,这个文件才是真实的默认配置,请一定参考这个文件,因为hadoop每个版本的配置文件都有所改动,每个版本的配置文件可能有所不同。
3.检查此篇文章的每个配置,对照默认配置,认真配置每个配置项。
一、core-site.xml
1.hadoop.tmp.dir=/tmp/hadoop-${user.name},此目录是本地目录。推荐使用如下配置。
<property> <name>hadoop.tmp.dir</name> <value>/home/cdh/apps/hadoopdata</value> </property>
这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。默认配置不可行,因为/tmp每次重启都会被清空。
2.fs.defaultFS=file:///。
非HA时配置
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property>
HA时配置
<property> <name>fs.defaultFS</name> <value>hdfs://cluster1</value> </property>
这里的值指的是默认的HDFS路径(defaultFS)。当有多个HDFS集群同时工作时,用户如果不写集群名称,那么默认使用哪个?在这里指定!该值来自于hdfs-site.xml中的配置,这个地方的值要和hdfs-site.xml文件中的dfs.federation.nameservices一致。
fs.default.name for MRV1 ,fs.defaultFS for MRV2(yarn)。
3.hadoop.http.staticuser.user=dr.who,推荐使用如下配置。
<property> <name>hadoop.http.staticuser.user</name> <value>cdh</value> </property>
通过web ui 页面,想通过application id 查看作业详情或者 hdfs 路径,报错没有权限,这时你需要修改 value 值为hadoop用户。
4.回收站的配置,推荐打开回收站功能。
4.1.fs.trash.interval=0,推荐使用如下配置。
<property> <name>fs.trash.interval</name> <value>4320</value> </property>
表示文件可以存放的事件,以分钟为单位,0表示禁用trash。CDH4.2以上可以在server和client两端设置,Server端的值优先于Client。4320表示三天,此配置表示删除的文件可以在回收站保留三天。
4.2.fs.trash.checkpoint.interval=0,推荐使用如下配置。此配置和fs.trash.interval一起使用。
<property> <name>fs.trash.checkpoint.interval</name> <value>60</value> </property>
表示回收站检查点的间隔时间,单位也是分钟,只能在服务端设置。60表示一个小时,此配置表示每隔一个小时去检查回收站。
5.ha.zookeeper.quorum=。HA时配置,否则不配置。
<property> <name>ha.zookeeper.quorum</name> <value>host4:2181,host5:2181,host6:2181</value> </property>
ha需要使用zookeeper来协调
参考:Hadoop文档-ubuntu上建立CDH+Impala集群
二、hdfs-site.xml
!dfs.replication=3,推荐使用默认配置。根据实际环境使用此配置,需要配置几就配置几。
!dfs.nameservices=。HA时配置,否则不配置。
<property> <name>dfs.nameservices</name> <value>cluster1,cluster2</value> </property>
使用federation时,使用了2个HDFS集群。这里抽象出两个NameService实际上就是给这2个HDFS集群起了个别名。名字可以随便起,相互不重复即可。
!dfs.ha.namenodes=。HA时配置,否则不配置。
<property> <name>dfs.ha.namenodes.cluster1</name> <value>host1,host2</value> </property> <property> <name>dfs.ha.namenodes.cluster2</name> <value>host3,host4</value> </property>
指定NameService是cluster1、cluster2时的namenode有哪些。
!dfs.namenode.http-address=0.0.0.0:50070,
非HA配置实例
<property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property>
HA配置实例
<property> <name>dfs.namenode.http-address.cluster1.host1</name> <value>host1:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster1.host2</name> <value>host2:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster2.host3</name> <value>host3:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster2.host4</name> <value>host4:50070</value> </property>
NameNode的http访问地址,也就是hdfs的访问地址。
!dfs.namenode.rpc-address=。HA时配置,否则不配置。
<property> <name>dfs.namenode.rpc-address.cluster1.host1</name> <value>host1:9000</value> </property> <property> <name>dfs.namenode.rpc-address.cluster1.host2</name> <value>host2:9000</value> </property> <property> <name>dfs.namenode.rpc-address.cluster2.host3</name> <value>host3:9000</value> </property> <property> <name>dfs.namenode.rpc-address.cluster2.host4</name> <value>host4:9000</value> </property>
!dfs.namenode.servicerpc-address=。HA时配置,否则不配置。
<property> <name>dfs.namenode.servicerpc-address.cluster1.host1</name> <value>host1:53310</value> </property> <property> <name>dfs.namenode.servicerpc-address.cluster1.host2</name> <value>host2:53310</value> </property> <property> <name>dfs.namenode.servicerpc-address.cluster2.host3</name> <value>host3:53310</value> </property> <property> <name>dfs.namenode.servicerpc-address.cluster2.host4</name> <value>host4:53310</value> </property>
与namenode的通信配置
!dfs.namenode.secondary.http-address=0.0.0.0:50090。非HA时配置,否则不配置。
<property> <name>dfs.namenode.secondary.http-address</name> <value>slave1:50090</value> </property>
secondary namenode最好不要和namenode配置在同一机器上,这样才能规避风险。secondary namenode就会在slave1上启动了。
!dfs.namenode.shared.edits.dir=。HA时配置,否则不配置。
<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://host4:8485;host5:8485;host6:8485/cluster1</value> </property>
指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息。不同的集群配置不通的路径。这是两个hdfs联盟的hdfs-site.xml不同配置的地方。
!dfs.journalnode.edits.dir=/tmp/hadoop/dfs/journalnode/。HA时配置,否则不配置。
<property> <name>dfs.journalnode.edits.dir</name> <value>/home/cdh/data/journal</value> </property>
指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径。
!dfs.ha.automatic-failover.enabled=false。HA时配置,否则不配置。
<property> <name>dfs.ha.automatic-failover.enabled.cluster1</name> <value>true</value> </property> <property> <name>dfs.ha.automatic-failover.enabled.cluster2</name> <value>true</value> </property>
指定cluster是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode
!dfs.ha.fencing.methods=。HA时配置,否则不配置。
<property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property>
一旦需要NameNode切换,使用ssh方式进行操作
!dfs.ha.fencing.ssh.private-key-files=。HA时配置,否则不配置。
<property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/cdh/.ssh/id_dsa</value> </property>
如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置。注意如果是root用户,值应该为/root/.ssh/id_rsa,一个是id_rsa,一个是id_dsa,去.ssh目录下查看便知。
!dfs.client.failover.proxy.provider=。HA时配置,否则不配置。
<property> <name>dfs.client.failover.proxy.provider.cluster1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.client.failover.proxy.provider.cluster2</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property>
指定cluster1/cluster2出故障时,哪个实现类负责执行故障切换。
!dfs.permissions=true,推荐使用如下配置。、
<property> <name>dfs.permissions</name> <value>false</value> </property>
文件操作时的权限检查标识。如果使用true,在window下eclpse操作hdfs会存在用户权限不足的问题。
!dfs.webhdfs.enabled=true,推荐使用默认配置。
访问namenode的hdfs使用50070端口,访问datanode的webhdfs使用50075端口。访问文件、文件夹信息使用namenode的IP和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的IP和50075端口。要想不区分端口,直接使用namenode的IP和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hefs-site.xml中的dfs.webhdfs.enabled为true。
注意:hadoop2.0.0版本默认值为false,可改为:true。
参考:Hadoop webHDFS设置和使用说明
!dfs.namenode.name.dir=file://${hadoop.tmp.dir}/dfs/name,此目录是本地目录。推荐使用默认配置。
指定NameNode存储meta和editlog的目录
!dfs.datanode.data.dir=file://${hadoop.tmp.dir}/dfs/data,此目录是本地目录。推荐使用默认配置。
指定DataNode存储blocks的目录。
!dfs.blocksize=134217728。推荐使用默认配置。
配置block的大小,默认134217728是128M。
注意:hadoop1.x版本默认值为64M。