Flume-0.9.4数据插入HBase-0.96
来自: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/
下载好以后,执行如下命令:
- $ unzip flume-distribution-0.9.4-cdh4.0.0-project.zip
- $ cd flume-0.9.4-cdh4.0.0/
- $ mvn package-DskipTests
如果你没有安装thrift,或者安装了未修改pom.xml中的thrift配置,此时会显示编译失败,错误提示如下:
- [ERROR] Failed to execute goal org.apache.thrift.tools:maven-thrift-plugin:
- 0.1.10:compile (default) on project flume-core: thrift did not exit cleanly.
- Review output for more information. -> [Help 1]
此时需要安装thrift,并且修改pom.xml文件中的thrift配置,原来的配置如下:
- <plugin>
- <groupId>org.apache.thrift.tools</groupId>
- <artifactId>maven-thrift-plugin</artifactId>
- <version>0.1.10</version>
- <configuration>
- <thriftExecutable>${thrift.executable}</thriftExecutable>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- <goal>testCompile</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
此时,需要安装thrift,安装可参考《ubuntu 12.04中安装thrift-0.9.1》,安装好之后,对上面的配置修改如下:(注:/usr/local/bin/thrift是我thrift的安装目录)
- <thriftExecutable>/usr/local/bin/thrift</thriftExecutable>
配置好后,运行上面的maven编译命令,还会出现一个错误:
- [ERROR] Failed to execute goal org.apache.maven.plugins:
- maven-compiler-plugin:2.3.2:compile (default-compile) on project flume-core:
- Compilation failure: Compilation failure:
这是因为pom.xml里面的libthrift版本不对,做如下修改即可:
- <dependency>
- <groupid>org.apache.thrift</groupid>
- <artifactid>libthrift</artifactid>
- <version>0.9.1</version>
- </dependency>
继续编译打包,还是会出错,错误如下:
- [ERROR] Failed to execute goal on project flume-config-web: Could not resolve
- dependencies for project com.cloudera:flume-config-web:war:0.9.4-cdh4.0.0:
- Failure to find org.apache.hadoop:hadoop-core:jar:0.20.2-cdh3u3-SNAPSHOT in
- https://repository.cloudera.com/content/groups/public/ was cached in the local
- repository, resolution will not be reattempted until the update interval of
- com.cloudera.repository.releases has elapsed or updates are forced -> [Help 1]
很明显,还是因为包找不到,做如下修改即可:
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-core</artifactId>
- <version>0.20.2-cdh3u3</version>
- <exclusions>
- <exclusion>
- <groupId>com.cloudera.cdh</groupId>
- <artifactId>hadoop-ant</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
这次再运行打包编译命令,就可以看到如下的成功信息了:
- [INFO] Flume ............................................. SUCCESS [0.003s]
- [INFO] Flume Core ........................................ SUCCESS [12.344s]
- [INFO] Flume Master Config Web Application ............... SUCCESS [3.243s]
- [INFO] Flume Node Web .................................... SUCCESS [0.885s]
- [INFO] Flume Distribution Project ........................ SUCCESS [25.381s]
- [INFO] A log4j appender for Flume ........................ SUCCESS [0.251s]
- [INFO] Flume Hello World Plugin .......................... SUCCESS [0.133s]
- [INFO] Flume HBase Plugin ................................ SUCCESS [20:42.199s]
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
2、在第一步编译成功的基础上继续修改pom.xml文件。因为flume-0.9.4里面使用的hadoop-core,还是0.20版本,是不能直接连接hbase-0.96的,所以需要将上面的hadoop-core的依赖用下面的内容替换:
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-mapreduce-client-core</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-mapreduce-client-common</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
- <version>2.2.0</version>
- </dependency>
除此之外,还需要flume-core目录底下的pom.xml文件,将hadoop-core的依赖也修改为上面的内容。由于guava也太早,所以将guava的依赖也用下面的内容替换:
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>10.0.1</version>
- </dependency>
为了保证能插入数据到hbase-0.96里面,还需要替换flume源文件夹下的plugins/flume-plugin-hbasesink里面的hbase依赖,
将下面的内容:
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase</artifactId>
- <version>${cdh.hbase.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase</artifactId>
- <version>${cdh.hbase.version}</version>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-test</artifactId>
- <version>${cdh.hadoop.version}</version>
- <scope>test</scope>
- </dependency>
替换为:
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase-it</artifactId>
- <version>0.96.0-hadoop2</version>
- </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文件:
- <property>
- <name>flume.plugin.classes</name>
- <value>com.cloudera.flume.hbase.HBaseSink,com.cloudera.flume.hbase.Attr2HBaseEventSink,test.flume.hbase.MyHBaseSink</value>
- </property>
(注,其中MyHBaseSink是自定义的Sink类)
(2)修改${FLUME_HOME}/bin/flume-env.sh
- 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即可.
Flume-0.9.4数据插入HBase-0.96的更多相关文章
- Hbase 0.95.2介绍及下载地址
HBase是一个分布式的.面向列的开源数据库,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System) ...
- json数据写入hbase
package main.scala.com.web.zhangyong168.cn.spark.java; import org.apache.hadoop.hbase.HBaseConfigura ...
- Hbase 0.92.1集群数据迁移到新集群
老集群 hbase(main):001:0> status 4 servers, 0 dead, 0.0000 average load hbase(main):002:0> list T ...
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于单线程的模式实现的数据插入毕竟有限.通过个人实测,在我的 ...
- 大数据应用之HBase数据插入性能优化实测教程
引言: 大家在使用HBase的过程中,总是面临性能优化的问题,本文从HBase客户端参数设置的角度,研究HBase客户端数据批量插入性能优化的问题.事实胜于雄辩,数据比理论更有说服力,基于此,作者设计 ...
- 最简大数据Spark-2.1.0
0.0 前言 本文主要基于最新的Spark 2.1.0版本.阅读本文可以对Spark 2.1.0的学习过程,运行流程,关键组件,原理有所了解.文章有点长,你也可以直接阅读感兴趣的部分,但是还是建议全面 ...
- Hbase 0.92.1 Replication
原集群 服务器名称 服务 sht-sgmhadoopnn-01 Master,NameNode,JobTracker sht-sgmhadoopdn-01 RegionServer,DataNode, ...
- Hbase 0.98集群搭建的详细步骤
准备工作 Hbase的搭建是依赖于Hadoop的,Hbase的数据文件实际上存储在HDFS文件系统中,所以我们需要先搭建hadoop环境,之前的博文中已经搭建过了(详见http://www.cnblo ...
- hbase 0.98.1集群安装
本文将基于hbase 0.98.1解说其在linux集群上的安装方法,并对一些重要的设置项进行解释,本文原文链接:http://blog.csdn.net/bluishglc/article/deta ...
- 【转】Apache Kylin 2.0为大数据带来交互式的BI
本文转载自:[技术帖]Apache Kylin 2.0为大数据带来交互式的BI 编者注:Kyligence的联合创始人兼CEO Luke Han在上做题为“”的演讲. 基于Hadoop的SQL一直在被 ...
随机推荐
- C#高级编程9 第11章 Linq
Linq 1.Linq概述 列表和实体 准备数据: public class Championship { public int Year { get; set; } public string Fi ...
- InvalidateRect(转)
///===================该段是自己总结的一个小结================================= InvalidateRect()函数的作用是设置一个无效区域,并 ...
- 白光LED驱动方案的选择 TPS61043
所有专为驱动白光LED而设计的IC都提供恒定电流夕其中尽大多数是基于电感或电荷泵的解决方案9这两种解决方案各有其优缺点. 电荷泵解决方案也称为开关电容器解决方案,利用分离电容器将电源从输进端传送至输出 ...
- Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称
Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称 解决: 到项目根目录打开.setting文件夹,找到"org.eclipse.wst.common.component&q ...
- Java Net版短网址(ShortUrl)的算法及实现 待续
算法 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3) ...
- Jquery Mobile实例--利用优酷JSON接口读取视频数据
本文将介绍,如何利用JqueryMobile调用优酷API JSON接口显示视频数据. (1)注册用户接口. 首页,到 http://open.youku.com 注册一个账户,并通过验证.然后找到A ...
- 编译打包工具sbt的镜像设置
sbt可以和maven共用一个镜像,公司内部有的自然最后不过 创建文件:~/.sbt/repositories [repositories] local aliyun: http://maven.al ...
- 端口复用技术简单了解;重用端口;socket复用端口
端口复用相关点 多个应用复用端口,只有最后一个绑定的socket可以接受数据,所有socket都可以发送数据 使用端口复用技术时,所有的socket都开启端口复用,才可以实现端口复用 黑客技术,使用标 ...
- [转]聊聊技术选型 - Angular2 vs Vue2
转载:https://juejin.im/post/58cab85b44d9040069f38f7a "Come, and take choice of all my library, An ...
- [leetcode]Balanced Binary Tree @ Python
原题地址:http://oj.leetcode.com/problems/balanced-binary-tree/ 题意:判断一颗二叉树是否是平衡二叉树. 解题思路:在这道题里,平衡二叉树的定义是二 ...