hadoop 预研(一) hdfs体系

版本-->hadoop0.23.1

下载 wget http://labs.renren.com/apache-mirror/hadoop/core/hadoop-0.23.1/hadoop-0.23.1.tar.gz

1. 前言
首先说下23这个版本,之前namenode一直是单点,现在加入了nameservice(ns) pool这个概念, 官方给出的架构图==>





并且这个ns是配置在datanode中的
看下如下配置

<configuration>
  <property>
    <name>dfs.federation.nameservices</name>
    <value>ns1</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1</name>
    <value>hdfs://10.5.18.87:9000</value>
  </property>
    <property>
    <name>dfs.namenode.http-address.ns1</name>
    <value>10.5.18.87:50070</value>
  </property>
   <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/brucexx/hadoop-0.23.1/hadoop_datanode</value>
  </property>
</configuration>
其中 10.5.18.87 为ns1的IP

dfs.federation.nameservices这个属性可以配置多个IP的,机器有限,只加入一个ns1

观察下 ===>hadoop0.23.1的目录结构
   ./sbin/...   一些sh命令的入口,有start-dfs.sh,start-yarn.sh ...等命令,
    yarn是新的mapreduce架构,但是具体的设计理念已经改变,之前 的mapreduce的JobTracker的职责太重了,





    单个JobTracker的单点故障和扩展性
    1)JobTracker的负载较重。JobTracker负责作业和任务的初始化、以及提供TaskTracker的RPC Server、任务的调度等任务。因此,JobTracker一旦故障,所有执行的任务的状况丢失。
     2)扩展性问题。JobTracker目前最多支持4000nodes、40000个concurrent tasks。

所以将这块具体细化出来演化为现在的这种结构模式--》
ResourceManager,NodeManager






    ./bin/... 一些hdfs支持的命令,fs [-mkdir|-ls|-copyFromLocal..]等。。。具体看一些文档
    主要是查看namenode下的一些可用资源,比较有意思的是 ./bin/hadoop fs -ls 会报错,原因是没有主文件夹 ./bin/hadoop fs -ls / 这样即可.
    ./bin/hadoop fs -mkdir brucexx 创建出来的文件夹是 /user/root/brucexx,./bin/hadoop fs -mkdir /brucexx这样才对。
 
    ./etc/hadoop/... 一些配置文件,
    core-site.xml 定义 fs协议地址,对应的目录等。
    hdfs-site.xml 定义 hdfs nn, snn(secondary namenode),dn, ns等,
    yarn-site.xml 定义 resourcemanager,nodemanager等,即以前的job tracker, task tracker




2.实践-->

  A 准备三台机器,master,s1,s2(需要在/etc/hosts里添加域名)其中master作为namenode,s1,s2为datanode,需要注意的是
  s1,s2里面的/etc/hosts 必须添加 master这台机器域名,为什么?因为在namenode管理里会有跳转到对应的datanode里的,
  这时候跳转的时候传入的是master这个域名,如果不添加datanode是不可被识别的。

  B
  java 环境,这个比较坑爹,1.在全局环境 ~./baserc或者/etc/profile   中配置JAVA_HOME还不行,还需要在
 
./libexec/hadoop-config.sh 这个目录下配置一个
  export JAVA_HOME=/home/admin/jdk6/jdk1.6.0_21
  不然会出现相关的错误

  C1-->配置namenode

  ./etc/hadoop/core-site.xml
  配置如下-->
<configuration>
            <property>
            <name>fs.defaultFS</name>
           <value>hdfs://master:9000</value>
           </property>
</configuration>

  ./etc/hadoop/hdfs-site.xml
            <configuration>
      <!--snn地址 -->
            <property>
           <name>dfs.namenode.secondary.http-address</name>
             <value>master:9001</value>
             </property>
             <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/brucexx/hadoop-0.23.1/hadoop-namenode</value>
             </property>
             </configuration>
namenode是默认端口是50070,如果你要配置的话,加吧
                     <property>
                          <name>dfs.namenode.http-address</name>
                          <value>master:50050</value>
                    </property>


A1 SecondaryNameNode配置

  <property>
    <name>dfs.federation.nameservice.id</name>
    <value>master:50070</value>
  </property>
  <property>
    <name>fs.checkpoint.period</name>
    <value>3600</value><!--1小时 -->
  </property>
  <property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value><!--64MB-->
  </property>
  <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>/home/brucexx/hadoop-0.23.1/checkpoint-data</value>
  </property>
  <!--dfs.namenode.edits.dir 这个也需要设置下 -->

SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。两个过程同时进行,称为checkpoint. 镜像备份的作用:备份fsimage(fsimage是元数据发送检查点时写入文件);日志与镜像的定期合并的作用:将Namenode中edits日志和fsimage合并,防止(如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中,应用edit log,edit log往往很大,导致操作往往很耗时。)

日志与镜像的定期合并总共分五步:

SecondaryNameNode通知NameNode准备提交edits文件,此时主节点产生edits.new
SecondaryNameNode通过http get方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)
SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt
SecondaryNameNode用http post方式发送fsimage.ckpt至NameNode
NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。 在新版本的hadoop中,SecondaryNameNode两个作用被两个节点替换, checkpoint node与backup node. SecondaryNameNode备份由三个参数控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超过多少大小时合并, dfs.http.address表示http地址,这个参数在SecondaryNameNode为单独节点时需要设置。

所以在线上snn的配置是相当重要的,不然元数据一旦丢失。。。可想而知
下面说下checkpointNode和backupNode的优点和配置


A2 CheckPoint Node

通过./bin/hdfs namenode -checkpoint 来启动

Checkpoint Node方案与Secondary NameNode的原理基本相同,只是实现方式不同。该方案利用Hadoop的Checkpoint机制进行备份,配置一个Checkpoint Node。该节点会定期从Primary NameNode中下载元数据信息(fsimage+edits),将edits与fsimage进行合并,在本地形成最新的Checkpoint,并上传到Primary NameNode进行更新。

当NameNode发生故障时,极端情况下(NameNode彻底无法恢复),可以在备用节点上启动一个NameNode,读取Checkpoint信息,提供服务。

优点

使用简单方便、无需开发、配置即可。

元数据有多个备份。

缺点

没有做到热备、备份节点切换时间长。

namenode  -->
            <configuration>
            <property>
           <name>dfs.namenode.backup.http-address</name>
             <value>master:9001</value>
             </property>
CheckPointNode -->

  <property>
    <name>dfs.federation.nameservice.id</name>
    <value>master:50070</value>
  </property>
  <property>
    <name>fs.checkpoint.period</name>
    <value>3600</value><!--1小时 -->
  </property>
  <property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value><!--64MB-->
  </property>


A3 backupNode

通过./bin/hdfs namenode -backup 来启动

配置和CheckPointNode配置 一样,但是机制不同,

利用新版本Hadoop自身的Failover措施,配置一个Backup Node,Backup Node在内存和本地磁盘均保存了HDFS系统最新的名字空间元数据信息。如果NameNode发生故障,可用使用Backup Node中最新的元数据信息。

优点

简单方便、无需开发、配置即可使用。

Backup Node的内存中对当前最新元数据信息进行了备份(Namespace),避免了通过NFS挂载进行备份所带来的风险。

Backup Node可以直接利用内存中的元数据信息进行Checkpoint,保存到本地,与从NameNode下载元数据进行Checkpoint的方式相比效率更高。

NameNode 会将元数据操作的日志记录同步到Backup Node,Backup Node会将收到的日志记录在内存中更新元数据状态,同时更新磁盘上的edits,只有当两者操作成功,整个操作才成功。这样即便NameNode上的元数据发生损坏,Backup Node的磁盘上也保存了HDFS最新的元数据,从而保证了一致性。

缺点

高版本(0.21以上)才支持。


from ==>  http://book.51cto.com/art/201205/339039.htm


C2--->安装 ssh
   sudo apt-get install ssh
  
   namenode要访问datanode的话是需要密码的,我们直接用证书搞之
   1. /usr/bin/ssh-keygen -t rsa ,疯狂回车
   2. scp /root/.ssh/id_rsa.pub root@s1:/root/.ssh/authorized_keys
   ssh s1 立刻登录上

C3-->配置datanode
登陆s1,把master上的hadoop-0.23.1.tar.gz scp到s1上。
设置 JAVA_HOME后
配置 hdfs-site.xml
<configuration>
  <property>
    <name>dfs.federation.nameservices</name>
    <value>ns1</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1</name>
    <value>hdfs://master:9000</value>
  </property>
    <property>
    <name>dfs.namenode.http-address.ns1</name>
    <value>master:50070</value>
  </property>
   <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/brucexx/hadoop-0.23.1/hadoop_datanode</value>
  </property>
</configuration>


万事OK,回到master上
./sbin/start-dfs.sh
会看到

root@ubuntu:/home/brucexx/hadoop-0.23.1# ./sbin/start-dfs.sh
Starting namenodes on [master]
master: starting namenode, logging to /home/brucexx/hadoop-0.23.1/logs/hadoop-root-namenode-ubuntu.out
s2: starting datanode, logging to /home/brucexx/hadoop-0.23.1/logs/hadoop-root-datanode-trade.mysh01.alipay.net.out
s1: starting datanode, logging to /home/brucexx/hadoop-0.23.1/logs/hadoop-root-datanode-settlecore.shd7.alipay.net.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /home/brucexx/hadoop-0.23.1/logs/hadoop-root-secondarynamenode-ubuntu.out
master: SLF4J: Class path contains multiple SLF4J bindings.

这样就OK了。
然后命令行里
./bin/hadoop fs -mkdir /brucexx
./bin/hadoop fs -ls /
会有这个文件夹了
通过浏览器 http://master:50050/ 访问,会看到所有的datanode有两个,lives nodes 2
点击之会看到对应的结点信息。。部署成功!


猜你喜欢

转载自brucexx.iteye.com/blog/1605728
今日推荐