【问题标题】:How Do I Build Hadoop From Source Without Errors如何从源代码构建 Hadoop 而不会出错
【发布时间】:2015-10-06 11:06:39
【问题描述】:

我花了数周时间尝试解决构建 Hadoop 时的不同错误。 SO 有助于为我指出偶尔出现的问题的答案,但是在 SO 上进行了大量搜索之后,我始终无法构建整个东西。

这一切开始已经过去了几周,所以我已经忘记了大部分明确的错误消息,但我已经包含了问题

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

今天终于从 git repo 源码搭建了 Hadoop,想记录下这个过程,给遇到类似问题的 SO 社区成员。

对于那些试图从源代码构建 Hadoop 的人来说,这是我如何从源代码编译所有内容的方法。

关于配置的一些注意事项:

  • 我在虚拟环境中安装 Hadoop,在我的例子中是 VirtualBox。
  • 主机运行 Windows 7 x64
  • Guest VM 运行 CentOS 7 x64
  • 我的目标是最低限度的安装

【问题讨论】:

    标签: hadoop ssh centos virtualbox windows-7-x64


    【解决方案1】:

    我知道这是一个关于如何从源代码构建 hadoop 的问题,但是在整个构建过程中遇到各种错误之后,我发现这非常有帮助。有人已经在 Windows 上构建了 Hadoop 并发布了二进制文件。我在我的 Windows 机器上设置了这个版本,它运行良好:

    http://www.barik.net/archive/2015/01/19/172716/

    【讨论】:

    • 好点。我真的很想让它从源代码构建,但对于那些希望在功能齐全的环境中进行开发的人来说,Hortonworks 有它的 HDP 沙箱,你可以得到hortonworks.com/products/hortonworks-sandbox/#install 这是一个与 VM、VB 一起工作的虚拟设备,和 Hyper-V,它带有 Hadoop、kafka 和其他一些东西。
    【解决方案2】:

    如何无错误地从源代码构建 Hadoop

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

    此演练由 4 个阶段组成

    1. 在 VirtualBox 中创建一个可以支持的 CentOS 设备 构建 Hadoop
    2. 向设备添加 SSH 功能,以便可以将下载的先决条件从主机通过 scp 传送到来宾虚拟机
    3. 安装构建 Hadoop 所需的所有东西(实用程序和依赖项)
    4. 无错误地构建 Hadoop

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

    首先打开 VirtualBox 并单击左上角的“新建”按钮。这将打开一个新窗口,询问有关您要创建的虚拟机设备的一些信息。

    • 将其命名为“CentOS x64 – Hadoop Base”
    • 选择 Linux 作为操作系统的“类型”
    • 选择 RedHat(64 位)作为“版本”。
    • 点击“下一步”

    按照 VM 创建向导中的其余提示进行操作。我唯一改变的是“内存大小”段落(我使用 4096 MB)和“文件位置和大小”段落(我使用 128 GB)的默认设置。如果您的系统可以支持它,我会鼓励您这样做。 保留所有其他默认值

    • 在虚拟机创建向导的最后一段点击“创建”

    创建后,VM 将显示在 VirtualBox 窗口的左侧窗格中。

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

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

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

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

    完成两项修改后,您可以单击右下角的“开始安装”按钮。当 iso 安装到您的系统时,您应该花时间通过

    提供 root 密码
    • 点击页面左上角的那个选项
    • 填写它显示的表格
    • 单击“完成”(如果您选择的密码被认为是弱密码,则必须双击“完成”才能接受)。

    我添加了密码,但我懒得添加任何非 root 用户。

    一切都安装好后,点击屏幕右下角的“重启”按钮。

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

    这完成了第 1 阶段

    您现在应该只关注 VirtualBox

    第 2 阶段 - 向 VM 添加 SSH 功能以支持下载传输

    • 首先单击设备打开 CentOS 设备的设置
    • 接下来,点击VirtualBox主菜单左上角的“设置”按钮。这将打开一个新窗口。
    • 在新窗口的左侧窗格中,单击“网络”,这将显示一组适配器选项卡。
    • 现在单击“高级”标签左侧的三角形。
    • 这将显示一系列选项,但您需要单击的是标有“端口转发”的按钮

    这将打开另一个窗口,您可以在其中设置端口转发规则。

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

    名称= ssh,主机端口=2222,访客端口=22

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

    有了这个规则,你现在应该能够从你的 Windows 主机通过 ssh 到 CentOS 来宾的 2222 端口并避免以下错误:

    ssh:连接到主机 localhost 端口 22:连接被拒绝

    您现在应该再次查看 VirtualBox。

    • 启动 CentOS VM 设备并以 root 身份登录。
    • 登录后,从命令提示符执行以下行。

    yum –y install openssh-server openssh-client

    此命令将在 CentOS 虚拟机上安装 ssh 服务器。安装完成后,输入以下命令确认 ssh 服务器正在运行。

    ps –aux | grep sshd

    此命令应返回 2 个显示 sshd(ssh 守护进程)的进程。一个是 grep 命令本身。另一个是您在后台运行的服务器。

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

    ls -l /etc/ssh

    如果密钥的大小为 0 字节,则需要删除它们,重新启动 sshd 守护进程,并验证重新启动 sshd 时是否重新生成了密钥。为此,请执行以下命令

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

    此过程将有助于避免意外的“连接被 127.0.0.1 关闭”错误。

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

    主机名 = localhost,端口号 = 2222,用户名 = root,密码 = ,文件协议 = SCP。

    请注意,您需要最后设置“文件协议”。如果你不这样做,当你输入一个它不期望的“端口号”时,它会试图比你聪明。输入所有值时。单击“登录”按钮并接受/单击更新或确定您收到的任何安全警告。

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

    这里不重点介绍,你也可以使用 Cygwin 连接虚拟机,对诊断连接问题很有用。您需要输入以获取详细诊断输出的命令是

    ssh –vvv –p 2222 root@localhost

    这完成了第 2 阶段

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

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

    在我们开始之前,我们需要在 CentOS 虚拟机上的 root 用户的主目录中添加一个“下载”目录,方法是在 CentOS 命令行中发出以下命令。

    mkdir ~/downloads/

    我们现在可以开始下载 Hadoop 依赖项了。我们会将所有内容下载到 Windows,然后使用 WinSCP 将其移动到 VM。

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

    忽略页面顶部的“公共更新结束”错误消息。 Java 7 是 Apache 推荐的。

    你要下载 jdk-7u79-linux-x64.rpm 文件

    下载后,使用 WinSCP 导航到主机计算机的下载目录和新创建的访客虚拟机的“下载”目录(您可能需要单击 WinSCP 窗格虚拟机一侧的刷新图标才能查看目录)。将 jdk 文件从 Host 拖放到 VM Guest。

    现在我们只需要在 CentOS VM 上安装 JDK。在 CentOS 命令行中,将您的目录更改为我们在根目录下创建的“downloads”文件夹,在“downloads”目录中使用 rpm 安装 java 7。

    cd ~/downloads rpm –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

    下载文件后,使用 WinSCP 将其从主机移动到来宾 VM 的“下载”文件夹,就像处理 JDK 文件一样。然后我们将文件解压到 /usr/local/ 目录,并在 /usr/local/ 目录中创建一个指向 maven 文件夹的符号链接,使用以下三个命令。

    tar xzf apache-maven-3.2.2-bin.tar.gz -C /usr/local

    cd /usr/local

    ln -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 之前查看 repo 中的 BUILDING.txt 文件,以确保我们获得正确的版本。

    要获取 Hadoop 源,我们运行 git clone 命令。只需从 CentOS 命令行执行以下命令即可下载 Hadoop 存储库。

    cd /usr/local

    git 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 ~/downloads

    tar xzf protobuf-2.5.0.tar.gz -C /usr/local

    cd /usr/local/protobuf-2.5.0

    ./configure

    `制作'

    make install

    完成此操作后,将安装构建 Hadoop 所需的所有必备实用程序和依赖项。

    这完成了第 3 阶段

    第 4 阶段 - 构建没有错误的 Hadoop

    转到 Hadoop 目录,然后使用以下命令运行 Maven 跳过测试:

    cd /usr/local/hadoop

    mvn clean install -DskipTests

    现在构建应该没有任何问题了,当一切都完成后,您应该会看到如下所示的屏幕。

    这样就完成了遍历

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

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多