Hadoop环境搭建(ubuntu+hadoop2.7 - 伪分布式)

Hadoop简介

在进行环境搭建之前,先简要回顾一下Hadoop的基本知识。

Hadoop背景

Hadoop是面向集群的分布式并行计算框架(cluster、distributed、parallel),其核心组成是HDFS分布式文件系统和MapReduce并行编程模型。在开发者的业务背景下(如数据分析项目),Hadoop可被视为一套工具,它解决了并行计算中的种种复杂问题(如分布式存储,任务调度,负载均衡,容错机制…),让我们能够绕开底层细节,专注于业务自身的实现。

Hadoop主要经历了Hadoop1和Hadoop2两个时代,Hadoop2在Hadoop1的HDFS+MapReduce的基础上,引入了YARN资源管理系统,hadoop核心区别如下图示:

这里写图片描述

Hadoop的快速发展与大数据、云计算等新兴领域的崛起相辅相成,围绕Hadoop形成的生态系统现已十分庞大,相关内容按下不表。

基本原理回顾

这里简要回顾一下Hadoop的基本工作机制,包括HDFS和MapReduce两部分。

  1. HDFS

    HDFS(Hadoop-分布式文件系统)遵循主从架构(Master-Slave)模式。一个主节点NameNode,负责整个文件系统命名空间(NameSpace)的管理与维护,同时面向客户端(HDFS Client)提供文件读写等操作控制;多个从节点DataNode则构成文件实际的存储集群。此外HDFS为提升系统生存弹性而精心设计了副本机制(Replication)。其它需明确的HDFS术语包括:块(Block)、通信包(Packet)、源数据(MetaData)、Secndary NameNode冷备份等等。

    HDFS的架构示意图如下所示:

    这里写图片描述

    文件系统最基本的任务是读/写,对于HDFS为用户(Client)提供了完备的读写接口。基本的模式是通过访问NameNode的命名空间映射信息,建立起Client与DataNode File之间的读写通道,生成流对象来进行读写操作。下图是读写文件示意图:

    这里写图片描述
    这里写图片描述

  2. MapReduce

    MapReduce是Hadoop实现并行计算的基础(称之为模型、框架、平台…),首先回顾一下Hadoop-MapReduce的运行,主要有以下内容:

    • 用户端Client提交所要进行的MapReduce Job;
    • ResourceManager进行资源调配设置,NodeManager加载与监控容器;
    • ApplicationMaster向ResourceManager申请资源并交互状态;
    • NodeManager管理MapReduce运行时的Job;
    • 基于HDFS的Job配置,jar包的分发;

    下图所示是Hadoop2下基于YARN的MapReduce过程示意图:

    这里写图片描述

    重点地,MapReduce运行的核心是Map和Reduce,一个完整MapReduce程序执行主要经历:输入分片(input split)、映射(map)、结合(combiner)、洗牌(shuffle)、化简(reduce)几个阶段,详情按下不表。

Hadoop环境搭建

准备工作

本文Hadoop安装的一些准备信息(不限于此):

  • 系统环境:Ubuntu 16.04 64bit.
  • Java环境:系统自带Java8(JDK-1.8).
  • Hadoop版本:Apache Hadoop 2.7.3.

安装过程

整个安装过程详情可参考:

java、ssh

安装Hadoop首先要配置好java环境ssh登录支持,建议jdk1.7及以上版本java和免密码登录的ssh。java要配置好环境变量,ubuntu16.04自带ssh,可直接运行。

为了方便hadoop节点构建(包括权限冲突的规避),新建一个名为hadoop的新用户,执行下列命令即可:

sudo useradd -m hadoop -s /bin/bash  # 新建用户名为hadoop采用bash为shell
sudo passwd hadoop  # 设置新用户密码
sudo adduser hadoop sudo  # 为其添加root权限接入

于是我们可以进入hadoop用户继续环境搭建操作。

hadoop安装文件获取

可以直接从各路镜像网站(如华科开源镜像站的/apache/hadoop/common/)下载hadoop安装文件或带编译源文件(如hadoop-2.7.3.tar.gz)。由于文件的来源可能不稳定规范,为了验证文件数据完整性,还需要从Apache - 官方镜像的/hadoop/common/hadoop-2.7.3路径下下载.asc或.mds文件,这里我们选择hadoop-2.7.3.tar.gz.mds进行MD5 hash的验证。

下载好文件后,执行命令:

cat hadoop-2.7.3.tar.gz.mds | grep 'MD5' # 列出md5检验值
md5sum hadoop-2.7.3.tar.gz | tr "a-z" "A-Z" # 获取hadoop主文件md5检验值。

比较二者结果是否相同即可以判断文件是否完整,如下认证示意:

这里写图片描述

验证通过后,可直接解压到目标文件夹,并为hadoop用户配置读写权限,示意命令如下:

sudo tar -zxf hadoop-2.7.3.tar.gz -C /usr/local  # 这里解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop  # 重命名方便后续使用
sudo chown -R hadoop ./hadoop  # 修改hadoop用户对该文件夹的权限

同时加入环境变量(可修改环境变量配置文件如~/.bashrc):

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

单机模式

Hadoop默认为单机模式,所谓单机模式(Standalone),即是Hadoop本地运行,无节点间的交互,也无需HDFS的操作,一般用于测试MapReduce逻辑。为了更好的学习Hadoop,我们跳过该模式。

伪分布式模式

所谓伪分布式,是在单机条件下模拟分布式集群运行环境,它包括各种Java进程对不同Hadoop节点任务的模拟(如NameNode、DataNode和SourceManager、NodeManager等),以及和HDFS的交互。

这里的配置过程主要是hadoop文件目录下./etc/hadoop/中相关.xml文件中修改 configuration*片段的修改,给出如下(详细说明见参考):

基本配置:

  • core-site.xml

    <configuration>
            <property>
                 <name>hadoop.tmp.dir</name>
                 <value>file:/usr/local/hadoop/tmp</value>
                 <description>Abase for other temporary directories.</description>
            </property>
            <property>
                 <name>fs.defaultFS</name>
                 <value>hdfs://localhost:9000</value>
            </property>
    </configuration>
    
  • hdfs-site.xml

    <configuration>
            <property>
                 <name>dfs.replication</name>
                 <value>1</value>
            </property>
            <property>
                 <name>dfs.namenode.name.dir</name>
                 <value>file:/usr/local/hadoop/tmp/dfs/name</value>
            </property>
            <property>
                 <name>dfs.datanode.data.dir</name>
                 <value>file:/usr/local/hadoop/tmp/dfs/data</value>
            </property>
    </configuration>
    

YARN配置:

  • mapred-site.xml

    先是重命名:

    mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml   
    

    然后修改 configuration 片段:

    <configuration>
            <property>
                 <name>mapreduce.framework.name</name>
                 <value>yarn</value>
            </property>
    </configuration>
    
  • yarn-site.xml

    <configuration>
            <property>
                 <name>yarn.nodemanager.aux-services</name>
                 <value>mapreduce_shuffle</value>
            </property>
    </configuration>
    

格式化NameNode,终端命令:

./bin/hdfs namenode -format

注意,这一步的结果应如下所示(注意画线处):

这里写图片描述

接着生成HDFS文件系统:

./bin/hdfs dfs -mkdir -p /user/hadoop  # 这里hadoop是用户名
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

环境测试

经过上述配置过程之后,可通过./bin/hdfs dfs -ls input命令查看所生成的HDFS文件列表,通过./sbin/start-dfs.sh启动守护进程NameNodeDataNode,通过./sbin/start-yarn.sh启动守护进程ResourceManagerNodeManager(对应的停止命令将start改为stop),通过jps命令可查看当前hadoop进程如下图示:

这里写图片描述

停止YARN脚本的命令是:

./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver

Hadoop运行中,可通过 http://localhost:50070 查看NameNode、Datanode等节点信息,通过 http://localhost:8088/cluster 查看YARN上任务状态。

本文小结

搭建Hadoop环境为分布式并行任务开发创造了条件,接下来的工作将围绕基于Hadoop框架的数据挖掘研究展开。

参考

列出与本文内容紧密相关的参考源如下:

猜你喜欢

转载自blog.csdn.net/snoopy_yuan/article/details/72630890
今日推荐