美文网首页Hadoop源码学习
Hadoop源码学习——启动HDFS(2)

Hadoop源码学习——启动HDFS(2)

作者: 找不到工作的_Ngone | 来源:发表于2017-05-23 13:33 被阅读0次

    这里,我们省略hadoop源码导入eclipse的过程。
    在上一篇我们寻找main()函数的文章,我们可以看到,脚本文件启动hdfs的过程分两步,见下图:

    start hdfs.jpeg

    先启动namenode, 再启动datanodes。注意,在注释中指出的,如果先启动datanode,datanode就会向log中写入连接错误直到namenodes被启动。这说明,datanode和namenode之间存在通信联系。这里就有通信方面的源码实现可以研究。我们暂且先不看这一块。
    当然,这是脚本的启动过程。我们需要在hadoop的源码中启动,但是要按照先启动namenode后启动datanode的顺序。

    在hadoop源码的工程目录下(Hadoop部分核心源码已经被导入eclipse),找到org/apache/hadoop/hdfs/server/namenode/NameNode.java文件,并运行run configurations。第一次运行需要-format参数,之后,就不需要其它参数,直接运行即可。

    namenode正常启动后

    接着运行datanode,目录org/apache/hadoop/hdfs/server/datanode/DataNode.java。正常来说,不需要其它参数,直接运行即可。但是,我在运行过程中遇到了一个错误:
    WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /Users/wuyi/Downloads/hadoop-1.2.1/tmp/dfs, expected: rwxr-xr-x, while actual: rwxrwxrwx
    ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid.
    我的错误记录忘记截图了,这个是我在网上找的,一模一样的。大概意思就是说,文件权限不对。
    然后,我就根据调用的层次,又开始顺藤摸瓜,把hadoop默认的文件权限改成了777。


    修改权限为777

    发现还是有问题。。。然后继续顺藤摸瓜,(从DataNode.java)直到DataStorage.java中下面这个地方:

    修改datanode的启动方式

    我把startOpt(估计是datanode启动方式)改成FORMAT,datanode就奇迹般的可以正常启动了。然后,我又改回原来的REGULAR,datanode也可以正常启动了。至于原因,我在截图里做了猜测(datanode第一次启动可能也需要format)。这时候,再把默认权限改成755,也没有问题了。
    至此hdfs就成功启动了。

    为了验证hdfs已经成功启动,我们在hdfs的根目录下创建一个test目录。从上一篇文章中,我们知道,在命令行里fs的操作都从rg.apache.hadoop.fs.FsShell这个入口进。我们在eclipse中找到这个入口,然后在run configurations里给参数 -mkidr /test。
    然后我们再用-ls /检验,运行带参数-ls /的FsShell:

    给定参数-ls /

    然后,我们在控制台上可以看到:

    在hdfs上创建的test目录

    由此,我们得到了验证。

    相关文章

      网友评论

        本文标题:Hadoop源码学习——启动HDFS(2)

        本文链接:https://www.haomeiwen.com/subject/fugwxxtx.html