flume获取mysql日志到hdfs_Hadoop实战:Flume输入日志到HDFS报错解决
使用Flume把日志存储到HDFS,在启动时报错如下:
2017-06-16 08:58:32,634 (conf-file-poller-0) [ERROR - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:146)] Failed to start agent because dependencies were not found in classpath. Error follows.
java.lang.NoClassDefFoundError: org/apache/hadoop/io/SequenceFile$CompressionType
at org.apache.flume.sink.hdfs.HDFSEventSink.configure(HDFSEventSink.java:235)
at org.apache.flume.conf.Configurables.configure(Configurables.java:41)
at org.apache.flume.node.AbstractConfigurationProvider.loadSinks(AbstractConfigurationProvider.java:411)
at org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:102)
at org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:141)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.io.SequenceFile$CompressionType
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2017-06-1608:58:32,634(conf-file-poller-0)[ERROR-org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:146)]Failedtostartagentbecausedependencieswerenotfoundinclasspath.Errorfollows.
java.lang.NoClassDefFoundError:org/apache/hadoop/io/SequenceFile$CompressionType
atorg.apache.flume.sink.hdfs.HDFSEventSink.configure(HDFSEventSink.java:235)
atorg.apache.flume.conf.Configurables.configure(Configurables.java:41)
atorg.apache.flume.node.AbstractConfigurationProvider.loadSinks(AbstractConfigurationProvider.java:411)
atorg.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:102)
atorg.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:141)
atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
atjava.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
atjava.lang.Thread.run(Thread.java:748)
Causedby:java.lang.ClassNotFoundException:org.apache.hadoop.io.SequenceFile$CompressionType
atjava.net.URLClassLoader.findClass(URLClassLoader.java:381)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:424)
atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:357)
...12more
其实这个报错信息真的不太友好,看不错哪里有问题。第一眼看上去一直以为是JAVA的classpath有问题,后来在网上看到一篇文章:安装Flume遇到的问题及解决,说是缺少Hadoop相关的jar包导致,想想也对。解决这个问题也很简单,就是在Flume主机上解压好Hadoop的二进制安装包,然后输出Hadoop环境变量即可,Flume会根据环境变量自动找到相关的依赖jar包。
由于我这里的Flume是独立安装,没有部署在Hadoop机器上,所以需要在Flume主机上安装一个Hadoop。
Hadoop二进制包下载自行去国内源或者官网搞定。
$ tar xvf hadoop-2.8.0.tar.gz -C /usr/local/
$ ln -sv /usr/local/hadoop-2.8.0/ /usr/local/hadoop
$ useradd hadoop
$ passwd hadoop
1
2
3
4
$tarxvfhadoop-2.8.0.tar.gz-C/usr/local/
$ln-sv/usr/local/hadoop-2.8.0//usr/local/hadoop
$useraddhadoop
$passwdhadoop
然后最主要的就是输出Hadoop环境变量,编辑环境配置文件/etc/profile.d/hadoop.sh,定义类似如下环境变量,设定Hadoop的运行环境。
#!/bin/bash
#
export HADOOP_PREFIX="/usr/local/hadoop"
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
1
2
3
4
5
6
7
8
#!/bin/bash
#
exportHADOOP_PREFIX="/usr/local/hadoop"
exportPATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
exportHADOOP_COMMON_HOME=${HADOOP_PREFIX}
exportHADOOP_HDFS_HOME=${HADOOP_PREFIX}
exportHADOOP_MAPRED_HOME=${HADOOP_PREFIX}
exportHADOOP_YARN_HOME=${HADOOP_PREFIX}
$ source /etc/profile
1
$source/etc/profile
再次运行Flume-ng就应该可以了。
另外,当Flume-ng正常运行后,写入HDFS时报错:java.lang.NoClassDefFoundError: org/apache/hadoop/io/SequenceFile$CompressionType
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=root, access=WRITE, inode=”/”:hadoop:supergroup:drwxr-xr-x.
这个提示很明显,就是没有写入权限(因为你当前运行flume-ng的用户不是Hadoop用户),解决方案也很简单,就是切换到Hadoop用户执行flume-ng命令即可。
$ chown hadoop.hadoop -R /usr/local/flume/
$ su - hadoop
$ flume-ng .....
1
2
3
$chownhadoop.hadoop-R/usr/local/flume/
$su-hadoop
$flume-ng.....
或者开启HDFS允许所有用户进行文件写入,默认可能你没有开启。需要在hdfs-site.xml配置文件中添加一项属性定义:
dfs.permissions
false
1
2
3
4
dfs.permissions
false
完结。。。
如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
flume获取mysql日志到hdfs_Hadoop实战:Flume输入日志到HDFS报错解决相关推荐
- mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
mysql utf8mb4 保存微信昵称特殊字符报错方法 公众号二次开发,在处理用户昵称的时候发现有的时候一些emoji是4字节的表情无法保存入库,经过查找资料发现是因为字段的编码问题造成的, utf ...
- mysql安装步骤傻瓜式教学及MSVCR120.dll问题报错解决
一.下载安装包: 安装的目录应当放在指定位置,其次,绝对路径中避免出现中文,推荐首选英文为命名条件!(有中文也可以)安装包我放在网盘了,需要自取 百度网盘链接:https://pan.baidu.co ...
- MySQL could not be resolved: Temporary failure in name resolution报错解决方法
最近几天研发总是抱怨用Navicat连接MySQL数据库和打开数据表很慢,登录数据库分析,查看错误日志: mysql> show variables like 'log_error'; +--- ...
- mysql 主库down机_MySQL从库服务器down机报错Could not parse relay log event entry
环境介绍: 最近网站总是出问题,因为play服务总是跑着跑着就死了,于是经理尝试把play跑在我的MySQL这两台服务器上(因为这两台服务器的资源很空闲),可是没想到才跑了半天,就把服务器的128G内 ...
- Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)
2019独角兽企业重金招聘Python工程师标准>>> Linux下MySql插入汉字报错解决(/etc/my.cnf不存在) 看了很多帖子,大多数是说修改my.cnf,如 http ...
- mysql -u 报错_MySQL报错解决!
大家好:我是小狼,最近工作一直瞎忙,没时间写东西,终于有点时间了,现在我正在搭建extmail服务器,文档是参考这里:http://www.extmail.org/forum/thread-7002- ...
- please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法
php安装扩展mysqli的实现步骤及报错解决办法 terminal#cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./c ...
- IDEA 2020.3 连接mysql数据库报错解决
IDEA 2020.3 连接mysql数据库报错解决 问题: Cannot connect to "Connection". The server time zone value ...
- Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法
Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...
最新文章
- HDU1753 大明A+B(大数相加)(Java题解)
- ecplice中class.forname一直报错_Python怎么把文件内容读取出来,怎么把内容写入文件中
- 前端学习(3195):虚拟dom的创建方式1的js
- epoll模型之服务器设计
- SpringBoot视频教程
- TCP TIME_WAIT 详解
- java 拟合曲线_如何通过指数曲线拟合数据
- maven仓库--私服(Nexus的配置使用)
- K8S-删除Terminating状态的namespace
- 从智能家居的发展看对讲企业的定位
- 不定式和分词作状语的区别
- siteground主机黑五优惠最低2折-2.99美元每月-vps主机-WordPress主机服务器
- 英雄联盟修改服务器封3年,LOL自定义也被封三年 竟然因为这个原因?
- springboot 实现 订单 和 微信扫码支付 功能
- 睡前必备神器——倒计时定时关闭手机音乐声音APP
- 3D变电站vr建模三维展示可视化管理系统
- 【璟丰机电】美国派克Parker产品在FPD中的行业应用案例盘点
- 《Java SE实战指南》10:特性修饰符
- python枚举窗口句柄_如何使用 WIN32 API 枚举窗口?
- 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?...
热门文章
- 认清一个人,看这四点就够了
- Offer年薪低于25W全额退款|阿里、腾讯内推快艇《全链路大数据分析工程师》课程招生简章...
- mysql xp系统时间_mysql时间类型year
- 文件字符串变量插入linux,Linux Shell脚本实现在文件指定的行插入字符串
- 原始Dao开发方法以及存在的问题
- Linux 、shell 时间函数 - 获取七天前所在周
- KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置
- ​如何让技术想法更容易被理解?
- AliExpress智能营销引擎大揭秘 - AnalyticDB如何做到快准狠省
- 阿里云荣获可信云容器安全能力先进级认证, ACK/ACR为企业级安全护航