Hadoop学习笔记(一)Hadoop快速入门:1.完全分布式运行模式


准备、过程

虚拟机:VMware Workstation 12 Pro
操作系统:CentOS Linux release 7.2.1511 (Core)
控制终端:Secure CRT
Hadoop版本:Hadoop-2.7.3
JDk版本:jdk1.8.0_40
1)准备3台虚拟机(关闭防火墙、静态ip、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群

常见错误及解决方案

虚拟机准备

请参考文章:
Cent OS 7系统的安装、VMware Tools安装及设置共享文件夹
虚拟机中克隆虚拟机的步骤


编写集群分发脚本xsync


  • 1.scp(secure copy)安全拷贝

    • (1)scp定义:

      scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

    • (2)基本语法

      scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname

        命令	 递归 	要拷贝的文件路径/名称 	目的用户@主机:目的路径/名称
      
    • (3)案例实操
      • (a)在hadoop101上,将hadoop101中/opt/module目录下的软件拷贝到hadoop102上。
        [hadoop@hadoop101 /]$scp -r /opt/module root@hadoop102:/opt/module

      • (b)在hadoop103上,将hadoop101服务器上的/opt/module目录下的软件拷贝到hadoop103上。
        [hadoop@hadoop103 opt]$sudo scp -r hadoop@hadoop101:/opt/module root@hadoop103:/opt/module

      • (c)在hadoop103上操作将hadoop101中/opt/module目录下的软件拷贝到hadoop104上。
        [hadoop@在hadoop103 opt]$scp -r hadoop@hadoop101:/opt/module root@hadoop104:/opt/module

        注意:拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的,所有者和所有者组。sudo chown hadoop:hadoop -R /opt/module

      • (d)将hadoop101中/etc/profile文件拷贝到hadoop102的/etc/profile上。
        [hadoop@hadoop101 ~]$sudo scp /etc/profile root@hadoop102:/etc/profile

      • (e)将hadoop101中/etc/profile文件拷贝到hadoop103的/etc/profile上。
        [hadoop@hadoop101 ~]$sudo scp /etc/profile root@hadoop103:/etc/profile

      • (f)将hadoop101中/etc/profile文件拷贝到hadoop104的/etc/profile上。
        [hadoop@hadoop101 ~]$sudo scp /etc/profile root@hadoop104:/etc/profile

        注意:拷贝过来的配置文件别忘了source一下/etc/profile。

  • 2.rsync远程同步工具

    • rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

    • rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

    • (1)基本语法

      rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname

        命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
      

    选项参数:
    在这里插入图片描述

    • (2)案例实操
      • (a)把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录
        [hadoop@hadoop101 opt]$rsync -rvl /opt/software/ root@hadoop102:/opt/software
  • 3.xsync集群分发脚本

    • (1)需求:循环复制文件到所有节点的相同目录下
    • (2)需求分析:
      • (a)rsync命令原始拷贝:
        rsync -rvl /opt/module root@hadoop103:/opt/
      • (b)期望脚本:
        xsync要同步的文件名称
    • (c)说明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。
    • (3)脚本实现
      • (a)在/home/atguigu目录下创建bin目录,并在bin目录下xsync创建文件,文件
        内容如下:
        [hadoop@hadoop102 ~]$mkdir bin
        [hadoop@hadoop102~]$cd bin/
        [hadoop@hadoop102 bin]$touch xsync
        [hadoop@hadoop102 bin]$vi xsync

在该文件中编写如下代码

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4获取当前用户名称
user=`whoami`

#5循环
for((host=103;host<105;host++)); do
	echo ------------------- hadoop$host --------------
	rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
	
done
  • (b)修改脚本xsync具有执行权限
    [hadoop@hadoop102 bin]$chmod 777 xsync
  • (c)调用脚本形式:xsync文件名称
    [hadoop@hadoop102 bin]$xsync /home/hadoop/bin

注意:如果将xsync放到/home/atguigu/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。


集群配置

  • 1.集群部署规划

    Hadoop学习笔记(一)Hadoop快速入门:1.完全分布式运行模式_第1张图片

  • 2.配置集群

    • (1)核心配置文件
      配置core-site.xml:
      [hadoop@hadoop102 hadoop]$vi core-site.xml
      在该文件中编写如下配置:
      <!--指定HDFS中NameNode的地址-->
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoop102:9000</value>
      </property>
      
      <!--指定Hadoop运行时产生文件的存储目录-->
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/opt/module/hadoop-2.7.2/data/tmp</value>
      </property>
      
    • (2)HDFS配置文件
      配置hadoop-env.sh
      [hadoop@hadoop102 hadoop]$vi hadoop-env.sh
      export JAVA_HOME=/opt/module/jdk1.8.0_144
      配置hdfs-site.xml
      [hadoop@hadoop102 hadoop]$vi hdfs-site.xml
      在该文件中编写如下配置
      <property>
      <name>dfs.replication</name>
      <value>3</value>
      </property>
      
      <!--指定Hadoop辅助名称节点主机配置-->
      <property>
      <name>dfs.namenode.secondary.http-			address</name>
      <value>hadoop104:50090</value>
      </property>
      
      dfs.replication副本数的配置默认为3,也可把这个配置删除,直接用默认的
    • (3)YARN配置文件
      配置yarn-env.sh
      [hadoop@hadoop102 hadoop]$vi yarn-env.sh
      exportJAVA_HOME=/opt/module/jdk1.8.0_144
      配置yarn-site.xml
      [hadoop@hadoop102 hadoop]$vi yarn-site.xml
      在该文件中增加如下配置
      <!--Reducer获取数据的方式-->
      <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      </property>
      
      <!--指定YARN的ResourceManager的地址-->
      <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>hadoop103</value>
      </property>
      
    • (4)MapReduce配置文件
      配置mapred-env.sh
      [hadoop@hadoop102 hadoop]$vi mapred-env.sh
      export JAVA_HOME=/opt/module/jdk1.8.0_144
      配置mapred-site.xml
      [hadoop@hadoop102hadoop]$cpmapred-site.xml.template mapred-site.xml
      [hadoop@hadoop102hadoop]$vimapred-site.xml
      在该文件中增加如下配置
      <!--指定MR运行在Yarn上-->
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
      
  • 3.在集群上分发配置好的Hadoop配置文件

    [hadoop@hadoop102 hadoop]$xsync /opt/module/hadoop-2.7.2/

  • 4.查看文件分发情况

    [hadoop@hadoop103 hadoop]$cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml


集群单节点启动

  • 1.如果集群是第一次启动,需要格式化NameNode

    [hadoop@hadoop102 hadoop2.7.2]$hadoop namenode -format

    如果是第N此格式化,需要先把hadoop2.7.2目录下的data和logs文件夹删除,然后在执行命令,且格式化过程中不能出现选项,要一直顺利的下来。这样才能格式化成功。

  • 2.在hadoop102上启动NameNode

    [hadoop@hadoop102 hadoop2.7.2]$hadoop-daemon.sh start namenode
    [hadoop@hadoop102 hadoop2.7.2]$jps
    3461 NameNode

  • 3.在hadoop102、hadoop103以及hadoop104上分别启动DataNode

    [hadoop@hadoop102 hadoop2.7.2]$hadoop-daemon.sh start datanode
    [hadoop@hadoop102 hadoop-2.7.2]$jps
    3461 NameNode
    3608 Jps
    3561 DataNode
    [hadoop@hadoop103 hadoop-2.7.2]$hadoop-daemon.sh start datanode
    [hadoop@hadoop103 hadoop-2.7.2]$jps
    3190 DataNode
    3279 Jps
    [hadoop@hadoop104 hadoop-2.7.2]$hadoop-daemon.sh start datanode
    [hadoop@hadoop104 hadoop-2.7.2]$jps
    3237 Jps
    3163 DataNode


SSH无密登录配置

  • 1.配置ssh

    • (1)基本语法

      ssh 另一台电脑的ip地址

    • (2)ssh连接时出现Hostkeyverificationfailed的解决方法

      [hadoop@hadoop102 opt]$ssh 192.168.1.103 Theauthenticityofhost'192.168.1.103(192.168.1.103)'can't be established. RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06. Are you sure you want to continue connecting (yes/no) ? Host key verification failed.

    • (3)解决方案如下:直接输入yes
  • 2.无密钥配置

    • (1)免密登录原理,如图所示

      免密登陆原理
      Hadoop学习笔记(一)Hadoop快速入门:1.完全分布式运行模式_第2张图片
      每发送一条报文,都要加密两次、解密两次。(发送方用发送方私钥加密一次,接收方公钥加密一次。接收方用接收方私钥解密一次,发送方公钥解密一次。)

    • (2)生成公钥和私钥:

      [hadoop@hadoop102 .ssh]$ssh-keygen -t rsa
      然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

    • (3)将公钥拷贝到要免密登录的目标机器上

      [hadoop@hadoop102 .ssh]$ssh-copy-id hadoop102
      [hadoop@hadoop102 .ssh]$ssh-copy-id hadoop103
      [hadoop@hadoop102 .ssh]$ssh-copy-id hadoop104

      注意:
      还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
      还需要在hadoop103上采用hadoop账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

  • 3. .ssh文件夹下(~/.ssh)的文件功能解释

    Hadoop学习笔记(一)Hadoop快速入门:1.完全分布式运行模式_第3张图片

    在这里有些人使用的是dsa加密,个人感觉都差不多。关于dsa和rsa的大致区别,请看文章:
    DSA和RSA加密算法的区别


群启集群

  • 1. 配置slaves

    cd /opt/module/hadoop-2.7.2/etc/hadoop/
    [hadoop@hadoop102 hadoop]$vi slaves
    在该文件中增加如下内容:

    hadoop102
    hadoop103
    hadoop104
    

    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
    同步所有节点配置文件
    [hadoop@hadoop102 hadoop]$xsync slaves

  • 2. 启动集群

    • (1)如果集群是第一次启动,需要格式化NameNode (注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

      [hadoop@hadoop102 hadoop-2.7.2]$bin/hdfs namenode -format

    • (2)启动HDFS
      [hadoop@hadoop102 hadoop-2.7.2]$sbin/start-dfs.sh
      [hadoop@hadoop102 hadoop-2.7.2]$jps
      4166 NameNode
      4482 Jps
      4263 DataNode
      [hadoop@hadoop103 hadoop-2.7.2]$jps
      3218 DataNode
      3288 Jps
      
      [hadoop@hadoop104 hadoop-2.7.2]$jps
      3221 DataNode
      3283 SecondaryNameNode
      3364 Jps
      
    • (3)启动YARN

      [hadoop@hadoop103 hadoop-2.7.2]$sbin/start-yarn.sh

      注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启
      动YARN,应该在ResouceManager所在的机器上启动YARN。

    • (4)Web端查看 SecondaryNameNode

      (a)浏览器中输入:http://hadoop104:50090/status.html
      (b)查看SecondaryNameNode信息

  • 3.集群基本测试

    • (1)上传文件到集群
      上传小文件
      [hadoop@hadoop102 hadoop-2.7.2]$hdfs dfs -mkdir -p /user/hadoop/input
      [hadoop@hadoop102 hadoop-2.7.2]$hdfs dfs -put wcinput/wc.input /user/hadoop/input
      上传大文件
      [hadoop@hadoop102 hadoop-2.7.2]$bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/hadoop/input
    • (2)上传文件后查看文件存放在什么位置
      • (a)查看HDFS文件存储路径
        [hadoop@hadoop102 subdir0]$pwd
        /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
      • (b)查看HDFS在磁盘存储文件内容
        [hadoop@hadoop102 subdir0]$cat blk_1083626111
    • (3)拼接
      [hadoop@hadoop102 subdir0]$cat blk_1083626114>>tmp.file
      [hadoop@hadoop102 subdir0]$cat blk_1083626115>>tmp.file
      [hadoop@hadoop102 subdir0]$tar -zxvf tmp.file
    • (4)下载
      [hadoop@hadoop102 hadoop-2.7.2]$bin/hadoop fs -get /user/hadoop/input/hadoop-2.7.2.tar.gz./

集群启动/停止方式总结

  • 1.各个服务组件逐一启动/停止

    • (1)分别启动/停止HDFS组件
      hadoopdaemon.sh start/stop namenode/datanode/secondarynamenode
    • (2)启动/停止YARN
      yarndaemon.sh start/stop resourcemanager/nodemanager
  • 2.各个模块分开启动/停止(配置ssh是前提)常用

    • (1)整体启动/停止HDFS

      start-dfs.sh / stop-dfs.sh

    • (2)整体启动/停止YARN

      start-yarn.sh / stop-yarn.sh

不建议使用start-all.sh / stop-all.sh,因为通常namenode和resourcemanager不配置在同一个机器上,所以,用all容易出错(就连hadoop官方也不建议用)


常见错误及解决方案

  • 1)防火墙没关闭、或者没有启动YARN

    INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
    
  • 2)主机名称配置错误

  • 3)IP地址配置错误

  • 4)ssh没有配置好

  • 5)root用户和atguigu两个用户启动集群不统一

  • 6)配置文件修改不细心

  • 7)未编译源码

Unabletoloadnative-hadooplibraryforyourplatform...usingbuiltin-javaclasseswhere applicable
17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
  • 8)不识别主机名称

    java.net.UnknownHostException: hadoop102: hadoop102 at
    java.net.InetAddress.getLocalHost(InetAddress.java:1475) at
    org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146) at
    org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) at
    org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) at
    java.security.AccessController.doPrivileged(NativeMethod) at
    javax.security.auth.Subject.doAs(Subject.java:415)
    

    解决办法:
    (1)在/etc/hosts 文件中添加192.168.1.102 hadoop102
    (2)主机名称不要起hadoop hadoop000等特殊名称

  • 9)DataNode和NameNode进程同时只能工作一个。

    (1)NameNode再format初始化之后
    (2)DataNode在启动之后也会生成和NameNode一样的clusterId(集群id)
    (3)再次格式化NameNode,生成新的clusterid,与未删除DataNode的clusterid不一致
    (4)解决办法:在格式化之前,先删除DataNode里面的信息(默认在/tmp,如果配置了该目录,那就去你配置的目录下删除数据)

  • 10)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目

    录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

  • 11)jps不生效。

    原因:全局变量hadoopjava没有生效。解决办法:需要source /etc/profile文件。

  • 12)8088端口连接不上

    [hadoop@hadoop102 桌面]$cat /etc/hosts

    注释掉如下代码
    #127.0.0.1 localhost localhost.localdomainlocalhost4localhost4.localdomain4
    #::1 hadoop102

你可能感兴趣的:(Hadoop,hadoop)