来自:http://blog.csdn.net/iam333/article/details/18770977

最近由于业务需要,需要将flume的数据插入HBase-0.96,利用flume的实时日志收集,实现数据的实时存储。正如前文所 述,flume-ng即flume-1.4.0版本和hbase-0.96结合相对比较容易配置,只需要做一些相关配置,实现自己的 HbaseEventSerializer类,重新编译flume-ng-hbase-sink部分源码并打包即可。但是因为公司以前业务的日志收集使用 的flume不是flume-1.4.0版本,而是flume-0.9.4,所以为了保证对原来代码的兼容性,就需要实现flume-0.9.4与 HBase-0.96结合。经过两天的研究,和同事实现了这个功能,鉴于网上目前还缺少这样的资料,也为了后来人不再踩我们踩过的坑,所以写篇文章记录一 下。

1)编译flume-0.9.4源码

首先,需要下载flume-0.9.4的源代码。下载地址:https://repository.cloudera.com/content /repositories/releases/com/cloudera/flume-distribution/0.9.4-cdh4.0.0/

下载好以后,执行如下命令:

  1. $ unzip flume-distribution-0.9.4-cdh4.0.0-project.zip
  2. $ cd flume-0.9.4-cdh4.0.0/
  3. $ mvn package-DskipTests

如果你没有安装thrift,或者安装了未修改pom.xml中的thrift配置,此时会显示编译失败,错误提示如下:

  1. [ERROR] Failed to execute goal org.apache.thrift.tools:maven-thrift-plugin:
  2. 0.1.10:compile (default) on project flume-core: thrift did not exit cleanly.
  3. Review output for more information. -> [Help 1]

此时需要安装thrift,并且修改pom.xml文件中的thrift配置,原来的配置如下:

  1. <plugin>
  2. <groupId>org.apache.thrift.tools</groupId>
  3. <artifactId>maven-thrift-plugin</artifactId>
  4. <version>0.1.10</version>
  5. <configuration>
  6. <thriftExecutable>${thrift.executable}</thriftExecutable>
  7. </configuration>
  8. <executions>
  9. <execution>
  10. <goals>
  11. <goal>compile</goal>
  12. <goal>testCompile</goal>
  13. </goals>
  14. </execution>
  15. </executions>
  16. </plugin>

此时,需要安装thrift,安装可参考《ubuntu 12.04中安装thrift-0.9.1》,安装好之后,对上面的配置修改如下:(注:/usr/local/bin/thrift是我thrift的安装目录)

  1. <thriftExecutable>/usr/local/bin/thrift</thriftExecutable>

配置好后,运行上面的maven编译命令,还会出现一个错误:

  1. [ERROR] Failed to execute goal org.apache.maven.plugins:
  2. maven-compiler-plugin:2.3.2:compile (default-compile) on project flume-core:
  3. Compilation failure: Compilation failure:

这是因为pom.xml里面的libthrift版本不对,做如下修改即可:

  1. <dependency>
  2. <groupid>org.apache.thrift</groupid>
  3. <artifactid>libthrift</artifactid>
  4. <version>0.9.1</version>
  5. </dependency>

继续编译打包,还是会出错,错误如下:

  1. [ERROR] Failed to execute goal on project flume-config-web: Could not resolve
  2. dependencies for project com.cloudera:flume-config-web:war:0.9.4-cdh4.0.0:
  3. Failure to find org.apache.hadoop:hadoop-core:jar:0.20.2-cdh3u3-SNAPSHOT in
  4. https://repository.cloudera.com/content/groups/public/ was cached in the local
  5. repository, resolution will not be reattempted until the update interval of
  6. com.cloudera.repository.releases has elapsed or updates are forced -> [Help 1]

很明显,还是因为包找不到,做如下修改即可:

  1. <dependency>
  2. <groupId>org.apache.hadoop</groupId>
  3. <artifactId>hadoop-core</artifactId>
  4. <version>0.20.2-cdh3u3</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>com.cloudera.cdh</groupId>
  8. <artifactId>hadoop-ant</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>

这次再运行打包编译命令,就可以看到如下的成功信息了:

  1. [INFO] Flume ............................................. SUCCESS [0.003s]
  2. [INFO] Flume Core ........................................ SUCCESS [12.344s]
  3. [INFO] Flume Master Config Web Application ............... SUCCESS [3.243s]
  4. [INFO] Flume Node Web .................................... SUCCESS [0.885s]
  5. [INFO] Flume Distribution Project ........................ SUCCESS [25.381s]
  6. [INFO] A log4j appender for Flume ........................ SUCCESS [0.251s]
  7. [INFO] Flume Hello World Plugin .......................... SUCCESS [0.133s]
  8. [INFO] Flume HBase Plugin ................................ SUCCESS [20:42.199s]
  9. [INFO] ------------------------------------------------------------------------
  10. [INFO] BUILD SUCCESS
  11. [INFO] ------------------------------------------------------------------------

2、在第一步编译成功的基础上继续修改pom.xml文件。因为flume-0.9.4里面使用的hadoop-core,还是0.20版本,是不能直接连接hbase-0.96的,所以需要将上面的hadoop-core的依赖用下面的内容替换:

  1. <dependency>
  2. <groupId>org.apache.hadoop</groupId>
  3. <artifactId>hadoop-mapreduce-client-core</artifactId>
  4. <version>2.2.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.hadoop</groupId>
  8. <artifactId>hadoop-common</artifactId>
  9. <version>2.2.0</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.hadoop</groupId>
  13. <artifactId>hadoop-mapreduce-client-common</artifactId>
  14. <version>2.2.0</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.hadoop</groupId>
  18. <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
  19. <version>2.2.0</version>
  20. </dependency>

除此之外,还需要flume-core目录底下的pom.xml文件,将hadoop-core的依赖也修改为上面的内容。由于guava也太早,所以将guava的依赖也用下面的内容替换:

  1. <dependency>
  2. <groupId>com.google.guava</groupId>
  3. <artifactId>guava</artifactId>
  4. <version>10.0.1</version>
  5. </dependency>

为了保证能插入数据到hbase-0.96里面,还需要替换flume源文件夹下的plugins/flume-plugin-hbasesink里面的hbase依赖,

将下面的内容:

  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>

替换为:

  1. <dependency>
  2. <groupId>org.apache.hbase</groupId>
  3. <artifactId>hbase-it</artifactId>
  4. <version>0.96.0-hadoop2</version>
  5. </dependency>

(注:由于本文的maven仓库使用的是公司maven仓库,如果在编译过程中找不到上述包,可以修改flume源码目录下的pom.xml文件中的<repository>部分,加上apache hadoop和hbase的官方maven仓库地址)

3、修改flume-0.9.4的flume-core里面的java源码部分,主要修改的内容为 FlushingSequenceFileWriter.java、RawSequenceFileWriter.java和 SequenceFileOutputFormat.java,使用新版本的hadoop-2.2.0中的相应方法修改。(如果不知道如何修改,可以联系 我。)

至此,重新运行maven的编译打包命令,如果出现第一步最后的成功信息,证明修改成功。

4、修改flume启动脚本。仔细分析${FLUME_HOME}/bin/flume会发现,该文件里面有很长一段是加载旧版本的hadoop依赖包,所以应该将其注释掉。并将该部分替换为:

CLASSPATH="hadoop的lib包路径,hbase的lib包路径“。

5、整合hbase-0.96。

在flume-src\plugins\flume-plugin-hbasesink\src\main\java里面的添加自己的类。如果需要 和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文件。

6、如何配Hbase sink。

(1)在Flume master机器上修改${FLUME_HOME}/conf/flume-site.xml文件:

  1. <property>
  2. <name>flume.plugin.classes</name>
  3. <value>com.cloudera.flume.hbase.HBaseSink,com.cloudera.flume.hbase.Attr2HBaseEventSink,test.flume.hbase.MyHBaseSink</value>
  4. </property>

(注,其中MyHBaseSink是自定义的Sink类)

(2)修改${FLUME_HOME}/bin/flume-env.sh

  1. export FLUME_CLASSPATH=/home/q/flume-0.9.4-cdh3u3/plugins/flume-plugin-hbasesink-0.9.4-cdh3u3.jar

其中的flume-plugin-hbasesink-0.9.4-cdh3u3.jar包就是步骤5中打包好的jar文件。

(3)重启Flume master、agent等,这样你就可以在master:35871/masterext.jsp中的Sinks表里面看到你自己的Hbase sink。
(4)将collector中的sink那项配置成自定义的sink即可.

转载于:https://www.cnblogs.com/sunxucool/p/3630099.html

Flume-0.9.4数据插入HBase-0.96相关推荐

  1. phoenix 3.1 + hbase 0.94.21 的安装和使用

    Apache Phoenix 是 HBase 的 SQL 驱动.Phoenix 使得 HBase 支持通过 JDBC 的方式进行访问,并将你的 SQL 查询转成 HBase 的扫描和相应的动作. 兼容 ...

  2. Eclipse + Hadoop 2.9.2+ Hbase 0.98.11 开发环境进行大数据编程

    环境搭建 Eclipse + Hadoop 2.9.2 下载Hadoop 2.9.2 :https://archive.apache.org/dist/hadoop/core/hadoop-2.9.2 ...

  3. Hive 0.13.1 和HBase 0.98.6.1整合

    A:安装hadoop和HBase 参考:http://blog.csdn.net/wind520/article/details/39856353 B:安装Hive 1:下载:wget http:// ...

  4. 大数据新手的0基础学习路线,从菜鸟到高手的成长之路

    大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家 ...

  5. Hbase1.2数据导入2.0

    场景:现有一批之前导出的数据,发现2.0版本hbck工具更新,无法直接导入,跨机房使用export/import方式需要重新外网传输数据比较耗时,现搭建临时hbase版本1.2,在同机房进行expor ...

  6. hbase插入数据语句_记一次 spark thriftserver 插入数据到hbase 的异常

    Spark2.4.3 Hbase1.2.6 Hive2.3.7 Hadoop2.7.7 $SPARK_HOME/jars 添加如下jar ln -s $APP_PATH/hive/lib/mysql- ...

  7. java实现hbase表创建、数据插入、删除表

    近日查看了相关资料后,梳理了一下用java实现hbase的表创建.数据插入.删除表,代码如下: 1.需要的jar包: commons-codec-1.4.jar commons-logging-1.0 ...

  8. hbase开发环境搭建及运行hbase小实例(HBase 0.98.3新api)

    问题导读: 1.如何搭建hbase开发环境? 2.HTableDescriptor初始化产生了那些变化? 3.eclipse如何连接hbase集群? hbase开发环境搭建与hadoop开发环境搭建差 ...

  9. HBase 0.98 分布式集群安装详解

    概述 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtab ...

  10. Hadoop 2.4.1+HBase 0.98.6.1 分布式安装

    A: 先配置Hadoop2.4.1的集群环境 参考:http://blog.csdn.net/wind520/article/details/38317937 B:配置HBase 参考:http:// ...

最新文章

  1. 西安python工资怎么样-python西安薪资
  2. 【vue】介绍一个vuejs 和 element 搭建的一个后台管理界面
  3. 【Matlab】dde23解时滞时延微分方程
  4. 系统调用的实现(与errno的设置)
  5. ubuntu下面使用stata进行线性回归
  6. CSS 中文字体的英文名称对照
  7. Hibernate(三) - hibernate 表操作-多对多配置
  8. 用MDT 2012为企业部署windows 7(七)--创建标准操作系统部署任务序列
  9. Android基于UDP的局域网聊天通信
  10. C# aspx 数据绑定集中(待修改)
  11. c语言井字棋二维数组,【C语言】简单实现三子棋(井字棋)小游戏
  12. 结构建模设计——Solidworks软件之绘制一个手机支架模型,使用3D打印技术输出实物的全流程实战
  13. SharePoint 网站登录不上,3次输入用户名/密码白页
  14. iPhone升级系统 死机了怎么办
  15. DataGridView.BorderStyle 属性
  16. Example 3, 4 of variadic templates
  17. python做马尔科夫模型预测法_python 日常笔记 hmmlearn 隐性马尔科夫模型案例分析...
  18. 实验室气体安全与环境监控系统
  19. Springboot多数据源问题之 Could not resolve type alias ‘Blog‘.
  20. HTML-12:超链接锚点定位

热门文章

  1. 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
  2. nginx php 大小写问题,Nginx实现url请求不区分大小写
  3. jekins创建ssh_Jenkins 编译后使用SSH发布详解
  4. redissession有容量上限吗_空气炸锅值得买吗?
  5. php gzipstream,c# – 在WebRequest中发送gzip数据?
  6. 底部固定菜单_捡起一只妲己团团,附送一个同校固定队友!还有这种好事?
  7. 工业机器视觉系统相机如何选型?(理论篇—3)
  8. 【Pandas库】(3) DataFrame的创建方法及基本操作
  9. 剑指offer: 面试题03. 数组中重复的数字
  10. 【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看