本文将讲解在Linux下以伪分布模式配置Hadoop,网上的方案大致都试了试,期间各种报错,现在解决了,所以整理一版本人觉得比较简洁的方案出来。

1. Hadoop简介

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

既然Hadoop能处理海量处理,那么,肯定有一个存储过程处理过程。即,Hadoop的框架最核心的设计就是:HDFS和MapReduce。

  1. 存储
    分布式文件系统:HDFS,hadoop distributed file system.
  2. 运算
    mapreduce : map + reduce

下面将讲解Hadoop的伪分布配置模式。

2. 伪分布模式

伪分布式模式下,Hadoop将所有进程运行于同一台主机上,但此时Hadoop将使用分布式文件系统,而且各jobs也是由JobTracker服务管理的独立进程。同时,由于伪分布式的Hadoop集群只有一个节点,因此HDFS的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序执行。

hadoop的配置共有四种级别:集群、进程、作业和单独操作,前两类由集群管理员负责配置,后面的两类则属于程序员的工作范畴。

hadoop的配置文件位于conf目录中,其中的core-site.xml、mapred-site.xml和hdfs-site.xml三个配置文件最为关键。core-site.xml用于配置hadoop集群的特性,它作用于全部进程及客户端,mapred-site.xml配置mapreduce集群的工作属性,hdfs-site.xml配置hdfs集群的工作属性。

3. 配置hadoop文件

首先进入目录:

hadoop伪分布式没有启动 hadoop伪分布式模式_伪分布模式

编辑core-site.xml文件:

sudo vim core-site.xml

修改为如下内容(这里是设置主机名称和地址和tmp目录的位置)

<configuration>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/usr/soft/hadoop/hadoop-2.7.4/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文件:

sudo vim hdfs-site.xml

修改为如下内容(设置副本数量,伪分布为1,并设置datanode和namenode的目录路):

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

编辑mapred-site.xml文件:

sudo vim mapred-site.xml

修改为如下内容

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
    </property>

    <property>  
        <name>mapred.local.dir</name>  
        <value>/usr/soft/hadoop/hadoop-2.7.4/tmpdir/mapred/local</value>  
    </property>  

    <property>  
        <name>mapred.system.dir</name>  
        <value>/usr/soft/hadoop/hadoop-2.7.4/tmpdir/mapred/system</value>  
    </property>

</configuration>

编辑yarn-site.xml 文件:

sudo vim yarn-site.xml

修改为如下内容

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

4. 配置SSH

在伪分布模式下,如果要启动守护进程,我们就需要配置SSH。SSH命令的作用就是由于不同计算机间通信需要一个认证过程,配置ssh免密码登录,可以方便计算机间的相互通信,不必每次通信都进行输入密钥进行认证。

首先,先确认SSH是否安装

hadoop伪分布式没有启动 hadoop伪分布式模式_xml_02

发现已经有SSH了,这是因为Ubuntu会自带SSH,但是它不是服务器版的,所以我们得手动安装:

sudo apt-get install ssh

安装上后,可以通过一个指令查看执行文件

which ssh-keygen

hadoop伪分布式没有启动 hadoop伪分布式模式_Hadoop_03

然后,为了数据传输更加安全,我们需要生成秘钥,对数据进行加密。

使用下面命令生成一对秘钥,增加主机之间数据传输的安全性:

ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa (rsa就是加密方式,~/.ssh是秘钥存放路径)

hadoop伪分布式没有启动 hadoop伪分布式模式_伪分布模式_04

可以查看秘钥是否生成成功:

hadoop伪分布式没有启动 hadoop伪分布式模式_Hadoop_05

其中,id_rsa是私钥,id_rsa.pub是公钥。(我是之前就做好的,所以其他两个文件先不用管

下面,对公钥进行授权:

cat id_rsa.pub >> authorized_keys

也就是说,经过认证的公钥都会存储在一个文件夹(authorized_keys)中,只有从这个文件夹中的公钥发出来的请求,才无需登录。

第一次登录会提示是否继续连接:

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop_06

此时,我们已经通过SSH以远程的方式登录到了本机。并且会在文件夹中生成known_hosts文件夹,存放已经感知到的主机。

5. 启动守护进程

首先,需要格式化文件系统,回到hadoop目录下执行:

bin/hadoop namenode -format

hadoop伪分布式没有启动 hadoop伪分布式模式_伪分布模式_07

再开启所有守护进程

./sbin/start-all.sh

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop_08

期间,可能会报错,显示没有创建文件的权限,则需要修改hadoop文件权限

chmod -R 777 hadoop-2.7.4

最后,使用jps命令查看守护进程

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop_09

如果出现namenode,datanode和secondarynamenode则说明成功。我们也可以通过网页的形式查看守护进程是否配置成功:

通过http://localhost:50070 访问namenode,如果出现下面情况,则说明namenode成功开启:

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop伪分布式没有启动_10

通过http://localhost:8088 访问资源管理器界面:

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop_11

下面,我们可以查看HDFS目录,此时,我们需要配置Hadoop环境变量,如果不配置的话,它会默认显示下面的本地文件信息:

hadoop伪分布式没有启动 hadoop伪分布式模式_hadoop伪分布式没有启动_12

所以,我们先设置环境变量export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop

其中,HADOOP_INSTALL为Hadoop的安装目录。(有人会命名为HADOOP_HOME)

然后,可以通过下面命令查看HDFS目录

hadoop fs -ls /

hadoop伪分布式没有启动 hadoop伪分布式模式_xml_13

由于我们之前格式化了HDFS,此处,应该显示空的,由于我之间创建了一个文件,所以解释下。

我们可以通过 fd -mkdir 文件名 创建文件。

最后,可以通过下面命令停掉所有进程

./sbin/stop-all.sh

hadoop伪分布式没有启动 hadoop伪分布式模式_Hadoop_14