当前位置: 首页>>技术教程>>正文


如何安装Hadoop?

问题描述

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

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

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

最佳方法

我在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 + X,键入Y并按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 site下载并解压缩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

    您将需要更新hduser.bashrc(以及需要管理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中使用的一些文件是(this site中的更多信息):

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

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

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

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

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

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

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

    查找文件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测试了所有这些功能)

  • 您已经用与您将使用的服务器有关的信息(包括PPA来源)配置了~/.juju/environments.yaml

现在,请按照以下步骤运行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。您可以在提供的链接或官方的Juju Charm for Hadoop中找到更多操作

有关最新的JuJu超级按钮(设置,分步指南等),您可以访问:JuJu Charms并创建自己的JuJu环境,并查看每个文件的设置方式以及每个服务的连接方式。

次佳方法

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

第三种方法

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

简单来说

  1. 安装Java

  2. 准备Hadoop hduser的执行用户

  3. 从现在开始切换到hduser

  4. 允许hduser通过pass-phrase-less的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的执行用户

在组hadoop中创建用户hduser

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

授予hduser sudo特权

编辑须藤

$ sudo visudo

将此行添加到最后

hduser ALL=(ALL:ALL) ALL

从现在开始切换到hduser

$ su - hduser

允许hduser通过pass-phrase-less的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 site下载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>

我们需要按照/home/hduser/tmp的配置准备此temp folder

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

在hdfs-site.xml中定义file systemblock replication

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

在mapred-site.xml中定义map-reduce job

<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

我们应该看到

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8657.html,未经允许,请勿转载。