Flume-0.9.4和Hbase-0.96整合实践

2024-05-03 23:32
文章标签 实践 整合 0.9 flume hbase 0.96

本文主要是介绍Flume-0.9.4和Hbase-0.96整合实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读: 
Flume-1.4.0和Hbase-0.96.0整合还是比较简单的,那么Flume-0.9.4和Hbase-0.96整合比Flume-1.4.0和Hbase-0.96整合麻烦多了!不是随便几个配置就能搞定的,里面涉及到修改Flume和Hadoop的源码。

此篇,可以作为学习篇,不建议做如此复杂的配置。建议参考Flume-1.4.0和Hbase-0.96.0整合实践

1、修改Flume-src根目录下的pom.xml文件中的部分依赖版本

(1)、Hadoop2x里面已经没有hadoop-core jar包,所以修改Hadoop的依赖包的版本:

  1. <dependency>
  2.         <groupId>org.apache.hadoop</groupId>
  3.         <artifactId>hadoop-core</artifactId>
  4.         <version>${cdh.hadoop.version}</version>
  5. </dependency>

  6. 修改为

  7. <dependency>
  8.             <groupId>org.apache.hadoop</groupId>
  9.             <artifactId>hadoop-mapreduce-client-core</artifactId>
  10.             <version>2.2.0</version>
  11. </dependency>
  12. <dependency>
  13.             <groupId>org.apache.hadoop</groupId>
  14.             <artifactId>hadoop-common</artifactId>
  15.             <version>2.2.0</version>
  16. </dependency>
  17. <dependency>
  18.             <groupId>org.apache.hadoop</groupId>
  19.             <artifactId>hadoop-mapreduce-client-common</artifactId>
  20.             <version>2.2.0</version>
  21. </dependency>
  22. <dependency>
  23.             <groupId>org.apache.hadoop</groupId>
  24.             <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
  25.             <version>2.2.0</version>
  26. </dependency>
复制代码


(2)、修改Guava的版本
  1. <dependency>
  2.         <groupId>com.google.guava</groupId>
  3.         <artifactId>guava</artifactId>
  4.         <version>r07</version>
  5. </dependency>

  6. 修改为

  7. <dependency>
  8.         <groupId>com.google.guava</groupId>
  9.         <artifactId>guava</artifactId>
  10.         <version>10.0.1</version>
  11. </dependency>
复制代码


(3)、修改flume-src\flume-core\pom.xml里面的以下配置
  1. <dependency>
  2.       <groupId>org.apache.hadoop</groupId>
  3.       <artifactId>hadoop-core</artifactId>
  4. </dependency>

  5. 修改为

  6. <dependency>
  7.             <groupId>org.apache.hadoop</groupId>
  8.             <artifactId>hadoop-mapreduce-client-core</artifactId>
  9.             <version>2.2.0</version>
  10. </dependency>
  11. <dependency>
  12.             <groupId>org.apache.hadoop</groupId>
  13.             <artifactId>hadoop-common</artifactId>
  14.             <version>2.2.0</version>
  15. </dependency>
  16. <dependency>
  17.             <groupId>org.apache.hadoop</groupId>
  18.             <artifactId>hadoop-mapreduce-client-common</artifactId>
  19.             <version>2.2.0</version>
  20. </dependency>
  21. <dependency>
  22.             <groupId>org.apache.hadoop</groupId>
  23.             <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
  24.             <version>2.2.0</version>
  25. </dependency>
复制代码


(4)、修改flume-src\plugins\flume-plugin-hbasesink\pom.xml里面的以下配置



  1. <dependency>
  2.       <groupId>org.apache.hbase</groupId>
  3.       <artifactId>hbase</artifactId>
  4.       <version>${cdh.hbase.version}</version>
  5. </dependency>

  6. <dependency>
  7.       <groupId>org.apache.hbase</groupId>
  8.       <artifactId>hbase</artifactId>
  9.       <version>${cdh.hbase.version}</version>
  10.       <classifier>tests</classifier>
  11.       <scope>test</scope>
  12. </dependency>

  13. <dependency>
  14.       <groupId>org.apache.hadoop</groupId>
  15.       <artifactId>hadoop-test</artifactId>
  16.       <version>${cdh.hadoop.version}</version>
  17.       <scope>test</scope>
  18. </dependency>

  19. 修改为

  20. <dependency>
  21.           <groupId>org.apache.hbase</groupId>
  22.           <artifactId>hbase-it</artifactId>
  23.           <version>0.96.0-hadoop2</version>
  24. </dependency>
复制代码

 2、修改flume-core\src\main\java\org\apache\hadoop\io\FlushingSequenceFileWriter.java和RawSequenceFileWriter.java两个java类
  因为在步骤一中我们用新版本的Hadoop替换了旧版本的Hadoop,而新版本Hadoop中的org.apache.hadoop.io.SequenceFile.Writer类和旧版本的org.apache.hadoop.io.SequenceFile.Writer类有些不一样。所以导致了FlushingSequenceFileWriter.java和RawSequenceFileWriter.java两个java类出现了部分的错误,解决方法如下:
  (1)、需要修改Hadoop-2.2.0源码中的hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\SequenceFile.java类,在Writer类里面添加默认的构造函数:

  1. Writer(){
  2.     this.compress = CompressionType.NONE;
  3. }
复制代码

然后重新编译hadoop-common-project工程,将编译后的hadoop-common-2.2.0.jar替换之前的hadoop-common-2.2.0.jar
  (2)、修改FlushingSequenceFileWriter.java和RawSequenceFileWriter.java
  这两个类中有错误,请用新版本Hadoop的相应API替换掉旧版本Hadoop的API,具体怎么修改,这就不不说了,如有需要的同学,可以邮件联系我( wyphao.2007@163.com
  (3)、修改com.cloudera.flume.handlers.seqfile中的SequenceFileOutputFormat类修改如下:

  1. this(SequenceFile.getCompressionType(FlumeConfiguration.get()),
  2.         new DefaultCodec());

  3. 修改为

  4. this(SequenceFile.getDefaultCompressionType(FlumeConfiguration.get()),
  5.               new DefaultCodec());

  6. CompressionType compressionType = SequenceFile.getCompressionType(conf);

  7. 修改为

  8. CompressionType compressionType = SequenceFile.getDefaultCompressionType(conf);
复制代码

3、重新编译Flume源码
  重新编译Flume源码(如何编译Flume源码?请参见本博客的《Flume-0.9.4源码编译及一些编译出错解决方法》),并用编译之后的flume-core-0.9.4-cdh3u3.jar替换${FLUME_HOME}/lib中的flume-core-0.9.4-cdh3u3.jar类。删掉${FLUME_HOME}/lib/hadoop-core-0.20.2-cdh3u3.jar等有关Hadoop旧版本的包。

4、修改${FLUME_HOME}/bin/flume启动脚本
仔细分析${FLUME_HOME}/bin/flume脚本,你会发现如下代码:

  1. # put hadoop conf dir in classpath to include Hadoop
  2. # core-site.xml/hdfs-site.xml
  3. if [ -n "${HADOOP_CONF_DIR}" ]; then
  4.      CLASSPATH="${CLASSPATH}:${HADOOP_CONF_DIR}"
  5. elif [ -n "${HADOOP_HOME}" ] ; then
  6.      CLASSPATH="${CLASSPATH}:${HADOOP_HOME}/conf"
  7. elif [ -e "/usr/lib/hadoop/conf" ] ; then
  8.      # if neither is present see if the CDH dir exists
  9.      CLASSPATH="${CLASSPATH}:/usr/lib/hadoop/conf";
  10.      HADOOP_HOME="/usr/lib/hadoop"
  11. fi  # otherwise give up

  12. # try to load the hadoop core jars
  13. HADOOP_CORE_FOUND=false
  14. while true; do
  15.      if [ -n "$HADOOP_HOME" ]; then
  16.          HADCOREJARS=`find ${HADOOP_HOME}/hadoop-core*.jar ||  \
  17.                find ${HADOOP_HOME}/lib/hadoop-core*.jar ||  true`
  18.          if [ -n "$HADCOREJARS" ]; then
  19.              HADOOP_CORE_FOUND=true
  20.              CLASSPATH="$CLASSPATH:${HADCOREJARS}"
  21.              break;
  22.          fi
  23.      fi

  24.      HADCOREJARS=`find ./lib/hadoop-core*.jar 2> /dev/null || true`
  25.      if [ -n "$HADCOREJARS" ]; then
  26.          # if this is the dev environment then hadoop jar will
  27.          # get added as part of ./lib (below)
  28.          break
  29.      fi

  30.      # core jars may be missing, we'll check for this below
  31.      break
  32. done
复制代码

你会发现,这是Flume加载Hadoop旧版本的依赖包,在新版本的Hadoop根本就没有${HADOOP_HOME}/conf等文件夹,所以会出现Flume不能加载对新版本Hadoop的依赖。这里教你用最简单的方法来实现对新版本的Hbase和Hadoop的依赖,在${FLUME_HOME}/bin/flume脚本里面加入下面的CLASSPATH依赖:
  1. CLASSPATH="/home/q/hbase/hbase-0.96.0-hadoop2/lib/*"
复制代码
请注意hbase-0.96.0-hadoop2里面对hadoop的依赖,hbase-0.96.0-hadoop2里面对Hadoop的依赖包是2.1.0,用上面编译好的hadoop-common-2.2.0.jar替换${HBASE_HOME}/lib里面的hadoop-common-2.1.0.jar

5、如何和Hbase-0.96整合
  在flume-src\plugins\flume-plugin-hbasesink\src\main\java里面的添加自己的类(当然你完全可以自己创建一个新的maven工程)。如果需要和Hbase整合,必须继承EventSink.Base类,重写里面的方法(可以参照flume-src\plugins\flume-plugin-hbasesink\src\main\java\com\cloudera\flume\hbase\Attr2HBaseEventSink.java),写完之后需要重新编译flume-src\plugins\flume-plugin-hbasesink底下的类,打包成jar文件。然后将你写好的Hbase sink注册到Flume中。


这篇关于Flume-0.9.4和Hbase-0.96整合实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

springboot整合TDengine全过程

《springboot整合TDengine全过程》:本文主要介绍springboot整合TDengine全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境准备JDBC-JNI方式准备依赖实体类Mapper配置类测试类RESTful方式实体类配置类测试类总结

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基