flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
flume可以采集文件,socket数据包等各种形式源数据。有可以将采集到的数据传输到HDFS、hbase、hive、kafka等众多外部存储系统中
一般的采集需求,通过对flume的简单配置即可实现。
flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以使用于大部分的日常数据采集场景。
运行机制
flume分布式系统中核心的角色是agent,flume采集系统就是有一个个agent锁连接起来形成的。
sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例:mysql,orcal,postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进关系型数据库中。
把mysql里面的数据导入到HDFS中(指定输出路径、指定数据分隔符)
./sqoop import --connect jdbc:mysql//主机ip:3306/数据库名 --username root --password 123456 --table 将要操作的表 --targer-dir '数据导入到HDFS上的目录' --fields-terminated-by '分隔符' [-m 2]
指定Map数量 -m
增加where条件,注意:条件必须用引号引起来
.... --table dept --where 'd_id>3' --target-dir '输出路径'
增加query语句(使用\将语句换行)
... --query 'select * from dept where d_id >2 AND $CONDITIONS' --split-by dept.d_id --target-dir '输出路径'
注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上,而且存在单引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前面加上\即\$CONDITIONS,如果设置map数量为1个时即-m 1,不要加上--split-by${tablename.column},否则需要加上。
注意:在HDFS我们设置的目录下可以看到,数据库中每一条数据都存放在一个单独的文件夹中,文件默认从0开始排序,而数据库索引是从1开始的
把HDFS中的数据导出到mysql中(不要忘记指定分隔符)
首先数据库创建表(数据库字段要符合HDFS上数据的格式)
导出:
./sqoop export --connect jdbc:mysql://主机ip:3306/数据库名 --username root --password 123456 --export-dir '从HDFS上呢个目录下的文件' --table 将要写入到数据库中呢个表里面 -m 1 --fields-terminated-by '分隔符'