HDFS-2.7.0系列3: hdfs namenode -format

上一节,讲过了,执行hadoop namenode -format后

实际上是执行

/root/hadoop-2.7.0-bin/bin/hdfs namenode -format

下面就来分析这个脚本

---

bin=`which $0`
bin=`dirname ${bin}`
bin=`cd "$bin" > /dev/null; pwd`

打印

bin=/root/hadoop-2.7.0-bin/bin

---

DEFAULT_LIBEXEC_DIR="$bin"/../libexec

打印’

DEFAULT_LIBEXEC_DIR=/root/hadoop-2.7.0-bin/bin/../libexec

---

cygwin=false
case "$(uname)" in
CYGWIN*) cygwin=true;;
esac

这个不会执行,过滤

---

接下来执行一个脚本

HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR}
. $HADOOP_LIBEXEC_DIR/hdfs-config.sh

实际上执行的是

/root/hadoop-2.7.0-bin/libexec/hdfs-config.sh

这个脚本其实是调用另外一个脚本,调用的哪个脚本?读者可以自己去探索一下:)

---回到hdfs脚本

function print_usage(){
  echo "Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND"
  echo "       where COMMAND is one of:"
  echo "  dfs                  run a filesystem command on the file systems supported in Hadoop."
  echo "  classpath            prints the classpath"
  echo "  namenode -format     format the DFS filesystem"
  echo "  secondarynamenode    run the DFS secondary namenode"
  echo "  namenode             run the DFS namenode"
  echo "  journalnode          run the DFS journalnode"
  echo "  zkfc                 run the ZK Failover Controller daemon"
  echo "  datanode             run a DFS datanode"
  echo "  dfsadmin             run a DFS admin client"
  echo "  haadmin              run a DFS HA admin client"
  echo "  fsck                 run a DFS filesystem checking utility"
  echo "  balancer             run a cluster balancing utility"
  echo "  jmxget               get JMX exported values from NameNode or DataNode."
  echo "  mover                run a utility to move block replicas across"
  echo "                       storage types"
  echo "  oiv                  apply the offline fsimage viewer to an fsimage"
  echo "  oiv_legacy           apply the offline fsimage viewer to an legacy fsimage"
  echo "  oev                  apply the offline edits viewer to an edits file"
  echo "  fetchdt              fetch a delegation token from the NameNode"
  echo "  getconf              get config values from configuration"
  echo "  groups               get the groups which users belong to"
  echo "  snapshotDiff         diff two snapshots of a directory or diff the"
  echo "                       current directory contents with a snapshot"
  echo "  lsSnapshottableDir   list all snapshottable dirs owned by the current user"
  echo "      Use -help to see options"
  echo "  portmap              run a portmap service"
  echo "  nfs3                 run an NFS version 3 gateway"
  echo "  cacheadmin           configure the HDFS cache"
  echo "  crypto               configure HDFS encryption zones"
  echo "  storagepolicies      list/get/set block storage policies"
  echo "  version              print the version"
  echo ""
  echo "Most commands print help when invoked w/o parameters."
  # There are also debug commands, but they don‘t show up in this listing.
}
if [ $# = 0 ]; then
  print_usage
  exit
fi

这个太简单,就是一个函数而已,告诉用途

---

接下来到了最关键的时刻了,就是执行命令

if [ "$COMMAND" = "namenode" ] ; then

  CLASS=‘org.apache.hadoop.hdfs.server.namenode.NameNode‘
  HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS"

其中

HADOOP_OPTS= -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop-2.7.0-bin/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/root/hadoop-2.7.0-bin -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=/root/hadoop-2.7.0-bin/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender

---

剩下的一段是cgwin,忽略

---

export CLASSPATH=$CLASSPATH
HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"

赋值语句不多说

---

接下来的一个if-else语句,实际上执行的是最后一个分支

else
  # run it

  exec "$JAVA" -Dproc_$COMMAND $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]"
fi

庐山真面目要出来了,打印执行语句

/usr/java/jdk1.8.0_45/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop-2.7.0-bin/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/root/hadoop-2.7.0-bin -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=/root/hadoop-2.7.0-bin/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.hdfs.server.namenode.NameNode -format

哟,不错喔。

终于揭开了庐山真面目。

下一节,我们开始分析NameNode的源码。

时间: 2024-12-14 18:45:11

HDFS-2.7.0系列3: hdfs namenode -format的相关文章

Hadoop系列之hdfs(分布式文件系统)安装配置

Hadoop系列之hdfs(分布式文件系统)安装配置环境介绍:     ip                        节点192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slave21.在所有机器添加hosts192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slav

hadoop 2.5 hdfs namenode –format 出错Usage: java NameNode [-backup] |

在 cd  /home/hadoop/hadoop-2.5.2/bin 下 执行的./hdfs namenode -format 报错[[email protected] bin]$ ./hdfs namenode –format 16/07/11 09:21:21 INFO namenode.NameNode: STARTUP_MSG:/************************************************************STARTUP_MSG: Starti

【Hadoop系列】HDFS

Hadoop的前世今生 什么是大数据 各行各业都会产生大量的数据,比如社交网站的意见观点,电商平台人们浏览网页停留的时间,交通运输每天产生的数据等等.这些数据大多不是结构化的,一般来说都是半结构化或者非结构化的 在以前,我们的处理能力达不到,所以很多数据要么没有存起来,要么没有利用起来.而现在数据越来越集中在云端的服务器上,并且计算能力已经今非昔比了,我们完全有能力对大数据进行存储和分析. 所以所谓的大数据指的就是,原有的计算能力无法处理的大批量的数据,而大数据技术研究的是如何快速有效的处理这些

大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和SecondaryNameNode(面试开发重点)

第1章 HDFS概述1.1 HDFS产出背景及定义1.2 HDFS优缺点1.3 HDFS组成架构1.4 HDFS文件块大小(面试重点)第2章 HDFS的Shell操作(开发重点)第3章 HDFS客户端操作(开发重点)3.1 HDFS客户端环境准备3.2 HDFS的API操作3.2.1 HDFS文件上传(测试参数优先级)3.2.2 HDFS文件下载3.2.3 HDFS文件夹删除3.2.4 HDFS文件名更改3.2.5 HDFS文件详情查看3.2.6 HDFS文件和文件夹判断3.3 HDFS的I/O

Hadoop HDFS编程 API入门系列之简单综合版本1(四)

不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import java.net.URISyntaxException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.BlockLocation;import org.apache.hadoop.fs.FileStatus

HDFS详解(3)——HDFS文件结构

HDFS中的NameNode.DataNode.Secondery NameNode是如何在磁盘上组织和存储持久化数据的?下面将分别进行介绍. 注意,这里主要介绍的是Hadoop 2.0以前的版本,Hadoop 2.0以后版本文件结构稍微有一些变化,因为目前我们还没有使用hadoop 2.0,所以后面只是稍微说一下hadoop 2.0中NameNode目录结构,其他有兴趣的可以自己再去深入的研究. NameNode的文件结构 最新格式化的NameNode会创建以下目录结构: ${dfs.name

Hadoop 2.8.x 分布式存储 HDFS 基本特性, Java示例连接HDFS

02_note_分布式文件系统HDFS原理与操作,HDFS API编程:2.x下HDFS新特性,高可用,联邦,快照 HDFS基本特性 /home/henry/app/hadoop-2.8.1/tmp/dfs/name/current - on namenode cat ./VERSION namespaceID (空间标识号,类似集群识别号) /home/henry/app/hadoop-2.8.1/tmp/dfs/data – on datanode ls -lR blk_1073741844

LXD 2.0 系列(四):资源控制

LXD 提供了各种资源限制.其中一些与容器本身相关,如内存配额.CPU 限制和 I/O 优先级.而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制.-- Stéphane Graber 本文导航 -可用资源限制03% -磁盘08% -CPU12% -内存21% -网络 I/O26% -块 I/O29% -它怎么工作?39% -应用这些限制43% -CPU47% -内存58% -磁盘和块 I/O63% -网络 I/O71% -获取当前资源使用率81% -总结92% -更多信息94% 编译自

[译]JavaFX 2.0+系列教程-使用内置的布局面板(4)-垂直盒子(VBox)

[译]JavaFX 2.0+系列教程-使用内置的布局面板(4)-垂直盒子(VBox) 垂直盒子 VBox 和水平盒子 HBox 很类似,只是其包含的节点是在单列中进行排列.图 1-4 显示了一个VBox的示例. 图 1-4 VBox示例 内边距(Padding)属性可以设置节点到VBox边缘的空隙.空间(Spacing)属性可以设置节点之间的间隙.边缘(Margin)属性可以为每个节点增加额外的环绕空间. 代码片段 例 1-3 创建了一个VBox,其中包含了一系列的选项. 例 1-3 创建VBo