Hadoop的核心组件:

  • Common(基础组件)
  • HDFS(Hadoop Distributed File System 分布式文件系统)
  • MapReduce(分布式运算编程框架)
  • YARN(Yet Another Resources N 资源调度与分配)

Linux环境准备:JDK的安装与SSH登录

  • Java安装
    1
    2
    3
    4
    5
    6
    cd /root/software #进入JDK安装包所在目录
    ls -l #列出当前文件夹下的所有文件
    tar -zxvf jdk*.tar.gz #解压缩jdk的归档压缩包,打包压缩时使用-zcvf参数
    echo -e 'export JAVA_HOME=/root/software/jdk1.8.0_221\nexport PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile #将JAVA路径加入环境变量
    source /etc/profile #使环境变量生效
    java -version
  • SSH登录
    1
    2
    3
    4
    5
    6
    /usr/sbin/sshd #启动ssh服务
    netstat -tnulp #查看端口开放
    ssh-keygen #生成SSH公/私匙,默认使用rsa
    cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys #将公匙拷贝至信任列表
    chmod 600 /root/.ssh/authorized_keys #增加权限
    ssh localhost #ssh本地连接测试

HDFS伪分布式集群搭建

  • HDFS集群:NameNode(Master),DataNode(多个,Slave),SecondaryNameNode(一个)。
  • YARN集群:ResourceManger(Master),NodeManger(多个,Slave)。

Hadoop目录结构介绍

1
2
3
4
cd /root/software
tar -zxvf hadoop.*.tar.gz
cd hadoop*
ls -l

各目录介绍如下:

  • bin:存放HDFS,YARN脚本,是sbin目录下脚本的基础实现。(用的AliCDN,图片已炸)
  • etc:存放Hadoop的配置文件与模板信息。(图片已炸)
  • include:储存编程库的头文件,使用C++编写。
  • lib:定义对外的动态链接库(.so)与静态链接库(.a)。
  • libexec:服务对应配置文件所在目录,可配置日志输出与启动参数。
  • sbin:存放Hadoop管理脚本,常用于管理各类服务。
  • share:/hadoop目录存放模块jar包,/doc目录存放文档。

HDFS集群配置文件

  • 只读的default默认配置文件,包括 core-default.xml、hdfs-default.xml、mapred-default.xml 和 yarn-default.xml。
  • 可二次编辑的自定义配置文件,存放于etc/hadoop,包括hadoop-env. sh、yarn-env. sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 和 slaves,将会被优先使用。
配置文件 功能
hadoop-env. sh 配置 Hadoop 运行所需的环境变量
yarn-env. sh 配置 YARN 运行所需的环境变量
core-site.xml Hadoop 核心全局配置文件,可在其它配置文件中引用该文件
hdfs-site.xml HDFS 配置文件,继承 core-site.xml 配置文件
mapred-site.xml MapReduce 配置文件,继承 core-site.xml 配置文件
yarn-site.xml YARN 配置文件,继承 core-site.xml 配置文件
slaves Hadoop 集群所有从节点(DataNode 和 NodeManager)列表

需要配置如下文件:

  • hadoop-env.sh来运行NameNode、SecondaryNameNode 和 DataNode。
  • yarn-env.sh来运行 ResourceManager 和 NodeManager。
  • slaves来储存当前集群的从节点列表。

编辑配置文件

  • 配置JAVA的环境变量

    1
    2
    cd /root/software/hadoop-2.7.7/etc/hadoop/
    echo "export JAVA_HOME=$JAVA_HOME" >> hadoop-env.sh #将JAVA_HOME环境变量写入hadoop_env
  • 编辑核心配置文件
    使用vim core-site.xml,在configuration中添加:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- HDFS集群中NameNode的URI(包括协议、主机名称、端口号),默认为 file:/// --> 
    <property>
    <name>fs.defaultFS</name>
    <!-- 用于指定NameNode的地址 -->
    <value>hdfs://localhost:9000</value>
    </property>
    <!-- Hadoop运行时产生文件的临时存储目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/root/hadoopData/temp</value>
    </property>
  • 配置文件系统
    使用vim hdfs-site.xml,在configuration中添加:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- NameNode在本地文件系统中持久存储命名空间和事务日志的路径 -->
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/root/hadoopData/name</value>
    </property>
    <!-- DataNode在本地文件系统中存放块的路径 -->
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/root/hadoopData/data</value>
    </property>
    <!-- 数据块副本的数量,默认为3 -->
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
  • 配置slaves
    我们采用伪分布式集群,使用vim slaves 查看配置内容为localhost。

配置Hadoop环境变量

1
2
3
echo -e 'export HADOOP_HOME=/root/software/hadoop-2.7.7\nexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile #将环境变量输出到系统环境变量
source /etc/profile #使环境变量生效
hadoop version #测试环境变量

HDFS集群测试

1
2
3
hdfs namenode -format #格式化HDFS文件系统,切记只需要格式化一次,并且在Master上进行
start-dfs.sh #一键启动或者使用 hadoop-daemon.sh start namenode datanode secondarynamenode 来手动启动单个结点
jps #Java Virtual Machine Process Status Tool,查看运行中的JAVA程序以及进程号

Start-dfs.sh
JPS
部署完成后访问http://localhost:50070来查看集群状态。
WebUI

一些问题

  • 端口无法访问
    需要关闭防护墙或者配置端口访问,在Ubuntu/Debian下使用ufw disable即可,在Centos 7中使用:
    1
    2
    systemctl stop firewalld.service
    systemctl disable firewalld.service