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

How Do I Build Hadoop From Source Without Errors

我花了数周时间尝试解决构建 Hadoop 过程中的各种错误。 SO 帮助我找到了偶尔出现的问题的答案,但是在 SO 上进行了大量搜索之后,我一直无法构建整个东西。

自从这一切开始以来已经过去了几个星期,所以我已经忘记了大部分明确的错误消息,但我已经包括的问题

今天终于从gitrepo源中得到了Hadoop的构建,想记录一下这个过程,以供面临类似问题的SO社区成员使用。

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

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

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

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

本演练包含 4 个阶段

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

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

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

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

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

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

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

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

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

  • 点击“安装目标”
  • 双击虚拟磁盘(确保背景为蓝色并且复选标记在那里)
  • 点击“完成”返回"Installation Summary"页面。

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

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

提供 root 密码
  • 单击页面左上角的那个选项
  • 填写弹出的表格
  • 单击“完成”(如果您 select 密码被认为是弱密码,无论如何都必须双击“完成”才能接受)。

我添加了密码,但我没有添加任何 non-root 用户。

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

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

第 1 阶段完成

您现在应该只看 VirtualBox

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

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

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

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

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

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

有了这个规则,你现在应该可以从你的 Windows 主机通过 ssh 连接到端口 2222 上的 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 服务器 运行ning。

ps –aux | grep sshd

这个命令应该return 2 个进程显示 sshd(ssh 守护进程)。一个是 grep 命令本身。另一个是你的服务器运行在后台。

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

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.

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

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

虽然我不会在这里重点介绍,但您也可以使用Cygwin 连接到VM,这对于诊断连接问题很有用。您需要输入以获得详细诊断输出的命令是

ssh –vvv –p 2222 root@localhost

第 2 阶段完成

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

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

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

mkdir ~/downloads/

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

首先从 - http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

下载 Java 7 JDK

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

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

下载后使用 WinSCP 导航到主机的下载目录和访客 VM 新创建的“下载”目录(您可能需要单击 WinSCP 窗格的 VM 端的刷新图标才能看到目录)。将 jdk 文件从主机拖放到 VM 来宾。

现在我们只需要在 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/ 目录中创建一个符号 link 并使用以下三个命令指向 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 变量中。我们通过编辑 root 主目录中的 .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
    • 导出路径=$M2_HOME/bin:$路径
  • 按“Esc”键退出编辑模式
  • 键入“:wq”——它会自动出现在 vi 命令行(屏幕左下方)
  • 按“输入”

现在退出 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 克隆命令。只需从 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

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

演练到此结束

希望对您有所帮助。

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

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