如何安装Hadoop?

Ani*_*tha 26 hadoop

我正在尝试在 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_home在 Hadoop 中conf/env.sh。格式化namenode时,出现以下错误:

usr/lib/jvm/java-6-openjdk/bin/java no such file or directory.
Run Code Online (Sandbox Code Playgroud)

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

Lui*_*ado 40

我在 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  
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建 Hadoop 用户

    sudo addgroup hadoop  
    sudo adduser --ingroup hadoop hduser
    
    Run Code Online (Sandbox Code Playgroud)

    其中 hduser 是您想要拥有的 Hadoop 用户。

  3. 配置 SSH

    su - hduser   
    ssh-keygen -t rsa -P ""
    cat .ssh/id_rsa.pub >> .ssh/authorized_keys
    
    Run Code Online (Sandbox Code Playgroud)

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

    ssh localhost
    
    Run Code Online (Sandbox Code Playgroud)

    如果 localhost 未连接,请重新安装 ssh(您可能需要hduser按以下步骤添加到 sudo)

    sudo apt-get install openssh-server
    
    Run Code Online (Sandbox Code Playgroud)
  4. 编辑 Sudoers

    sudo visudo
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在末尾添加将 hduser 添加到 sudoers 的行

    hduser ALL=(ALL:ALL) ALL
    
    Run Code Online (Sandbox Code Playgroud)

    要保存按CTRL+ X,键入Y并按ENTER

  6. 禁用 IPv6

    sudo gedit /etc/sysctl.conf
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    sudo nano /etc/sysctl.conf
    
    Run Code Online (Sandbox Code Playgroud)

    复制文件末尾的以下几行:

    #disable ipv6  
    net.ipv6.conf.all.disable_ipv6 = 1  
    net.ipv6.conf.default.disable_ipv6 = 1   
    net.ipv6.conf.lo.disable_ipv6 = 1  
    
    Run Code Online (Sandbox Code Playgroud)

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

  7. 现在重新启动。

    你也可以,sudo sysctl -p但我宁愿重新启动。

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

    cat /proc/sys/net/ipv6/conf/all/disable_ipv6
    
    Run Code Online (Sandbox Code Playgroud)

    它应该说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  
    
    Run Code Online (Sandbox Code Playgroud)

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

  9. 更新 $HOME/.bashrc

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

    sudo gedit /home/hduser/.bashrc  
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    sudo nano /home/hduser/.bashrc  
    
    Run Code Online (Sandbox Code Playgroud)

    然后你将在.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  
    
    Run Code Online (Sandbox Code Playgroud)

    现在,如果你有 OpenJDK7,它看起来像这样:

    export JAVA_HOME=/usr/lib/java-7-openjdk-amd64  
    
    Run Code Online (Sandbox Code Playgroud)

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

    sudo update-alternatives --config java  
    
    Run Code Online (Sandbox Code Playgroud)

    现在提供一些有用的别名:

    # 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  
    
    Run Code Online (Sandbox Code Playgroud)
  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 和 tasktracker。

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

    start-all.sh- 启动所有 Hadoop 守护进程、名称节点、数据节点、作业跟踪器和任务跟踪器。已弃用;使用 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
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    sudo nano /home/hduser/hadoop/conf/hadoop-env.sh
    
    Run Code Online (Sandbox Code Playgroud)

    或在最新版本中

    sudo nano /etc/hadoop/conf.empty/hadoop-env.sh
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    sudo nano /etc/hadoop/hadoop-env.sh
    
    Run Code Online (Sandbox Code Playgroud)

    然后更改以下行:

    # export JAVA_HOME=/usr/lib/j2sdk1.5-sun
    
    Run Code Online (Sandbox Code Playgroud)

    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果您Error: JAVA_HOME is not set在启动服务时遇到错误,您忘记取消对前一行的注释(只需删除 #)。

    核心站点.xml

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

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

    sudo mkdir /home/hduser/tmp   
    
    Run Code Online (Sandbox Code Playgroud)

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

    sudo chown hduser:hadoop /home/hduser/tmp  
    sudo chmod 755 /home/hduser/tmp  
    
    Run Code Online (Sandbox Code Playgroud)

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

    sudo gedit /home/hduser/etc/hadoop/core-site.xml  
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    nano /home/hduser/etc/hadoop/core-site.xml
    
    Run Code Online (Sandbox Code Playgroud)

    然后<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>
    
    Run Code Online (Sandbox Code Playgroud)

    现在编辑 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>
    
    Run Code Online (Sandbox Code Playgroud)

    现在编辑 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> 
    
    Run Code Online (Sandbox Code Playgroud)
  11. 格式化 NameNode

    现在您可以开始在 Node.js 上工作了。第一种格式:

    ~/hduser/hadoop/bin/hadoop namenode -format
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    ./home/hduser/hadoop/bin/hadoop namenode -format
    
    Run Code Online (Sandbox Code Playgroud)

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

  12. 启动 Hadoop 集群

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

    cd ~/hduser/hadoop/bin/  
    start-all.sh  
    
    Run Code Online (Sandbox Code Playgroud)

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

    cd ~/hduser/hadoop/bin/   
    start-dfs.sh  
    start-mapred.sh   
    
    Run Code Online (Sandbox Code Playgroud)

    这将在您的机器上启动 Namenode、Datanode、Jobtracker 和 Tasktracker。

  13. 检查 Hadoop 是否正在运行

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

    jps
    
    Run Code Online (Sandbox Code Playgroud)

    它应该向您展示所有与 Hadoop 相关的进程。

    注意:由于这是在大约 6 个月前为我完成的,如果有任何部分不起作用,请告诉我。

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

取自迷人的 Hadoop

我假设已经设置了以下内容:

  • 你已经设置了 Juju 的服务器
  • 您可以访问服务器(本地或远程)
  • 您已配置 Juju 并准备开始添加魅力
  • 您使用的是 12.04(这是因为我用 12.04 测试了所有这些)
  • 您已经配置~/.juju/environments.yaml了有关您将使用的服务器的信息,包括 PPA 来源。

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

  1. 为 Hadoop 启动环境

    juju bootstrap
    
    Run Code Online (Sandbox Code Playgroud)

    等到它完成然后检查它是否连接正确:

    juju status
    
    Run Code Online (Sandbox Code Playgroud)
  2. 部署 Hadoop(主从)

    juju deploy --constraints="instance-type=m1.large" hadoop hadoop-master   
    
    juju deploy --constraints="instance-type=m1.medium" -n 5 hadoop hadoop-slave
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建关系

    juju add-relation hadoop-master:namenode hadoop-slave:datanode  
    
    juju add-relation hadoop-master:jobtracker hadoop-slave:tasktracker
    
    Run Code Online (Sandbox Code Playgroud)
  4. 公开 Hadoop(因为您已经部署并创建了服务应该运行的关系)

    juju expose hadoop-master
    
    Run Code Online (Sandbox Code Playgroud)

    并检查状态以查看它是否正常工作:

    juju status hadoop-master
    
    Run Code Online (Sandbox Code Playgroud)

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

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


Ani*_*tha 6

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