Hadoop提供了一个中央化的存储系统,其有利于进行集中式的数据分析与数据共享。 Hadoop对存储格式没有要求。可以存储用户访问日志、产品信息以及网页数据等数据。

常见的两种数据来源。一种是分散的数据源:机器产生的数据、用户访问日志以及用户购买日志。另一种是传统系统中的数据:传统关系型数据库(MySQL、Oracle)、磁盘阵列以及磁带。

Flume由三部分构成。Master负责负责通信及配置管理,是集群的控制器。Collector用于对数据进行聚合。往往会产生一个更大的数据流。然后加载到HDFS上。Agent负责采集数据。其是Flume中产生数据流的地方,同时Agent会将产生的数据传输到Collector.

Agent 用于采集数据是数据流产生的地方。通常由source和sink两部分组成 。Source用于获取数据,可从文本文件,syslog,HTTP等获 取数据。 Sink将Source获得的数据进一步传输给后面的Collector。 Flume自带了很多source和sink实现。 syslogTcp(5140) | agentSink("localhost",35853) 意思是通过通信协议获取5140端口数据,然后发送到localhost主机的35853端口。 tail("/etc/services") | agentSink("localhost",35853) 意思是读取文件夹/etc/services下文件,然后发送到localhost主机的35853端口。

Collector 用于汇总多个Agent结果 ,将汇总结果导入后端存储系统,比如HDFS,HBase。 Flume自带了很多collector实现 collectorSource(35853) | console  表示将收集结果写到控制台。CollectorSource(35853) | collectorSink("file:///tmp/flume/collected", "syslog") 表示将收集结果写到本地目录。collectorSource(35853) | collectorSink("hdfs://namenode/user/flume/ ","syslog"); 表示将收集结果写到hdfs目录。

一般为了防止一个collector挂掉所有agent都失效可以将不同的agent连接不同的collector。同时,这样可以保证不同数据类型的agent将数据放到同一个collector。

Master 负责管理协调 agent 和collector的配置信息,是Flume集群的控制器。其可跟踪数据流的最后确认信息,并通知agent。 通常需配置多个master以防止单点故障。借助zookeeper管理管理多Master。

构建基于Flume的数据收集系统 

Agent和Collector均可以动态配置。可通过命令行或Web界面配置。 命令行配置 : 在已经启动的master节点上,依次输入”flume shell””connect localhost ”    如执行 exec config a1 ‘tailDir(“/data/logfile”)’ ‘agentSink’ 。 Web界面 : 选中节点,填写source、sink等信息。

常用架构举例—拓扑1  


agentA : tail(“/ngnix/logs”) | agentSink("collector",35853);

agentB : tail(“/ngnix/logs”) | agentSink("collector",35853);

agentC : tail(“/ngnix/logs”) | agentSink("collector",35853);

agentD : tail(“/ngnix/logs”) | agentSink("collector",35853);

agentE : tail(“/ngnix/logs”) | agentSink("collector",35853);

agentF : tail(“/ngnix/logs”) | agentSink("collector",35853); collector : collectorSource(35853) | collectorSink("hdfs://namenode/flume/","srcdata");

agentA : src | agentE2ESink("collectorA",35853);

agentB : src | agentE2ESink("collectorA",35853);

agentC : src | agentE2ESink("collectorB",35853);

agentD : src | agentE2ESink("collectorB",35853);

agentE : src | agentE2ESink("collectorC",35853);

agentF : src | agentE2ESink("collectorC",35853);

collectorA : collectorSource(35853) | collectorSink("hdfs://...","src");

collectorB : collectorSource(35853) | collectorSink("hdfs://...","src");

collectorC : collectorSource(35853) | collectorSink("hdfs://...","src");

agentA : src | agentE2EChain("collectorA:35853","collectorB:35853");

agentB : src | agentE2EChain("collectorA:35853","collectorC:35853");

agentC : src | agentE2EChain("collectorB:35853","collectorA:35853");

agentD : src | agentE2EChain("collectorB:35853","collectorC:35853");

agentE : src | agentE2EChain("collectorC:35853","collectorA:35853");

agentF : src | agentE2EChain("collectorC:35853","collectorB:35853");

collectorA : collectorSource(35853) | collectorSink("hdfs://...","src");

collectorB : collectorSource(35853) | collectorSink("hdfs://...","src");

collectorC : collectorSource(35853) | collectorSink("hdfs://...","src");

传统数据库与Hadoop间数据同步

Sqoop:SQL-to-Hadoop,是连接传统关系型数据库和Hadoop 的桥梁。可以把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS HBase 和 Hive) 中或把数据从 Hadoop 系统里抽取并导出到关系型数据库里/利用MapReduce可以加快数据传输速度实现批处理方式进行数据传输。

Sqoop优势是高效、可控地利用资源、任务并行度,超时时间等 、数据类型映射与转换 可自动进行或用户也可自定义 。同时,其 支持多种数据库如:MySQL 、Oracle 以及PostgreSQL 。

通过命令sqoop可以生成map task将传统数据库中的数据传输到HDFS、Hbase或Hive上。

Sqoop import 将数据从关系型数据库导入Hadoop中 



        步骤1:Sqoop与数据库Server通信,获取数据库表的元数据 信息; 步骤2:Sqoop启动一个MapOnly的MR作业,利用元数据信 息并行将数据写入Hadoop。

Sqoop import使用:

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities

--connnect: 指定JDBC URL

--username/password:mysql数据库的用户名

--table:要读取的数据库表 
bin/hadoop fs -cat cities/part-m-*

1,USA,Palo Alto

2,Czech Republic,Brno

3,USA,Sunnyvale

导入到指定目录:

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--target-dir /etl/input/cities

导入字段country为USA的值:

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--where "country = 'USA'"

生成顺序文件:

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--as-sequencefile

指定map个数:

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--num-mappers 10

Sqoop import—导入多个表 :

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--query 'SELECT normcities.id, \

countries.country, \

normcities.city \

FROM normcities \

JOIN countries USING(country_id) \

WHERE $CONDITIONS' \

--split-by id \

--target-dir cities

Sqoop import增量导入(一):

适用于数据每次被追加到数据库中,而已有数据不变的情况且仅导入id这一列值大于1的记录。 

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table visits \

--incremental append \

--check-column id \

--last-value 1

Sqoop import增量导入(二)

每次成功运行后,sqoop将最后一条记录的id值保存到 metastore中,供下次使用。

sqoop job \

--create visits \

--import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table visits \

--incremental append \

--check-column id \

--last-value 0

运行sqoop作业:sqoop job --exec visits

Sqoop import增量导入(三)

数据库中有一列last_update_date,记录了上次修改时间。 Sqoop仅将某时刻后的数据导入Hadoop。 
sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table visits \

--incremental lastmodified \

--check-column last_update_date \

--last-value “2013-05-22 01:01:01”

Sqoop Export 将数据从Hadoop导入关系型数据库导中 


步骤1:Sqoop与数据库Server通信,获取数据库表的元数据 信息; 步骤2:并行导入数据:将Hadoop上文件划分成若 干个split; 每个split由一个Map Task进 行数据导入。

Sqoop Export使用方法 
sqoop export \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--export-dir cities 
--connnect: 指定JDBC URL

--username/password:mysql数据库的用户名

--table:要导入的数据库表

export-dir:数据在HDFS上存放目录

Sqoop Export—保证原子性:
sqoop export \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--staging-table staging_cities

Sqoop Export—更新已有数据:

sqoop export \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--update-key id sqoop export \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--update-key id \

--update-mode allowinsert

Sqoop Export—选择性插入 :
sqoop export \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities \

--columns country,city

Sqoop与其他系统结合

     Sqoop可以与Oozie、Hive、Hbase等系统结合;  用户需要在sqoop-env.sh中增加HBASE_HOME、 HIVE_HOME等环境变量。 
Sqoop与Hive结合: 
sqoop import \     
--connect jdbc:mysql://mysql.example.com/sqoop \     
--username sqoop \     
--password sqoop \     
--table cities \     
--hive-import  

Sqoop与HBase结合: 
sqoop import \     
--connect jdbc:mysql://mysql.example.com/sqoop \     
--username sqoop \     
--password sqoop \     
--table cities \     
--hbase-table cities \     
--column-family world 

      以上介绍了数据收集系统以及数据传输工具sqoop,后续将讲解Hive及Pig相关主题。

Hadoop数据收集与入库系统Flume与Sqoop的更多相关文章

  1. 从0到1搭建基于Kafka、Flume和Hive的海量数据分析系统(一)数据收集应用

    大数据时代,一大技术特征是对海量数据采集.存储和分析的多组件解决方案.而其中对来自于传感器.APP的SDK和各类互联网应用的原生日志数据的采集存储则是基本中的基本.本系列文章将从0到1,概述一下搭建基 ...

  2. 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结

    一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...

  3. 分布式日志收集系统 —— Flume

    一.Flume简介 Apache Flume 是一个分布式,高可用的数据收集系统.它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集.Flume 分为 NG 和 OG ( ...

  4. Hadoop-No.15之Flume基于事件的数据收集和处理

    Flume是一种分布式的可靠开源系统,用于流数据的高效收集,聚集和移动.Flume通常用于移动日志数据.但是也能移动大量事件数据.如社交媒体订阅,消息队列事件或者网络流量数据. Flume架构 Flu ...

  5. 网站统计中的数据收集原理及实现(share)

    转载自:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工 ...

  6. 使用nginx lua实现网站统计中的数据收集

    导读网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于ja ...

  7. 大数据离线分析平台 JavaSDK数据收集引擎编写

    JavaSDK设计规则 JavaSDK提供两个事件触发方法,分别为onChargeSuccess和onChargeRefund.我们在java sdk中通过一个单独的线程来发送线程数据,这样可以减少对 ...

  8. 电竞大数据平台 FunData 的系统架构演进

      电竞大数据时代,数据对比赛的观赏性和专业性都起到了至关重要的作用.同样的,这也对电竞数据的丰富性与实时性提出了越来越高的要求. 电竞数据的丰富性从受众角度来看,可分为赛事.战队和玩家数据:从游戏角 ...

  9. Hadoop Web项目--Friend Find系统

    项目使用软件:Myeclipse10.0,JDK1.7,Hadoop2.6,MySQL5.6.EasyUI1.3.6.jQuery2.0,Spring4.1.3. Hibernate4.3.1,str ...

随机推荐

  1. 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块

    前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...

  2. python中如何调用函数交换两个变量的值

    python中如何调用函数交换两个变量的值 所有代码来在python3.7.1版本实现 以下实例通过用户输入两个变量,并相互交换:  方法一: def swap(a,b): # 创建临时变量,并交换 ...

  3. zuul 路由网关 微服务架构系统中

    在微服务架构中,基本包含以下常见的组件.服务注册与发现.服务消费.负载均衡.断路器.只能路由.配置管理等.一个简单的微服务架构系统如下 一.Zuul简介 Zuul的主要功能是路由转发和过滤器.路由功能 ...

  4. 十分钟入门流处理框架Flink --实时报表场景的应用

    随着业务的发展,数据量剧增,我们一些简单报表大盘类的任务,就不能简单的依赖于RDBMS了,而是依赖于数仓之类的大数据平台. 数仓有着巨量数据的存储能力,但是一般都存在一定数据延迟,所以要想完全依赖数数 ...

  5. tensorflow学习笔记——多线程输入数据处理框架

    之前我们学习使用TensorFlow对图像数据进行预处理的方法.虽然使用这些图像数据预处理的方法可以减少无关因素对图像识别模型效果的影响,但这些复杂的预处理过程也会减慢整个训练过程.为了避免图像预处理 ...

  6. python+appium自动化测试(一)-----环境搭建

    基础背景: windows7系统 +python3.4版本 环境搭建目标: 使用python编写app自动化测试脚本并成功执行. 搭建步骤:   1.安装python3,安装步骤详见:https:// ...

  7. 小白学Python(2)——常用Python编程工具,Python IDE

    下载好Python,但是如何开始编程呢? 有几种方法, 1.第一个就是command lind 即为命令行的方式,也就是我们常说的cmd. 输入 win+ cmd 在命令行中再输入 python,即可 ...

  8. 驰骋工作流引擎-ccflow单据模式介绍与使用

    Ccflow单据模式 关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎.  表单引擎  表单单据模式增删改查   应用场景: 一些客户在使 ...

  9. shift键复选dataGrid的记录时多余的文本总被选择了。

    document.onkeydown = function(event) { if (event.shiftKey) { document.onselectstart = function(event ...

  10. 【第一篇】spring boot 快速入门

    1.开发环境 开发工具:IDEA2018.2.1 JDK:1.9 Maven : 3.3.9 操作系统:window 7 / window 10 2.项目结构 3.详细步骤 3.1 使用IDEA新建M ...