概述:
Hadoop家族的辅助系统,依然是基于mapreduce的云计算框架。只是更简单的来执行!
三种辅助系统的特点和用处如下:
①flume:Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 Flume是一个分布式、可靠和高可用的海量日志采集、聚合和传输的系统。(1)搜集信息(2)获取记忆信息(3)传递报告间谍信息
flume是怎么完成上面三件事情的,三个组件:source: 搜集信息channel:传递信息sink:存储信息Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中
一般的采集需求,通过对flume的简单配置即可实现。
②azkaban:Azkaban主要是解决Hadoop Job的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。Web用户界面;方便上传工作流;方便设置任务之间的关系;调度工作流。
③sqoop:sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库
Sqoop的原理其实就是将导入导出命令转化为mapreduce程序来执行,sqoop在接收到命令后,都要生成mapreduce程序
一、flume
A:采集目录到HDFS
采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去
根据需求,首先定义以下3大要素
l 采集源,即source——监控文件目录 : spooldir
l 下沉目标,即sink——HDFS文件系统 : hdfs sink
l source和sink之间的传递通道——channel,可用file channel 也可以用内存channel
执行步骤:spooldir-hdfs.conf文件拷贝,执行命令 bin/flume-ng agent -c ./conf -f ./conf/spooldir-hdfs.conf -n a1 -Dflume.root.logger=INFO,console
测试: 往/home/hadoop/flumeSpool放文件(mv ././xxxFile /home/hadoop/flumeSpool),但是不要在里面生成文件
B:采集文件到HDFS!!!
采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去
根据需求,首先定义以下3大要素
l 采集源,即source——监控文件目录 : spooldir
l 下沉目标,即sink——HDFS文件系统 : hdfs sink
l source和sink之间的传递通道——channel,可用file channel 也可以用内存channel
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#exec 指的是命令
# Describe/configure the source
a1.sources.r1.type = exec
#F根据文件名追中, f根据文件的nodeid追中
a1.sources.r1.command = tail -F /home/hadoop/log/test.log
a1.sources.r1.channels = c1
# Describe the sink
#下沉目标
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
#指定目录, flume帮做目的替换
a1.sinks.k1.hdfs.path =/flume/events/%y-%m-%d/%H%M/
#文件的命名, 前缀
a1.sinks.k1.hdfs.filePrefix = events-
#10 分钟就改目录,可想而知如果是京东大数据,也许得一个月一个文件夹
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue =10
a1.sinks.k1.hdfs.roundUnit = minute
#文件滚动之前的等待时间(秒) 过了三秒钟就切换到新文件中
a1.sinks.k1.hdfs.rollInterval =3
#文件滚动的大小限制(bytes)。。在大规模日志存储上万条才可能新建一个文件,因为条数限制可能达不到规定字节。
a1.sinks.k1.hdfs.rollSize =500
#写入多少个event数据后滚动文件(事件个数)
a1.sinks.k1.hdfs.rollCount =20
#5个事件就往里面写入。得到每个文件里有5条记录----其实是多个条件来限制日志的生成:周期性切到新文件;文件大小限制强制切换新文件;事件数够即切换新文件
a1.sinks.k1.hdfs.batchSize =5
#用本地时间格式化目录
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#下沉后, 生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
a1.sinks.k1.hdfs.fileType =DataStream
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity =1000
a1.channels.c1.transactionCapacity =100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
二、azkaban
主要工作是:将本地job的压缩文件提交到azkaban的web前端,然后执行,查看测试即可。
执行步骤:
web服务器
在azkaban web服务器目录下执行启动命令
bin/azkaban-web-start.sh
注:在web服务器根目录运行
或者启动到后台
nohup bin/azkaban-web-start.sh 1>/tmp/azstd.out 2>/tmp/azerr.out &
执行服务器
在执行服务器目录下执行启动命令
bin/azkaban-executor-start.sh
注:只能要执行服务器根目录运行
执行以上两句即可启动,可以回车自动切到后台。
启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://server:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码admin,admin,点击 login.
可以执行:hdfs,mapreduce,hive等job程序
三、sqoop
常用语句
①sqoop从本地数据库导入文件到HDFS,因为只有本地有数据库,所以导入本地
bin/sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \
--table emp \
--m 1
hadoop fs -cat /user/hadoop/emp/part-m-00000
bin/sqoop import--connect jdbc:mysql://hdp-node-01:3306/test --username root --password root
--table emp --hive-import--m 1
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--target-dir /queryresult \
--table emp --m 1
CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept VARCHAR(10));
bin/sqoop export \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/ #导出路径