Hadoop2.x介绍与源码编译

2023-12-04 08:18
文章标签 编译 源码 介绍 hadoop2

本文主要是介绍Hadoop2.x介绍与源码编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、Hadoop 项目的四大模块
  1. Hadoop Common: The common utilities that support the other Hadoop modules.
  2. Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  3. Hadoop YARN: A framework for job scheduling and cluster resource management.
  4. Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
2、YARN的操作系统-- Hortonworks Hadoop 商业版本的)

  1. 部署在YARN的应用,分配资源
  2. 管理资源
  3. JOB/APPLICATION 调度

3、技能

  1. 云计算Hadoop 2.x
  2. 服务总线SOA/OSBDubble
  3. 全文检索,LucunceSolrNutch

4编译Hadoop 2.x 源码
4.1、环境:

1Linux 64 操作系统,CentOS 6.4 版本,VMWare 搭建的虚拟机

2虚拟机可以联网

4.2、官方编译说明:

解压命令:tar -zxvf hadoop-2.2.0-src.tar.gz 

之后进入到解压文件夹下,可以查看BUILDING.txt文件, more BUILDING.txt ,向下翻页是空格键,其中内容如下

Requirements:

* Unix System

* JDK 1.6+

* Maven 3.0 or later

* Findbugs 1.3.9 (if running findbugs)

* ProtocolBuffer 2.5.0

* CMake 2.6 or newer (if compiling native code)

* Internet connection for first build (to fetch all Maven and Hadoop dependencies)

----------------------------------------------------------------------------------

Maven main modules:

  hadoop (Main Hadoop project)

         - hadoop-project (Parent POM for all Hadoop Maven modules. )

                                    (All plugins & dependencies versions are defined here.)

         - hadoop-project-dist (Parent POM for modules that generate distributions.)

         - hadoop-annotations (Generates the Hadoop doclet used to generated the Java

docs)

         - hadoop-assemblies (Maven assemblies used by the different modules)

         - hadoop-common-project (Hadoop Common)

         - hadoop-hdfs-project (Hadoop HDFS)

         - hadoop-mapreduce-project (Hadoop MapReduce)

         - hadoop-tools (Hadoop tools like Streaming, Distcp, etc.)

         - hadoop-dist (Hadoop distribution assembler)

----------------------------------------------------------------------------------

在编译完成之后,可以查看Hadoop的版本信息

libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 
[root@centos native]# pwd 
/opt/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/lib/native 
[root@centos native]#

4.3、编译前准备之安装依赖包

安装linux系统包

  • yum install autoconf automake libtool cmake
  • yum install ncurses-devel
  • yum install openssl-devel
  • yum install lzo-devel zlib-devel gcc gcc-c++

安装Maven

  • 下载:apache-maven-3.0.5-bin.tar.gz
  • 解压:tar -zxvf apache-maven-3.0.5-bin.tar.gz
  • 设置环境变量,打开/etc/profile文件,添加
    • export MAVEN_HOME=/opt/apache-maven-3.0.5
    • export PATH=$PATH:$MAVEN_HOME/bin
  • 执行命令使之生效:source /etc/profile或者./etc/profile
  • 验证:mvn -v 
安装protobuf
  • 解压:tar -zxvf protobuf-2.5.0.tar.gz 
  • 进入安装目录,进行配置,执行命令,./configure
  • 安装命令:make & make check & make install
  • 验证:protoc --version

安装findbugs
  • 解压:tar -zxvf findbugs.tar.gz 
  • 设置环境变量:
    • export export FINDBUGS_HOME=/opt/findbugs-3.0.0
    • export PATH=$PATH:$FINDBUGS_HOME/bin
  • 验证命令:findbugs -version
如果出现信息:java lang unsupportedclassversionerror unsupported major minor version 51.0,那么是因为你采用的jdk为open jdk,直接将其卸载,安装Sun公司原装的JDK即可,参考:
http://www.blogjava.net/Jay2009/archive/2009/04/23/267108.html
http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html

如果javac命令无法识别
[ root@centos ~]# javac 
Error: could not find libjava.so 
Error: could not find Java 2 Runtime Environment.
但是当我这样运行的时候:/usr/lib/jvm/jdk1.7.0_71/bin/javac -version,一切正常,说明可能是旧版jre影响,那么删除open-jre,安装Sun公司Jre
下载了rpm包之后,rpm -ivh jre-7u71-linux-x64.rpm,安装完成之后
[ root@centos ~]# java -version 
java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) 
[ root@centos ~]# javac -version 
javac 1.7.0_71 
[ root@centos ~]#

注意
Hadoop是Java写的,他无法使用Linux预安装的OpenJDK,因此安装hadoop前需要先安装JDK(1.6以上)
另外Hadoop2.2.0存在一个bug
需要修改/opt/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/pom.xml中的内容(添加黑体部分):
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
   <artifactId>jetty-util</artifactId>
      <scope>test</scope>
    </dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
4.4、如何编译

进入到Hadoop源码目录下/opt/hadoop-2.2.0-src,运行红色字体[可选项]:

Building distributions:

Create binary distribution without native code and without documentation:

  $ mvn package -Pdist -DskipTests -Dtar

Create binary distribution with native code and with documentation:

  $ mvn package -Pdist,native,docs -DskipTests -Dtar

Create source distribution:

  $ mvn package -Psrc -DskipTests

Create source and binary distributions with native code and documentation:

  $ mvn -e -X package -Pdist,native[,docs,src] -DskipTests -Dtar

Create a local staging version of the website (in /tmp/hadoop-site)

  $ mvn clean site; mvn site:stage -DstagingDirectory=/tmp/hadoop-site

4.5、编译之前,可能需要配置MAVEN国内镜像配置

  1. 进入安装目录 /opt/modules/apache-maven-3.0.5/conf,编辑 settings.xml 文件

修改<mirrors>内容:

<mirror>  

<id>nexus-osc</id>  

<mirrorOf>*</mirrorOf>  

<name>Nexus osc</name>  

<url>http://maven.oschina.net/content/groups/public/</url>  

</mirror> 

修改<profiles>内容:

<profile>  

<id>jdk-1.6</id>  

<activation>  

<jdk>1.6</jdk>  

</activation>  

<repositories>  

<repository>  

<id>nexus</id>  

<name>local private nexus</name>  

<url>http://maven.oschina.net/content/groups/public/</url>  

<releases>  

<enabled>true</enabled>  

</releases>  

<snapshots>  

<enabled>false</enabled>  

</snapshots>  

</repository>  

</repositories> 

<pluginRepositories>  

<pluginRepository>  

<id>nexus</id>  

<name>local private nexus</name>  

<url>http://maven.oschina.net/content/groups/public/</url>  

<releases>  

<enabled>true</enabled>  

</releases>  

<snapshots>  

<enabled>false</enabled>  

</snapshots>  

</pluginRepository>  

</pluginRepositories>  

</profile>

  1. 复制配置

        将该配置文件复制到用户目录,使得每次对maven创建时,都采用该配置

查看用户目录/home/hadoop】是否存在【.m2】文件夹,如没有,则创建

$ cd /home/hadoop

$ mkdir .m2

复制文件

$ cp /opt/modules/apache-maven-3.0.5/conf/settings.xml ~/.m2/

4.6、配置DNS 

修改: vi /etc/resolv.conf      

nameserver 8.8.8.8

nameserver 8.8.4.4

4.7、将Hadoop Project 导入到Eclipse

Importing projects to eclipse

When you import the project to eclipse, install hadoop-maven-plugins at first.

  $ cd hadoop-maven-plugins

  $ mvn install

Then, generate eclipse project files.

  $ mvn eclipse:eclipse -DskipTests

At last, import to eclipse by specifying the root directory of the project via

[File] > [Import] > [Existing Projects into Workspace].


注意:

编译过程中如果出现任何有关jdk或者jre的问题:JAVA_HOME environment variable is not set.

参看
http://www.cnblogs.com/RandyS/p/3909717.html
到 /etc/profile 最后,然后 . /etc/profile或者source /etc/profile使设置生效。

如果出现bash: javac: command not found
那么执行
yum install java-devel即可,这是因为:http://stackoverflow.com/questions/5407703/javac-command-not-found

编译过程中碰到的其他问题: http://blog.csdn.net/xichenguan/article/details/17636905

出现错误:Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (site) on project hadoop-hdfs: An Ant BuildException has occured: input file /opt/hadoop-2.2.0-src/hadoop-hdfs-project/hadoop-hdfs/target/findbugsXml.xml does not exist
解决办法:
cd ~/hadoop- 2.2 . 0 -src/ mvn clean package -Pdist,native,docs -DskipTests -Dtar  // 编译中途出错修正后可从指定点开始继续编译,修改最后一个参数即可。如出现hadoop-hdfs/target/findbugsXml.xml does not exist则从该命令删除docs参数再运行mvn package -Pdist,native -DskipTests -Dtar -rf :hadoop-pipes

build成功之后,进入到/opt/hadoop-2.2.0-src/hadoop-dist/target路径下查看hadoop-2.2.0.tar.gz就是编译完成之后的tar包

出现错误:Could not find goal 'protoc' in plugin org.apache.hadoop:hadoop-maven-plugins:2.2.0 among available 
解决办法:在/etc/profile中加入如下内容,之后source /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/protobuf/lib
export PATH=$PATH:/usr/local/bin
通常建议安装到/usr/local目录下,执行configure时,指定--prefix=/usr/local/protobuf即可,如果出现错误,那么make clean一下,之后再进行操作

我的/etc/profile文件内容:
export MAVEN_HOME=/opt/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_71/
export JRE_HOME=/usr/lib/jvm/jdk1.7.0_71/jre
export ANT_HOME=/usr/lib/jvm/apache-ant/
export CLASSPATH=.:$JRE_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin
export FINDBUGS_HOME=/opt/findbugs-3.0.0
export PATH=$PATH:$FINDBUGS_HOME/bin:/opt/protoc/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/protoc/lib
第一次编译结果:

第二次编译结果:


这篇关于Hadoop2.x介绍与源码编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452775

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO