序言
Hadoop源代码编译在大数据中的地位是什么?简单来说,就像Javaer一定懂得面向对象思维一样(ps:如果你没有上千个对象,可以说可以Java~~~)。
或者也许你是
从事大数据Hadoop,如果你不知道为什么DogCuting好,你好心说你精通Hadoop。
这个时候,你的这些高手们会跟你这样的年轻人说,Hadoop源码还没编译好,学习大数据的路还很长!!
为什么要编译Hadoop
源代码(编译版本是Hadoop-2.5.0-CDH5.3.6)。
首先,Hadoop本身是用Java语言开发的,还有一些不适合Java的要求和操作,所以原生库(NativeLibraries)的概念是通过本地库引入的,Hadoop可以做一些越来越高效的操作。
其次,Hadoop 中的本机文件
官网提供的 2.x 版本是 32 位编译的,在实际使用环境中基本是 64 位,所以为了越来越高效地运行 Hadoop,最好在本地编译 Hadoop 源代码,将官方安装包中包含的本地库替换为编译好的本地库文件之后,如果你启动HDFS
Windows 编译 源码编译安装,使用HDFS,并运行MapReduce任务,将出现以下警告消息:
WARNutil.NativeCodeLoader:Unabletoloadnative-hadooplibraryforyourplatform...使用内置的Java类在适用的情况下。
请原谅处女座的剧情,我眼里没有石头的空间
后面我们来谈谈笔记本的软硬件配置:
你到底是如何编译的?无论是 Apache 版本的 Hadoop 还是 cdh 版本的 Hadoop,都是按照 Hadoop 源代码解压根目录中的 BUILDING.txt 文件进行无脑输出,这里我用 cdh 版本解释,如右图所示:
建筑。TXT的具体核心内容如下:
以下是根据前面提供的要求,这里解释一下其中标明的版本,一定要按照指定的版本,否则你不知道怎么死
1. JDK环境建设(1.7.0_67)。
2. Maven环境建设(3.3.9)。
3. 查找虫子环境构建(1.3.9)。
JDK、maven、findbugs 安装的思路都是通过压缩包安装的,总体思路总结如下:
4. 普罗托布夫环境建设(2.5.0).
注意:
前提是内网畅通
#pingbaidu.com
5. 安装依赖关系
按照上面的建筑.TXT可以看出,如果你编译HADOOPNATIVE库,它是必需的
*CMake2.6ornewer(ifcompilingnativecode)
*Zlibdevel(ifcompilingnativecode)
*openssldevel(ifcompilingnativehadoop-pipes)
#yum-yinstallcmakezlib-developenssl-devel好了,
用了老眼睛的力量才彻底完成了Hadoop源码编译的规划工作Windows 编译 源码编译安装,接下来就要开始编译了,有兴趣的请大家加入群: 131322610交流学习
6. 编译 Hadoop 源代码
继续构建.txt发现以下内容:
建筑分布:
Createbinarydistributionwithnativecode:
$mvnpackage-Pdist,native-DskipTests-Dtar
上传 hadoopcdh 源代码并将其解压缩到目录中
注意:
mvn 编译包还需要在内网下载用于编译的依赖 jar
编译结果如下:
编译结果:
生成的本机库目录: ${HADOOP_SRC_HOME}/hadoop-dist/target/
有一个打包的软件包(hadoop-2.5.0-cdh5.3.6
.tar.gz)和解压缩包(Hadoop-2.5.0-CDH5.3.6)。
测试验证:
将本地编译的本机库替换为安装包附带的本机库(${HADOOP_HOME}/lib/native)。
#sbin/启动 dfs.sh
服务启动时,之前没有警告消息提示,表示源码编译成功,没有任何问题。
通过特殊命令进行测量
再次重新执行重新编译的本地库操作,然后重新测试:
至此,Hadoop源码的编译已经完美结束,没有多少男性同伴能够轻松解决编译过程中的问题
让我们总结一下我在编译Hadoop时遇到的问题,供大家参考:
编译常见错误列表:
最近,公司给我们分配了 2 台虚拟机服务器进行强化学习训练,在虚拟环境中安装 TensorFlow 环境后,我们在导入 tensorFlow 时注意到以下错误:
于是我去谷歌搜索了这个错误的原因,发现是因为我们服务器的CPU不支持AVX指令集造成的,并且
用 pip 安装的 TensorFlow 需要依赖 AVX 指令集,为了确认我们的 CPU 是否真的不支持 AVX 指令集,我用 cat /proc/cpuinfo 命令检查了一下当前的 CPU 指令集支持情况,发现我们的 CPU 不支持 AVX 指令集。
查询互联网后,我们可以使用TensorFlow的源代码
编译和构建 TensorFlow 的一个版本,以便我们可以在不支持 AVX 指令集的机器上使用 TensorFlow。所以我尝试按照官网给出的步骤从源代码编译和构建 TensorFlow。
在构建 TensorFlow 之前,我们需要做两件事:如果下载 TensorFlow 源代码
时网速较好,可以直接使用以下命令从 GitHub 仓库克隆 TensorFlow 代码仓库的源代码:
git clone https://github.com/tensorflow/tensorflow.gitcd tensorflow
如果速度不可预测,可以直接下载zip版本,然后上传到服务器,我用前者。
注意:此处的代码库默认为主开发分支。
下载并安装 Bazel
创建工具 这里我想说的很多,一般来说,Bazel有两种安装方式,一种是使用Bazelisk安装,另一种是自动安装,我用的是前者。官方网站会告诉你,你可以在 GitHub 中安装任何可以在 _TF_MIN_BAZEL_VERSION 到 _TF_MAX_BAZEL_VERSION 之间在 tensorflow/configure 中指定的版本.py但是,有一个坑。因为这里他说你可以安装任何版本的3.10~3.99,所以我装了一个3.70版本,等真的编译好了,他会告诉你这个版本不匹配,你需要安装3.10版本,所以只能卸载再重装。
接下来我们需要根据 bazel 安装一些依赖项:
apt install curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
接下来源码编译安装前的环境准备,我们可以使用 apt update &&sudo apt install bazel-3.1.0 命令直接安装它。
到目前为止,我们已经安装了 bazel 编译工具并下载了 TensorFlow 的源代码,因此我们需要开始编译和构建 TensorFlow。
在此之前,我们需要使用以下命令安装一些相应的依赖项:
pip install six numpy wheel setuptools mock 'future>=0.17.1'
pip install keras_applications --no-deps
pip install keras_preprocessing --no-deps
然后我们使用 gcc --version 来检查我们的 gcc 版本,我的是 7.5.0,附带 18.04,可用。
然后是真正的编译过程。首先,我们进入从GitHub下载的TensorFlow源代码并执行它
./configure
这将要求您执行一些与配置相关的信息:
Please specify the location of python. [Default is /root/miniconda3/envs/ray/bin/python3]:
这句话是让你输入Python的位置,如果正确的话直接输入
,如果要更改,请输入 Python 所在的目录;
Found possible Python library paths:
/root/miniconda3/envs/ray/lib/python3.8/site-packages
Please input the desired Python library path to use. Default is [/root/miniconda3/envs/ray/lib/python3.8/site-packages]
此步骤允许您输入 Python 库的位置,和以前一样,我将在此处输入。
Do you wish to build TensorFlow with ROCm support? [y/N]: N
这一步是问你是否要构建一个支持 ROCm 的 TensorFlow 版本,这里我选择 N。
Do you wish to build TensorFlow with CUDA support? [y/N]: N
这一步是询问你是否要构建一个支持 CUDA 的 TensorFlow 版本,因为我打算将其用于分布式集群的 CPU 版本,而 CUDA 在此服务器中未使用,所以我选择了 N。
Do you wish to download a fresh release of clang? (Experimental) [y/N]: N
这一步是问你要不要嚣张叮当是发布版,这里一开始我选了Y,因为我网速不好,下载错了,后来我选择了N;
lease specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
这一步是让你输入一个编译时优化器,这里我直接用默认,直接输入就行了;
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N这一步是问你是不是需要支持Android,我这边不需要,所以直接N,否则的话会让你选择你Android SDK的版本之类的;
配置
完所有这些后,将弹出有关您的配置的消息。
现在是时候真正开始编译你的 TensorFlow 源代码了源码编译安装前的环境准备,由于我使用的是没有 CUDA 的版本,所以我只使用以下命令:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
编译后,你会听到以下消息:(由于我没有自己作品的截图,所以我使用了网络图,我花了 7500 多秒才使用我的旧 CPU)。
编译完成后,我们可以在 TensorFlow 源代码目录中输入以下命令来构建最终的 pip 安装包:
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
在这里,/tmp/tensorflow_pkg
是我定义最终安装包输出的地方,当它结束时,我们可以 cd 到 /tmp/tensorflow_pkg 目录中,看看上面有什么:
如您所见,我们最终的 pip 安装版本已经完成,然后我们可以在命令行中输入以下命令进行安装:
pip install tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl
安装完成后,我们可以尝试在 Python 交互环境中导出 TensorFlow,看看是否有错误:
我们发现它可以正常导出和使用,至此,整个 TensorFlow 源代码的编译、构建和安装环境就完成了。
书籍推荐
TensorFlow 高级手册:基础知识、算法和应用
黄洪波编辑
本书由人工智能一线专家根据日常工作感受和体会总结,穿插自身实践体会和教训,对TensorFlow基础知识、环境构建、神经网络、常用技术进行详细讲解。帮助读者轻松理解GANCNRNN等各种神经网络,真正完成AI从感知到产品的全过程。
(扫描代码了解本书的详细信息)。
如果你喜欢这篇文章