Spark广告点击项目技术骨架一

1.技术选用

用到的技术有:flume, kafka, spark.
这里面其实存在生产者,消费者的关系。如下图:

生产者消费者关系链

用户在一个网站中产生的行为就是生产者, 被服务器采集到,服务器是一个消费者,
服务器保存的数据再被flume消费,这时服务器既是生产者又是消息者,
组件间就是这样的生产者消费者关系链。

2.技术搭建

flume的搭建

 a.  官网下载 apache-flume-1.6.0-bin.tar.gz

 b.  解压tar -zxvf apache-flume-1.6.0-bin.tar.gz, 放到/usr/soft/目录下

 c.  进入conf目录下, cd /usr/soft/flume/conf

 d. 复制flume-conf.properties.template成flume-conf.properties

 e.  修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置
     cp flume-env.sh.template flume-env.sh
     vi flume-env.sh
     export JAVA_HOME=/usr/soft/jdk1.8.0_73     

 f.  验证是否安装成功

     进入bin目录运行命令:/usr/soft/flume/bin$ ./flume-ng version 

     有下面显示时说明安装成功

     Flume 1.6.0
    Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
    ...

 g. 按照例子测试flume

     1.创建配置文件

         cd /usr/soft/flume/conf
         cp flume-conf.properties avro.conf

         vi avro.conf 

        agent1.sources = avro-source1
        agent1.channels = ch1
        agent1.sinks = logger-sink1
        # sources
        agent1.sources.avro-source1.type = avro
        agent1.sources.avro-source1.channels = ch1
        agent1.sources.avro-source1.bind = s1
        agent1.sources.avro-source1.port = 4141
        # sink
        agent1.sinks.logger-sink1.type = logger
        agent1.sinks.logger-sink1.channel = ch1
        # channel
        agent1.channels.ch1.type = memory
        agent1.channels.ch1.capacity = 1000
        agent1.channels.ch1.transactionCapacity = 100

     2.  启动flume agent 

          把flume配置到环境变量中

          sudo vi /etc/environment

          FLUME_HOME=/usr/soft/flume

         PATH="/usr/soft/flume/bin:/usr/soft/spark/bin:$SCALA_HOME/bin"

         使环境变量生效 source /etc/environment

        进入/usr/soft/flume目录下

        启动flume agent

        hlf@s1:/usr/soft/flume$ bin/flume-ng agent -c conf -f conf/avro.conf -n agent -Dflume.root.logger=INFO,console

      用jps查看是否启动了,如果启动了会显示一个名字叫 Application的进程

      创建一个文件,我放在flume文件夹下,名字 hello_flume.log
      内容是   hello flume spar

      3.使用avro-client发送文件   

      hlf@s1:/usr/soft/flume$bin/flume-ng avro-client -c ./conf -H s1 -p 4141 -F hello_flume.log 

3.flume配置参数

    命令

    参数                          描述

    help                        打印帮助信息

   agent                       运行一个Flume Agent

   avro-client                 运行一个Avro Flume 客户端

   version                     显示Flume版本。

   全局选项

   参数                          描述

--conf,-c <conf>                在<conf>目录使用配置文件。指定配置文件放在什么目录

--classpath,-C <cp>             追加一个classpath

--dryrun,-d                     不真正运行Agent,而只是打印命令一些信息。

--plugins-path <dirs>          插件目录列表。默认:$FLUME_HOME/plugins.d

-Dproperty=value               设置一个JAVA系统属性值。

-Xproperty=value               设置一个JAVA -X的选项。

Agent选项

参数                          描述

--conf-file,-f <file>             指定配置文件,这个配置文件必须在全局选项的--conf参数定义的目录下。(必填)

--name,-n <name>                Agent的名称(必填)

--help,-h                                帮助

Avro客户端选项

参数                               描述

--rpcProps,-P <file>              连接参数的配置文件。

--host,-H <host>                  Event所要发送到的Hostname。

--port,-p <port>                  Avro Source的端口。

--dirname <dir>                   Avro Source流到达的目录。

--filename,-F <file>             Avro Source流到达的文件名。

--headerFile,-R <file>           设置一个JAVA -X的选项。

启动Avro客户端要么指定--rpcProps,要么指定--host和--port。

4.遇到的问题

无法连接

当时avro是这样启动的

hlf@s1:/usr/soft/flume$ *bin/flume-ng avro-client -c . -H s1 -p 4141 -F hello_flume.log* 

结果出现这问题

ERROR avro.AvroCLIClient: Unable to open connection to Flume. Exception follows.
org.apache.flume.FlumeException: NettyAvroRpcClient { host: s1, port: 4141 }:
RPC connection errorat org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:182)
at org.apache.flume.api.NettyAvroRpcClient.connect(NettyAvroRpcClient.java:121)


 连接不上,一直以为是IP和端口的问题,先用ps -aux | grep 4141 发现端口没问题

之后修改conf目录下的avro.conf配置文件中的a1.sources.r1.bind = 0.0.0.0,

发现改成localhost, s1(这是我的hostname), IP地址:192.168.142.130都没有用。

修改了一下使用目录, 之前认为-c指的是要发送的文件的目录, 改成conf目录,发现结果不一样了,

这目录下要有flume-env.sh 和 log4j.properties 。

hlf@s1:/usr/soft/flume$ *bin/flume-ng avro-client -c ./conf -H s1 -p 4141 -F hello_flume.log* 

再次发现问题:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/soft/flume/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/soft/hive/lib/hive-jdbc-1.0.1-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

查看好久, 其实并没有什么问题,原来不应该看这个窗口, 要看启动agent的那个窗口,纠结了好久 -_-!

在那窗口找到发送文件的内容
2016-09-24 00:44:00,880 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] 
Event: { headers:{} body: 68 65 6C 6C 6F 20 66 6C 75 6D 65 20 73 70 61 72 hello flume spar }

就是hello flume spar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值