环境:

   三台机器 ubuntu14.04  

   hadoop2.7.5

   jdk-8u161-linux-x64.tar.gz (jdk1.8)

架构:

   machine101 :名称节点、数据节点、SecondaryNaemnode(辅助名称节点)、ResourceManager、NodeManger

      machine102、machine103 :数据节点、NodeManger

1、安装jdk\hadoop

(1)解压hadoop.tar.gz到/soft/

(2)配置环境变量

JAVA_HOME=/soft/jdk1..0_45   (必须要写,hadoop会去找名叫JAVA_HOME的值)
HADOOP_HOME=/soft/hadoop-2.7.5 (必须要写)
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/soft/jdk1.7.0_45/bin:/soft/hadoop-2.7.5/bin:/soft/hadoop-2.7.5/sbin"

(3)source /etc/environment

(4)验证是否安装成功 :查看版本  $> hadoop version

2、配置hadoop的三种模式 

 1、standalone/local  独立/本地模式 (默认是此模式,不需要配置)

    ----使用本地文件系统,此模式只用在开发、调试时。

 2、Pseudodistributed mode  伪分布式模式  (一般都用完全分布式,需要多台服务器)

    ----完全类似完全分布式,但是只有一个节点。      

3、Fully distributes mode  完全分布式模式

  第一步: 三台客户机,安装jdk,hadoop,配置两者的环境变量

   第二步: 安装ssh实现无密登陆,只有NN(名称节点)需要生成密钥对,把其公钥放在数个DN(数据节点)的~/.ssh/authorized_keys

        1)用户是ailab,需要明确是哪个用户

          $>sudo apt-get install ssh

        2)生成密钥

          $>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

        3)将自己的公钥导入自己的公钥数据库(~/.ssh/authorized_keys就是公钥数据库)

          $>cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

        4)实现对自己的无密登陆

          $>ssh localhost

        A登陆B,需要A用自己的私钥加密,传递给B,B用A的公钥解密。即,A需要事先把公钥给B

        machine101公钥从101传递给machine102上

        方法1:直接用scp拷贝过去

            machine101:  scp ~/.ssh/id_rsa.pub ailab@192.168.1.200:/home/ailab/

            machine102:   cat id_rsa.pub >>authorized_keys
        方法2:

        第一步: ailab@machine102:~/.ssh$  nc -l 8888 > id_rsa.pub.machine101

        第二步: ailab@machine101:~/.ssh$ nc machine102 8888 < id_rsa.pub

        结果    : 在machine102的~/.ssh目录下多出“id_rsa.pub.machine101”文件

        第三步 :cat id_rsa.pub.machine101 >>authorized_keys  (将101的公钥写入102的公钥数据库)

        结果    : ailab@machine101:~/.ssh$ ssh machine102   (可以在101无密登陆102了)


                            

   第三步:配置hadoop文件:

在/soft/hadoop/etc/hadoop/目录下

 a.修改core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://machine101:8020/</value> //写名称结点
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/ailab/hadoop</value> //每个节点需要自己创建该目录,最后没有左斜杠
  </property>
</configuration> b.修改hdfs-site.xml
<property>   
  <name>dfs.replication</name> #副本数   
  <value>3</value>
</property>
#如果说还有第四台机子的话,应该把machine104设置为SecondaryNaemnode(辅助名称节点)
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>machine104:50090</value>
</property>

c.cp mapred-site.xml.template  mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
d.修改yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>machine101</value>
</property> <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
e.修改vim slaves (存储数据结点ip)
machine 101   #既作名称节点,又作数据节点
machine 102
machine

   第四步:scp命令(远程文件拷贝),基于ssh

        ------把jdk,hadoop文件拷贝到其他机器

        scp -r /soft/* ailab@machine102:/soft     #把jdk/hadoop传给其他机器

        scp /etc/environment root@machine102:/etc/

   第五步:

      格式化文件系统  machine101 $>hadoop namenode -format (初始化了namenode工作目录)

      启动所有进程   machine101 $>start-all.sh (datanode启动后,初始化datanode工作目录)

      停止       machine101 $> stop-all.sh

      重启系统(考察start-all.sh是否ok)

      不需要格式化(以后都不需要格式化)

      直接start-all.sh

      检查jps

   第六步番外:

      如果以后修改了配置文件

      需要先stop-all.sh

      格式化文件系统 $>hadoop namenode -format,在启动

=====================================================================================================================

 背景知识:

      hadoop所有类库、配置文件都在tar包中,jar包在share/hadoop/.

      1、解压tar包

      2、hadoop-2.7.5\share\hadoop\common\hadoop-common-2.7.5.jar里有core-default.xml默认的配置文件

        同样道理,也存在jar包中也存在hdfs-default.xml等

比如,如果你不修改服务器中soft/hadoop/etc/hadoop/core-site.xml的话,就会读取jar包里默认的core-default.xml
以下内容来自jar包中的core-default.xm
<property>
<name>fs.defaultFS</name>
<value>file:///</value> #默认是本地模式
</property> <property>
  <name>hadoop.tmp.dir</name>
  <value>/tmp/hadoop-${user.name}</value> #默认的hadoop.tmp.dir值
  <description>A base for other temporary directories.</description>
</property>
以下来自hdfs-default.xml
动态获取hadoop.tem.dir的值。所以只需要在core-site.xml配置hadoop.tem.dir就可以了
datanode工作目录:
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>

     

=============================================================================================================

hadoop进程管理:

  第一步:查看hadoop进程个数(5个)  $>jps

  第二步:如果进程个数不对,杀死所有进程  $>stop-all.sh

  第三步:重新格式化系统  machine101$>hadoop namenode -format

  第四步:启动所有进程  machine101$>start-all.sh

  电脑一旦重启,就需要重新格式化hadoop,因为伪分布式下,他把本地文件保存为临时文件,重新开机后文件就删除了

  如果配置了hadoop.tmp.dir,就没事,数据文件会保存下来

首次启动hadoop:

  第一步:格式化文件系统   $>hadoop namenode -format

  第二步:启动所有进程    $>start-all.sh

  第三步:查询进程     $>jps

  查看文件目录 $> hadoop fs -ls /

  创建文件 $> hadoop fs -mkdir -p /user/ailab/data

基于web ui 访问文件系统hdfs :  http://localhost:50070

 需要注意的问题:

hadoop伪分布式下 无法启动datanode的原因及解决办法

版本一:----------------------------------------------------------------------------------------------

3. 问题产生原因:
执行文件系统格式化时(即执行命令$ bin/hadoop namenode -format 后),会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION(我的路径为 usr/local/hadoop/tmp/dfs/name/current/VERSION,其中hadoop为建立虚拟机时为虚拟机系统所取的用户名)文件,记录namespaceID,标识了所格式化的namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件(路径为usr/local/hadoop/tmp/dfs/data/current/VERSION)只是你第一次格式化时保存的namenode的ID,因此就会造成namdenode 的 namespaceID 与 datanode的namespaceID 不一致,从而导致namenode和 datanode的断连。
解决方法:
小航哥答案:直接删除datanode工作目录,重新启动dfs。

在每次执行hadoop namenode -format时,都会为NameNode生成namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,所以只要在每次执行hadoop namenode -format之前,先删除hadoop.tmp.dir(路径为 /usr/local/hadoop/下的)tmp目录就可以启动成功,或者删除/usr/local/hadoop/tmp/dfs下的data目录,然后重新启动dfs(在hadoop安装路径 /usr/local/hadoop/ 下,运行命令./sbin/start-dfs.sh)即可。请注意是删除hadoop.tmp.dir对应的本地目录,即/usr/local/hadoop/下的tmp文件夹,而不是HDFS目录。

 也可以试着参考http://blog.sina.com.cn/s/blog_76fbd24d01017qmc.html 或者http://blog.csdn.net/hackerwin7/article/details/19973045这两篇文章。

以后在hadoop format过程中 要注意不要频繁地reformat  namnode(格式化命令为  ./bin/hadoop namenode -format)的ID信息。format过程中选择N(否)就是了。

Hadoop namenode重新格式化需注意问题

版本二:

----------------------------------------------------------------------------------------------

(1)Hadoop的临时存储目录tmp(即core-site.xml配置文件中的hadoop.tmp.dir属性,默认值是/tmp/hadoop-${user.name}),如果没有配置hadoop.tmp.dir属性,那么hadoop格式化时将会在/tmp目录下创建一个目录,例如在cloud用户下安装配置hadoop,那么Hadoop的临时存储目录就位于/tmp/hadoop-cloud目录下
(2)Hadoop的namenode元数据目录(即hdfs-site.xml配置文件中的dfs.namenode.name.dir属性,默认值是${hadoop.tmp.dir}/dfs/name),同样如果没有配置该属性,那么hadoop在格式化时将自行创建。必须注意的是在格式化前必须清楚所有子节点(即DataNode节点)dfs/name下的内容,否则在启动hadoop时子节点的守护进程会启动失败。这是由于,每一次format主节点namenode,dfs/name/current目录下的VERSION文件会产生新的clusterID、namespaceID。但是如果子节点的dfs/name/current仍存在,hadoop格式化时就不会重建该目录,因此形成子节点的clusterID、namespaceID与主节点(即namenode节点)的clusterID、namespaceID不一致。最终导致hadoop启动失败。

2、hadoop 的三个模块

hdfs 分布式文件系统

    【进程】

    NameNode        //名称节点--存目录的地方

    DataNode         //数据节点--存数据的地方

    SecondaryNaemnode  //辅助名称节点--备份目录的地方

yarn 作业(job)调度集群资源管理框架e

    ResourceManager    //资源管理器

    NodeManger        //节点管理器

mapreduce 基于yarn的对大数据集进行并行处理技术

()

最新文章

  1. table常用功能总结
  2. 如何保存联系人到系统通讯录(android)
  3. java BigInteger类的用法
  4. suse系统FTP问题
  5. android——api
  6. levelDB跳表实现
  7. Intent之间无法传递大数据的替代方法
  8. VB.NET中网络编程的另一种方案----system.net中的HttpWebRequest类的使用
  9. Git分支实战入门详细图解
  10. Qt 使用openGL 渲染YUV420P格式的视频
  11. 单端测序(Single-read)和双端测序(Paired-end和Mate-pair)的关系
  12. win10环境下Android studio安装教程----亲测可用
  13. JSP页面中引入另一个JSP页面
  14. Mac下的paths.d目录神奇用法
  15. 【hdoj_1753】大明A+B(大数)
  16. C#基础视频教程5.3 如何编写简单的超级热键
  17. Android开发实战之补间动画和属性动画
  18. Web Pages version 2兼容 Web Pages version 1的设置
  19. canvas玩转微信红包
  20. AS(Autonomous System)

热门文章

  1. Introdution to Spring Mobile
  2. 如何利用Emacs进行个人时间管理(GTD)
  3. windows共享文件夹给centOS
  4. poj 2226(最小覆盖)
  5. tomcat NIO配置
  6. MongoDB save()方法和insert()方法的区别
  7. 汇编 DOS的中断调用 INT 21H
  8. Linux下权限掩码umask
  9. 当公有云Azure拥抱Docker容器技术
  10. [HAOI2012] 容易题[母函数]