zoukankan      html  css  js  c++  java
  • Ubuntu环境下手动配置Hadoop1.2.1

     

    /×××××××××××××××××××××××××××××××××××××××××/

     

    Author:xxx0624

     

    HomePage:http://www.cnblogs.com/xxx0624/

     

    /×××××××××××××××××××××××××××××××××××××××××/

     

     

    配置Hadoop1.2.1

    前提是已经配置过JDK和SSH

    如何配置JDK:http://www.cnblogs.com/xxx0624/p/4164744.html)

    如何配置SSH:http://www.cnblogs.com/xxx0624/p/4165252.html)

    1. 添加Hadoop用户

    sudo addgroup hadoop 
    sudo adduser --ingroup hadoop hadoop
    sudo usermod -aG admin hadoop

     

    2. 下载Hadoop文件(例:Hadoop1.2.1,我放的时/home/xxx0624/hadoop)

    sudo tar -zxzf hadoop-1.2.1.tar.gz 
    sudo mv hadoop-1.2.1 /home/xxx0624/hadoop
    

     保证所有操作都是在hadoop用户下完成

    sudo chown -R hadoop:hadoop /home/xxx0624/hadoop
    

     注意:其实第一步和第二步可以忽略,也就是说不一定要在hadoop用户下进行!!!

    3. 设置hadoop和java环境变量

    sudo gedit /home/xxx0624/hadoop/conf/hadoop-env.sh
    

     在打开的文件中末尾添加:

    export JAVA_HOME=/usr/lib/jvm   //(根据你本身的java安装路径而定的) 
    export HADOOP_HOME=/home/xxx0624/hadoop 
    export PATH=$PATH:/home/xxx0624/hadoop/bin 
    

     使环境变量生效(每次运行Hadoop命令都必须保证变量生效!)

    source /home/xxx0624/hadoop/conf/hadoop-env.sh
    

    4. 伪分布式模式配置

    core-site.xml:  Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。

     hdfs-site.xml:  Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。

     mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。

      4.1  首先新建这几个文件夹

    mkdir tmp 
    mkdir hdfs 
    mkdir hdfs/name 
    mkdir hdfs/data
    /*都是在hadoop文件夹下*/
    

       4.2 开始编辑文件

     core-site.xml:

    1     <configuration>
    2     <property>
    3     <name>fs.default.name</name>
    4     <value>hdfs://localhost:9000</value>
    5     </property>
    6     <property>
    7     <name>hadoop.tmp.dir</name>
    8     <value>/home/xxx0624/hadoop/tmp</value>
    9     </property>

    hdfs-site.xml:

     1     <configuration>
     2     <property>
     3     <name>dfs.replication</name>
     4     <value>1</value>
     5     </property>
     6     <property>
     7     <name>dfs.name.dir</name>
     8     <value>/home/xxx0624/hadoop/hdfs/name</value>
     9     </property>
    10     <property>
    11     <name>dfs.data.dir</name>
    12     <value>/home/xxx0624/hadoop/hdfs/data</value>
    13     </property>
    14     </configuration

    mapred-site.xml:

    1     <configuration>
    2     <property>
    3     <name>mapred.job.tracker</name>
    4     <value>localhost:9001</value>
    5     </property>
    6     </configuration>

    5. 格式化HDFS

    hadoop namenode -format 
    

     如果出现这种错误:

    ERROR namenode.NameNode: java.io.IOException: Cannot create directory /home/xxx0624/hadoop/hdfs/name/current

    则:将hadoop的目录权限设为当前用户可写sudo chmod -R a+w /home/xxx0624/hadoop,授予hadoop目录的写权限

    另外同时还需要更改hdfs/data文件夹的读写权限:

    sudo chmod 755 data

    6. 启动Hadoop

    cd /home/xxx0624/hadoop/bin
    start-all.sh
    

     正确结果如下:

    Warning: $HADOOP_HOME is deprecated.
    starting namenode, logging to /home/xxx0624/hadoop/logs/hadoop-xxx0624-namenode-xxx0624-ThinkPad-Edge.out
    localhost: Warning: $HADOOP_HOME is deprecated.
    localhost:
    localhost: starting datanode, logging to /home/xxx0624/hadoop/logs/hadoop-xxx0624-datanode-xxx0624-ThinkPad-Edge.out
    localhost: Warning: $HADOOP_HOME is deprecated.
    localhost:
    localhost: starting secondarynamenode, logging to /home/xxx0624/hadoop/logs/hadoop-xxx0624-secondarynamenode-xxx0624-ThinkPad-Edge.out
    starting jobtracker, logging to /home/xxx0624/hadoop/logs/hadoop-xxx0624-jobtracker-xxx0624-ThinkPad-Edge.out
    localhost: Warning: $HADOOP_HOME is deprecated.
    localhost:
    localhost: starting tasktracker, logging to /home/xxx0624/hadoop/logs/hadoop-xxx0624-tasktracker-xxx0624-ThinkPad-Edge.out

    可以通过jps命令来验证是否成功:

    如果5个守护进程都出现,则正常。

    NameNode:

    它是Hadoop 中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问。

    SecondaryNameNode:

    它不是 namenode 的冗余守护进程,而是提供周期检查点和清理任务。

    出于对可扩展性和容错性等考虑,我们一般将SecondaryNameNode运行在一台非NameNode的机器上。

    DataNode:

    它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个 datanode 守护进程。

     JobTrackerTaskTracker:

    JobTracker负责调度 DataNode上的工作。每个 DataNode有一个TaskTracker,它们执行实际工作。

    JobTracker和 TaskTracker采用主-从形式,JobTrackerDataNode分发工作,而 TaskTracker执行任务。

    JobTracker还检查请求的工作,如果一个 DataNode由于某种原因失败,JobTracker会重新调度以前的任务。

    7.查看运行状态

     http://localhost:50030/    - Hadoop 管理介面
     http://localhost:50060/    - Hadoop Task Tracker 状态
     http://localhost:50070/    - Hadoop DFS 状态

    8. 关闭Hadoop

    stop-all.sh
    

    各种错误总结:

    1.$HADOOP_HOME is deprecated.....

    这个对Hadoop运行无影响。

    因为Hadoop本身对HADOOP_HOME进行了判断:

     if [  "$HADOOP_HOME_WARN_SUPPRESS"  =  ""  ] && [  "$HADOOP_HOME"  !=  ""  ]; then  
      echo  "Warning: $HADOOP_HOME is deprecated."   1 >& 2   
      echo  1 >& 2   
    fi 
    

     解决办法:

            (1)注释掉上面这段代码

            (2)在当前用户的/home/xxx0624/.bash_profile目录下(可能有的机器没有这个文件,比如我的。。)增加一个环境变量

            export HADOOP_HOME_WARN_SUPPRESS=1    //这是要增加的环境变量
    source .bash_profile //修改完立即使之生效

     2.datanode无法启动,即jps命令查询结果中不存在,这时需要在logs文件夹中查看相应的log文件

    例如:

    2014-12-17 16:37:54,165 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /home/xxx0624/hadoop/hdfs/data, expected: rwxr-xr-x, while actual: rwxrwxrwx

    错误原因:需要将data文件的读写权限改为rwxr-xr-x

    解决办法:更改权限

    sudo chmod 755 data
    

     然后重启Hadoop

     3. datanode启动后自动关闭

    查看log日志,发现是data/current/version中的namespaceid和name/current/version中的namespaceid不一样。

    解决办法:

    将data的namespaceid改为name中的即可。

  • 相关阅读:
    尚硅谷韩顺平Linux教程学习笔记
    第15章 自动编码器
    问题总结
    日常问题记录
    SQLServer日常bug记录
    .NetCore使用NLog写入数据库总结
    C#操作XML文档
    C#中的 ?/?:/?? 三者的区别及用法
    git 命令从入门到放弃
    通过反射技术获得类中的所有属性
  • 原文地址:https://www.cnblogs.com/xxx0624/p/4166095.html
Copyright © 2011-2022 走看看