编译hbase-1.2.3源代码

简介: 编译hbase-1.2.3源代码.pdf 目录 目录 1 1. 约定 1 2. 安装jdk 1 3. 安装maven 1 4.
img_e25d4fb2f8de1caf41a735ec53088516.png编译hbase-1.2.3源代码.pdf

目录

目录 1

1. 约定 1

2. 安装jdk 1

3. 安装maven 1

4. 网络配置 2

4.1. eclipse 3

4.2. maven 3

5. 从hbase官网下载源代码包: 4

6. eclipse导入hbase源代码 4

7. 编译hbase-thrift 6

8. Problems opening an editor ... does not exist 10

9. hbase-common 11


1. 约定

确保机器可以正常访问Internet,如能正常访问https://repo.maven.apache.org等,如果是代理方式则需要设置好eclipsemaven的网络配置。

本文环境为64位版本Windows7jre安装目录为C:\java\jdk1.8.0_111,jdk安装目录为C:\java\jre1.8.0_111。

最好将jre安装在在jdk目录下,否则编译时会遇到“Could not find artifact jdk.tools:jdk.tools:jar”错误。将jre安装在jdk目录下的目的是使得jre的上一级存在jdklib目录。

2. 安装jdk

略!安装好后请设置环境变量JAVA_HOMEjdk的安装目录(不是javac所在的bin目录,而是bin的上一级目录)。

3. 安装maven

maven官网下载安装包(本文下载的是apache-maven-3.3.9-bin.zip):

https://maven.apache.org/download.cgi


解压后,将mavenbin目录加入到环境变量PATH中,本文对应的目录为C:\Program Files\apache-maven-3.3.9\bin。并设置环境变量M2_HOME的值为maven的安装目录,对于本文M2_HOME值为C:\Program Files\apache-maven-3.3.9


然后设置eclipse使用外部的maven,进入eclipsePreferences中按下图进行设置:

 

4. 网络配置

确保机器可以正常访问Internet,否则大量问题难以解决。如果是通过代理才能访问,则需要为eclipsemaven配置好代理。

4.1. eclipse

 

4.2. maven

编辑$HOME/.m2目录下的settings.xml,如果不存在该文件,则复制$MAVEN_HOME/conf目录下的settings.xml,然后再修改即可同。

MAVEN_HOMEmaven的安装目录,$HOME/.m2repository的默认目录,HOMEWindows用户目录,Windows7上假设用户名为mikeHOMEC:\Users\mike

假设代理服务器的地址和端口分别为:proxy.oa.com8080,则(不需要用户名或密码,则相应的值不设置即可):

    

      http-proxy

      true

      http

      

      

      proxy.oa.com

      8080

      local|127.0.0.1

        

    

      https-proxy

      true

      https

      

      

      proxy.oa.com

      8080

      local|127.0.0.1

    

5. 从hbase官网下载源代码包:

以下网站均提供hbase源代码包下载:

http://mirrors.hust.edu.cn/apache/hbase/

https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/

http://mirror.bit.edu.cn/apache/hbase/

http://apache.fayea.com/hbase/


本文下载的是hbase-1.2.3-src.tar.gz。

6. eclipse导入hbase源代码

本文使用的eclipse版本:

 


hbase-1.2.3-src.tar.gz解压,本文将其解压到目录E:\bigdata\hbase-1.2.3-src,然后以“Existing Maven Projects”方式导入:

 


 


成功导入后如下图所示:

 


maven编译hbase源代码,编译整个hbase容易遇到错误,比如编译hbase-common需要安装bashhbase-thrift、但hbase-serverhbase-client等模块不依赖bash。为简单体验,先定一个小目标:编译hbase-thrift模块:

7. 编译hbase-thrift

鼠标右击hbase-thrift,按下图进入设置界面:

 


设置界面如下图所示,并设置Goalsclean install -DskipTests(注意不是clean install,需要加上-DskipTests,否则即使勾选了Skip Tests也可能无效):

 


然后点击“Run”即开始编译!

编译过程中如遇到下面的错误,请确认是否存在目录C:\java\jre1.8.0_111/../lib,其用意是jre安装在jdk的目录下,也就是说lib需要为jdklib目录。

简单的做法是复制jdklib目录到C:\java目录下。

[ERROR] Failed to execute goal on project hbase-thrift: Could not resolve dependencies for project org.apache.hbase:hbase-thrift:jar:1.2.3: Could not find artifact jdk.tools:jdk.tools:jar:1.8 at specified path C:\java\jre1.8.0_111/../lib/tools.jar -> [Help 1]


成功后如下图所示:

 


在目录E:\bigdata\hbase-1.2.3-src\hbase-thrift\target下可以看到编译生成的jar文件:

 


然后可以编译hbase-client,如果需要编译hadoop-common则需要安装bash先,也就是得安装cygwinhttps://cygwin.com/install.html)。

建议从国内镜像安装cgywin,会快很多,可用镜像:

http://mirrors.163.com/cygwin/

http://www.cygwin.cn/pub/


选择从互联网安装,在“User URL”处输入国内镜像网址。

 


安装好cygwin后,需将cgywinbin目录加入到环境变量PATH中,并需要重启eclipse才会生效。如果未安装bash,则用同样方法编译hadoop-common时,会报如下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (generate) on project hbase-common: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "bash": CreateProcess error=2, 系统找不到指定的文件。 -> [Help 1]

8. Problems opening an editor ... does not exist

eclipse里用F3想进入某个类的某方法时,提示以下错误(Problems opening an editor Reason: [项目名] does not exist):

 


解决办法(目的是生成“.project”和“.classpath”两个eclipse需要的文件):

按下图所示,进入项目的根目录,以hbasehbase-thrift为例,如hbase-thrift所在目录为E:\bigdata\hbase-1.2.3-src\hbase-thrift,注意不是E:\bigdata\hbase-1.2.3-src,然后执行:mvn eclipse:eclipse,成功后重启eclipse上述问题即解决(mvn eclipse:eclipse的作用是将maven项目转化为eclipse项目,即生成两个eclipse导入所需的配置文件,并无其他改变,也就是生成eclipse需要的.project.classpath两个文件):

 


其它诸于hbase-clienthbase-commonh base-server等同样处理即可。

9. hbase-common

编译hbase-common如遇到下述问题:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hbase-common: Compilation failure: Compilation failure:

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[5,39] 错误: 非法转义符

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[5,30] 错误: 未结束的字符串文字

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[6,0] 错误: 需要class, interface或enum

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[6,9] 错误: 需要class, interface或enum

[ERROR] -> [Help 1]

 

打开package-info.java:

/*

 * Generated by src/saveVersion.sh

 */

@VersionAnnotation(version="1.2.3", revision="Unknown",

                         user="mooon\mike

", date="Tue Oct 25 18:02:39     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

                         srcChecksum="88f3dc17f75ffda6176faa649593b54e")

package org.apache.hadoop.hbase;

 

,可以看到问题出在“mike”后多了一个换行符,正常应当是:

/*

 * Generated by src/saveVersion.sh

 */

@VersionAnnotation(version="1.2.3", revision="Unknown",

                         user="mooon\mike", date="Tue Oct 25 18:02:39     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

                         srcChecksum="88f3dc17f75ffda6176faa649593b54e")

package org.apache.hadoop.hbase;

 

查看hadoop-commonsaveVersion.sh,部分内容如下:

unset LANG

unset LC_CTYPE

 

version=$1

outputDirectory=$2

 

pushd .

cd ..

 

user=`whoami`

date=`date`

cwd=`pwd`

 

问题就出在whoami命令返回了mooon\mike,并且mike后跟了一个换行符导致的,因此可以如下消灭多余的换行符:

unset LANG

unset LC_CTYPE

 

version=$1

outputDirectory=$2

 

pushd .

cd ..

 

user=`whoami|awk '{printf("%s",$1);}'`

date=`date`

cwd=`pwd`

 

再次编译,仍然报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hbase-common: Compilation failure

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[5,39] 错误: 非法转义符

[ERROR] -> [Help 1]

 

再次打开package-info.java:

/*

 * Generated by src/saveVersion.sh

 */

@VersionAnnotation(version="1.2.3", revision="Unknown",

                         user="mooon\mike", date="Tue Oct 25 17:59:21     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

                         srcChecksum="88f3dc17f75ffda6176faa649593b54e")

package org.apache.hadoop.hbase;

 

问题出在“mooon\mike”间的斜杠,需要将单个斜杠改成双斜杠“mooon\\mike”或者干脆去掉“mooon\”仅保留“mike”也可以。

 

再次修改saveVersion.sh,直接写死user

unset LANG

unset LC_CTYPE

 

version=$1

outputDirectory=$2

 

pushd .

cd ..

 

user=mike

date=`date`

cwd=`pwd`

 

然后再次编译hadoop-common,终于成功了:

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
SQL 监控 Java
Flink报错问题之cdc代码报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
2月前
|
Java atlas 网络安全
Flink CDC编译问题之编译atlas报错如何解决
Flink CDC编译指的是将Flink CDC源代码转换成可执行程序的过程,可能会涉及到依赖管理和环境配置等问题;本合集将介绍Flink CDC编译的步骤、常见错误及其解决办法,以确保顺利完成编译过程。
|
8月前
|
SQL Java Apache
cdh5.16 重新编译flink1.10
cdh5.16 重新编译flink1.10
66 0
HIVE3 兼容spark3.XX,编译过程
HIVE3 兼容spark3.XX,编译过程
252 0
HIVE3 兼容spark3.XX,编译过程
|
Java 分布式数据库 API
HbaseJAVA开发API导入jar包以及实现操作命令
HbaseJAVA开发API导入jar包以及实现操作命令
354 0
HbaseJAVA开发API导入jar包以及实现操作命令
|
Java 流计算
flink 1.15.2 编译生成jar文件
flink 1.15.2 编译生成jar文件
231 0
 flink 1.15.2 编译生成jar文件
|
SQL 分布式计算 资源调度
carbondata1.5.1编译
What is CarbonData? Apache CarbonData is an indexed columnar data format for fast analytics on big data platform, e.g. Apache Hadoop, Apache Spark, etc. 因为我的spark是2.3.1的版本,而最新版的carbondata1.5.1才支持,但是官网没有编译好的,需要我们自己编译,在编译的时候遇到一些问题,记录一下.
carbondata1.5.1编译
|
SQL 存储 分布式计算
Hive简介及源码编译
Hive是一个基于Hadoop的数据仓库,可以将结构化数据映射成一张表,并提供类SQL的功能,最初由Facebook提供,使用HQL作为查询接口、HDFS作为存储底层、MapReduce作为执行层,设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据,2008年facebook把Hive项目贡献给Apache。Hive提供了比较完整的SQL功能(本质是将SQL转换为MapReduce),自身最大的缺点就是执行速度慢。Hive有自身的元数据结构描述,可以使用MySql\ProstgreSql\oracle 等关系型数据库来进行存储,但请注意Hive中的所有数据都存储在HDFS中
359 0
Hive简介及源码编译
|
存储 SQL 数据采集
Hive实战UDF 外部依赖文件找不到的问题
其实这篇文章的起源是,我司有数据清洗时将ip转化为类似中国-湖北-武汉地区这种需求。由于ip服务商提供的Demo,只能在本地读取,我需要将ip库上传到HDFS分布式存储,每个计算节点再从HDFS下载到本地。 那么到底能不能直接从HDFS读取呢?跟我强哥讲了这件事后,不服输的他把肝儿都熬黑了,终于给出了解决方案。
321 0
Hive实战UDF 外部依赖文件找不到的问题