打印日志文件并将其上传存到HDFS中

在本地打印日志 , 对日志文件进行分析 , 把需要上传的日志文件移动到待上传目录 , 将待上传的日志文件逐个上传到HDFS , 并移动到备份目录 , 定期清理过期备份日志 .


1.首先生产日志文件:


 
 
  1. /**
  2. * 生产日志
  3. * @author Administrator
  4. *
  5. */
  6. public class MoreLog {
  7. public static void main(String[] args) throws Exception {
  8. Logger logger = LogManager.getLogger(MoreLog.class);
  9. System.out.println( "开始打印日志了");
  10. while( true){
  11. logger.info( "张俊杰zhangjunjie张俊杰zhangjunjie张俊杰zhangjunjie");
  12. Thread.sleep( 1);
  13. }
  14. }
  15. }

2.启动日志采集和日志清理


 
 
  1. /**
  2. * 启动日志采集
  3. * 和日志清理
  4. * @author Administrator
  5. *
  6. */
  7. public class StartUp {
  8. public static void main(String[] args) {
  9. Timer timer = new Timer();
  10. //上传
  11. timer.schedule( new ClollactionTask(), 0, 2* 60* 1000l);
  12. //清理文件
  13. timer.schedule( new ClearTask(), 0, 24* 60* 1000);
  14. }
  15. }

3.日志采集并上传HDFS


 
 
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. import java.net.InetAddress;
  4. import java.net.URI;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.TimerTask;
  8. import org.apache.commons.io.FileUtils;
  9. import org.apache.hadoop.conf.Configuration;
  10. import org.apache.hadoop.fs.FileSystem;
  11. import org.apache.hadoop.fs.Path;
  12. /**
  13. * 日志采集的:
  14. * 1.从日志目录里面查看哪些需要上传(1.2.3.....)
  15. * 2.把需要上传的文件移动到待上传文件
  16. * 3.上传到hdfs上(/log/2018-8-20/xxx.log)
  17. * 4.将上传完成的日志文件移动到备份目录
  18. * @author Administrator
  19. *
  20. */
  21. public class ClollactionTask extends TimerTask{
  22. @Override
  23. public void run() {
  24. System.out.println( "开始执行任务");
  25. try {
  26. SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd-HH-mm");
  27. String datetime = format.format( new Date());
  28. // 1:查看哪些文件是需要上传的
  29. File logDir = new File( "e:/testlog/");
  30. File[] listFiles = logDir.listFiles( new FilenameFilter() {
  31. // FileNameFilter 是过哪些文件能够获取的
  32. @Override
  33. public boolean accept(File dir, String name) {
  34. return name.startsWith( "test.log.");
  35. }
  36. });
  37. // 2:将文件移动到待上传目录
  38. for (File file : listFiles) {
  39. // file.renameTo(new File(""));
  40. FileUtils.moveFileToDirectory(file, new File( "e:/waitUpLoad"), true);
  41. }
  42. //3:将待上传的文件逐个上传到hdfs上,并移动到备份目录
  43. FileSystem fs = FileSystem.get( new URI( "hdfs://hadoop01:9000"), new Configuration(), "root");
  44. Path detPath = new Path( "/log/"+datetime.substring( 0, 10));
  45. //判断待上传的目录是否存在,不存在则创建一个(hdfs上的文件夹)
  46. boolean exists = fs.exists(detPath);
  47. if(!exists){
  48. fs.mkdirs(detPath);
  49. }
  50. //判断备份目录是否存在
  51. File backDir = new File( "e:/backDir/"+datetime);
  52. boolean exists2 = backDir.exists();
  53. if(!exists2){
  54. backDir.mkdirs();
  55. }
  56. //得到上传的是哪一个服务上的日志文件
  57. String hostName = InetAddress.getLocalHost().getHostName();
  58. //4:遍历待上传的目录
  59. File file = new File( "e:/waitUpLoad");
  60. File[] listFile = file.listFiles();
  61. for (File f : listFile) {
  62. //上传到hdfs上
  63. fs.copyFromLocalFile( new Path(f.getPath()), new Path(detPath,hostName+ "_"+f.getName()+ "_"+System.currentTimeMillis()));
  64. //cp到备份目录
  65. FileUtils.moveFileToDirectory(f, backDir, true);
  66. }
  67. fs.close();
  68. } catch (Exception e) {
  69. e.getStackTrace();
  70. }
  71. }
  72. }

4.清理过期日志


 
 
  1. import java.io.File;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.TimerTask;
  5. import org.apache.commons.io.FileUtils;
  6. /**
  7. * 清理过期日志
  8. * @author Administrator
  9. *
  10. */
  11. public class ClearTask extends TimerTask {
  12. @Override
  13. public void run() {
  14. try {
  15. SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd-HH-mm");
  16. Date nowdate = new Date();
  17. File file = new File( "E:/backDir");
  18. File[] listFiles = file.listFiles();
  19. for (File dir : listFiles) {
  20. String name = dir.getName();
  21. Date dirdate = format.parse(name);
  22. if(nowdate.getTime() - dirdate.getTime() > 24* 60* 60* 1000) {
  23. FileUtils.deleteDirectory(dir);
  24. }
  25. }
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

附:log4j配置文件


 
 
  1. log4j.rootLogger =ALL,systemOut,logRollingFile
  2. #log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB
  3. #\u8F93\u51FA\u5230\u63A7\u5236\u53F0
  4. log4j.appender.systemOut = org.apache.log4j.ConsoleAppender
  5. log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout
  6. log4j.appender.systemOut.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  7. log4j.appender.systemOut.Threshold = DEBUG
  8. log4j.appender.systemOut.ImmediateFlush = TRUE
  9. log4j.appender.systemOut.Target = System.out
  10. #\u8F93\u51FA\u5230\u6587\u4EF6
  11. log4j.appender.logFile = org.apache.log4j.FileAppender
  12. log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
  13. log4j.appender.logFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  14. log4j.appender.logFile.Threshold = WARN
  15. log4j.appender.logFile.ImmediateFlush = TRUE
  16. log4j.appender.logFile.Append = TRUE
  17. log4j.appender.logFile.File = ../Struts2/WebRoot/ log/File/log4j_Struts.log
  18. log4j.appender.logFile.Encoding = UTF- 8
  19. #\u6309DatePattern\u8F93\u51FA\u5230\u6587\u4EF6
  20. log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
  21. log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
  22. log4j.appender.logDailyFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  23. log4j.appender.logDailyFile.Threshold = DEBUG
  24. log4j.appender.logDailyFile.ImmediateFlush = TRUE
  25. log4j.appender.logDailyFile.Append = TRUE
  26. log4j.appender.logDailyFile.File = ../Struts2/WebRoot/ log/DailyFile/log4j_Struts
  27. log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm '.log'
  28. log4j.appender.logDailyFile.Encoding = UTF- 8
  29. #\u8BBE\u5B9A\u6587\u4EF6\u5927\u5C0F\u8F93\u51FA\u5230\u6587\u4EF6
  30. log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender
  31. log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout
  32. log4j.appender.logRollingFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  33. log4j.appender.logRollingFile.Threshold = DEBUG
  34. log4j.appender.logRollingFile.ImmediateFlush = TRUE
  35. log4j.appender.logRollingFile.Append = TRUE
  36. log4j.appender.logRollingFile.File = e: /testlog/test.log
  37. log4j.appender.logRollingFile.MaxFileSize = 1MB
  38. log4j.appender.logRollingFile.MaxBackupIndex = 50
  39. log4j.appender.logRollingFile.Encoding = UTF- 8
  40. #\u7528Email\u53D1\u9001\u65E5\u5FD7
  41. log4j.appender.logMail = org.apache.log4j.net.SMTPAppender
  42. log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout
  43. log4j.appender.logMail.layout.LocationInfo = TRUE
  44. log4j.appender.logMail.layout.Title = Struts2 Mail LogFile
  45. log4j.appender.logMail.Threshold = DEBUG
  46. log4j.appender.logMail.SMTPDebug = FALSE
  47. log4j.appender.logMail.SMTPHost = SMTP. 163.com
  48. log4j.appender.logMail.From = xly300 0@163.com
  49. log4j.appender.logMail.To = xly300 0@gmail.com
  50. #log4j.appender.logMail.Cc = xly3000@gmail.com
  51. #log4j.appender.logMail.Bcc = xly3000@gmail.com
  52. log4j.appender.logMail.SMTPUsername = xly300 0
  53. log4j.appender.logMail.SMTPPassword = 1234567
  54. log4j.appender.logMail.Subject = Log4j Log Messages
  55. #log4j.appender.logMail.BufferSize = 1024
  56. #log4j.appender.logMail.SMTPAuth = TRUE
  57. #\u5C06\u65E5\u5FD7\u767B\u5F55\u5230MySQL\u6570\u636E\u5E93
  58. log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
  59. log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
  60. log4j.appender.logDB.Driver = com.mysql.jdbc.Driver
  61. log4j.appender.logDB.URL = jdbc:mysql: // 127.0. 0. 1: 3306/xly
  62. log4j.appender.logDB.User = root
  63. log4j.appender.logDB.Password = 123456
  64. log4j.appender.logDB.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values( 'Struts2', '%d{yyyy-MM-ddHH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用以下命令将csv文件上传HDFS: ``` hdfs dfs -put /local/path/to/file.csv /hdfs/path/to/upload/ ``` 其,`/local/path/to/file.csv` 是本地csv文件的路径,`/hdfs/path/to/upload/` 是上传HDFS的目标路径。请确保你已经安装了Hadoop并且具有适当的权限来上传文件。 ### 回答2: 要将CSV文件上传HDFS,你可以通过以下步骤完成: 1. 首先,确保你已经安装了Hadoop和HDFS,并且集群正在运行。 2. 打开终端,使用以下命令导航到Hadoop的安装目录:`cd /path/to/hadoop`. 3. 使用以下命令切换到HDFS用户:`sudo -u hdfs hdfs dfs -mkdir /input`,创建一个名为input的目录,作为CSV文件的目标路径。 4. 使用以下命令将CSV文件复制到HDFS的input目录:`sudo -u hdfs hdfs dfs -put /path/to/csvfile.csv /input/csvfile.csv`。 这将把本地的csvfile.csv文件复制到HDFS的/input目录下。 5. 确保文件已经成功上传,可以使用以下命令列出/upload目录下的文件:`sudo -u hdfs hdfs dfs -ls /input`。如果你看到csvfile.csv文件的列表项,表示文件上传成功。 通过以上步骤,你已经成功将CSV文件上传HDFS的input目录下。你可以使用Hadoop和相关工具来处理这个文件了。注意,在执行上述命令时,请根据你的实际路径和文件名进行相应的更改。 ### 回答3: 要将CSV文件上传HDFS,可以按照以下步骤进行操作。 首先,确保已经在本地计算机上安装了Hadoop和HDFS,并且已经启动了HDFS服务。 然后,将CSV文件从本地计算机复制到HDFS上传目录。可以使用以下命令实现: ``` hadoop fs -put <本地文件路径> <HDFS上传目录路径> ``` 其,本地文件路径是指CSV文件在本地计算机的路径,HDFS上传目录路径是指要将文件上传HDFS的目标路径。 等待文件上传完成后,可以使用以下命令来验证是否成功上传: ``` hadoop fs -ls <HDFS目录路径> ``` 其HDFS目录路径是指要查看的目录路径,包括CSV文件。 如果成功上传,可以在输出看到CSV文件的相关信息,如文件大小、修改日期等。 通过以上步骤,就可以将CSV文件成功上传HDFS了。接下来可以使用Hadoop和HDFS提供的功能对CSV文件进行处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值