节点架构

单节点体系

QQ截图20170215130302.png

集群架构

QQ截图20170215130628.png

节点(进程)之间的距离:到达共同节点距离之和

  • 副本存放策略

    • V1

      同一个机架放2分,另一份放到其他机架(当前节点为存储节点)

    • V2

      在一个机架上放1分,另外2分放到其他机架,防止断点数据丢失(当前节点为存储节点)

如果不是在数据节点上存放数据,hadoop会随机选一个机架存放,其余数据存放到其他机架

HDFS架构

Hadoop架构分析

  • Hadoop分布式文件系统

  • 按需定制MapReduce

  • 目标在于多次的文件流读取

  • 写入成本很高

  • 高度数据冗余(副本,默认3)

  • 每个节点不需要RAID-独立磁盘冗余阵列 redundant array of independent disks

  • Blocksize较大(128m)(V1为64M)

  • 定制节点的位置感知

NameNode

  • 存储文件元数据,比如目录结构

  • 运行NameNode的服务器至关重要,只有1个

  • 只对元数据的增删做日志记录,不对block和文件流做记录

  • DataNode故障时,负责创建更

DataNode

  • 存储真实数据

  • 可运行在多种文件系统上(ext3/4,NTFS …)

  • 通知NameNode自己有哪些block

  • NameNode在同一机架创建放置一个副本,另一机架放置2个副本

HDFS架构

hdfs arch.png

block replication.png

参考资料

启动脚本分析

  • start-all.cmd

    设置HADOOP_BIN_PATH为当前脚本所在目录(sbin)

    过滤掉HADOOP_BIN_PATH后面的\

    设置DEFAULT_LIBEXEC_DIR为libexec目录

    调用hadoop-config.cmd

    启动hdfs守护进程

    启动yarn守护进程

  • hadoop-config.cmd

    主要作用就是提取路径

    如果指定--config选项则配置HADOOP_CONF_DIR,并调用HADOOP_CONF_DIR下的hadoop-env.cmd

    如果指定--hosts选项则配置HADOOP_SLAVES为--hosts指定的文件的地址

    判断JAVA_HOME等java参数

    设置最大堆内存

    HADOOP的堆大小会覆盖Java的堆大小

    设置大量类路径

  • hadoop-env.cmd

    设置JAVA_HOME

    安全,日志相关

  • start-dfs.cmd

    设置HADOOP_BIN_PATH为当前脚本所在目录(sbin)

    调用hadoop-config.cmd

    判断--config

    启动namenode和datanode(start在新窗口启动)

  • hdfs.cmd

    设置HADOOP_BIN_PATH为当前脚本所在目录(sbin)

    调用hdfs-config.cmd和hadoop-env.cmd

  • hdfs-config.cmd

    调用hadoop-config.cmd

  • hadoop.cmd

    设置sbin路径

    替换空格,左括号,右括号

    调用hadoop-config.cmd

    处理命令参数

    定义hdf命令组

    调用hdfs.cmd

    定义mapreduce命令组

    调用mapred.cmd

    处理核心命令

    fs -- set CLASS=org.apache.hadoop.fs.FsShell等

    调用java程序

  • hdfs.cmd

    定义标签组找到相应的类

  • mapred.cmd

    定义mapreduce命令组

    调用mapred-config.cmd

  • start-yarn.cmd

    调用yarn-config.cmd

    运行resourcemanger nodemanger proxyserver

总结

hadoop脚本总结.png