Sqoop/Flume/Logstash数据采集软件的对比与教程

Sqoop/Flume/Logstash 说明

Apache Sqoop

Apache Sqoop:是一款Hadoop关系数据库之间传送数据的工具。

导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库;

工作机制:将导入或导出命令翻译成mapreduce程序来实现,所以安装sqoop的前提是已经具备java和安装在Hadoop client的环境。

Apache Flume

中文文档:https://hlog.cc/docs/flume1.9/

Apache Flume:是一个分布式、可靠(事务)、和高可用(故障转移)的海量日志采集、汇聚和传输大量流式事件数据

Flume可以采集文件、文件夹、socket数据包(网络端口)、kafka、mysql数据库等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中。

Flume中最核心的角色是agent,Flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道(形象点理解为Agent的网络)。对于每一个Agent来说,它负责从数据源接收数据,并发往下一个目的地。每一个agent相当于一个数据(被封装成Event对象)传递员,内部有三个组件:Source(采集组件)、Channel(传输通道组件)、Sink(下沉组件)。

Flume更多的应用场景是大数据技术栈的数据收集。

Logstash

Logstash是著名的开源数据栈ELK(ElasticSearch,Logstash,Kibana)中的那个L。几乎在大部分的情况下,ELK作为一个栈是被同时使用的。在你的数据系统使用ElasticSearch的情况下,Logstash是首选。

ELK一般用于运维日志分析,或集中化日志管理。

Flume与Logstash对比

  • 两个软件其思想架构大致相同。
  • 功能上:Flume比较注重于数据的传输,数据可靠;logstash比较注重于字段的预处理,Logstash有几十个插件,配置灵活。
  • Logstash配置简单灵活,Flume配置复杂强调自定义开发。

Sqoop 教程

Sqoop的主要功能如下

导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库;

工作机制:将导入或导出命令翻译成mapreduce程序来实现

Sqoop安装

cd /opt/soft
wget http://archive.apache.org/dist/sqoop/1.99.7/sqoop-1.99.7-bin-hadoop200.tar.gz
tar zxf sqoop-1.99.7-bin-hadoop200.tar.gz
mv sqoop-1.99.7-bin-hadoop200 /opt/server/sqoop-1.99.7

cd /opt/server/sqoop-1.99.7

vim conf/sqoop.properties
# 修改配置文件中,hadoop配置文件的目录
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/opt/server/hadoop-3.3.2/etc/hadoop
# 全局替换掉配置文件中的 @BASEDIR@  @LOGDIR@ 
# 设置日志文件的目录
0,%s/@LOGDIR@/\/opt\/server\/sqoop-1.99.7\/logs/g
# 设置数据的存放目录
0,%s/@BASEDIR@/\/opt\/server\/sqoop-1.99.7\/bin\/basedir/g


# 修改环境变量
vim /etc/profile

export SQOOP_HOME=/opt/server/sqoop-1.99.7
export PATH=$PATH:$SQOOP_HOME/bin

source /etc/profile

# 将 mysql 的驱动放到sqoop的server/lib目录下
cp /opt/server/hive-3.1.3/lib/mysql-connector-java-5.1.47.jar /opt/server/sqoop-1.99.7/server/lib

# derby数据库驱动 替换成最新版本。如果不替换可能会报错
cp /opt/server/hive-3.1.3/lib/derby-10.14.1.0.jar /opt/server/sqoop-1.99.7/server/lib
rm /opt/server/sqoop-1.99.7/server/lib/derby-10.8.2.2.jar

# 修改hadoop的core-site.xml文件
vim /opt/server/hadoop-3.3.2/etc/hadoop/core-site.xml

# 注意 root 表示当前用户
  <property>
      <name>hadoop.proxyuser.root.hosts</name>
      <value>*</value>
  </property>
  <property>
      <name>hadoop.proxyuser.root.groups</name>
      <value>*</value>
  </property>

# 初始化和验证
cd /opt/server/sqoop-1.99.7/bin
sqoop2-tool upgrade
sqoop2-tool verify

# 服务器 您需要在集群中的单个节点上安装服务器。该节点将作为所有Sqoop客户端的入口点。
# 客户端 客户端可以安装在任意数量的机器上。

# sqoop服务端,启动与停止
sqoop2-server start
sqoop2-server stop

# jps命令中查看是否有 SqoopJettyServer 进程
jps

# sqoop客户端
sqoop2-shell

Sqoop使用

# 启动客户端
sqoop2-shell

# 连接到sqoop服务器
show server --all # 查看连接的server信息
set server --host node1 --port 12000   # 设置server,默认值 localhost 12000 

# 验证连接


# 查看sqoop支持的连接器
show connector

# 创建mysql连接
create link -c generic-jdbc-connector
mysqldb # 连接名称
com.mysql.jdbc.Driver # 数据库类
jdbc:mysql://8.129.215.19:3333/aimini_admin?autoReconnect=true&failOverReadOnly=false&useSSL=false # 数据库连接字符串,如果没有useSSL会报错 GENERIC_HDFS_CONNECTOR_0001
root # 账号
xxxxxx # 密码
Identifier enclose: 空格 # 如果这里直接回车会报错:GENERIC_JDBC_CONNECTOR_0016


# 创建hdfs连接
create link -c hdfs-connector # 或者 create link -connector hdfs-connector
hdfs # 连接名称
hdfs://node1:9000/sqoop/demo1 # hadoop配置文件core-site.xml中的fs.defaultFS值

# 创建mysql导数据到hdfs的job
create job -f mysqldb -t hdfs
mysql2hdfs # job名
Schema name:数据库名
Table name:表名
Output directory: /sqoop/demo1  # 注意这个目录是空目录,不然会报错 GENERIC_HDFS_CONNECTOR_0007


# 创建hdfs导数据到mysql的job
create job -f hdfs -t mysqldb 
hdfs2mysql # job名

# 显示job
show job

# 启动job
start job -n mysql2hdfs 

Logstash 教程

此处评论已关闭