部署步骤:
(1) 配置SSH无密码登录,注意所有的NameNode都要能够无密码登录到所有的DataNode中。
(2)配置环境变量,hadoop的那些执行脚本会用到。
在~/.bashrc文件内添加(注意,此处我们目前只配置了HDFS的环境变量,没有配置MapReduce/yarn的环境变量)
export HADOOP_COMMON_HOME = $HADOOP_DEV_HOME
export HADOOP_HDFS_HOME = $HADOOP_DEV_HOME
export HADOOP_CONF_DIR = $HADOOP_DEV_HOME / etc / hadoop
(3)在libexec/hadoop-config.sh中添加JAVA_HOME ==/usr/lib/jvm/java-6-openjdk
(4)然后就是按照我们的部署方案,配置hadoop的参数了。我们前面已经提到了,在0.23.1之后的版本中,hadoop的配置文件都是放到了etc/hadoop/目录里,而且所有节点的配置文件都是统一的,省得还去区分NameNode和DataNode,配置一份然后拷贝到所有节点就行了。我们首先修改core-site.xml,添加hadoop.tmp.dir属性。由于在core-default.xml中,hadoop.tmp.dir被默认设置在/tmp目录下,重启机器数据就会丢失,所以我们必须覆盖这个配置项。
< property >
< name > hadoop.tmp.dir name >
< value >/ home / administrator / cloud / tmp value >
property >
configuration >
Hdfs-site.xml中的配置项:
< property >
< name > dfs.namenode.name.dir name >
< value > file: /// home / administrator / cloud / hdfs23 value >
property >
< property >
< name > dfs.federation.nameservices name >
< value > ns1,ns2 value >
property >
< property >
< name > dfs.namenode.rpc - address.ns1 name >
< value > 192.168 . 12.133 : 9000 value >
property >
< property >
< name > dfs.namenode.http - address.ns1 name >
< value > 192.168 . 12.133 : 23001 value >
property >
< property >
< name > dfs.namenode.secondary.http - address.ns1 name >
< value > 192.168 . 12.133 : 23002 value >
property >
< property >
< name > dfs.namenode.rpc - address.ns2 name >
< value > 192.168 . 12.134 : 9000 value >
property >
< property >
< name > dfs.namenode.http - address.ns2 name >
< value > 192.168 . 12.134 : 23001 value >
property >
< property >
< name > dfs.namenode.secondary.http - address.ns2 name >
< value > 192.168 . 12.134 : 23002 value >
property >
configuration >
NameNode federation的配置其实是向后兼容的,你还可以像原来的方式一样把它配置成single namenode。对于我们想配置成NameNode federation的方式的话,引入了一些新的参数如下表所示:
Daemon Configuration Parameter
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
就像我的部署实例中描述的那样,dfs.federation.nameservices表示两个NameServiceID,在我的例子中分别是ns1和ns2。然后分别配置这两个nameservice的rpc-address。这个dfs.namenode.rpc-address.是非常重要的属性,因为在后续对NameService的访问中都是通过这个属性的值来完成的。dfs.namenode.http-address是通过web浏览器访问监控信息的端口,也就是默认50070的那个端口。dfs.namenode.name.dir和dfs.namenode.edits.dir表示的是NameNode节点的Namespace元数据存放的本地目录,默认是在hadoop.tmp.dir目录下的某一位置,我们可以修改。
同时,这里面提到了两个RPC端口,分别是dfs.namenode.rpc-address和dfs.namenode.servicerpc-address。如果像我的例子中一样,只配置dfs.namenode.rpc-address,那么NameNode-Client和NameNode-DataNode之间的RPC都走的是这个端口。如果配置了后者与前者不同,那么dfs.namenode.rpc-address表示的是NameNode-Client之间的RPC,而dfs.namenode.servicerpc-address表示的是NameNode-DataNode之间的RPC。之所以要区别开来,我想主要是因为datanode和namenode通讯时不会影响client和namenode的通讯,因为同一个端口同时打开的句柄毕竟是预先设定的,缺省为10个。
(5)配置好了这些之后,就可以格式化文件系统了。由于我们部署了2个NameNode,所以我们需要在133和134两台机器上分别执行${HADOOP_DEV_HOME}/bin/hdfs namenode -format -clusterid eric命令。注意两台机器上指定的clusterid是一样的,表示这两个namenode组成的是同一个集群。
那么在执行了format之后,在192.168.12.133节点的dfs.namenode.name.dir目录下生成了current目录,在current目录里有个VERSION文件,内容如下:
namespaceID = 2025563670
clusterID = eric
cTime = 0
storageType = NAME_NODE
blockpoolID = BP - 1450194670 - 192.168 . 12.133 - 1334806145084
layoutVersion =- 39
和以前的版本相比多了clusterID和blockpoolID这两项。clusterID就是我们刚才在format时指定的集群ID,在整个集群中是唯一的。而blockpoolID就是针对每一个Namespace所对应的blockpool的ID,上面的这个BP-1450194670-192.168.12.133-1334806145084就是在我的ns1的namespace下的存储块池的ID,这个ID包括了其对应的NameNode节点的ip地址。
在format的同时也会生成fsimage和edits文件,及其对应的md5校验文件。
然后就可以通过执行sbin/start-dfs.sh启动整个HDFS集群了。
(6)FsShell使用
在使用过程中也有些不同,例如使用FsShell进行一些文件操作,例如原来的操作是:
那么现在要这样操作
也就是说从FsShell中操作文件要指定HDFS的namespace,这也是我前面说的为什么dfs.namenode.rpc-address这个属性很重要的原因。
而且在0.23.1以后的版本中,像bin/hdfs dfsadmin –report这样的命令执行是需要配置fs.default.name这个参数的。也就是说很多hdfs的命令需要指定相应的namespace,然后这个shell的操作都是对这个namespace的操作。
当然大多数情况下还是利用client-api来进行hdfs的操作,从api的角度看,现在提供的接口除了DistributedFileSystem外,又提供了一个DFSAdmin接口,用于对文件系统的管理操作。hadoop在后续的版本中会发布hadoop-client这个工程模块,相信会把client的易用性有所提升。
(7)web监控界面
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24104518/viewspace-722673/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24104518/viewspace-722673/