如何安装Hadoop?


26

我正在尝试在Ubuntu 12.04版本中安装Hadoop。按照http://michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/中的说明 ,我是java-6-openjdk从Ubuntu软件中心安装的。我已经订java_home.bashrc。也在java_homeHadoop中设置conf/env.sh。格式化namenode时,出现以下错误:

usr/lib/jvm/java-6-openjdk/bin/java no such file or directory.

谢谢。但这是一个64位操作系统。


1
用户找到解决方案后,为什么会有赏金呢?期望什么样的答案?
绿色

1
@ green7的目的是找到一个答案,该答案实际上被标记为已接受,非常详细,并且喜欢。由于似乎没有一个,所以我可以理解Jorge添加了赏金。
托马斯·沃德

@TheLordofTime详细的答案最多将包含5行,因为问题太局限了。而且,如果期望得到包含Hadoop安装说明的答案,那么它将是多余的,因为问题中提到的链接可以很好地解释它。此外,由于提问者投票最多的答案是他/她自己发布的,因此他/她不太可能接受任何其他答案。
绿色,

@ green7如果问题过于本地化,则投票关闭它吗?
托马斯·沃德

Answers:


39

我在12.04岁时遵循的指南是:

我实际上反对MyLearning,因为它推荐的第一件事是Oracle Java 7而不是OpenJDK 7,但是在尝试使用OpenJDK 7时我遇到了一些问题,因此我不得不使用Oracle。

该指南主要是直截了当的,这里是:

  1. 安装Java

    sudo add-apt-repository ppa:webupd8team/java  
    sudo apt-get update && sudo apt-get upgrade  
    sudo apt-get install oracle-java7-installer  
    
  2. 创建Hadoop用户

    sudo addgroup hadoop  
    sudo adduser --ingroup hadoop hduser
    

    hduser是您要拥有的Hadoop用户。

  3. 配置SSH

    su - hduser   
    ssh-keygen -t rsa -P ""
    cat .ssh/id_rsa.pub >> .ssh/authorized_keys
    

    为确保SSH安装顺利进行,您可以打开一个新终端并尝试使用hduser以下命令来创建ssh会话:

    ssh localhost
    

    如果本地主机未连接,请重新安装ssh(您可能需要hduser按照以下步骤将其添加到sudo中)

    sudo apt-get install openssh-server
    
  4. 编辑Sudoers

    sudo visudo
    
  5. 在行末添加以将hduser添加到sudoers中

    hduser ALL=(ALL:ALL) ALL
    

    要保存,请按CTRL+ XY然后按ENTER

  6. 禁用IPv6

    sudo gedit /etc/sysctl.conf
    

    要么

    sudo nano /etc/sysctl.conf
    

    将以下行复制到文件末尾:

    #disable ipv6  
    net.ipv6.conf.all.disable_ipv6 = 1  
    net.ipv6.conf.default.disable_ipv6 = 1   
    net.ipv6.conf.lo.disable_ipv6 = 1  
    

    如果遇到问题告诉您,您没有权限,只需使用root帐户运行上一个命令(以防sudo不够。对我来说是这样)

  7. 现在重启。

    您也可以这样做,sudo sysctl -p但是我宁愿重启。

    重新启动后,检查以确保IPv6已关闭:

    cat /proc/sys/net/ipv6/conf/all/disable_ipv6
    

    应该说1。如果它表示0,那么您错过了一些东西。

  8. 安装Hadoop

    有几种方法可以做到这一点,《指南》建议的一种方法是从Apache Hadoop站点下载并解压缩hduser主文件夹中的文件。将提取的文件夹重命名为hadoop

    另一种方法是使用经过12.04测试的PPA:

    sudo add-apt-repository ppa:hadoop-ubuntu/stable  
    sudo apt-get update && sudo apt-get upgrade  
    sudo apt-get install hadoop  
    

    注意:PPA可能对某些人有效,而对其他人则无效。我尝试过的一个是从官方网站下载,因为我不了解PPA。

  9. 更新资料 $HOME/.bashrc

    您将需要更新.bashrcfor hduser(以及需要管理Hadoop的每个用户)。要打开.bashrc文件,您将需要以root身份打开它:

    sudo gedit /home/hduser/.bashrc  
    

    要么

    sudo nano /home/hduser/.bashrc  
    

    然后,您将在.bashrc文件末尾添加以下配置

    # Set Hadoop-related environment variables   
    export HADOOP_HOME=/home/hduser/hadoop  
    
    # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)`
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle  
    

    现在,如果您具有OpenJDK7,它将看起来像这样:

    export JAVA_HOME=/usr/lib/java-7-openjdk-amd64  
    

    这里要注意的是Java所在的AMD64版本所在的文件夹。如果上述方法不起作用,则可以尝试在该特定文件夹中查找或设置将用于以下方面的Java:

    sudo update-alternatives --config java  
    

    现在获取一些有用的别名:

    # Some convenient aliases and functions for running Hadoop-related commands  
    unalias fs &> /dev/null   
    alias fs="hadoop fs"    
    unalias hls &> /dev/null  
    alias hls="fs -ls"  
    
    # Add Hadoop bin/ directory to PATH  
    export PATH=$PATH:$HADOOP_HOME/bin  
    
  10. 配置Hadoop

    以下是我们可以用来进行正确配置的配置文件。您将与Hadoop一起使用的一些文件是(此站点中的更多信息):

    start-dfs.sh-启动Hadoop DFS守护程序,namenode和datanode。在start-mapred.sh之前使用它

    stop-dfs.sh -停止Hadoop DFS守护程序。

    start-mapred.sh -启动Hadoop Map / Reduce守护程序,jobtracker和tasktrackers。

    stop-mapred.sh -停止Hadoop Map / Reduce守护程序。

    start-all.sh-启动所有Hadoop守护程序,namenode,datanode,jobtracker和tasktrackers。不推荐使用;使用start-dfs.sh然后使用start-mapred.sh

    stop-all.sh-停止所有Hadoop守护程序。不推荐使用;使用stop-mapred.sh然后使用stop-dfs.sh

    但是在开始使用它们之前,我们需要修改文件/conf夹中的几个文件。

    hadoop-env.sh

    查找文件hadoop-env.sh,我们只需要更新此文件中的JAVA_HOME变量:

    sudo gedit /home/hduser/hadoop/conf/hadoop-env.sh
    

    要么

    sudo nano /home/hduser/hadoop/conf/hadoop-env.sh
    

    或最新版本

    sudo nano /etc/hadoop/conf.empty/hadoop-env.sh
    

    要么

    sudo nano /etc/hadoop/hadoop-env.sh
    

    然后更改以下行:

    # export JAVA_HOME=/usr/lib/j2sdk1.5-sun
    

    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    

    注意:如果Error: JAVA_HOME is not set在启动服务时收到错误消息,则忘记取消注释上一行(只需删除#)即可。

    core-site.xml

    现在我们需要为Hadoop框架创建一个临时目录。如果您需要此环境进行测试或快速制作原型(例如,为个人测试开发简单的hadoop程序...),建议/home/hduser/您在目录下创建此文件夹,否则,应在共享文件夹下的共享位置创建此文件夹(例如/ usr / local ...),但您可能会遇到一些安全问题。但是为了克服可能由安全性引起的异常(例如java.io.IOException),我在hduser空间下创建了tmp文件夹。

    要创建此文件夹,请键入以下命令:

    sudo mkdir /home/hduser/tmp   
    

    请注意,如果要创建另一个管理员用户(例如hadoop组中的hduser2),则应使用以下命令授予他对该文件夹的读写权限:

    sudo chown hduser:hadoop /home/hduser/tmp  
    sudo chmod 755 /home/hduser/tmp  
    

    现在,我们可以打开hadoop/conf/core-site.xml编辑hadoop.tmp.dir条目。我们可以使用文本编辑器打开core-site.xml:

    sudo gedit /home/hduser/etc/hadoop/core-site.xml  
    

    要么

    nano /home/hduser/etc/hadoop/core-site.xml
    

    然后<configure>xml元素之间添加以下配置:

    <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hduser/tmp</value>
      <description>A base for other temporary directories.</description>
    </property>
    
    <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:54310</value>
      <description>The name of the default file system.  A URI whose
      scheme and authority determine the FileSystem implementation.  The
      uri's scheme determines the config property (fs.SCHEME.impl) naming
      the FileSystem implementation class.  The uri's authority is used to
      determine the host, port, etc. for a filesystem.</description>
    </property>
    

    现在编辑 mapred-site.xml

    <property>
      <name>mapred.job.tracker</name>
      <value>localhost:54311</value>
      <description>The host and port that the MapReduce job tracker runs
      at.  If "local", then jobs are run in-process as a single map
      and reduce task.
      </description>
    </property>
    

    现在编辑 hdfs-site.xml

    <property>
      <name>dfs.replication</name>
      <value>1</value>
      <description>Default block replication.
      The actual number of replications can be specified when the file is created.
      The default is used if replication is not specified in create time.
      </description>
    </property> 
    
  11. 格式化NameNode

    现在,您可以开始在节点上工作了。第一种格式:

    ~/hduser/hadoop/bin/hadoop namenode -format
    

    要么

    ./home/hduser/hadoop/bin/hadoop namenode -format
    

    您应该在HDFS中格式化NameNode。系统运行时,您不应执行此步骤。通常在首次安装时执行一次。

  12. 启动Hadoop集群

    您将需要导航到hadoop / bin目录并运行./start-all.sh脚本。

    cd ~/hduser/hadoop/bin/  
    start-all.sh  
    

    如果您使用的版本与指南中显示的版本不同(如果使用PPA或更新的版本,则很有可能使用该版本),请尝试以下方式:

    cd ~/hduser/hadoop/bin/   
    start-dfs.sh  
    start-mapred.sh   
    

    这将在您的计算机上启动Namenode,Datanode,Jobtracker和Tasktracker。

  13. 检查Hadoop是否正在运行

    有一个不错的工具jps。您可以使用它来确保所有服务都已启动。在您的hadoop bin文件夹中输入:

    jps
    

    它应该显示所有与Hadoop相关的过程。

    注意:由于这是大约6个月前为我完成的,如果有任何部分无法正常工作,请告诉我。

使用Juju的Hadoop(Hadoop的Juju魅力)

摘自Charming Hadoop

我将假定已设置以下内容:

  • 您已经设置了Juju的服务器
  • 您有权访问服务器(本地或远程)
  • 您已经配置了Juju,并准备开始添加超级按钮
  • 您正在使用12.04(这是因为我已使用12.04测试了所有这些功能)
  • 您已经配置了~/.juju/environments.yaml与要使用的服务器有关的信息,包括PPA来源。

现在,请按照以下步骤运行Hadoop服务:

  1. 引导Hadoop环境

    juju bootstrap
    

    等待直到完成,然后检查其是否正确连接:

    juju status
    
  2. 部署Hadoop(主从)

    juju deploy --constraints="instance-type=m1.large" hadoop hadoop-master   
    
    juju deploy --constraints="instance-type=m1.medium" -n 5 hadoop hadoop-slave
    
  3. 建立关系

    juju add-relation hadoop-master:namenode hadoop-slave:datanode  
    
    juju add-relation hadoop-master:jobtracker hadoop-slave:tasktracker
    
  4. 公开Hadoop(由于您已经部署并创建了关系,因此该服务应正在运行)

    juju expose hadoop-master
    

    并检查状态以查看其是否正常运行:

    juju status hadoop-master
    

到目前为止,您已经在运行Hadoop。您可以在提供的链接中或在Hadoop的官方Juju Charm中找到更多可以做的事情

有关JuJu Charms的最新信息(设置,逐步指南等),您可以访问:JuJu Charms并创建自己的JuJu Environment,并查看每个文件的设置方式以及每个服务的连接方式。



hduser (ALL)=(ALL:ALL) ALL 引发语法错误...
tutuca 2014年

尝试使用hduser ALL=(ALL:ALL) ALL,去掉第一对括号
ssoto 2014年

1
@ssoto刚刚检查了,是的。也许他们在最新版本中进行了更改。
路易斯·阿尔瓦拉多

1
.bachrc–等到Johann Sebastian听到。噢,等等,他不能……因为他聋了。:-D
David Foerster,2013年

6

我通过设置JAVA_HOMEas 的路径成功安装了Hadoop usr/lib/jvm/java-6-openjdk-amd64


您能多描述一下吗?
Panther

3

源自@Luis Alvarado的答案,这是我针对Ubuntu 14.04和Hadoop 2.5.1的版本

简单来说

  1. 安装Java
  2. 为Hadoop 准备执行用户hduser
  3. hduser从现在开始切换到
  4. 允许hduser通过带有少密码短语的ssh进行远程控制
  5. 禁用IPv6
  6. 下载并配置Hadoop软件包
  7. 准备系统路径$ HADOOP_HOME和$ JAVA_HOME
  8. 配置Hadoop的服务
  9. 启动Hadoop的服务

做完了 祝好运!

详细步骤

安装Java

下载并安装

$ sudo add-apt-repository ppa:webupd8team/java    
$ sudo apt-get update && sudo apt-get upgrade    
$ sudo apt-get install oracle-java7-installer

确保已安装Java7

$ which java
$ ls -l /usr/bin/java
$ ls -l /etc/alternatives/java

我们应该java指出/usr/lib/jvm/java-7-oracle/jre/bin/java

为Hadoop 准备执行用户hduser

hduser在组中创建用户hadoop

$ sudo addgroup hadoop  
$ sudo adduser --ingroup hadoop hduser

授予hdusersudo的特权

编辑须藤

$ sudo visudo

将此行添加到最后

hduser ALL=(ALL:ALL) ALL

hduser从现在开始切换到

$ su - hduser

允许hduser通过带有少密码短语的ssh进行远程控制

安装openssh

$ sudo apt-get install openssh-server

生成用于SSH连接的RSA公钥/私钥;密码为空parameter -P ""

$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys

确保hduser可以在没有密码的情况下在本地ssh远程

$ ssh localhost

禁用IPv6

编辑配置文件

$ sudo nano /etc/sysctl.conf

复制到最后

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1   
net.ipv6.conf.lo.disable_ipv6 = 1

确保通过重启或调用关闭IPv6

$ sudo sysctl -p 

然后打电话

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6

应该说1表示可以^^

下载并配置Hadoop软件包

Apache Hadoop站点下载Hadoop 2.5.1软件包

该软件包的直接URL是此链接

http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz

因此,让我们下载到hduser的主文件夹,将其解压缩并重命名为hadoop

$ wget http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz
$ tar -xvzf hadoop-2.5.1.tar.gz
$ mv hadoop-2.5.1 hadoop

确保我们将Hadoop存储在hduser家里

$ ls /home/hduser/hadoop

准备系统路径$ HADOOP_HOME和$ JAVA_HOME

编辑hduser的.bashrc文件

$ nano .bashrc

放到底值$HADOOP_HOME$JAVA_HOME

# Set Hadoop-related environment variables   
export HADOOP_HOME=/home/hduser/hadoop  

# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
export JAVA_HOME=/usr/lib/jvm/java-7-oracle 

将Hadoop binary文件夹添加到系统$PATH

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

打开一个新终端,以身份登录hduser,并确保您具有$ HADOOP_HOME及其可用命令

$ echo $HADOOP_HOME
$ which start-all.sh
$ which start-dfs.sh
$ which start-yarn.sh

我们应该看到这些名称的完整路径。

配置Hadoop的服务

Hadoop中的每个组件都使用XML文件进行配置。

  • 通用属性进入core-site.xml

  • HDFS属性进入hdfs-site.xml

  • MapReduce属性位于mapred-site.xml中

在此处输入图片说明

这些文件都位于文件夹$ HADOOP_HOME / etc / hadoop中

hadoop-env.sh通过编辑以下行再次定义JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

core-site.xml中定义Hadoop temp folderfile system命名为

<configuration>
  ...
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hduser/tmp</value>
    <description>A base for other temporary directories.</description>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:54310</value>
    <description>The name of the default file system.  A URI whose
    scheme and authority determine the FileSystem implementation.  The
    uri's scheme determines the config property (fs.SCHEME.impl) naming
    the FileSystem implementation class.  The uri's authority is used to
    determine the host, port, etc. for a filesystem.</description>
  </property>
  ...
</configuration>

我们需要按以下temp folder配置进行准备/home/hduser/tmp

$ cd /home/hduser
$ mkdir tmp
$ chown hduser:hadoop tmp
$ chmod 755 tmp

定义file systemblock replicationHDFS-site.xml中

<configuration>
  ...
  <property>
    <name>dfs.replication</name>
    <value>1</value>
    <description>Default block replication.
    The actual number of replications can be specified when the file is created.
    The default is used if replication is not specified in create time.
    </description>
  </property>
  ...
</configuration>

map-reduce jobmapred-site.xml中定义

<configuration>
  ...
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:54311</value>
    <description>The host and port that the MapReduce job tracker runs
    at.  If "local", then jobs are run in-process as a single map
    and reduce task.
    </description>
  </property>
  ...
</configuration>

格式 name node

$ hdfs namenode -format

启动Hadoop服务

呼叫

$ start-dfs.sh && start-yarn.sh

这两个命令位于$ HADOOP_HOME / sbin中,我们之前已将其添加到系统$ PATH中。

确保Hadoop服务正确启动

$ jps

我们应该看到

在此处输入图片说明


1
非常好的指南。有一个小错误:mapred-site.xml一开始不存在。它应该由cp mapred-site.xml.template mapred-site.xml
Raptor

1

为了能够sun-java使用该apt-get命令进行安装,您需要在名为的文件中添加一行sources.list。该文件可以在中找到/etc/apt/sources.list

使用以下命令打开文件:

sudo nano /etc/apt/sources.list

然后,在该文件(底部)的末尾,复制/粘贴以下行:

deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

现在按Ctrl+ X退出,并y保存。


现在键入命令:

sudo apt-get update 

完成后,您可以成功运行以下命令:

sudo apt-get install sun-java6-jdk

0

有关最新的教程(不确定差异),请查看hadoop截屏视频教程。它们提供了视频和实际命令,可以在下面安装。另外,如果您向作​​家发送电子邮件,如果您遇到任何困难,他也会很乐意答复并帮助您。

这些说明与@Luis回复的说明基本相似。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.