目前关于Hadoop的安装配置教程书上、官方教程、博客都有很多,但由于对Linux环境的不熟悉以及各种教程或多或少有这样那样的坑,很容易导致折腾许久都安装不成功(本人就是受害人之一)。经过几天不断尝试,终于成功了。现将整个关于Hadoop的安装配置步骤分享出来,一方面为了希望能对有需要的朋友有所帮助,一方面为了总结所遇到的问题和解决方案。接下来开始正文。

准备工作

提前下载好以下工具:

  • JDK安装包
  • Eclipse安装包
  • Hadoop安装包
  • Eclipse的Hadoop插件

本人用的JDK版本是1.7.0_67,Hadoop使用的是2.6.0版。Eclipse是官网上最新的jee版。以上都准备好后,开始安装。

安装SSH和SSH无密登录

安装SSH server

很多教程都有要求创建新用户,个人觉得并不是必须的,所以并没有创建新的用户。Hadoop的分布式模式和单节点模式都需要用到SSH登录,而Ubuntu已经默认安装了SSH client,所以只要再安装一下SSH server即可。打开终端(ctrl+alt+t)输入命令:

sudo apt-get install openssh-server

然后回车即可。

注意

如果不成功,提示以下之类的错误:

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

   可以尝试依次输入以下两个命令强制解锁:

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

解锁后,再次输入安装SSH server命令安装SSH server。

安装完成后,可以使用下面的命令登录本机:

ssh localhost

根据提示输入用户密码,即可登录本机。

SSH无密登录

虽然上面的方法可以登录本机,但显然很麻烦,每次都需要输入密码,因此我们设置成SSH无密码登录。

首先退出上面的SSH,然后利用ssh-keygen生成密钥,并将密钥加入到授权中:

exit          

cd ~/.ssh/

ssh-keygen -t rsa

cat id_rsa.pub >> authorized_keys  

注意:如果cd ~/.ssh/ 后提示没有该目录,请先登录一次本机,再执行上面的命令。ssh-keygen -t rsa 命令后会有多个提示,全部只要按回车即可。

此时再用ssh localhost命令,就不需要密码即可直接登录本机了。

安装JDK

首先进入到jdk tar.gz所在的文件目录,我的是在Downloads目录下,所以命令是

cd ~/Downloads

然后将tar.gz文件解压到安装目录,我的jdk压缩包名是jdk-7u67-linux-x64.tar.gz,而且我希望它安装在/usr/local目录下,所以命令是

sudo tar zxvf jdk-7u67-linux-x64.tar.gz -C /usr/local

然后进入到/usr/local目录下

cd /usr/local

再输入

ls

即可看到里面包含一个叫jdk1.7.0_67类似的文件(文件名与所安装的JDK版本有关)

解压完毕后,就是配置环境变量了。关于环境变量的配置多种方法,我采用的是在 /.bashrc文件中配置。

利用命令:

sudo gedit ~/.bashrc

在打开的文件的末尾添加以下信息:

export JAVA_HOME=/usr/local/jdk1.7.0_67       #这里添加的是jdk所在的安装目录

export JRE_HOME=${JAVA_HOME}/jre  


export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  


export PATH=${JAVA_HOME}/bin:$PATH  

我的添加如下:

保存后关闭,进入终端,source一下。

source ~/.bashrc

接下来设置默认的JDK

sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300  

sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300  

设置完成后,输入java -version查看jdk信息。

查看到如上信息,说明jdk安装成功。

Hadoop安装

Hadoop的安装是递进的,即首先安装单机模式,然后在单机模式的基础上,配置伪分布式模式和分布式模式。

单机模式

将Hadoop tar.gz文件解压到目的安装目录,我的想安装在/usr/local 文件目录下。所以命令是

sudo tar zxvf hadoop-2.6.0.tar.gz -C /usr/local

当然在解压之前,要先进入到Hadoop tar.gz文件所在的目录。

解压完毕后,进入到/usr/local目录

cd /usr/local

将文件夹hadoop2.6.0的名字修改为haoop

sudo mv hadoop2.6.0 hadoop

接着最好修改一下hadoop文件夹的权限,将文件夹的权限修改为想使用hadoop的用户,我的是lxy:

su root

chown -R lxy ./hadoop

如果是第一次使用root用户,请先设置root的登录密码:

sudo passwd root

输入两次密码后,再次su root,提示输入root密码。

至此,单机模式Hadoop安装完毕。为了验证安装是否成功,我们可以通过以下命令运行hadoop的自带例子:

cd /usr/local/hadoop

sudo mkdir input

sudo cp ./etc/hadoop/*.xml input

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

cat ./output/*

执行成功后会有如下提示,输出结果是符合正则的单词dfsadmin出现了1次。

由于Hadoop默认不会覆盖结果文件,所以当再次运行以上实例时,会出错,需要将output删除。

sudo rm -R ./output

如果运行时提示Java之类的错误,则需要配置下hadoop-env.sh文件,配置方法在接下来的内容中。

伪分布式

为了能够随时使用Hadoop命令,配置一下Hadoop的环境变量。方法与JDK一样,有三种方式。这里为了保持一致,在~/.bashrc中配置。

打开~/.bashrc

sudo gedit ~/.bashrc

在文件末尾添加:

#set hadoop environment

export HADOOP_INSTALL=/usr/local/hadoop #hadoop的安装目录
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL

保存后关闭。

使用 source ~/.bashrc 使配置生效。

Hadoop伪分布式模式仅仅需要比单机模式多了修改三个配置文件而已。

进入到以下文件目录

cd /usr/local/hadoop/etc/hadoop

首先修改hadoop-env.sh文件

sudo gedit hadoop-env.sh

在打开的文件中找到JAVA_HOME的位置,将等号右边的部分修改为jdk的安装目录(也可以是用“#”将这段注释掉,重新写)

保存后关闭。

接着配置文件core-site.xml,把其中的

<configuration>
</configuration>

修改为

<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>

保存后关闭。

关于配置的简单说明

虽然官方教程中说只需要配置 fs.defaultFS 和 dfs.replication 就可以运行,不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,但该目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。因此我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

配置完成后,首先执行一次namenode的格式化

hdfs namenode -format

成功后,会看到successfully formatted的提示,并且可以看到 Exitting with status 0

然后开始启动NameNode和DataNode

start-dfs.sh

如果出现提示Are you sure you want to continue connecting (yes/no)? 输入yes即可。

注意

这一步启动hadoop或者前面几步有提示:Error: JAVA_HOME is not set and could not be found. 请再次确认前面的/usr/local/hadoop/etc/hadoop/hadoop-env.sh有修改JAVA_HOME。

启动完成后,可以通过命令jps来判断是否成功,如果成功启动,则会出现以下进程

注意

如果执行jps后提示:“程序"jps"已经包含在下列软件包中.....”之类的提示,英文版系统,则是英文提示,执行以下命令即可

sudo update-alternatives --install /usr/bin/jps jps /usr/local/jdk1.7.0_79/bin/jps 1

如果之前没有配置系统默认JDK,请再次输入以下命令,有配置则忽略。

sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300  
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300  

如果SecondaryNameNode没有启动,请运行stop-dfs.sh 关闭进程,然后再次尝试启动尝试;如果 NameNode 或 DataNode 没有启动,请仔细检查之前步骤。

成功启动后,可以访问 Web 界面http://localhost:50070 来查看 Hadoop 的信息。

运行一个hadoop伪分布式实例

首先创建一个hdfs 用户目录

hdfs dfs -p /user/lxy

接着在该目录下创建一个input文件

hdfs dfs -mkdir input

接着将 etc/hadoop 中的文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/lxy/input 中。上一步已创建了用户目录 /user/lxy,因此命令中就可以使用相对目录如 input,其对应的绝对路径就是 /user/hadoop/input

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

复制完成后,可以通过以下命令查看文件列表

hdfs dfs -ls input

伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹删掉以及运行结果来验证这一点)。

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

查看运行结果命令

hdfs dfs cat output/*

这里的output是在hdfs目录上的,其绝对路径是/user/lxy/output

结果如下,因为配置修改了,所以结果和单机模式结果不同。

Hadoop程序运行过程中,默认目录不能存在,因此再次删除output文件夹

hdfs dfs -rm -r /user/lxy/output

注意

在创建目录时,请将"lxy"替换成自己使用hadoop的用户名。虽然不替换也可以,但却无法使用相对路径(我也不知道原因)。比如说我的用户名是lxy,但想创建/user/hadoop目录。然后执行后面的命令

hdfs dfs -p /user/hadoop

hdfs dfs -mkdir input

则会出现如下"No such file or dictionary"的错误提示。

此时必须使用绝对路径,才能成功。也就是说将input全部改成/user/hadoop/input才可以。

如果要关闭Hadoop,则运行stop-all.sh命令或者stop-dfs.sh命令即可。

注意

下次再次启动Hadoop(使用start-all.sh或者start-dfs.sh命令)时,不需要进行namenode的初始化了。

至此,Hadoop的伪分布式配置和使用,您已经掌握了。

安装Eclipse

将Eclipse的tar.gz文件解压到usr/local目录下

sudo tar zxvf ~/Downloads/eclipse-jee-mars-1-linux-x86_64.tar.gz -C /usr/local

进入usr/local目录可以看到一个eclipse文件夹

cd /usr/local

ls

可以使用下面的命令启动eclipse

/usr/local/eclipse/eclispe

虽然上面命令可以运行eclipse,但还是麻烦了些,所以我们可以创建桌面快捷方式

sudo su

sudo gedit /usr/share/applications/eclipse.desktop

在打开的文件写入以下内容

[Desktop Entry]

Name=eclipse


Comment=eclipse SDK


Encoding=UTF-8


Exec=/usr/local/eclipse/eclipse


Icon=/usr/local/eclipse/icon.xpm


Terminal=false


Type=Application


Categories=Application;Development;

保存关闭后,利用图形工具进入到/usr/share/applications/下可以看到eclipse图标

然后将该图标复制到桌面即可。

配置hadoop插件

Hadoop官网并未给出eclipse的Hadoop插件。但我们可以在网络上搜索到相应版本的插件,也可以自己编译hadoop源码后,制作插件。我就偷了下懒,直接从网上下载了。

复制插件

将插件hadoop-eclipse-plugin-2.6.0.jar文件复制到/usr/local/eclipse/plugins目录下。然后重新启动eclipse。

配置hadoop目录

打开eclipse的Windows->Perferences的Hadoop Map/Reduce中选择hadoop目录

配置插件

打开windows->Open Perspective下的Map/Reduce,在此Perspective下进行hadoop开发。

打开Windows->Show View中的Map/Reduce Locations。

在此view下右键选择New Hadoop Location,新建Hadoop连接。

上图的Location name可以自定,"9001"端口可以任意。"9000"端口对应core-site.xml中的端口。确认完成后,eclipse会连接Hadoop。如果连接成功,会在Projetct Explorer下会展现HDFS中的文件。

注意

如果提示"Error:Call From ...."的错误,说明Hadoop未开启。开启Hadoop后,然后重启eclipse后,就能出现类似上图的情况了。

至此,插件配置完毕,可以开始Hadoop旅程了。

由于本人之前并没有接触过Linux,所以整个安装过程中,出现这样或那样的问题,期间走了不少弯路。为了避免其他像我一样的朋友,能够少走弯路,所以我写了这篇文章,将hadoop安装过程以及我遇到的一些问题及解决方法分享给大家。

参考文献

Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

在Ubuntu 14.04 LTS上安装部署Hadoop 2.7.1(伪分布式)

Ubuntu14.04下安装eclipse

搭建Hadoop2.6.0+Eclipse开发调试环境

Ubuntu14.04 安装配置Hadoop2.6.0的更多相关文章

  1. Ubuntu14.04安装配置ndnSIM

    Ubuntu14.04安装配置ndnSIM 预环境 Ubuntu14.04官方系统 请先使用sudo apt-get update更新一下源列表 安装步骤 安装boost-lib sudo apt-g ...

  2. Ubuntu14.04 安装配置Opencv3.0和Python2.7

    http://blog.csdn.NET/u010381648/article/details/49452023 Install OpenCV 3.0 and Python 2.7+ on Ubunt ...

  3. Ubuntu14.04安装配置web/ftp/tftp/dns服务器

    目录: 1.安装ftp服务器vsftpd --基于tcp,需要帐号密码 2.安装tftp服务器tftpd-hpa,tftp-hpa --udp 3.web服务器--使用Apache2+Mysql+PH ...

  4. Ubuntu14.04安装配置SVN及Trac

    还是个实习生的时候,项目管理十分欠缺,会出现很多问题,痛定思痛,决定要改变现状,养成良好的项目管理习惯,看网上工具很多,在这里尝试使用SVN作代码版本控制,使用trac作为项目管理追踪.本文采用的操作 ...

  5. Ubuntu14.04安装配置Open vSwitch

    最近在研究学习Open vSwitch,准备在本地Ubuntu14.04机器上安装一下,并基于其创建一些KVM虚拟机,下面就简要记录下在Ubuntu14.04系统上安装Open vSwitch的过程. ...

  6. ubuntu14.04安装配置jdk1.8.0_25

    Reference: http://jingyan.baidu.com/article/eb9f7b6d8f82a6869364e8a7.html 今天尝试在ubuntu14.04 LTS上安装jdk ...

  7. ubuntu18.04安装配置opencv3.4.0

    1.安装配置相关工具及依赖库 sudo apt-get install build-essential # 必须的,gcc编译环境 sudo apt-get install cmake git lib ...

  8. ubuntu14.04下配置使用openCV3.0

    [操  作  系  统] Ubuntu 14.04 LTS [OpenCV版本]  3.0.0-beta [Eclipse 版 本] 3.8.1 需要知识: Linux系统shell命令基础 编译原理 ...

  9. 32位ubuntu14.04手动编译hadoop2.6.0

    下载官方编译好的包安装老是报错:Unable to load native-hadoop library for your platform 用file命令查看发现官方包里的libhadoop.so. ...

随机推荐

  1. A题笔记(4)

    No. 1384 这题没啥 不过网考成绩出了,发现我的口语分数相较其他人还挺高的~~~哈哈哈 Code::Blocks 有时在程序运行结束后,.exe 并没有结束,因而之后无论怎么调试和修改代码,运行 ...

  2. EditPlus 快捷键

    FileFtpUpload       Ctrl+Shift+S       上传文件到 FTP 服务器 FileNew           Ctrl+N           新建普通的文本文档 Fi ...

  3. UITextField 对输入金额的约束

    [2016/1/18更新] -- 五个人辛辛苦苦干了一年的项目终于上线了,今天有空看了一下正则表达式教程,然后开始rebuild之前的种种对字符串的约束,首先就从这个金额输入框开始吧,修改后的代码如下 ...

  4. winform程序中界面的跳转问题

    首先是我们进行窗口间的跳转,尤其注意的是winform程序里面的空间都是中线程安全的.但是注意的是如果你在一个线程中操纵另外的控件,这时候会提示你一个错误,这个错误的解决方法准备单独的在另一篇文章中来 ...

  5. 转载C#泛型集合—Dictionary<K,V>使用技巧

    1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...

  6. who am i

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  7. 关于boost::function与boost::bind函数的使用心得

    最近开始写一个线程池,期间想用一个通用的函数模板来使得各个线程执行不同的任务,找到了Boost库中的function函数. Boost::function是一个函数包装器,也即一个函数模板,可以用来代 ...

  8. Lsp修复

    打开电脑,进入命令提示符窗口,快捷键win+r.   在窗口中输入“cmd”进入命令符窗口.       在窗口中输入:输入netsh winsock reset,然后按下回车键.   然后稍等片刻, ...

  9. PM【terminal】

    More Knowledge More Performance More Time 资料模组化 以知识管理为基础的项目管理 规范:ethic

  10. VS下面的编译错误-----转换到 COFF 期间失败: 文件无效或损坏

    最近写了一个vs的小项目,然后编译的时候vs提示了"转换到 COFF 期间失败: 文件无效或损坏"的问题. 去网上搜索了一个解决方案.原作者的链接是:http://jingyan. ...