新闻网大数据实时分析可视化系统项目——9、Flume+HBase+Kafka集成与开发

1.下载Flume源码并导入Idea开发工具

1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压

2)通过idea导入flume源码

打开idea开发工具,选择File——》Open

然后找到flume源码解压文件,选中flume-ng-hbase-sink,点击ok加载相应模块的源码。

2.官方flume与hbase集成的参数介绍

3.下载日志数据并分析

到搜狗实验室下载用户查询日志

1)介绍

搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。为进行中文搜索引擎用户行为分析的研究者提供基准研究语料

2)格式说明

数据格式为:访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL

其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID

4.flume agent-3聚合节点与HBase集成的配置

vi flume-conf.properties

agent1.sources = r1

agent1.channels = kafkaC hbaseC

agent1.sinks = kafkaSink hbaseSink

 

agent1.sources.r1.type = avro

agent1.sources.r1.channels = hbaseC

agent1.sources.r1.bind = bigdata-pro01.kfk.com

agent1.sources.r1.port = 5555

agent1.sources.r1.threads = 5

 

agent1.channels.hbaseC.type = memory

agent1.channels.hbaseC.capacity = 100000

agent1.channels.hbaseC.transactionCapacity = 100000

agent1.channels.hbaseC.keep-alive = 20

 

agent1.sinks.hbaseSink.type = asynchbase

agent1.sinks.hbaseSink.table = weblogs

agent1.sinks.hbaseSink.columnFamily = info

agent1.sinks.hbaseSink.serializer = org.apache.flume.sink.hbase.KfkAsyncHbaseEventSerializer

agent1.sinks.hbaseSink.channel = hbaseC

agent1.sinks.hbaseSink.serializer.payloadColumn = datatime,userid,searchname,retorder,cliorder,cliurl

5.对日志数据进行格式处理

1)将文件中的tab更换成逗号

cat weblog.log|tr "\t" "," > weblog2.log

2)将文件中的空格更换成逗号

cat weblog2.log|tr " " "," > weblog3.log

6.自定义SinkHBase程序设计与开发

1)模仿SimpleAsyncHbaseEventSerializer自定义KfkAsyncHbaseEventSerializer实现类,修改一下代码即可。

 @Override

    public List getActions() {

        List actions = new ArrayList();

        if (payloadColumn != null) {

            byte[] rowKey;

            try {

                /*---------------------------代码修改开始---------------------------------*/

                //解析列字段

                String[] columns = new String(this.payloadColumn).split(",");

                //解析flume采集过来的每行的值

                String[] values = new String(this.payload).split(",");

                for(int i=0;i < columns.length;i++){

                    byte[] colColumn = columns[i].getBytes();

                    byte[] colValue = values[i].getBytes(Charsets.UTF_8);

 

                    //数据校验:字段和值是否对应

                    if(colColumn.length != colValue.length) break;

 

                    //时间

                    String datetime = values[0].toString();

                    //用户id

                    String userid = values[1].toString();

                    //根据业务自定义Rowkey

                    rowKey = SimpleRowKeyGenerator.getKfkRowKey(userid,datetime);

                    //插入数据

                    PutRequest putRequest =  new PutRequest(table, rowKey, cf,

                            colColumn, colValue);

                    actions.add(putRequest);

                /*---------------------------代码修改结束---------------------------------*/

                }

 

            } catch (Exception e) {

                throw new FlumeException("Could not get row key!", e);

            }

        }

        return actions;

    }

2)在SimpleRowKeyGenerator类中,根据具体业务自定义Rowkey生成方法

/**

   * 自定义Rowkey

   * @param userid

   * @param datetime

   * @return

   * @throws UnsupportedEncodingException

   */

  public static byte[] getKfkRowKey(String userid,String datetime)throws UnsupportedEncodingException {

    return (userid + datetime + String.valueOf(System.currentTimeMillis())).getBytes("UTF8");

  }

7.自定义编译程序打jar包

1)在idea工具中,选择File——》ProjectStructrue

2)左侧选中Artifacts,然后点击右侧的+号,最后选择JAR——》From modules with dependencies

3)然后直接点击ok

4)删除其他依赖包,只把flume-ng-hbase-sink打成jar包就可以了。

5)然后依次点击apply,ok

 

6)点击build进行编译,会自动打成jar包

 

7)到项目的apache-flume-1.7.0-src\flume-ng-sinks\flume-ng-hbase-sink\classes\artifacts\flume_ng_hbase_sink_jar目录下找到刚刚打的jar包

8)将打包名字替换为flume自带的包名flume-ng-hbase-sink-1.7.0.jar ,然后上传至flume/lib目录下,覆盖原有的jar包即可。

8.flume聚合节点与Kafka集成的配置

vi flume-conf.properties

agent1.sources = r1

agent1.channels = kafkaC hbaseC

agent1.sinks = kafkaSink hbaseSink

 

agent1.sources.r1.type = avro

agent1.sources.r1.channels = hbaseC kafkaC

agent1.sources.r1.bind = bigdata-pro01.kfk.com

agent1.sources.r1.port = 5555

agent1.sources.r1.threads = 5

 

agent1.channels.hbaseC.type = memory

agent1.channels.hbaseC.capacity = 100000

agent1.channels.hbaseC.transactionCapacity = 100000

agent1.channels.hbaseC.keep-alive = 20

 

agent1.sinks.hbaseSink.type = asynchbase

agent1.sinks.hbaseSink.table = weblogs

agent1.sinks.hbaseSink.columnFamily = info

agent1.sinks.hbaseSink.serializer = org.apache.flume.sink.hbase.KfkAsyncHbaseEventSerializer

agent1.sinks.hbaseSink.channel = hbaseC

agent1.sinks.hbaseSink.serializer.payloadColumn = datatime,userid,searchname,retorder,cliorder,cliurl

#*****************flume+Kafka***********************

agent1.channels.kafkaC.type = memory

agent1.channels.kafkaC.capacity = 100000

agent1.channels.kafkaC.transactionCapacity = 100000

agent1.channels.kafkaC.keep-alive = 20

 

agent1.sinks.kafkaSink.channel = kafkaC

agent1.sinks.kafkaSink.type = org.apache.flume.sink.kafka.KafkaSink

agent1.sinks.kafkaSink.brokerList = bigdata-pro01.kfk.com:9092,bigdata-pro02.kfk.com:9092,bigdata-pro03.kfk.com:9092

agent1.sinks.kafkaSink.topic = test

agent1.sinks.kafkaSink.zookeeperConnect = bigdata-pro01.kfk.com:2181,bigdata-pro02.kfk.com:2181,bigdata-pro03.kfk.com:2181

agent1.sinks.kafkaSink.requiredAcks = 1

agent1.sinks.kafkaSink.batchSize = 1

agent1.sinks.kafkaSink.serializer.class = kafka.serializer.StringEncoder

 

转载于:https://www.cnblogs.com/ratels/p/10844847.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
每天都有着大量的用户关注各类新闻,特别是随着各种网络通信技术的发展,网络应用的普及使得每时每刻都有着大量的人们通过网络进行各类新闻的搜索,产生海量的日志数据。过去使用单机的方式通过 MySQL数据库对这些数据进行存储,但是积累下来的用户日志数据量达到了一定的级别,当一台电脑无法存储这么庞大的数据时,就产生了海量数据的存储问题。如果使用网络文件系统对数据进行分开存储,那么就无法对大量的实时和离线数据进行分析处理,处理结果也无法以一种更加直观的方式进行展示。 为了解决海量新闻日志数据的存储问题,在新闻业务中得到实时的用户搜索内容的排行并进行可视化显示,得到公众关注的重点,从而达到针对用户关注的重点进行推送、广告的投放、及时消除不良的用户等目的。本文在对以上需求进行调研后,通过Flume日志收集系统对各个服务器中的日志文件进行读取合并,并将数据划分成离线流数据和实时流数据两条路线。离线数据通过Hadoop集群处理、存储,通过Hive完成离线数据处理和分析,并最终通过Hue实现对用户的可视化展示。实时流数据通过Kafka消息队列临时存储,并通过Spark流处理,最终将结果存放在 MySQL数据库中,通过Java程序获取,最终通过Echarts插件在前端对实时数据进行展示。 本文讲述了系统研究的背景、目的和意义。对系统所使用到的相关技术的原理进行了介绍;对系统进行了总体的需求分析并且按照系统实现的功能划分了相关模块;在进行了需求分析后,对系统进行了具体的硬件平台构建以及各个功能模块设计实现,最终完成对用户搜索日志数据的结构化处理和可视化展示。 最后对课题工作进行了总结,并分析了未来系统中可改进的地方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值