hadoop - 如何从源构建Hadoop而不会出现错误

标签 hadoop ssh centos virtualbox windows-7-x64

我花了数周的时间尝试解决构建Hadoop中的不同错误。 SO有助于将我引向偶尔出现的问题的答案,但是在SO上进行了大量搜索之后,我却始终无法完成整个工作。

从这一切开始已经过去了两个星期,所以我已经忘记了大部分的显式错误消息,但是我遇到的问题

  • Probbuff版本错误
  • SSH连接不起作用
  • 生成期间
  • Mojofailure异常
  • 使用的Java版本不正确
  • C++完整性检查失败
  • 对我来说毫无意义的其他废话,我无法破译
  • 的根本原因

    今天,我终于从git repo源码中获得了Hadoop,并希望为面临类似问题的SO社区成员记录该过程。

    对于那些尝试从源代码构建Hadoop的人,这就是我如何从源代码进行编译的所有方式。

    有关配置的一些注意事项:
  • 我正在虚拟环境中安装Hadoop,以VirtualBox为例。
  • 主机运行Windows 7 x64
  • guest VM运行CentOS 7 x64
  • 我的目标是最小安装
  • 最佳答案

    如何从源构建Hadoop而不会出错

    初步下载:
    开始之前,您需要下载以下内容。

  • Virtual Box(我使用的版本为4.3.16 r95972,可在此处找到:old VB builds)
  • CentOS 7最小的ISO文件来自-http://www.centos.org/download/
  • WinSCP(版本5.7.4)-https://winscp.net/eng/download.php

  • 本演练包括4个阶段
  • 在VirtualBox内创建可以支持的CentOS设备
    构建Hadoop
  • 向设备添加SSH功能,以便可以将下载的必备软件从主机扩展到 guest VM。
  • 安装构建Hadoop
  • 所需的所有东西(实用程序和依赖项)
  • 正确构建Hadoop

  • 阶段1-为VirtualBox创建CentOS设备

    首先打开VirtualBox,然后单击左上角的“新建”按钮。这将打开一个新窗口,询问有关您要创建的虚拟机设备的一些信息。
  • 命名为“CentOS x64 – Hadoop Base”
  • 选择Linux作为操作系统
  • 的“类型”
  • 选择RedHat(64位)作为“版本”。
  • 单击“下一步”


  • 按照VM创建向导中的其余提示进行操作。我唯一更改的是默认值,其中“内存大小”段落(我使用了4096 MB)和“文件位置和大小”段落(我使用了128 GB)。如果您的系统支持,我鼓励您这样做。 保留所有其他默认值
  • 在虚拟机创建向导的最后一步上单击“创建”。

  • 创建完成后,虚拟机将显示在VirtualBox窗口的左侧 Pane 中。

  • 双击刚刚创建的VM,然后等待对话框出现,询问您要使用的iso文件。
  • 出现对话框时,单击右侧的文件夹图标,然后导航至/选择在预备步骤中下载的“CentOS minimal iso”。
  • isot在下拉框中列出后,单击“开始”。

    当出现提示时,在VM启动之后,选择“Install CentOS 7”(这不是默认设置,您必须按“向上”箭头)并按“Enter”。安装程序加载后,它首先会询问您的是键盘布局。我将默认设置保留在原位,只需单击右下角的“继续”按钮即可。这将打开“安装摘要”页面,您需要在该页面上对两个区域进行更改:“安装目标”和“网络和主机名”

  • 单击“安装目标”
  • 双击虚拟磁盘(确保背景为蓝色,并选中复选标记)
  • 单击“完成”返回到“安装摘要”页面。


  • 返回“安装摘要”页面,
    -点击“网络和主机名”
    -在此菜单屏幕中,通过单击右侧的拨动开关来打开以太网网络。
    -点击左上角的“完成”。

    完成这两项修改后,您可以单击右下角的“开始安装”按钮。在iso安装到系统中后,您应该花时间通过以下方式提供root密码:
  • 单击页面左上方的该选项
  • 填写表格,显示
  • 单击“完成”(如果您选择的密码很弱,则必须双击“完成”才能接受)。

  • 我添加了密码,但是没有添加任何非root用户。

    安装完所有内容后,请点击屏幕右下角的“重新启动”按钮。

    系统重新启动后,选择CentOS 7并允许其启动。通过以root用户身份登录来检查您的凭据,然后通过单击窗口右上方的红色X按钮并在出现提示时选择“关闭计算机电源”来关闭CentOS VM。

    这样就完成了阶段1

    您现在应该只看VirtualBox

    阶段2-向VM添加SSH功能以支持下载传输
  • 首先单击设备
  • ,打开CentOS设备的设置。
  • 接下来,单击VirtualBox主菜单左上方的“设置”按钮。这将打开一个新窗口。
  • 在新窗口的左侧 Pane 中,单击“网络”,这将显示一组适配器选项卡。
  • 现在,单击标签“高级”左侧的三角形。
  • 这将显示一系列选项,但是您需要单击的是标有“Port Forwarding”的按钮


  • 这将打开另一个窗口,您可以在其中设置端口转发规则。
  • 单击右上角的绿色加号。这将产生一行,您可以在其中输入端口转发规则。
  • 将以下规则添加到
  • 行中

    Name= ssh, Host port =2222, Guest port = 22


  • 单击“端口转发”窗口上的“确定”按钮
  • 单击“设备设置”窗口上的“确定”按钮。


  • 有了此规则,您现在应该可以在端口2222上从Windows主机SSH到CentOS guest ,并避免出现以下错误:

    ssh: connect to host localhost port 22: Connection refused



    您现在应该只再次查看VirtualBox。
  • 启动CentOS VM设备并以root用户身份登录。
  • 登录后,在命令提示符下执行以下行。
  • yum –y install openssh-server openssh-client
    此命令将在CentOS VM上安装ssh服务器。安装后,通过键入以下命令来确认ssh服务器正在运行。
    ps –aux | grep sshd
    此命令应返回2个显示sshd(ssh守护程序)的进程。一种是grep命令本身。另一个是您的服务器在后台运行。

    现在我们需要确保ssh实际上生成了与WinSCP通信所需的密钥。发出以下命令,并确保所有键的字节大小值都不为零。
    ls -l /etc/ssh

    If the sizes of the keys are 0 bytes, you need to remove them, restart the sshd daemon, and validate that the keys were regenerated when sshd restarted. To do all that, execute the following commands


    rm –rf /etc/ssh/ssh*key* systemctl restart sshd ls -l /etc/ssh

    This processes will help avoid unexpected “connection closed by 127.0.0.1” errors.



    现在我们已经建立了一个ssh守护进程并生成了密钥,我们将测试连接。首先打开WinSCP。然后在弹出的开始菜单中输入以下值。

    Host name = localhost, Port number = 2222, User name = root, Password = , File Protocol = SCP.



    请注意,您需要最后设置“文件协议(protocol)”。如果您不这样做,那么当您输入不需要的“端口号”时,它将试图超越您。输入所有值后。单击“登录”按钮,然后接受/单击“更新”或“确定”以获取所收到的任何安全警告。

    登录后,在主机和VM Guest之间移动文件以确认一切正常。

    尽管在这里我不会重点介绍它,但是您也可以使用Cygwin连接到VM,它对于诊断连接问题很有用。您需要输入以获得详细诊断输出的命令是
    ssh –vvv –p 2222 root@localhost
    至此完成第二阶段

    阶段3-安装构建Hadoop所需的实用程序和依赖项

    我们的CentOS发行版实际上是“准系统”,因此我们需要安装构建Hadoop所需的一切。为此,我们将下载Windows中的大多数内容,然后通过WinSCP将它们移至VM。

    在开始之前,我们需要通过在CentOS命令行上发出以下命令,在CentOS VM上的根用户的主目录中添加一个“下载”目录。
    mkdir ~/downloads/
    现在,我们可以开始下载Hadoop依赖项。我们将所有内容下载到Windows,然后使用WinSCP将其移至VM。

    首先从-http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载Java 7 JDK

    忽略页面顶部的“公开更新结束”错误消息。 Java 7是Apache建议的。

    You want to download the jdk-7u79-linux-x64.rpm file



    下载完成后,使用WinSCP导航到主机计算机的Downloads目录和 guest VM的新创建的“downloads”目录(您可能需要单击WinSCP Pane 的VM侧上的刷新图标以查看目录)。将jdk文件从主机拖放到VM Guest。

    现在我们只需要在CentOS VM上安装JDK。在CentOS命令行中,将目录更改为我们在根目录下创建的“下载”文件夹,一旦进入“下载”目录,请使用rpm安装Java 7。
    cd ~/downloadsrpm –ihv jdk-7u79-linux-x64.rpm
    安装完成后,您可以通过键入以下内容进行验证
    java –version
    它将产生输出,说明您已安装了Java运行时环境。

    接下来,我们将安装Hadoop成功构建所需软件包的子集。该列表直接从Apache网站https://wiki.apache.org/hadoop/HowToContribute获取,我们需要在命令行中输入以检索它们的命令是:
    yum -y install lzo-devel zlib-devel gcc autoconf automake libtool openssl-devel fuse-devel
    接下来,我们将安装Apache的Maven。您可以在这里下载:
    https://archive.apache.org/dist/maven/binaries/

    Apache的网站说您可以使用3+版本。我使用的是3.2.2版,因此请按照以下步骤下载该文件:

    apache-maven-3.2.2-bin.tar.gz



    下载完文件后,就像使用JDK文件一样,使用WinSCP将其从主机移至Guest VM的“下载”文件夹。然后,我们将文件解压缩到/ usr / local /目录中,并使用以下三个命令在/ usr / local /目录中创建一个指向maven文件夹的符号链接(symbolic link)。
    tar xzf apache-maven-3.2.2-bin.tar.gz -C /usr/localcd /usr/localln -s apache-maven-3.2.2 maven
    现在,我们需要将Maven的bin目录添加到$ PATH变量中。为此,我们可以编辑根目录主目录中的.bashrc文件。使用以下命令打开文件以在vi中进行编辑
    vi ~/.bashrc
    这将在vi编辑器中调出bash文件(如果需要,可在此处找到有关vi的教程:http://www.unix-manuals.com/tutorials/vi/vi-in-10-1.html),请按照以下说明正确更新文件。
  • 通过按“a”键
  • 进入编辑模式
  • 将以下行添加到文件中:
  • 导出M2_HOME = / usr / local / maven
  • 导出PATH = $ M2_HOME / bin:$ PATH
  • 按“Esc”键退出编辑模式
  • 输入“:wq” –它会自动显示在vi命令行(屏幕左下方)
  • 按“Enter”

  • 现在退出CentOS。重新登录CentOS,并检查以确保使用以下命令正确设置了新的PATH变量。
    exit<log back in as root>mvn –version
    您应该看到指示当前已安装Maven的输出

    接下来,我们需要为gcc安装C++支持。我们使用以下一行命令来执行此操作
    yum –y install gcc-c++.x86_64
    接下来,我们需要安装git,以便我们可以提取Hadoop源代码。
    yum –y install git
    一旦你有git。继续并删除Hadoop源。在构建源代码之前,还需要再做一件事(ProtocolBuffer),但是在下载ProtocolBuffer以确保获得正确的版本之前,需要在存储库中查看BUILDING.txt文件。

    要获取Hadoop源,我们运行git clone命令。只需从CentOS命令行执行以下命令即可下载Hadoop存储库。
    cd /usr/localgit clone git://git.apache.org/hadoop.git
    克隆操作将在您的/ usr / local目录中放置一个“hadoop”目录。操作完成后,您将返回命令提示符,请使用以下命令查看新hadoop目录中的BUILDING.txt文件:
    less /usr/local/hadoop/BUILDING.txt
    在文件的“需求”部分中,它说明了正确构建Hadoop所需的ProtocolBuffer版本。在这种情况下,它是ProtocolBuffer 2.5.0。掌握了这些信息后,我们通过按“q”退出以返回命令提示符。

    现在,我们终于可以安装Hadoop所需的最后一项功能:ProtocolBuffer。要获得正确版本的ProtocolBuffer,请访问ProtocolBuffer发布页面:

    https://github.com/google/protobuf/releases

    然后向下滚动直到我们看到Hadoop编译所需的版本。对于本演练,您想下载以下文件。

    protobuf-2.5.0.tar.gz



    下载完成后,使用WinSCP并将其转移到VM的“下载”文件夹,就像之前其他下载一样。将文件放在VM的“下载”文件夹中后,发出以下命令以在CentOS上安装ProtocolBuffer
    cd ~/downloadstar xzf protobuf-2.5.0.tar.gz -C /usr/localcd /usr/local/protobuf-2.5.0./configure
    制作
    make install
    完成此操作后,将安装构建Hadoop所需的所有必备实用程序和依赖项。

    至此完成第3阶段

    阶段4-毫无错误地构建Hadoop

    转到Hadoop目录,然后使用以下命令运行Maven跳过测试:
    cd /usr/local/hadoopmvn clean install -DskipTests
    现在应该可以进行构建了,没有任何问题,完成所有操作后,您应该会看到类似下面的屏幕。

    这样就完成了的遍历

    我希望你们中的一些人有帮助。

    关于hadoop - 如何从源构建Hadoop而不会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31463763/

    相关文章:

    linux - 以下 SSH 命令以非零退出状态响应

    mysql - 通过SSH将数据库表单独导出到sql文件

    centos - WHM/cPanel 从另一台服务器复制多个帐户/包对于每个帐户都失败?

    oracle11g - 在 docker centos 容器 : Insufficient disk space 上安装 Oracle

    hadoop - Oozie 未注册 "mapred.input.dir.recursive"属性

    hadoop - 使用 MapReduce 处理 UDP 数据流

    bash - 如果分配了伪tty,为什么通过ssh运行后台任务失败?

    ssl - 要使用 Certbot,需要安装来自 EPEL 存储库的包

    hadoop - 如何使用 PIG 计算特定字段的每个值的出现次数?

    hadoop - 错误主要 com.facebook.presto.server.PrestoServer null