Hadoop的目录文件结构:
.
|-- LICENSE.txt
|-- NOTICE.txt
|-- README.txt
|-- bin
|-- conf
|-- etc
|-- export_hadoop.sh
|-- hadoop-0.23.0-gridmix.jar
|-- hadoop-0.23.0-streaming.jar
|-- hadoop-mapreduce-0.23.0-sources.jar
|-- hadoop-mapreduce-0.23.0.jar
|-- hadoop-mapreduce-examples-0.23.0-sources.jar
|-- hadoop-mapreduce-examples-0.23.0.jar
|-- hadoop-mapreduce-test-0.23.0-sources.jar
|-- hadoop-mapreduce-test-0.23.0.jar
|-- hadoop-mapreduce-tools-0.23.0-sources.jar
|-- hadoop-mapreduce-tools-0.23.0.jar
|-- lib
|-- libexec
|-- logs
|-- modules
|-- sbin
`-- share
与之前版本最大区别是增加了etc、share、libexec目录。
在搭建Hadoop之前,我在baidu上搜索到了一篇博文
http://www.blogjava.net/shenh062326/archive/2011/11/28/363472.html
然后各种碰壁,各种问题。于是再次回归Google,回归Apache-Hadoop的doc文档,http://hadoop.apache.org /common/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/Federation.html,hadoop 那些大佬们写得都是片段,另外不知道我的版本是不是和它们的不一致还是其它原因,还是遇到很多没有道理的问题。于是,安下心来,一边往源码里打Log,一 遍调整配置文件,最终还是配置成功了。这篇博文将正确的配置过程还原给Hadoop-0.23.0的用户。
1、下载Hadoop-0.23.0
wget http://labs.renren.com/apache-mirror//hadoop/core/hadoop-0.23.0/hadoop-0.23.0.tar.gz
wget http://labs.renren.com/apache-mirror//hadoop/core/hadoop-0.23.0/hadoop-0.23.0-src.tar.gz
(ps:renren网提供的apache镜像还是挺快的,如果链接不行的话,从列表中选一个http://www.apache.org/dyn/closer.cgi/hadoop/core/)
2、解压
tar -xvzf hadoop-0.23.0.tar.gz
3、配置集群的环境
在~/.bashrc文件内添加
#hadoop 0.23 required settings
export HADOOP_DEV_HOME=/home/jiangbing/hadoop-0.23.0 #设置你hadoop的路径,需要修改一下
export HADOOP_MAPRED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=/opt/jiangbing/hdfs23/conf #conf目录也可以按照Hadoop-0.20.*版本的特点设置在${HADOOP_DEV_HOME}/conf文件夹下。
export HDFS_CONF_DIR=/opt/jiangbing/hdfs23/conf #可单独设置路径
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/conf #可单独设置路径
如果home目录是通过NFS挂载共享的,只需在一个节点修改即可,其它节点由于挂载了/home目录,可以读取该内容。
4、安装Java、配置ssh。由于这部分与Hadoop-0.20.*的配置相同,这里不再赘述。
5、配置Hadoop内部的环境
cd ~/hadoop-0.23.0
cp share/hadoop/common/templates/conf/* $HDFS_CONF_DIR
1)修改hadoop-env.sh中的JAVA_HOME路径
由于hadoop-env.sh默认使用了export JAVA_HOME=${JAVA_HOME},如果在配置JAVA环境时,已经添加到bash中,这步可以省略。
实验使用的集群节点:gb17,gb18,gb19,gb20,gb21,gb22,配置gb17,gb18为两个namenode,分别作为ns1和ns2,HDFS配置图如下:
2)${HDFS_CONF_DIR}/core-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.trash.interval</name> <value>360</value> <description>Number of minutes between trash checkpoints. If zero, the trash feature is disabled. </description> </property> <property> <name>hadoop.tmp.dir</name> <value>file:///opt/jiangbing/hadoop23</value> <description>A base for other temporary directories.</description> </property> </configuration>
请注意在多个NameNode情况下,core-site.xml不需要设置fs.defaultFS,只需在下面hdfs-site.xml设置对应内容即可。
3)${HDFS_CONF_DIR}/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/jiangbing/hdfs23</value> </property> <property> <name>dfs.federation.nameservices</name> <value>ns1,ns2</value> </property> <property> <name>dfs.namenode.rpc-address.ns1</name> <value>gb17:9000</value> </property> <property> <name>dfs.namenode.http-address.ns1</name> <value>gb17:23001</value> </property> <property> <name>dfs.namenode.secondary.http-address.ns1</name> <value>gb17:23002</value> </property> <property> <name>dfs.namenode.rpc-address.ns2</name> <value>gb18:9000</value> </property> <property> <name>dfs.namenode.http-address.ns2</name> <value>gb18:23001</value> </property> <property> <name>dfs.namenode.secondary.http-address.ns2</name> <value>gb18:23002</value> </property> </configuration>
4)${HDFS_CONF_DIR}/slaves
gb19 gb20 gb21 gb22
ps:在新版本HDFS的配置中,所有节点的配置文件都是统一的,不用单独配置NameNode和DataNode。
下面是一个hdfs新增配置的表格
Namenode | dfs.namenode.rpc-address dfs.namenode.servicerpc-address dfs.namenode.http-address dfs.namenode.https-address dfs.namenode.keytab.file dfs.namenode.name.dir dfs.namenode.edits.dir dfs.namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir dfs.federation.nameservices |
Secondary Namenode | dfs.namenode.secondary.http-address dfs.secondary.namenode.keytab.file |
BackupNode | dfs.namenode.backup.address dfs.secondary.namenode.keytab.file |
对照hdfs-site.xml文件可以看出,dfs.federation.nameservices指定不同的Namespace,一个 Namespace对应于一个NameNode,NameNode对应配置选项的后面,增加对应的namespace名字,比 如**.**.**.ns1。
6、启动HDFS Federation
1)执行Format
ssh gb17
${HADOOP_DEV_HOME}/bin/hdfs namenode -format -clusterid klose
ssh gb18
${HADOOP_DEV_HOME}/bin/hdfs namenode -format -clusterid klose
2)启动sbin/start-dfs.sh
ssh到各个节点上,使用jps命令查看对应的NameNode或者DataNode Daemon是否启动。
7、查看ui界面