hadoop的基础设施-protobuf-2.5.0编译和安装

简介: hadoop的基础设施-protobuf-2.5.0编译和安装

引言

在安装编译Hadoop的时候需要提前安装protobuf-2.5.0的,而且版本不要高了或者低了,这个是因为hadoop的rpc通信里面是直接使用protobuf-2.5.0作为数据格式交换的,因为遇到很多次,每次都从头安装,这次记录下来。

编译时候的提示

我的编译版本源码是hadoop-2.7.3,如果环境中没有安装protobuf-2.5.0,在做源码编译的时候有如下提示:

[INFO] 
[INFO] --- hadoop-maven-plugins:2.7.3:protoc (compile-protoc) @ hadoop-common ---
[WARNING] [protoc, --version] failed: java.io.IOException: Cannot run program "protoc": error=2, 没有那个文件或目录
[ERROR] stdout: []

然后在我们的编译进程中是会中断的,具体表现如下:

[INFO] Executed tasks
[INFO] 
[INFO] --- hadoop-maven-plugins:2.7.3:protoc (compile-protoc) @ hadoop-common ---
[WARNING] [protoc, --version] failed: java.io.IOException: Cannot run program "protoc": error=2, 没有那个文件或目录
[ERROR] stdout: []
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Apache Hadoop Main 2.7.3 ........................... SUCCESS [ 42.510 s]
[INFO] Apache Hadoop Build Tools .......................... SUCCESS [ 47.049 s]
[INFO] Apache Hadoop Project POM .......................... SUCCESS [ 24.040 s]
[INFO] Apache Hadoop Annotations .......................... SUCCESS [01:22 min]
[INFO] Apache Hadoop Assemblies ........................... SUCCESS [ 12.138 s]
[INFO] Apache Hadoop Project Dist POM ..................... SUCCESS [ 19.555 s]
[INFO] Apache Hadoop Maven Plugins ........................ SUCCESS [01:28 min]
[INFO] Apache Hadoop MiniKDC .............................. SUCCESS [11:00 min]
[INFO] Apache Hadoop Auth ................................. SUCCESS [03:57 min]
[INFO] Apache Hadoop Auth Examples ........................ SUCCESS [ 14.794 s]
[INFO] Apache Hadoop Common ............................... FAILURE [03:47 min]
[INFO] Apache Hadoop NFS .................................. SKIPPED
[INFO] Apache Hadoop KMS .................................. SKIPPED
[INFO] Apache Hadoop Common Project ....................... SUCCESS [  6.255 s]
......

当然,作为一名大数据开发工程师,除了知道有这回事,还要知道怎么来的。具体其实是在hadoop-common模块里面的pom.xml有定义,具体是在hadoop-2.7.3-src/hadoop-common-project/hadoop-common/pom.xml中,314-191行有对protoc的配置:

<plugins>
      <plugin>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-maven-plugins</artifactId>
        <executions>
          <execution>
            <id>version-info</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>version-info</goal>
            </goals>
            <configuration>
              <source>
                <directory>${basedir}/src/main</directory>
                <includes>
                  <include>java/**/*.java</include>
                  <include>proto/**/*.proto</include>
                </includes>
              </source>
            </configuration>
          </execution>
          <execution>
            <id>compile-protoc</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>protoc</goal>
            </goals>
            <configuration>
              <protocVersion>${protobuf.version}</protocVersion>
              <protocCommand>${protoc.path}</protocCommand>
              <imports>
                <param>${basedir}/src/main/proto</param>
              </imports>
              <source>
                <directory>${basedir}/src/main/proto</directory>
                <includes>
                  <include>HAServiceProtocol.proto</include>
                  <include>IpcConnectionContext.proto</include>
                  <include>ProtocolInfo.proto</include>
                  <include>RpcHeader.proto</include>
                  <include>ZKFCProtocol.proto</include>
                  <include>ProtobufRpcEngine.proto</include>
                  <include>Security.proto</include>
                  <include>GetUserMappingsProtocol.proto</include>
                  <include>TraceAdmin.proto</include>
                  <include>RefreshAuthorizationPolicyProtocol.proto</include>
                  <include>RefreshUserMappingsProtocol.proto</include>
                  <include>RefreshCallQueueProtocol.proto</include>
                  <include>GenericRefreshProtocol.proto</include>
                </includes>
              </source>
              <output>${project.build.directory}/generated-sources/java</output>
            </configuration>
          </execution>
          <execution>
            <id>compile-test-protoc</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>protoc</goal>
            </goals>
            <configuration>
              <protocVersion>${protobuf.version}</protocVersion>
              <protocCommand>${protoc.path}</protocCommand>
              <imports>
                <param>${basedir}/src/test/proto</param>
              </imports>
              <source>
                <directory>${basedir}/src/test/proto</directory>
                <includes>
                  <include>test.proto</include>
                  <include>test_rpc_service.proto</include>
                </includes>
              </source>
              <output>${project.build.directory}/generated-test-sources/java</output>
            </configuration>
          </execution>
        </executions>
      </plugin>

这一步的操作就是在maven编译的时候需要使用环境中的proto编译源码里面的proto文件,然后会生成rpc通信的源码。

proto编译

源码包是protobuf-2.5.0.tar.gz,需要翻墙下载,我用公司的网络是可以直接上谷歌的,不过百度一下也很多可以下载,我自己本机也有,如果实在不知道怎么找的话我单发也行

wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz

源码上传到linux解压,编译

tar xvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/apps/svr/protobuf/
make
make install

验证

我把命令配置到我的环境变量中

export PATH=/apps/svr/protobuf/:$PATH

验证

[root@zhu-91-134 yum.repos.d]#  protoc --version
libprotoc 2.5.0

单独验证的话不需要所有都重头再来,可以单独验证common模块

cd hadoop-common-project/hadoop-common && mvn package -Pdist -DskipTests -Dtar 

信息比较多,但是看到关键的成功就行

......
[INFO] Building jar: /root/hadoop-2.7.3-src/hadoop-common-project/hadoop-common/target/hadoop-common-2.7.3-javadoc.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:33 min
[INFO] Finished at: 2022-05-03T23:18:15+08:0

错误记录

error: cannot install `libprotoc.la' to a directory not ending in /usr/local/lib

这个错误其实是在我前面一次有配置过,需要执行一下make clean清理掉之前的配置

目录
相关文章
|
13天前
|
分布式计算 Hadoop 大数据
【大数据】Hadoop下载安装及伪分布式集群搭建教程
【大数据】Hadoop下载安装及伪分布式集群搭建教程
42 0
|
1月前
|
弹性计算 分布式计算 Hadoop
Linux(阿里云)安装Hadoop(详细教程+避坑)
Linux(阿里云)安装Hadoop(详细教程+避坑)
202 3
|
1月前
|
存储 分布式计算 Hadoop
【分布式计算框架】Hadoop伪分布式安装
【分布式计算框架】Hadoop伪分布式安装
13 2
|
1月前
|
分布式计算 资源调度 Hadoop
安装hadoop学习笔记
安装hadoop学习笔记
31 0
安装hadoop学习笔记
|
1月前
|
分布式计算 Hadoop 数据安全/隐私保护
现成Hadoop安装和配置,图文手把手交你
现成Hadoop安装和配置,图文手把手交你
|
1月前
|
分布式计算 Hadoop Linux
找到Hadoop的安装目录
【4月更文挑战第19天】具体的安装目录可能因您的安装方式和环境而有所不同。如果您在安装Hadoop时遵循了特定的教程或文档,建议参考该教程或文档中的安装目录信息。
77 3
|
1月前
|
分布式计算 Hadoop 大数据
[大数据] mac 史上最简单 hadoop 安装过程
[大数据] mac 史上最简单 hadoop 安装过程
|
1月前
|
资源调度
Hadoop3的安装
Hadoop3的安装
28 0
|
分布式计算 Ubuntu Hadoop
Hadoop 的安装和使用(基于Linux~Ubuntu的虚拟机)
Hadoop 的安装和使用(基于Linux~Ubuntu的虚拟机)
935 0
Hadoop 的安装和使用(基于Linux~Ubuntu的虚拟机)
|
12天前
|
分布式计算 Hadoop 分布式数据库
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
34 2

相关实验场景

更多