Ubuntu15.10 Hadoop伪分布式环境安装

本文详细介绍如何在Ubuntu系统上搭建Hadoop伪分布式环境的过程,包括配置主机、安装SSH及Java开发环境、安装Hadoop等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为课程实验的需要,需要搭建hadoop伪分布式环境,经过了一天的探索,终于成功搭建好了,并整理成文。
首先要了解一下Hadoop的运行模式:

单机模式(standalone)
单机模式是Hadoop的默认模式。当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
伪分布模式(Pseudo-Distributed Mode)
伪分布模式在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
全分布模式(Fully Distributed Mode)
Hadoop守护进程运行在一个集群上。

版本:Ubuntu 15.10 ;Hadoop 1.1.2 ; Java 1.6.0_27


  • 配置主机
    设置静态ip地址以及修改主机名
    依次顺序为:点击网络连接->编辑->ipv4设置->方法改为:手动,然后填上自己的静态ip地址。如下图:
    这里写图片描述

修改完静态ip后,再修改hostname,第一步就算完成了。指令也很简单
sudo vim /etc/hostname
然后将此内容改为你想要的主机名即可,如下图:
图1

当你输入hostname,显示以下内容时,说明已修改成功:
图2

然后需要在hosts添加上master机以及slave机,输入sudo vim /etc/hosts进行修改。其中NvRom-Hadoop表示master机,而XiaJingJing表示slave机,保存即可。
这里写图片描述

这时候我们需要确认第一步骤是否已成功设置好了,输入ping -c 4 NvRom-Hadoop,当出现以下情况时,说明配置成功。这里写图片描述


  • 安装ssh

由于hadoop需要用ssh进行通信,因此我们需要安装ssh。因为Ubuntu已经默认安装ssh client,所以只需要启动ssh server即可

sudo apt-get install openssh-server

假设服务已安装完成后,启动服务:

sudo /etc/init.d/ssh start

作为一个安全通信协议(ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式),使用时需要密码,因此可以要设置成免密码登录,生成私钥和公钥:

ssh-keygen -t rsa -P ""

进入~/.ssh/目录下,将公钥id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的(authorized_keys用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容)

cp .ssh/id_rsa.pub .ssh/authorized_keys

然后就可以无密码登陆了。如果一切顺利,最终结果应该如下图所示:这里写图片描述

这里可能会有几个问题:
1:可能会提示当前目录下没有.ssh这个文件目录,那是因为.ssh是在主目录下,可以输入如下内容:
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

2:下载ssh server时可能进行不下去,输入即可解决
sudo apt-get updata


  • 安装java开发环境

假设我们已经有了需要的文件,首先将文件放入/usr/local目录下,然后修改环境变量。
Ubuntu中有几个环境变量文件:

/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
~/.profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

输入sudo vim /etc/profile
往里面添加如下语句:
这里写图片描述

需要强调的是,PATH是大写!其余内容与windows下配置差不多。然后输入source /etc/profile
修改的文件立即生效。
做好之后,当我们输入java -version,如下图所示,说明配置成功。
这里写图片描述


  • 安装Hadoop

到官网下载hadoop源文件,解压并放到/usr/local/hadoop,然后进入hadoop目录,打开conf,在hadoop-env.sh添加以下信息:

//JAVA_HOME视java安装路径而定
export JAVA_HOME=/usr/local/jdk1.6.0_27 
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin

这里写图片描述

然后让配置文件立即生效source hadoop-env.sh

这时候hadoop的单机模式就完成了。我们可以用hadoop自带的WorldCount来感受下MapReduce过程。在hadoop目录下,新建一个目录test,并将conf文件里的文件全部复制到test中,输入:
bin/hadoop jar hadoop-examples-1.1.2.jar wordcount test output

然后再cat output/*可查看结果
这里写图片描述

可能会出现以为权限问题而不能正确执行WorldCount的问题,只需要在前面加个sudo或是切换到root权限下即可。


  • 伪分布式安装

这里需要设定3个文件:core-site.xml,hdfs-site.xml,mapred-site.xml,都在/usr/local/hadoop/conf目录下

core-site.xml: Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。
hdfs-site.xml: Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。
mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。

首先在hadoop目录下新建几个文件夹

mkdir tmp hdfs
mkdir hdfs/name hdfs/data 

这里写图片描述
然后依次修改这三个文件:
core-site.xml:

<configuration>  
    <property>  
        <name>fs.default.name</name>  
        <value>hdfs://localhost:9000</value>  
    </property>  
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/usr/local/hadoop/tmp</value>  
    </property>  
</configuration> 

hdfs-site.xml:

<configuration>  
    <property>  
        <name>dfs.replication</name>  
        <value>1</value>  
    </property>  
    <property>  
        <name>dfs.name.dir</name>  
         <value>/usr/local/hadoop/hdfs/name</value>  
    </property>  
    <property>  
        <name>dfs.data.dir</name>  
        <value>/usr/local/hadoop/hdfs/data</value>  
    </property>  
</configuration> 

mapred-site.xml:

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

通过以上步骤,我们已经设定好Hadoop单机测试到环境,接着就是启动Hadoop到相关服务,格式化namenode,secondarynamenode,tasktracker:

source /usr/local/hadoop/conf/hadoop-env.sh  
hadoop namenode -format 

这里写图片描述

然后依次将secondarynamenode,tasktracker都格式化。
可能会因为权限问题提示错误java.io.FileNotFoundException:这时候只需要将输入改成sudo ./bin/hadoop namenode -format即可

接着执行start-all.sh来启动所有服务,包括namenode,datanode,start-all.sh脚本用来装载守护进程。
这里可能会出现两个问题:
1:输入sudo ./bin/start-all.sh时,提示我们需要输入localhost的密码;
2:当我们输入start-all.sh时,提示权限不够。
其实是这样子的,

ssh在登录其他主机时采用的“ ssh 目的主机用户名@目的主机的ip”的模式,如这里“ssh hadoop@192.168.85.100”,ip确定唯一主机,用户名确定主机上的有效用户,密码用于切换到该用户目录下。在hadoop的集群中,slave文件中给的是datanode的主机ip,在启动hadoop的时候,hadoop会依照该文件提供的ip地址逐个启动datanode节点上的tasktracker和datanode守护进程,但是由于没有提供datanode主机的用户名,因而ssh默认以当前用户(假设为namenode)做为目标主机的用户(假设为datanode),但ssh不会检测目标主机是否存在该用户(这显然不是它的工作),在本机~/.ssh/known_hosts中没有存放有namenode@datanode‘s ip,因而需要输入密码,但是由于目标主机没有namenode用户,因而无论怎么输入密码都是错的,或者提示权限不够

这个问题困扰了我很久很久,终于想到了解决办法:将hadoop目录下的所有文件权限从root变成普通用户。
sudo chown -R nvrom:nvrom ./hadoop

这里写图片描述

然后再执行start-all.sh
这里写图片描述

用Java的jps命令列出所有守护进程来验证安装成功
这里写图片描述

所有的设置已完成,Hadoop也启动了,现在可以通过下面的操作来查看服务是否正常,在Hadoop中用于监控集群健康状态的Web界面:
http://localhost:50030/ - Hadoop 管理介面
http://localhost:50060/ - Hadoop Task Tracker 状态
http://localhost:50070/ - Hadoop DFS 状态

Hadoop 管理介面:
这里写图片描述

Hadoop Task Tracker 状态
这里写图片描述

Hadoop DFS 状态
这里写图片描述


  • 小结
    在ubuntu上搭建hadoop成功,特别是解决了困扰我好久的问题时,有点小兴奋呢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值