大数据实战(九)

1 分布式数据收集

1.1 推荐系统数据收集需求

  • 推荐系统数据收集需求:
    将各种数据收集到一个中央化的存储系统中,有利于进行集中式的数据分析与数据共享
  • 用户行为数据是多样化的
    用户访问日志,产品信息,用户基本信息
  • 推荐系统数据收集难点:
    数据分散在各个离散的设备上,数据保存在传统的存储设备和系统中

1.2 常见数据来源

  • 分散的数据源(由不同系统组件产生,部署在不同机器上):用户访问日志,用户购买日至,用户收藏日志,用户搜索日志
  • 关系型数据:用户注册信息,保存在关系型数据库MySQL,Oracle等

1.3 常见的开源数据收集系统

  • 数据收集:Flume, Scribe
  • 传统数据库与Hadoop:Sqoop

1.3 Flume是什么

  • 由Cloundera公司开源
  • 分布式、可靠、高可用的海量日志采集系统
  • 数据源可定制,可扩展
  • 数据存储系统可定制,可扩展
  • 中间件:屏蔽了数据源和数据存储系统的异构性

1.4 Flume特点

  • 可靠性:保证数据不丢失
  • 可扩展性:各组件数目可扩展
  • 高性能:吞吐率很高,能满足海量数据收集需求
  • 可管理性:可动态增加和删除组件
  • 文档丰富,社区活跃:已成为Hadoop生态系统标配

1.5 FlumeNG基本架构

在这里插入图片描述

1.6 Flume NG核心概念

  • Event
  • Client
  • Agent:Source,Channel,Sink
1.6.1 Event
  • Event是Flume数据传输的基本单位
  • Flume以事件的形式将数据从源头传送到最终的目的
  • Event由可选的header和载由数据的一个byte array构成
    载有的数据对flume是不透明的
    Header是容纳了key-value字符串对的无序集合,key在集合内使唯一的
    Header可以在上下文路由中使用扩展
1.6.2 Client
  • Client是一个将原始log包装成events并且发送它们到一个或多个agent的实体
  • 目的是从数据源系统中解耦FLume
  • 在flume的拓扑结构中不是必须的
  • Client实例:
    Flume log4J Appender
    可以使用Client SDK(org.apache.flume.api)定制特定的Client
1.6.3 Agent
  • 一个Agent包含Source,Channel,Sink和其他组件
  • 它利用这些组件将events从一个节点传输到另一个节点或最终目的
  • Agent是flume流的基础部分
  • Flume为这些组件提供了配置、生命周期管理、监控支持
  • 在这里插入图片描述
1.6.4 Agent之Source
  • Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel
  • 包含event驱动和轮询2种类型
  • 不同类型的Source:
    与系统集成的Source:Syslog,Netcat
    自动生成时间的Source:Exec
    用于Agent和Agent之间通信的IPC Source:Avro、Thrift
  • Source必须至少和一个channel关联
1.6.5 Agent之Channel

在这里插入图片描述

1.6.6 Agent之Sink

在这里插入图片描述

1.6.7 其他组件

在这里插入图片描述

1.7 常用拓扑实例

在这里插入图片描述

1.7.1 第一层配置实例

在这里插入图片描述

1.7.2 第二层配置实例

在这里插入图片描述

2 使用Flume收集Web日志数据

2.1 安装Flume

直接解压即可

2.2 为Fume采集数据创建HDFS目录

创建HDFS目录 /data/weblogs 来存放Flume采集的数据

[root@master ~]# hdfs dfs -mkdir -p /data/weblogs

2.3 为Web日志输出出来创建本地目录

1.创建一个spool目录,通过web日志模拟器生成数据到这个目录来给Flume采集。

[root@master flume]# mkdir -p weblogs_spooldir

2.赋予写权限给所有用户

[root@master ~]#  chmod a+w -R flume

2.4 配置Flume

在这里插入图片描述

wlagent.sources = weblogSrc
wlagent.channels = memoryChannel
wlagent.sinks = hdfsSink

# For each one of the sources, the type is defined
wlagent.sources.weblogSrc.type = spooldir
wlagent.sources.weblogSrc.spoolDir = /home/hadoop/flume/weblogs_spooldir


# The channel can be defined as follows.
wlagent.sources.weblogSrc.channels = memoryChannel

# Each sink's type must be defined
wlagent.sinks.hdfsSink.type = hdfs
wlagent.sinks.hdfsSink.hdfs.path = /data/weblogs
wlagent.sinks.hdfsSink.hdfs.rollInterval = 0
wlagent.sinks.hdfsSink.hdfs.rollCount = 0
wlagent.sinks.hdfsSink.hdfs.rollSize = 5242880
wlagent.sinks.hdfsSink.hdfs.fileType = DataStream

#Specify the channel the sink should use
wlagent.sinks.hdfsSink.channel = memoryChannel

# Each channel's type is defined.
wlagent.channels.memoryChannel.type = memory

# Other config values specific to each type of channel(sink or source)
# can be defined as well
# In this case, it specifies the capacity of the memory channel
wlagent.channels.memoryChannel.capacity = 100000
wlagent.channels.memoryChannel.transactioCapacity = 10000

2.5 运行Agent

使用刚刚创建的配置文件启动Flume agent

[root@master bin]# ./flume-ng agent -n wlagent --conf-file ../conf/flume-conf.properties

出现这个情况在这里插入图片描述
修改flume-env.sh文件

export JAVA_OPTS="-Xmx500m"

再执行

[root@master bin]# ./flume-ng agent -n wlagent --conf /home/hadoop/flume/conf --conf-file ../conf/flume-conf.properties -Dflume.root.logger=INFO,consloe

2.6 模拟Apache Web Server输出

在这里插入图片描述

3 Sqoop是什么

  • Sqoop:SQL-to-Hadoop
  • 链接传统关系型数据库和Hadoop的桥梁
    把关系型数据库的数据导入到Hadoop系统(如HDFS、HBase和Hive)中
    把数据从Hadoop系统里抽取并导出到关系型数据库里
  • 利用MapReduce加快数据传输速度
  • 批处理方式进行数据传输
    在这里插入图片描述

3.1 Sqoop优势

  • 高效、可控地利用资源:任务并行度,超时时间等
  • 数据类型映射与转换:可自动进行,用户也可自定义
  • 支持多种数据库:MySQL,Oracle,PostgreSQL

3.2 Sqoop架构

在这里插入图片描述

3.2 Sqoop import

在这里插入图片描述

3.2.1 Sqoop import使用方法

在这里插入图片描述

3.3 Sqoop export

在这里插入图片描述

3.3.1 Sqoop export使用方法

在这里插入图片描述

3.4 Sqoop 与其他系统结合

在这里插入图片描述

4 使用Sqoop从Mysql中导入数据

在这个练习里,使用Sqoop从MySQL中导入数据到HDFS

4.1 安装Sqoop

直接解压即可

4.2 从MySQL中导入数据到HDFS(未实现)

1、创建数据库,并加载sql文件

mysql> create database sqoop_test;
mysql> source /home/hadoop/data/accounts.sql

2、使用sqoop来导入数据库的accounts表,并保存到HDFS的目录下

sqoop list-tables \
--connect jdbc://master:3306/sqoop_test \
--username root --password root

4.3 查看数据

1、列出accounts目录的内容
2、使用Hue File Browser或hdfs命令的-tail选项来查看每个文件的最后一部分数据
3、输出的头6个数字书account ID。记住最大的ID,后面需要用到

4.4 导入增量的更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值