文章
服务器与存储管理
作者:Stefan Schneider
2013 年 5 月发布
Hadoop 1.0.4. 下载是 Oracle Solaris 11 附带的现成功能产品。Hadoop 能够使用本地平台库,以提高 Hadoop 套件运行速度。这些本地库需要下载或构建。
|
构建和部署本地库包括以下步骤:
本文假设满足以下条件:
/usr/local/hadoop 目录中,该目录由 Hadoop 管理用户 hadoop 拥有,并对该用户可写。/usr/local/lib 目录中。Oracle Solaris 11 系统需要安装以下软件包才能构建本地 Hadoop 库:
solarisstudio-123 (Oracle Solaris Studio)automakeautoconfantlibtoolgccJDK 6JDK 6 软件包是 Hadoop 在运行时唯一需要的软件包。其他软件包只在构建库时才需要。
Oracle Solaris 11 构建系统需要能够与其 solaris 信息库交互,并需要能够访问托管 Oracle Solaris Studio 12.3 的信息库。
Oracle Solaris Studio 是一个免费的开发人员套件,Oracle Solaris Studio 页面上进行了介绍并提供了下载。
您可以使用 root 权限通过以下命令从 Oracle Solaris 11 IPS 服务器安装其他软件包:
$ pkg install automake autoconf ant libtool gcc-45 jdk-6
该安装命令是幂等的,这意味着可以多次调用而无任何负面影响。这些程序包将根据需要安装。如果所有软件包均已安装,该命令将不起作用。
假设您将使用 Hadoop 管理帐户构建本地 Hadoop 库。本地库的来源是 Hadoop 的安装 tarball 的一部分。使用 Hadoop 管理帐户可确保这些库有恰当的所有权和正确的访问权限。需要在 Hadoop 运行时使用的 Hadoop 帐户的访问权限。
您应设置几个 shell 变量,让构建过程与 JDK 6 协同工作。此外,构建过程还需要能够找到 Hadoop 配置目录。
假设 Hadoop 管理帐户使用 bash shell。可以通过在 Hadoop 管理帐户主目录的 .profile 和 .bashrc 文件中添加以下行来设置变量:
export PATH=/usr/jdk/instances/jdk1.6.0/bin:$PATH:/usr/local/hadoop/bin export JAVA_HOME=/usr/jdk/instances/jdk1.6.0 export HADOOP_CONF_DIR=/usr/local/hadoop/conf
Google Snappy 压缩库提高了 Hadoop 压缩任务的速度。您可以在 Scalingbits.com 上找到有关这些库的 Oracle Solaris 11 构建过程说明。
在本文档的其余部分,假设 HADOOP_DIR 变量设置为相应的值:
HADOOP_DIR=/usr/local/hadoop
NativeIO.java 文件Oracle Solaris 有特定的文件 I/O 标志。您需要在 $HADOOP_DIR/src/core/org/apache/hadoop/io/nativeio/NativeIO.java 文件中更新这些标志的值。
以下是您需要更改的 Java 常量:
public static final int O_CREAT = 0x100; public static final int O_EXCL = 0x400; public static final int O_NOCTTY = 0x800; public static final int O_TRUNC = 0x200; public static final int O_APPEND = 0x08; public static final int O_NONBLOCK = 0x80; public static final int O_SYNC = 0x10;
Makefile.am 文件Oracle Solaris 需要一些特定标志用于 gcc 编译器。在 $HADOOP_DIR/src/native/Makefile.am 文件中,将 AM_CLFAGS 变量更新为以下值:
AM_CFLAGS = -D_POSIX_C_SOURCE=199506L -D__EXTENSIONS__ -g -Wall -fPIC -O2 -m$(JVM_DATA_MODEL)
Hadoop 配置文件 ${HADOOP_DIR}/conf/hadoop-env.sh 必须指向 JDK 6。情况可能已经如此。如果并非如此,请使用以下命令:
echo "JAVA_HOME=/usr/jdk/instances/jdk1.6.0" >>
${HADOOP_DIR}/conf/hadoop-env.sh
构建过程需要通过互联网访问 Maven 和 Ivy 信息库。构建系统必须能够访问互联网。可以通过在 shell 变量中设置选项指示 Ant 使用 HTTP 代理,如下所示:
$ export ANT_OPTS="-Dhttp.proxyHost=myhttpprox.mydomain.com"
您可以使用 ant 工具从 Hadoop 主目录 HADOOP_DIR 启动构建。因此,首先切换到该目录:
$ cd ${HADOOP_DIR}
运行以下命令设置所有必需的 shell 变量,启动构建过程:
export PATH=/usr/jdk/instances/jdk1.6.0/bin:$PATH echo PATH $PATH export JAVA_HOME=/usr/jdk/instances/jdk1.6.0 echo JAVA_HOME $JAVA_HOME export LD_RUN_PATH=/usr/local/lib export LD_LIBRARY_PATH=/usr/local/lib ant -verbose -logfile ant.log -Dcompile.native=true -Dmake.cmd=gmake -Dos.name=SunOS -Dnonspace.os=SunOS
文件 ant.log 保存了构建库时生成的全部信息。该文件对于分析和修复构建过程中的问题很重要。
构建过程在 ${HADOOP_DIR}/build 下创建一个目录结构。本地库存储在 ${HADOOP_DIR}/build/native 中。该目录包含一个名称以 SunOS 开头并以架构名结尾的子目录。因此,对于基于 Intel 的 Oracle Solaris 系统,名称将是 SunOS-x86-32,而对于基于 SPARC 的系统,将是 SunOS-SPARC-32。
使用如下命令将 ${HADOOP_DIR}/build/native/SunOS* 下的子目录结构复制到 ${HADOOP_DIR}/lib/native/SunOS*:
$ cp -R ${HADOOP_DIR}/build/native/SunOS-x86-32 ${HADOOP_DIR}/lib/native/SunOS-x86-32
Snappy 库需要在 ${HADOOP_DIR}/lib/native/SunOS* 目录中可用,因此使用如下所示的命令:
$ cp /usr/local/lib/libsnappy.so ${HADOOP_DIR}/lib/native/SunOS-x86-32
Hadoop 将在启动时报告是否能够加载本地库。因此,您可以通过检查日志文件验证部署是否成功。
日志文件名将有各自的时间戳,格式为 YYYY-MM-DD。示例日志文件名为 hadoop-hadoop-jobtracker-solaris.log.YYYY-MM-DD。日志文件应包含类似下面的一行内容:
2013-03-31 10:42:10,487 INFO org.apache.hadoop.util.NativeCodeLoader: Loaded the native-hadoop library
有关 Oracle Solaris 的其他链接:
Stefan Schneider 使用 SunOS 进行 3D 机器人模拟研究,并获得针对制造业的面向对象的数据库博士学位。然后他在 20 世纪 90 年代初开发出了一个针对创业公司的面向对象的数据库产品。他于 1994 年加入 Sun,负责将 SAP 应用移植到 Solaris 2 并进行优化,并与 Sun 的主要合作伙伴协作,支持采用 Sun 技术(如 Oracle Solaris、多线程、Java SE 和 Swing)。作为 Oracle ISV 工程团队的 CTO,他目前管理所有 Oracle 合作伙伴对 Oracle Solaris 11 的采用。
| 修订版 1.1,2013 年 5 月 31 日 |