Sqoop
介绍
Sqoop:SQL-to-Hadoop
连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS、HBase 和 Hive) 中; 把数据从 Hadoop 系统里抽取并导出到关系型数据库里
利用MapReduce,批处理方式进行数据传输
Sqoop的优势
- 高效、可控的利用资源,任务并行度、超时时间等
- 数据类型映射与转换可自动进行,用户也可自定义
- 支持多种数据库(MySQL、Oracle、PostgreSQL)
Sqoop架构
Sqoop:SQL–to–Hadoop
正如Sqoop的名字所示:Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。
Sqoop常见故障
1、sqoop将mysql表导入到hive中报错
... 51 more
Caused by: java.net.UnknownHostException: hdfsCluster
... 69 more
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:java.lang.IllegalArgumentException: java.net.UnknownHostException: hdfsCluster)
19/09/26 15:58:48 ERROR ql.Driver: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:java.lang.IllegalArgumentException: java.net.UnknownHostException: hdfsCluster)
19/09/26 15:58:48 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive CliDriver exited with status=1
原因分析:
用户的hive数据库的location设置出错,建表的时候将location设置成为了hdfsCluster而不是集群hdfs的位置,导致报错。
解决方案:修改hive数据库的location
2、sqoop作业运行失败
报错信息如下:main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
原因分析:java安全策略问题,通过修改jdk安全策略文件解决
解决方案:
修改%JAVA_HOME%jrelibsecurityjava.policy
,添加如下授权:
permission javax.management.MBeanTrustPermission "register";
Flume
介绍
Apache Flume是一个分布式的、可靠的、可用的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储。
Apache Flume的使用不仅仅局限于日志数据聚合。由于数据源是可定制的,
Flume可以用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。
优点
1.可以和任意集中式存储进行集成(HDFS,HBASE)
2.输入的数据速率大于写入存储目的地速率,flume会进行缓冲
3.flume提供上下文路由(数据流路线)
4.flume中的事物基于channel,使用了两个事物模型(sender receiver)确保消息被可靠发送
5.flume是 可靠的,容错的,可扩展的。
架构
Agent结构
Agent:Agent是Flume中的核心组件,用来收集数据。一个Agent就是一个JVM进程,它是Flume中最小的独立运行的单元。
在Agent中有三个组件,分别为Source,Channel,Sink
Source:数据源。负责将数据捕获后进行特殊的格式化,然后再封装在Event中,再将数据推入到Channel中
常见类型: :avro 、exec、 jms、spooling directory、source 、kafka 、netcat 等
Channel:连接source和sink的组件,可以理解为数据缓冲区(数据队列),可以将event暂存在内存上,也可以持久化到本地磁盘上,直到sink消费完。
常见类型:Memory、JDBC、File等
Sink:数据下沉。从channel中取出数据后,分发到别的地方,比如HDFS或者HBase等,也可以是其他Agent的source。当日志数据量小的时候,可以将数据存在文件系统中,并设定一定的时间间隔来存储数据。
常见类型:HDFS、Logger、File Roll、Avro、Thrift、HBase等
Flume常见故障
1、channel 为file channel 运行时报OOM:
解决办法:
File Channel默认的java内存分配太少,只有20M,提高内存分配:修改为50M,不再报错.
vim conf/flume-env.sh
代码语言:javascript复制export JAVA_OPTS="-Xms50m -Xmx50m -Dcom.sun.management.jmxremote"
2、在非Hadoop集群安装Flume,从kafka采集数据到HDFS,存储到HDFS时候报错:
原因:
缺少Hadoop相关的jar包,从Hadoop集群的jar包中复制到flume/lib/文件下即可:
缺少的jar包如下:
commons-configuration-1.6.jar hadoop-auth-2.6.0-cdh5.15.0.jar hadoop-common-2.6.0-cdh5.15.0.jar hadoop-hdfs-2.6.0.jar htrace-core-3.2.0-incubating.jar htrace-core4.4.0.1-incubating.jar