我花了数周的时间尝试解决构建Hadoop中的不同错误。 SO有助于将我引向偶尔出现的问题的答案,但是在SO上进行了大量搜索之后,我却始终无法完成整个工作。
从这一切开始已经过去了两个星期,所以我已经忘记了大部分的显式错误消息,但是我遇到的问题
今天,我终于从git repo源码中获得了Hadoop,并希望为面临类似问题的SO社区成员记录该过程。
对于那些尝试从源代码构建Hadoop的人,这就是我如何从源代码进行编译的所有方式。
有关配置的一些注意事项:
最佳答案
如何从源构建Hadoop而不会出错
初步下载:
开始之前,您需要下载以下内容。
本演练包括4个阶段
构建Hadoop
阶段1-为VirtualBox创建CentOS设备
首先打开VirtualBox,然后单击左上角的“新建”按钮。这将打开一个新窗口,询问有关您要创建的虚拟机设备的一些信息。
按照VM创建向导中的其余提示进行操作。我唯一更改的是默认值,其中“内存大小”段落(我使用了4096 MB)和“文件位置和大小”段落(我使用了128 GB)。如果您的系统支持,我鼓励您这样做。 保留所有其他默认值
创建完成后,虚拟机将显示在VirtualBox窗口的左侧 Pane 中。
当出现提示时,在VM启动之后,选择“Install CentOS 7”(这不是默认设置,您必须按“向上”箭头)并按“Enter”。安装程序加载后,它首先会询问您的是键盘布局。我将默认设置保留在原位,只需单击右下角的“继续”按钮即可。这将打开“安装摘要”页面,您需要在该页面上对两个区域进行更改:“安装目标”和“网络和主机名”
返回“安装摘要”页面,
-点击“网络和主机名”
-在此菜单屏幕中,通过单击右侧的拨动开关来打开以太网网络。
-点击左上角的“完成”。
完成这两项修改后,您可以单击右下角的“开始安装”按钮。在iso安装到系统中后,您应该花时间通过以下方式提供root密码:
我添加了密码,但是没有添加任何非root用户。
安装完所有内容后,请点击屏幕右下角的“重新启动”按钮。
系统重新启动后,选择CentOS 7并允许其启动。通过以root用户身份登录来检查您的凭据,然后通过单击窗口右上方的红色X按钮并在出现提示时选择“关闭计算机电源”来关闭CentOS VM。
这样就完成了阶段1
您现在应该只看VirtualBox
阶段2-向VM添加SSH功能以支持下载传输
这将打开另一个窗口,您可以在其中设置端口转发规则。
Name= ssh, Host port =2222, Guest port = 22
有了此规则,您现在应该可以在端口2222上从Windows主机SSH到CentOS guest ,并避免出现以下错误:
ssh: connect to host localhost port 22: Connection refused
您现在应该只再次查看VirtualBox。
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 ~/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
下载完文件后,就像使用JDK文件一样,使用WinSCP将其从主机移至Guest VM的“下载”文件夹。然后,我们将文件解压缩到/ usr / local /目录中,并使用以下三个命令在/ usr / local /目录中创建一个指向maven文件夹的符号链接(symbolic link)。
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),请按照以下说明正确更新文件。
现在退出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/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 - 如何从源构建Hadoop而不会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31463763/