Hadoop笔记(二):虚拟机下 Hadoop-2.6.1 完全分布式集群搭建

配置Hadoop-2.6.1集群(3台),准备工作:

目标:

  • 修改虚拟机主机名,添加域名映射
  • 完成虚拟机的 JDKHadoop 的环境搭建
  • 成功启动 HDFS 集群
  • 测试 HDFS 的 上传,下载 等一些基础功能

修改虚拟机主机名

查看当前主机名

hostname

CentOS 6.x

  • 临时修改,立刻生效(重启恢复)
    hostname <临时主机名> ![](http://pouotmqe7.bkt.clouddn.com/b/i/20190324/hostname-new.png.ylit) 此时仍显示root@hdfs,退出重新登陆到虚拟机即可变成root@test`,但重启后会恢复成之前的主机名。
  • 永久修改,重启生效
    共需修改两处,保持一致:
    • /etc/sysconfig/network
      HOSTNAME=<主机名>
    • /etc/hosts
      127.0.0.1 localhost.localdomain localhost.localdomain localhost4 localhost4.localdomain4 <主机名>
    • 都修改好后重启,执行 rebootinit 6 即可看到效果

CentOS 7.x

CentOS 7 中提供了新命令:hostnamectl,可以用来修改主机名,并且在 /etc/sysconfig/network 中修改已经失效。

  • hostnamectl set-hostname <主机名>,用这条命令修改会立刻生效,并且重启后也仍有效
  • /etc/hosts 中添加主机名(原本没有,自己加上去)
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <主机名>

添加域名映射

做好域名映射之后,可以在配置文件中直接用域名替换 IP,省的再输那——么长的 IP 地址了。

  • 编辑 /etc/hosts 文件,添加域名映射,包含集群的三台主机
    格式:ip 域名
    vi /etc/hosts

通过 SecureCRT 把下载好的压缩包上传至虚拟机,并解压

SecureCRT 自带 FTP 功能,可传输文件,使用的快捷键为 Alt + p

上传

在 SecureCRT 已登陆至虚拟机的情况下,按 Alt + p,弹出 SFTP 界面,直接拖动文件至界面即可开始上传。若拖动无效的话,需要手动敲命令:
put <文件路径>put e:\jdk.tar.gz
路径最好不带中文,可能会识别不了。

成功上传后,文件在默认存放在虚拟机的当前用户目录下,root 用户则是在 /root 目录下,普通用户默认在 /home/<用户名>。

解压

tar.gz 格式压缩文件的解压:
解压至当前目录:tar -xzvf <文件路径>
解压至其他目录:tar -xzvf <文件路径> -C <目录>

  1. 解压至 /usr/install_pack/ 目录下

    • JDK: tar -xzvf ~/jdk_1.8.0_131.tar.gz -C /usr/install_pack/
    • Hadoop:tar -xzvf ~/hadoop-2.6.1.tar.gz -C /usr/install_pack/
  2. 解压完毕

配置 JDK,Hadoop 到 $PATH 中

  1. 编辑 /etc/profile 文件:vi /etc/profile,文件尾添加以下内容,保存退出

    1
    2
    3
    4
    export JAVA_HOME=/usr/install_pack/jdk
    export HADOOP_HOME=/usr/install_pack/hadoop
    export CLASSPATH=.:%JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin
  2. 使刚才的更改立刻生效:source /etc/profile

  3. 测试 Java 环境是否 OK:java -version
  4. 测试 Hadoop 环境是否 OK:hadoop version

!!! 在配置好 Hadoop 前,先不要执行 Hadoop 的其他命令 !!!
!!! 在执行格式化和分发文件前也不可以启动集群,否则会出错 !!!

配置和启动 HDFS

确定 JDK 没问题后,修改 Hadoop 的配置文件,位于 $HADOOP_HOME/etc/hadoop 下。

编辑配置文件

注意配置文件不能写错,xml 代码有闭合标签吗:<name>XXX</name>,内容多了空格/少了小数点都不行。

  1. 先进入配置文件目录
    cd $HADOOP_HOME/etc/hadoop$HADOOP_HOME 即为在 /etc/profile 中设置的 HADOOP_HOME
    也可使用完整路径:cd /path/to/hadoop-2.6.1/etc/hadoop
  2. ls 看下内容,需要修改的文件有 6 个,hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,slaves(新版本为workers)

    hadoop-env.sh

    • 需要在这个文件中声明 JDK 路径

      1
      2
      # The java implementation to use.
      export JAVA_HOME=/usr/install_pack/jdk

      hadoop-env.sh

    core-site.xml

    • 设置 namenode 节点
      value 的格式:hdfs://主机名或者IP:9000

      1
      2
      3
      4
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hdfs:9000</value>
      </property>
    • 设置 Hadoop 存放元数据文件的目录,在执行格式化后会自动创建
      这里设置为 Hadoop 目录下的 hdpdata

      1
      2
      3
      4
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/install_pack/hadoop-2.6.1/hdpdata</value>
      </property>

      图中目录里的 /usr/install_pack/hadoop 是手动创建的 /usr/install_pack/hadoop-2.6.1 的软链接
      core-site.xml

    hdfs-site.xml

    • 设置数据的备份数目,默认为 3 份
      hdfs-site.xml

    mapred-site.xml

    • 设置 MapReduce 的资源管理器为 yarn

    yarn-site.xml

    • 设置 resourcemanager 的启动位置,填写主机名

    slaves

    • 填写集群所有机器的主机名

格式化 DFS 文件系统

  • 确认配置文件无误后,执行格式化,尽量不要多次执行格式化
    hdfs namenode -format
    执行完毕后出现这样的消息才算格式化成功。

    19/03/24 14:16:07 INFO common.Storage: Storage directory /usr/install_pack/hadoop/hdpdata/dfs/name has been successfully formatted.

    其中 Storage directory 为 core-site.xml 中设置的 <name>hadoop.tmp.dir</name> 目录。
    如果不设置的话,默认在:/tmp/{$user} 目录下。
    hdfs namenode -format

  • 如果格式化失败,先看报了什么错误,再手动删除这个目录,检查配置文件是否正确,然后重新格式化一遍

分发文件至其他两台机器上

  • 一定要在成功格式化后再将文件分发到其他机器上
  • 当前机器为 hdfs,其他两台分别为 dfs01dfs02,使用 scp 将文件发至另外两台机器上
    使用主机名进行发送的话,需要在 /etc/hosts 文件中添加域名映射
    1. dfs01
      • 发送 Hadoop 和 JDK
        scp -r /usr/install_pack dfs01:/usr
      • 发送 hosts 文件
        scp /etc/hosts dfs01:/etc
      • 发送 profile 文件
        scp /etc/profile dfs01:/etc
    2. dfs02
      dfs01 替换成 dfs02 再发一次。
    3. 全部发送完毕
    4. 向所有机器发送 source /etc/profile 命令,使环境变量配置生效(在每台虚拟机上分别执行也可以)
      • 用 SecureCRT(或其他软件)登陆集群中的每一台机器
      • 点击 SecureCRT 菜单中的 View,将 Command Window 勾上,界面底部会出现一个窗口
        打开命令窗口
      • 在底部出现的窗口中右键,勾上 Send Commands to > All Sessions,向所有已连接的会话发送命令
        设置为向所有会话发送命令
      • 编辑命令: source /etc/profile,回车发送
        发送命令
      • 然后已连接的每台虚拟机都会执行这条命令
        hdfs
        dfs01
        dfs02

启动集群

  • 至此,Hadoop 已经全部配置完毕,启动集群
    执行:start-dfs.sh
    注:这个 Shell 脚本存放在 $HADOOP_HOME/sbin 目录下,如果 $PATH 中未配置该路径,会出现 command not found 的情况,需要进入到该目录下才能执行该脚本:cd $HADOOP_HOME/sbin,然后执行 ./start-dfs.sh
    下图就是没有配置 $HADOOP_HOME/sbin 的情况,系统找不到该文件执行。
    执行 start-dfs.sh 脚本文件

    所以说,不将 Hadoop 的 bin 和 sbin 目录添加到 $PATH 中也是可以执行命令的,但需要敲出 命令or可执行文件 的完整路径 /usr/install_pack/hadoop-2.6.1/sbin/start-dfs.sh 或者进入到该目录使用 ./start-dfs.sh 才能执行,这样太麻烦了,还是直接添加到 $PATH 中比较方便。

  • 使用 jps 命令(Java Virtual Machine Process Status Tool)查看本机 jvm进程,在 $JAVA_HOME/bin 目录下
    jps 命令
    出现这几个说明集群已成功启动,可直接测试 上传下载功能

  • 查看 Namenode 进程所监听的端口
    jps 命令中可以看到,Namenode 的 进程PID 为 3165,使用 netstat -lntp 查看它监听的 TCP 端口
    共监听两个端口:9000 和 50070:

    • :50070 端口是 namenode 对外提供的 http 服务,通过这个服务可以查看 hdfs 集群的状态
    • :9000 则是提供 rpc 服务的端口(如客户端的交互,元数据的获取等)
      查看 Namenode 监听的端口
  • 在主机查看 HDFS 集群状态
    浏览器打开地址:192.168.233.90:50070

测试 HDFS 基本功能

  • 创建文件夹
    hdfs dfs -mkdir /test_dir
  • 上传
    hdfs dfs -put ~/file /test_dir
  • 浏览文件列表
    hdfs dfs -ls /
  • 下载
    hdfs dfs -get /test_dir/file ~/file_download
  • 删除文件
    hdfs dfs -rm /test_dir/file
  • 删除文件夹
    hdfs dfs -rmdir /test_dir

可能遇到的问题

JDK/Hadoop 环境变量不生效

不慎将 $PATH 设置错,导致连一些基本命令都用不了

  1. vi /etc/profile,先用 # 将改动 PATH 的地方注释掉
    再添加一行:export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  2. 更新一下新设置的 $PATH:source /etc/profile
  3. 如果系统命令都能够正常使用了,就删掉新加的那行,取消第一步的注释,检查 JDK_HOME,HADOOP_HOME 等目录是否正确;
    export PATH=[...] 一定不能写错,分隔是英文冒号:
    记得在前面或者后面加上 $PATH:export PATH=$PATH:...:...
  4. source /etc/profile 一遍
Author: Yout
Link: https://youthug.github.io/blog/2019/03/24/HDFS-Cluster-Setup/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.