flume sqoop kafka使用小结

1.flume
  flume是高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。flume不仅可以采集数据,还可以对数据进行简单的处理。
  flume的文件采集source工具只能识别文本数据。
2.flume-ng
  flume-ng中,flume的集群只有一种角色agent
  agent中有三种组件:source、channel、sink
  source作用是采集数据,它可以是主动的去监听、抓取,可以可以被动的接收和等待
  channel作用是做数据的缓存,当采集数据并发高的时候,有可能source采集数据的速度比sink消费数据的速度要快,因此需要channel来做一个中间缓存,解决这种速度不一致问题
  sink作用是消费channel中的数据,它的消费会保证消费成功只有保证消费成功以后,它才会把这个数据从channel中删除,否则还存在于channel中。
  
  一个agent中可以由多个source、channel、sink
  一个source可以对接多个channel
  一个sink只可以对接一个channel
  
  在source上有两种组件
  选择器(selector):当1个source对应多个channel时,可以使用选择器来分配source中什么样的数据到达什么样的channel
  拦截器(interceptor):数据由source到达channel的过程中对数据进行拦截并可以进行处理

3.flume agent的程序开发
  flume采集过程程序的开发其实就是定义配置文件,在配置文件定义好source、channel、sink、selector、interceptor等组件,以及他们之间的关系。
  flume程序是properties格式配置文件,范式如下:
  # list the sources, sinks and channels for the agent
  <Agent>.sources = <Source>
  <Agent>.sinks = <Sink>
  <Agent>.channels = <Channel1> <Channel2>

  # set channel for source
  <Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...

  # set channel for sink
  <Agent>.sinks.<Sink>.channel = <Channel1>
多个之间用空格来间隔
4.flume agent的启动
  bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
  bin/flume-ng agent -c conf -f example.conf -n a1 -Dflume.root.logger=INFO,console
5.测试常用的source和sink
  avro source被用来做测试,需要flume客户端程序把数据发送过来。
  logger sink直接把获取到的数据打印在控制台
  
6.flume的客户端程序开发
  项目中添加flume依赖
  <dependency>
    <groupId>org.apache.flume</groupId>
    <artifactId>flume-ng-core</artifactId>
    <version>1.8.0</version>
  </dependency>
  然后
  构建RpcClient,使用RpcClientFactory的方法来构建。
  构建Event对象,使用EventBuilder
  然后调用client的append方法把数据发送给avrosource
7.Event
  event是flume传递数据的最小单元
  event里面包括两部分:header和body
  header里面是一组kv数据,kv的类型都是String,header里面kv的内容可以被selector、interceptor或sink所使用
  body里面是要传递具体的数据内容

写一个flume的客户端程序发送数据到一个flume agent
agent采集到数据之后把数据存储在hdfs上,以文本的方式存储
客户端发送的event的header里面写一个kv,k是timestamp,vlaue是当前时间戳值
8.客户端类型
  Failover Client:解决单个flume节点挂掉,可以选择发送到集群中其他flume节点。
                   给一个client配置多个flume节点,在某个时间点只有一个节点来接受这个clien的数据,当这个节点挂掉之后,客户端会选择其他的节点来进行传输数据

  LoadBalancing RPC client:解决单个节点上数据吞吐量过大达到瓶颈,可以使用LoadBalancing RPC client来进行负载均衡。
  
  在代码实现上需要对client进行配置
  Failover
  写配置文件:clientconfig.properties
  client.type = default_failover #配置客户端类型为default_failover。
  hosts = h1 h2 h3 #给client配置多个flume节点
  #每个节点的hostname和port可以独立设置
  hosts.h1 = host1.example.org:41414
  hosts.h2 = host2.example.org:41414
  hosts.h3 = host3.example.org:41414
  max-attempts = 3 #每个节点传输失败三次被判断为节点失败,开始尝试下一个节点
  
  配置有了之后再实例化client对象的时候就可以使用
  RpcClientFactory.getInstance(File propertiesFile)
  其中参数propertiesFile去加载clientconfig.properties文件
  

  对于配置信息可以写在自定义的配置文件中,也可以直接在代码里构建Properties对象,然后把上述配置参数写在Properties对象里面,然后使用RpcClientFactory.getInstance(Properties properties)方法来构造client对象

  发送数据和普通的client没什么不同

  写一个程序实现Failover类型的客户端,然后启动两个flume agent,达到客户端程序启动后往一个agent中发数据,结束这个agent的进程后,client会自动把数据发送到第二个agent

  LoadBalancing RPC
  client.type = default_loadbalance
  hosts = h1 h2 h3 #给client添加多个flume节点,解决单节点处理流量达到瓶颈问题
  hosts.h1 = host1.example.org:41414
  hosts.h2 = host2.example.org:41414
  hosts.h3 = host3.example.org:41414

  backoff = false 
  maxBackoff = 0  # 当多个节点中有一个节点发生故障,这两个参数决定client是否重发已往失败节点上发送的数据,重发多少条

  host-selector = round_robin # 这个决定着客户端以什么标准均衡的把数据发送到多个节点上去。round_robin,random,FQCN(自定义类型)
  

  写一个LoadBalancing RPC客户端,配置两个agent,启动两个agent,客户端均衡的把数据发送到两个agent中
  运行程序,并核对客户端发送的记录条数和两个agent各自收到的记录条数之和  是否一致
  agent把数据以文本的方式保存到hdfs上
9.selector
  每个flume的source都有selector
  selector的类型有两种
  replicating&#x

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值