如何在没有错误的情况下从源构建Hadoop

Sem*_*ape 0 ssh hadoop virtualbox centos windows-7-x64

我花了几周时间尝试解决构建Hadoop的不同错误.SO有助于指出我偶尔会遇到问题的答案,但经过大量的搜索后,我无法完成整个过程.

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

  • Protobuff版本错了
  • SSH连接无法正常工作
  • Mojofailure构建期间的例外情况
  • 使用的Java版本不正确
  • C++健全性检查失败
  • 一大堆对我没有任何意义的废话,我无法破译根本原因

今天我终于让Hadoop从git repo源构建,并希望记录面向类似问题的SO社区成员的流程.

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

一些关于配置的说明:

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

Sem*_*ape 9

如何从没有错误的源代码构建Hadoop

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

这个步骤包括4个阶段

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

阶段1 - 为VirtualBox创建CentOS设备

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

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

创建新设备

按照VM创建向导中的其余提示进行操作.我从"内存大小"段落(我使用4096 MB)和"文件位置和大小"段落(我使用128 GB)的默认值中改变了.如果您的系统可以支持,我建议您也这样做.保留所有其他默认值

  • 单击VM创建向导的最后一段"创建"

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

新VM

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

iso选择

出现提示时,在VM引导后,选择"安装CentOS 7"(这不是默认设置,您必须按"向上"箭头)并按"Enter".加载安装程序时,首先要问你的是键盘布局.我保留默认值,只需点击右下角的"继续"按钮即可.这将打开"安装摘要"页面,您需要在该页面上对2个区域进行更改:"安装目标"和"网络和主机名"

安装摘要

  • 点击"安装目的地"
  • 双击虚拟磁盘(确保背景为蓝色,并且复选标记在那里)
  • 单击"完成"返回"安装摘要"页面.

安装目的地

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

网络使能

完成这两项修改后,您可以单击右下角的"开始安装"按钮.当iso安装到您的系统时,您应该花时间提供root密码

  • 单击页面左上角的该选项
  • 填写它带来的表格
  • 单击"完成"(如果选择的密码很弱,则必须双击"完成"才能接受).

我添加了密码,但我没有费心添加任何非root用户.

安装完所有内容后,单击屏幕右下方显示的"重新启动"按钮.

CentOS已安装

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

这完成了第1阶段

你现在应该只关注VirtualBox

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

  • 首先单击设备,打开CentOS设备的设置
  • 接下来,单击VirtualBox主菜单左上角的"设置"按钮.这将带来一个新的窗口.
  • 在新窗口的左侧窗格中,单击"网络",它将显示一组适配器选项卡.
  • 现在单击标签"Advanced"左侧的Triangle.
  • 这将显示一系列选项,但您需要点击的是标有"Port Forwarding"的按钮

转发端口

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

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

Name = ssh,主机端口= 2222,Guest端口= 22

  • 单击"端口转发"窗口中的"确定"按钮
  • 单击"设备设置"窗口中的"确定"按钮.

端口转发规则

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

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

您现在应该再次查看VirtualBox.

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

yum –y install openssh-server openssh-client

此命令将在CentOS VM上安装ssh服务器.安装完成后,通过键入以下命令确认ssh服务器正在运行.

ps –aux | grep sshd

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

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

ls -l /etc/ssh

好的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.

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

WinSCP启动

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

虽然我不会在这里关注它,但我们也可以将Cygwin连接到VM,它对于诊断连接问题很有用.您需要输入以获取详细诊断输出的命令是

ssh –vvv –p 2222 root@localhost

这完成了第2阶段

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

我们的CentOS发行版真的是"准系统",所以我们需要安装构建Hadoop所需的一切.我们将通过在Windows中下载大多数内容然后通过WinSCP将它们移动到VM来完成此操作.

在开始之前,我们需要通过在CentOS命令行发出以下命令,将"downloads"目录添加到CentOS VM上root用户的主目录中.

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导航到主机的下载目录和新创建的访客VM的"下载"目录(您可能需要单击WinSCP窗格的VM侧的刷新图标以查看目录).将jdk文件从主机拖放到VM Guest.

WinSCP java转移

现在我们只需要在CentOS VM上安装JDK.从CentOS命令行将目录更改为我们在root的home下创建的"downloads"文件夹,一旦在"downloads"目录中使用rpm安装java 7.

cd ~/downloads rpm –ihv jdk-7u79-linux-x64.rpm

安装完成后,您可以通过键入进行验证

java –version

这将产生输出,说明您已安装Java Run Time Environment.

接下来,我们将安装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的行家-3.2.2-bin.tar.gz

下载文件后,使用WinSCP将其从主机移动到Guest VM的"downloads"文件夹,就像使用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变量中.我们通过编辑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
    • export PATH = $ M2_HOME/bin:$ PATH
  • 按"Esc"键退出编辑模式
  • 输入":wq" - 它将自动显示在vi命令行(屏幕左下角)
  • 按"Enter"

现在退出CentOS.重新登录CentOS,并检查以确保使用以下命令正确设置新的PATH变量.

exit

<log back in as root>

mvn –version

您应该看到指示maven当前已安装的输出

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"退出.

protobuff版本

现在我们终于可以安装Hadoop需要的最后一件事:ProtocolBuffer.要获得正确版本的ProtocolBuffer,我们访问ProtocolBuffer发布页面:

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

然后向下滚动,直到我们看到Hadoop编译所需的版本.在本演练中,您要下载以下文件.

protobuf的-2.5.0.tar.gz

下载完成后,使用WinSCP并将其传输到VM的"downloads"文件夹,就像之前为其他下载一样.一旦文件位于VM的"downloads"文件夹中,请发出以下命令在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内置

这样就完成了漫游

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