mac-hadoop3.3.6 源码构建以及踩坑记录

这篇具有很好参考价值的文章主要介绍了mac-hadoop3.3.6 源码构建以及踩坑记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 为什么需要构建源码

因为hadoop的可执行文件 是在专门的机器上编译的 其中native库 不一定能适用于每个机器 导致在启动hadoop过程中 出现烦人的警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

如何说 为了解决 警告的话 可以直接使用已经编译好的库 GitHub地址: https://github.com/silent-night-no-trace/mac-native-hadoop-library
另外使用说明也在文档中可以找到

特殊说明: 解决这个 警告问题 可以直接参考文档: https://blog.csdn.net/a15835774652/article/details/135649394

2. 构建准备

  • 下载源码 https://github.com/apache/hadoop/releases/tag/rel%2Frelease-3.3.6
    直接下载链接地址 :https://github.com/apache/hadoop/archive/refs/tags/rel/release-3.3.6.zip
  • 导入到idea 或者其他的工具

3. 环境准备

解压后的源码导入idea 在根目录下 有个BUILDING.txt
我们直接参考这个编译

  • Unix System
  • JDK 1.8 (最好是)
  • Maven 3.3 or later
  • Protocol Buffers 3.7.1 (if compiling native code)
  • CMake 3.1 or newer (if compiling native code)
  • Zlib devel (if compiling native code)
  • Cyrus SASL devel (if compiling native code)
  • One of the compilers that support thread_local storage: GCC 4.8.1 or later, Visual Studio,
    Clang (community version), Clang (version for iOS 9 and later) (if compiling native code)
  • openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
  • Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
  • Doxygen ( if compiling libhdfspp and generating the documents )
  • Internet connection for first build (to fetch all Maven and Hadoop dependencies)
  • python (for releasedocs)
  • bats (for shell code testing)
  • Node.js / bower / Ember-cli (for YARN UI v2 building)

因为我们要编译native源码 所以 标记 if compiling native code 这个都需要安装
可以直接使用homebrew来安装 但是需要注意强调的版本

Building on macOS (without Docker)


Installing required dependencies for clean install of macOS 10.14:

  • Install Xcode Command Line Tools
    $ xcode-select --install
  • Install Homebrew
    $ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
  • Install OpenJDK 8
    $ brew tap AdoptOpenJDK/openjdk
    $ brew cask install adoptopenjdk8
  • Install maven and tools
    $ brew install maven autoconf automake cmake wget
  • Install native libraries, only openssl is required to compile native code,
    you may optionally install zlib, lz4, etc.
    $ brew install openssl
  • Protocol Buffers 3.7.1 (required to compile native code)
    $ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protobuf-java-3.7.1.tar.gz
    $ mkdir -p protobuf-3.7 && tar zxvf protobuf-java-3.7.1.tar.gz --strip-components 1 -C protobuf-3.7
    $ cd protobuf-3.7
    $ ./configure
    $ make
    $ make check
    $ make install
    $ protoc --version

Note that building Hadoop 3.1.1/3.1.2/3.2.0 native code from source is broken
on macOS. For 3.1.1/3.1.2, you need to manually backport YARN-8622. For 3.2.0,
you need to backport both YARN-8622 and YARN-9487 in order to build native code.

4. 源码修改

  • 修改主pom 仓库修改为阿里云仓库
    项目根目录下的 pom.xml 在 repositories 第一个位置新增阿里云仓库

    <repository>
       <id>maven-ali</id>
       <url>https://maven.aliyun.com/repository/public</url>
       <releases>
         <enabled>true</enabled>
       </releases>
       <snapshots>
         <enabled>true</enabled>
         <updatePolicy>always</updatePolicy>
         <checksumPolicy>fail</checksumPolicy>
       </snapshots>
     </repository>
    
  • 修改 hadoop-common-project/hadoop-common/src/main/native/src/exception.c

    # 删除下面代码
    || defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 32)
    
  • 修改 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c

# 在头部添加一行
#include <sys/ioctl.h>
  • 修改 hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/lib/MapOutputCollector.cc
    需要在PRIu64宏和字符串文字之间添加空格 (注意每个PRIu64地方都需要按照如下进行改动)示例 如下
    # 修改前
    LOG("%s-spill: { id: %d, collect: %"PRIu64" ms, "
    # 修改后 
    LOG("%s-spill: { id: %d, collect: %" PRIu64 " ms, "
    
  • 修改 hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/util/StringUtil.cc
    需要在PRIu64宏和字符串文字之间添加空格 (注意每个PRIu64地方都需要按照如下进行改动)示例 如下
    # 修改后
    snprintf(tmp, 32, "%"PRIu64, v);
    # 修改后 
    snprintf(tmp, 32, "%" PRIu64, v);
    

5. 执行构建

# brew安装的openssl 快捷查看安装位置
brew --prefix openssl

# 官方推荐的执行命令/usr/local/opt/openssl 修改为自己的openssl路径
mvn package -Pdist,native -DskipTests -Dmaven.javadoc.skip \
    -Dopenssl.prefix=/usr/local/opt/openssl
# 遇到编译错误的话,修改后 可以直接从 指定项目开始编译 
#  直接编译 hadoop-yarn-server-nodemanager的native库
mvn clean package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar -rf :hadoop-yarn-server-nodemanager
# 直接编译 map reduce的native库
mvn clean package -Dmaven.javadoc.skip=true -Pnative -DskipTests -Dtar -rf :hadoop-mapreduce-client-nativetask

# 增加 编译的详细日志 方便排查问题  
mvn clean package -e -X -Pdist,native -DskipTests -Dmaven.javadoc.skip -Dopenssl.prefix=/usr/local/bin/openssl

然后就等待编译 大概10来分钟
最后 这里
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/runc/runc.c
会报错 提示 linux/loop.h 不存在 这肯定是不存在的 linux特有的库
然后注释到在 运行 可能就会 提示 openssl/evp.h 不存在 可能是个bug 这个路径已经正确配置了。 也是找不到

虽然说 编译没有完成 但是我们要hadoop-common 和 hadoop-hdfs的 native文件 已经编译好了

另外 mapreduce的native 编译 可以直接编译 hadoop-mapreduce-client-nativetask 这个项目
执行如下命令

mvn clean package -Dmaven.javadoc.skip=true -Pnative -DskipTests -Dtar -rf :hadoop-mapreduce-client-nativetask

当编译到 如下图的时候 即可 停止
mac-hadoop3.3.6 源码构建以及踩坑记录,大数据搭建问题,hadoop,大数据,hadoop 源码编译
完成编译图 如下 还是推荐提前就停止 可以看到完整的编译这部分 mapreduce native 耗时还是比较久的
mac-hadoop3.3.6 源码构建以及踩坑记录,大数据搭建问题,hadoop,大数据,hadoop 源码编译

当mapreduce-examples 执行完后 说明编译的native库 已经通过测试 可以使用了

6. 使用

到这里我们完成了 3个 主要项目的native库 分别是hadoop-common hadoop-hdfs hadoop-mapreduce 其中 yarn项目 因为涉及到修改源码并未完成编译

建议将原有的native库 $HADOOP_HOME/lib/native/ 备份下

# 拷贝 hadoop-common 的native文件 到hadoop 目录
cp hadoop-common-project/hadoop-common/target/native/target/usr/local/lib/*  $HADOOP_HOME/lib/native/

# 拷贝hadoop hdfs native到 hadoop的lib/native目录
cp hadoop-hdfs-project/hadoop-hdfs-native-client/target/native/target/usr/local/lib/*   $HADOOP_HOME/lib/native/

# 拷贝 mapreduce的native库
cp hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/target/native/target/usr/local/lib/* $HADOOP_HOME/lib/native/

然后在进行检查 本地库支持信息

# 查看 Hadoop 支持的本地库信息:
$HADOOP_HOM/Ebin/hadoop checknative -a

效果图如下 发现已经hadoop本地的库 已经被加载到了 以及 zlib zstd
mac-hadoop3.3.6 源码构建以及踩坑记录,大数据搭建问题,hadoop,大数据,hadoop 源码编译文章来源地址https://www.toymoban.com/news/detail-810648.html

7. 遗留的编译问题

  • hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/runc/runc.c 中的 linux/loop.h 文件不存在 以及相应的代码修改
  • hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/runc/runc.c 中的 openssl/evp.h 文件不存在,但是本机上 openssl3已经正确配置了。

8. 总结

  • 非必要不进行编译源码 尤其是在mac上
  • 如果使用的 ubuntu的可视化linux 系统 或者纯正的linux上 可以尝试编译
  • 另外搭建hadoop环境的话 搭建伪集群就可以 直接运行 需要docker环境 另外可能要修改 Dockerfile文件 可直接执行 源码根目录下的 start-build-env.sh 脚本

到了这里,关于mac-hadoop3.3.6 源码构建以及踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VirtualBox Ubuntu无法安装增强功能以及无法复制粘贴踩坑记录

    在VirtualBox安装增强功能想要和主机双向复制粘贴,中间查了很多资料,终于是弄好了。记录一下过程,可能对后来人也有帮助,我把我参考的几篇主要的博客都贴上来了,如果觉得我哪里讲得不清楚的,可以去对应的博客去看,讲得更加详细。 报错:未能加载虚拟光盘…到

    2024年02月14日
    浏览(36)
  • ubuntu20.04安装opencv 3.2.0以及cv_bridge踩坑记录

    本次安装是在我的双系统下安装的,不同ubuntu版本或者不同硬件平台情况也许会有所不同,仅供参考。 第一步: 我采用的是github官方代码仓库下载安装的方式,下载的是3.2.0版本(其余版本安装过程类似) opencv官方链接 第二步:安装依赖项 值得一提的是,在此处我遇到过

    2024年02月04日
    浏览(43)
  • vue3+vite+ts项目集成科大讯飞语音识别(项目搭建过程以及踩坑记录)

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥 前端

    2023年04月09日
    浏览(37)
  • Mac安装Drozer apk安全测试框架踩坑记录, ‘openssl/opensslv.h‘ file not found 和implicit declaration of function‘xx‘

    查看Drozer项目说明发现环境要求 大致就是: jdk1.7+ python2.7和pip 2不支持python3和pip3 Protobuf 2.6 + Pyopenssl 16.2 + Twisted 10.2 + android sdk 安装adb 模拟器也要安装drozer agent 确保配置了adb、java环境变量 从MacOS 12.4 Beta版(21F5048e) 开始,可以通过 pyenv 在intel和Apple芯片中安装python2 例如在M1中安

    2024年02月09日
    浏览(36)
  • 利用Hadoop进行数据湖构建与管理

    利用Hadoop进行数据湖构建与管理 一、引言 在大数据的时代,数据的增长速度已经远超过了传统的数据处理和存储能力。为了解决这个问题,数据湖的概念应运而生。数据湖是一个集中式的存储和处理平台,可以存储各种类型的数据,而不需要事先进行结构化的处理。Hadoop,

    2024年03月12日
    浏览(85)
  • 【踩坑记录】字节流数据按照string的方式读取然后按照string的方案存储,编码导致二进制数据发生变化,原理记录

    ​ 目录   问题缘由 背后原理 C#代码示例 总结           由于公司需求,需要读取游戏Redis数据做内外网数据迁移,没有与游戏组过多的沟通。  使用的数据类型是Hash, key是string,value是byte[]。以前对于编码的理解是:计算机底层存储的永远是01的二进制数据,编码是一种

    2024年02月07日
    浏览(39)
  • 大数据第一步-Mac安装Hadoop3

    前提是把jJDK8安装好,hadoop3.x最低需要jdk8。 然后打开共享把远程登陆打开,不打开说是后面会报错, 到终端输入命令:ssh localhost 生成新的keygen否则后面会报错 Permission denied 命令:ssh-keygen -t rsa -P \\\'\\\' -f ~/.ssh/id_rsa   注册,命令为如下: 安装hadoop,命令为我用的是bre

    2024年02月16日
    浏览(47)
  • 使用Hadoop和Nutch构建音频爬虫:实现数据收集与分析

    1. 背景介绍 随着音频内容在互联网上的广泛应用,如音乐、播客、语音识别等,越来越多的企业和研究机构希望能够获取和分析这些数据,以发现有价值的信息和洞察。而传统的手动采集方式效率低下,无法满足大规模数据处理的需求,因此需要利用自动化爬虫技术来实现音

    2024年02月22日
    浏览(32)
  • seatunnel-2.3.2 doris数据同步到hive(cdh-6.3.2)首次运行踩坑记录

    seatunnel-2.3.2 doris数据同步到hive(cdh-6.3.2)首次运行报错解决,解决的报错如下: 1、java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/MetaException 2、java.lang.NoClassDefFoundError: org/apache/thrift/TBase 3、java.lang.NoClassDefFoundError:org/apache/hadoop/hive/conf/HiveConf 4、java.lang.NoClassDefFoundError:com

    2024年02月12日
    浏览(35)
  • 构建大数据环境:Hadoop、MySQL、Hive、Scala和Spark的安装与配置

    在当今的数据驱动时代,构建一个强大的大数据环境对于企业和组织来说至关重要。本文将介绍如何安装和配置Hadoop、MySQL、Hive、Scala和Spark,以搭建一个完整的大数据环境。 安装Hadoop 首先,从Apache Hadoop的官方网站下载所需的Hadoop发行版。选择适合你系统的二进制发行版,下

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包