Hadoop 0.23.x从原理详解到安装体验(3)(转)

部署步骤:

  (1) 配置SSH无密码登录,注意所有的NameNode都要能够无密码登录到所有的DataNode中。

  (2)配置环境变量,hadoop的那些执行脚本会用到。

  在~/.bashrc文件内添加(注意,此处我们目前只配置了HDFS的环境变量,没有配置MapReduce/yarn的环境变量)

  export HADOOP_DEV_HOME =/ home / administrator / cloud / hadoop - 0.23 . 1

  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目录下,重启机器数据就会丢失,所以我们必须覆盖这个配置项。

< configuration >

< property >

< name > hadoop.tmp.dir name >

< value >/ home / administrator / cloud / tmp value >

property >

configuration >

 

  Hdfs-site.xml中的配置项:

< configuration >

< 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文件,内容如下:

#Thu Apr  19   11 : 29 : 05  CST  2012

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进行一些文件操作,例如原来的操作是:

Bin / hadoop fs –put  / home / test  / cloud /

  那么现在要这样操作

Bin / hadoop fs –put  / home / test hdfs: // 192.168 . 12.133 : 9000 / cloud /

 

  也就是说从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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值