当前位置: 首页 > 编程日记 > 正文

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/

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

  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

相关文章:

卡壳了~~~ 解决了~~~My Site创建成功了.....

没想到解决这个问题如此简单就是把SharePoint Products and Technologies Configuration Wizard运行一遍&#xff0c;一切都修复了&#xff0c;哈哈~~~快下班了&#xff0c;也没过多测试&#xff0c;似乎没有损失什么数据。 转载于:https://www.cnblogs.com/booolee/archive/20…

Linux 配置开机自启 和 修改环境变量

【 操作系统 Centos7 】 一&#xff0c;开机自动启动的配置 1&#xff0c;赋予 /etc/rc.local 的执行权限 > chmod x /etc/rc.local 2&#xff0c;在 /etc/rc.local 在文件末尾编写要执行的脚本 3&#xff0c;注意写在这个文件中的脚本不要使用相对路径 二&#xff0c;环境变…

无线传感器网络WSN技术、协议、距离汇总

技术协议距离WMANIEEE802.16五公里内WLANIEEE802.11几公里内WPAN蓝牙IEEE802.15.4 紫蜂IEEE802.15.110m内

IISApp -a查找对应的AppPool

cmd下运行IISApp -a可以查找出来每个w3wp.exe对应的应用程序池 [name:IISApp To AppPool][tags:IIS] [From AlphaWu.Blog]转载于:https://www.cnblogs.com/AlphaWu/archive/2006/11/27/574390.html

ZKFC服务异常:Parent znode does not exist.

昨天搭建了一套hadoop集群&#xff0c;今天发现两个namenode的zkfc服务起不来&#xff0c;在zkfc日志中发现如下所示的信息&#xff1a;Unable to start failover controller. Parent znode does not exist../bin/zkCli.sh -server master1ls /没有看到/hadoop-ha解决方法&…

数学工具WZgrapher

之前说了mathGV&#xff0c;其实还有一个不错类似软件WZgrapher&#xff0c;不仅可以画函数图&#xff0c;还可以微积分。 截图如下&#xff1a; 转载于:https://www.cnblogs.com/CodeWorkerLiMing/p/3632778.html

用ASP.NET建立一个在线RSS新闻聚合器(3)

显示特定聚合摘要的新闻项   我们面临的下一个任务是创建 DisplayNewsItems.aspx 页面。这个页面会以链接的形式显示所选聚合摘要的新闻项标题&#xff0c;当点击标题时&#xff0c;新闻的内容就会显示在右下部分的框架中。要完成这一任务&#xff0c;我们会面临以下两个主要…

mysql中在表中insert数据时,有重复主键id时,变成update

MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法 例如&#xff1a; idnamesexage 1kathymale23 2Javerfamale32 3Mikemale19方法一&#xff1a; INSERT INTO kk (id, name,sex) VALUES(1,kara,ssss) ON DUPLICATE KEY UPDATE id1;方法二&#xff1a; REPLACE…

ECS 实例网络带宽

1. 带宽是否独享&#xff1f; 是独享。 2. 带宽单线还是双线&#xff0c;电信还是网通&#xff1f; 多线 BGP&#xff08;中国电信、联通、移动、教育网等&#xff09;接入&#xff0c;确保全国用户访问畅通。 3. 5 Mbps 带宽怎么理解&#xff1f; 5 Mbps 带宽是指带宽总出口是…

bootstrap-less源码分析:容器

流体容器和固定容器的公共样式 .container-fixed(gutter: grid-gutter-width) {//grid-gutter-width为默认取值&#xff0c;值为30px margin-right: auto; margin-left: auto; padding-left: floor((gutter / 2));//向下取整 padding-right: ceil((gutter / 2)); &:extend(…

Windows7防火墙服务无法启用怎么办

Windows7防火墙服务无法启用怎么办 点击windows 7控制面板中防火墙的“推荐配置”没有反应&#xff0c;打开“服务”&#xff0c;无法启动windows firewall&#xff0c;并报错。问题&#xff1a; 1.点击windows 7控制面板中防火墙的“推荐配置”没有反应 2.打开“服务”&#x…

在首次发布三周之后,MLflow迎来了0.2版本

在今年的SparkAI峰会上&#xff0c;MLflow团队推出了MLflow&#xff0c;一个开源的用于简化机器学习生命周期的平台。从首次发布到现在的三周时间里&#xff0c;已经有很多数据科学家和工程师对使用MLflow和为MLflow贡献代码感兴趣。MLFlow的GitHub仓库已经有180个分支&#xf…

CoCreateInstance 出错 ,返回 -2147221164 CLASS_NOT_REGISTERED ,原因

今天发现有台机子执行 CoCreateInstance 总是不成功&#xff0c;而在其他的很多机子上是没有问题的。 追了半天发现这台机子的注册表权限不对。HKEY_CLASSES_ROOT的权限只有Everyone&#xff0c;少了System&#xff0c;以及其他的几个。 加上System之后就可以了。不知道Everyon…

bootstrap-less源码分析:行和列

一、行 grid.less文件中有关行的全部源码 .row { .make-row();//调用 }//进mixin/grid.less找到行的定义 .make-row(gutter: grid-gutter-width) { margin-left: ceil((gutter / -2));//负的槽宽的一半 -15 margin-right: floor((gutter / -2)); &:extend(.clearfix all…

博客园,我来了~

希望在这里留下我美好的回忆~ 转载于:https://www.cnblogs.com/wangzhigang/p/3638400.html

ARE YOU THE ONE?

总觉得&#xff0c;特定环境下&#xff0c;他或者她&#xff0c;这个称呼是有一些暧昧的。比如我的前同事M&#xff0c;跟她男朋友刚相亲认识的时候&#xff0c;跟我说起&#xff0c;总是那个人那个人的称呼&#xff0c;一副局外人的架势。后来&#xff0c;他们熟悉了&#xff…

Windows和Linux的编译理解

Windows一般编译出来的x86的软件&#xff0c;就是只能在x86的系统上才能运行&#xff0c;同理&#xff0c;在x64系统上也是一样的道理。 Linux利用gcc编译器编译&#xff0c;可以在Linux上面运行&#xff0c;但是想要在嵌入式系统上运行的话&#xff0c;需要在Linux上安装相应的…

安卓环境搭建 unable to access Android SDK add-on list解决方案

选择Setup Proxy 选择Manual proxy configuration 设置Host name 为&#xff1a;mirrors.neusoft.edu.cn 保持Port number 为&#xff1a;80 确定 参考博客&#xff1a;https://blog.csdn.net/qq_35892584/article/details/109746886?utm_mediumdistribute.pc_relevant.…

Git使用笔记(一)

今天第一次使用Git&#xff0c;在本地和CSDN Code进行代码同步。鉴于“好记性不如烂笔头”的经验教训&#xff0c;特把步骤记录下来。 准备工作&#xff1a; 1. 在CSDN&#xff08;或者Github&#xff09;上注册一个帐号&#xff0c;然后创建一个Repository。记录下Repository的…

ASP.NET 2.0站点登录、导航与权限管理

(一)登录 asp.net 2.0中&#xff0c;新增了许多新的功能和控件。其中&#xff0c;新增的登陆控件可谓使得WEB应用的设计更加得心应手。什么是登陆控件呢&#xff1f;就是我们平常在WEB应用中经常要用到的用户注册&#xff0c;登陆&#xff0c;忘记密码&#xff0c;登陆后根据权…

Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...

1.java.lang.Math类常用的常量和方法&#xff1a; Math.PI 记录的圆周率 Math.E 记录e的常量 Math.abs 求绝对值 Math.sin 正弦函数 Math.asin 反正弦函数 Math.cos 余弦函数 Math.acos 反余弦函数 Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数 Math.toD…

效果很好的asp.net的数据库访问模型(优化,封装一体化)

效果很好的asp.net的数据库访问模型&#xff08;优化&#xff0c;封装一体化&#xff09; 非常有效的数据库/配置文件访问模型。成功使用在几万流量的网站上。任何建议欢迎大家交流。 在使用SqlCommand对象过程中&#xff0c;我们需要分配Connection对象。 通常&#xff0c;对于…

【技巧——windows】直接登陆到桌面,免去输入密码

关于这个问题其实我很早之前就研究过&#xff0c;只是一直都是弄一次就不管了&#xff0c;下次就忘记怎么弄了&#xff0c;又去查&#xff0c;现在就写个笔记吧。 win8/8.1 在开始的界面输入netplwiz&#xff0c;或者点击winr打开运行&#xff0c;输入netplwiz&#xff0c;然后…

虚商烦恼多?不在怕的!你距离享受高效虚商控制台只差一步的距离

摘要&#xff1a;虚商烦恼多&#xff1f;不在怕的&#xff01;你距离享受高效虚商控制台只差一步的距离虚商自助服务平台 vco.console.aliyun.com/原文链接本文为云栖社区原创内容&#xff0c;未经允许不得转载

Shark Hive Spark Hadoop2 进行整合的测试。

本文目的是测试将shark和hadoop2进行整合。 本来打算使用Shark 最新版0.9.0 &#xff0c;但是官方好像还没有针对与Hadoop2的正式下载地址。&#xff08;这个要说明一下&#xff0c;官方只提供了源码&#xff0c;并没有找到编译好的0.9.0 for hadoop2 &#xff0c;也许需要自己…

nginx反向代理-多端口映射

2019独角兽企业重金招聘Python工程师标准>>> 代码解释 1.1 http:www.baidu.test.com默认是80&#xff0c;访问“/”利用反向代理&#xff0c;然后访问本地8083&#xff1b; 1.2 8083代表本地的前端工程访问地址&#xff0c;前端需要访问后台数据&#xff0c;”/”…

程序员期末试卷_第三部分复习提纲.doc下载

程序员期末试卷_第三部分复习提纲.doc下载 转载于:https://www.cnblogs.com/dtdnh520/archive/2007/01/20/625390.html