精华内容
下载资源
问答
  • 实现功能:定时日志采集并上传至HDFS文件系统的Java API实现 环境+工具:windows + 虚拟机Centos * 2 + eclipse + windows下编译的Hadoop jar包 + Hadoop集群 一、流程  1)启动一个定时任务,规划各种...

    实现功能:定时日志采集并上传至HDFS文件系统的Java API实现

    环境+工具:windows  +  虚拟机Centos * 2  +  eclipse  +  windows下编译的Hadoop jar包  +  Hadoop集群

    一、流程

           1)启动一个定时任务,规划各种路径

    ——定时探测日志源目录 (本地目录) F:/logs/get_log/ ;

    ——获取需要采集的文件 (文件过滤器,比如以get_log开头);

    ——移动这些文件到一个待上传临时目录  F:/logs/uptoload/ ;

    ——遍历临时文件目录,逐一传输至HDFS的目标路径(若不存在则创建) /access_log/logs_日期/

           上传以后HDFS文件系统中重命名的前缀:get_log_     ;   文件的后缀:.log

    ——同时将传输完成的文件移动到备份目录(若不存在则创建) F:/logs/backup_日期/

    启动第二个定时任务

            2)采用log4j输出文件采集日志

     

    实现代码:

    1.创建LogAccess类

     

    package hdfs_log;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class LogAccess {
    	public static void main(String[] args) {
    		//定义一个定时器对象,每隔1小时运行一次日志获取任务
    		Timer tm = new Timer();
    		//继承TimerTask类,重新run方法
    		tm.schedule(new AccessTask(), 0, 60*60*1000L);
    		
    	}
    
    }

    2.Timer schedule方法中的第一个参数为 TimerTask的子类,并重写run()方法

    package hdfs_log;
    
    import java.io.File;
    import java.io.FilenameFilter;
    import java.net.URI;
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.TimerTask;
    import java.util.UUID;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.log4j.Logger;
    
    
    public class AccessTask extends TimerTask {
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		//构造一个log4j日志对象
    		Logger logger = Logger.getLogger("logRollingFile");
    		//获取日志采集日期,用于命名
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH");
    		String date = sdf.format(new Date());
    		
    		//创建本地日志源目录,通过文件过滤实现特定文件提取,存储在文件列表中
    		File srcDir = new File("f:/logs/get_log/");
    		File[] srcList = srcDir.listFiles(new FilenameFilter() {
    			
    			@Override
    			public boolean accept(File dir, String name) {
    				// 提取以get_log为前缀的日志文件
    				if(name.startsWith("get_log.")) {
    					return true;
    				}else {
    					return false;
    				}
    				
    			}
    		});
    		//输出日志信息
    		logger.info("探测到如下文件需要采集" + Arrays.toString(srcList));
    		//移动文件至待上传临时目录
    		try {
    		File toupload = new File("f:/logs/toupload/");
    		for(File srcfile: srcList) {
    			FileUtils.moveFileToDirectory(srcfile, toupload, true);
    			}
    		//输出日志信息
    		logger.info("文件上传至临时目录:" + toupload.getAbsolutePath());
    			
    		//建立hdfs访问,将临时目录内文件上传至hdfs文件系统
    		FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.143:9000/"), new Configuration(), "hadoop000");	
    		File[] toupload_List = toupload.listFiles();
    		//判断hdfs和备份目录是否存在,若不存在则创建
    		Path hdfsDir = new Path("/access_log/logs4" + date);
    		if(!fs.exists(hdfsDir)){
    			fs.mkdirs(hdfsDir);
    		}
    		File backupDir = new File("f:/logs/backup" + date);
    		if(!backupDir.exists()) {
    			backupDir.mkdirs();
    		}
    		
    		//上传文件至hdfs文件
    		for(File load_file:toupload_List) {
    			Path hdfs_dst = new Path("/access_log/logs4"+date+"/get_log_"+UUID.randomUUID()+".log");
    			fs.copyFromLocalFile(new Path(load_file.getAbsolutePath()), hdfs_dst);
    			//输出日志信息
    			logger.info("日志上传至HDFS文件目录:" + hdfs_dst);
    			//将文件移动至备份文件目录,输出日志信息
    			FileUtils.moveFileToDirectory(load_file, backupDir, true);
    			logger.info("日志备份至如下文件目录:" + backupDir);
    			}	
    		fs.close();
    				
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    
    }
    

    3.运行结果

    输出日志信息: 

    2018-八月-24 11:23:16-[TS] INFO Timer-0 logRollingFile - 探测到如下文件需要采集[f:\logs\get_log\get_log.1, f:\logs\get_log\get_log.3]
    2018-八月-24 11:23:16-[TS] INFO Timer-0 logRollingFile - 文件上传至临时目录:f:\logs\toupload
    2018-八月-24 11:23:22-[TS] INFO Timer-0 logRollingFile - 日志上传至HDFS文件目录:/access_log/logs42018-08-24-11/get_log_787bb116-6d14-4cd3-bddf-a33e28740aec.log
    2018-八月-24 11:23:22-[TS] INFO Timer-0 logRollingFile - 日志备份至如下文件目录:f:\logs\backup2018-08-24-11
    2018-八月-24 11:23:22-[TS] INFO Timer-0 logRollingFile - 日志上传至HDFS文件目录:/access_log/logs42018-08-24-11/get_log_f75f220a-3202-4b2f-be1f-f5c4c3a06095.log
    2018-八月-24 11:23:22-[TS] INFO Timer-0 logRollingFile - 日志备份至如下文件目录:f:\logs\backup2018-08-24-11

     

    相关参考:小牛学堂-大数据基础教程

     

    展开全文
  • android虚拟机访问本地电脑的tomcat服务器资源 首先得确认虚拟机和你电脑处都于同一个网段,如果都是在用同一路由的wifi,那么直接定义的url是输入http://电脑IP:8080/web/res文件。不同网段要设法搞到同以网段,...

    android虚拟机访问本地电脑的tomcat服务器资源

    首先得确认虚拟机和你电脑处都于同一个网段,如果都是在用同一路由的wifi,那么直接定义的url是输入http://电脑IP:8080/web/res文件。不同网段要设法搞到同以网段,例如使用随身wifi等。
    在这里插入图片描述
    获取电脑ip,打开dos界面输入ipconfig命令,找到IPv4地址

    另外提一下Android Studio模拟器联网

    Android Studio自带的模拟器本身默认是不能上网的,因为默认DNS为10.0.2.3,使用这个DNS是不能上网的。
    进入到cmd后,需要输入adb root 将模拟器root一下,才能更改DNS。然后再输入adb shell。
    接下来输入getprop获取模拟器系统属性。找到[net.eth0.dns1]这一项,发现后面为10.0.2.3。
    在这里插入图片描述
    接下来我们输入setprop net.eth0.dns1 192.168.1.1.后面的ip也可为其他。(没有[net.eth0.dns1]的话因为系统是Android9.0及以上,建议换到8.0及以下)。

    展开全文
  • 易语言本地虚拟机源码,本地虚拟机,显示工具路径,读入未用分区,获取分区位置,设置虚拟机分区,读入虚拟分区,操作并显示日志,处理显示错误提示,取驱动器文本列表,写配置目录,处理结果文件,格式化时间,取Dos短路径,...
  • 本文没有深入讲解类文件结构,而是作为类加载机制的前门知识,因为类加载机制需要对类文件有一定的了解基础,如果你希望从本文中获取详细的类文件结构信息,可能本文不是很适合你。 无关性的基石 Java虚拟机不和包括...

    代码编译的结果从本地机器码转化为字节码,是存储格式发展的一小步,却是编程语言发展得一大步。

    概述

    本文没有深入讲解类文件结构,而是作为类加载机制的前门知识,因为类加载机制需要对类文件有一定的了解基础,如果你希望从本文中获取详细的类文件结构信息,可能本文不是很适合你。

    无关性的基石

    Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class”这种特定的二进制文件格式所关联,Class文件包含了Java虚拟机指令集和符号表以及若干辅助信息。

    Class类文件的结构

    任何一个Class文件都对应着唯一一个类或接口的定义信息。Class文件是一组以8位字节为单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件内,中间没有任何分隔符,所以Class文件存储的几乎是程序运行时的必要数据。
    Class文件采用类似于C语言结构体的伪结构来存储数据,伪结构体只有两种数据类型:无符号数和表。

    • 无符号数
      无符号数属于基本的数据类型,u1、u2、u4、u8分别代表1个字节、2个字节、4个字节、8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值等

    • 表是由多个无符号数或其他表组成的复合数据类型,所有表都以_info结尾,表用于描述有层次关系的复合结构的数据。

    魔数与Class文件版本

    Class文件的头4个字节称为魔数,唯一作用是确定这个Class文件是否为能被虚拟机接受的Class文件。使用魔数而不是拓展名来标记Class文件是因为拓展名可以随时被修改。
    紧接着魔数的4个字节存储的是Class文件的版本号。高版本的JDK可以向下兼容低版本的Class文件,而不可以运行以后版本的Class文件。

    常量池

    紧接着版本号的是常量池入口,常量池可理解为Class文件之中的资源仓库,它是Class文件中与其他项目关联最多的数据类型,也是占用Class文件空间最多的数据项目,同时也是Class文件中第一个出现的表类型数据项目。
    由于常量池中常量池中常量的数量是不固定的,所以在常量池的入口放置一项u2类型的数据,用来记录常量池中常量的数量。
    常量池主要存放两大类常量:字面量和符号引用。

    • 字面量
      字面量比较接近Java语言层面的常量,如文本字符串、final定义的常量等
    • 符号引用
      符号引用属于编译原理方面的概念,包括下面三类常量:
    1. 类和接口的全限定名
    2. 字段的名称和描述符
    3. 方法的名称和描述符

    Java代码在进行javac编译的时候,没有像C或C++那样有连接这一步骤,而是在虚拟机加载Class文件时候进行动态连接。也就是说,Class文件不会保存各个方法和字段的最终内存布局信息。因此这些字段、方法的符号引用不经过运行期转换的话无法得到真正的内存入口地址,也就无法给虚拟机使用。当虚拟机运行时,需要从常量池获得对应的符号引用,再在类创建时解析到具体的内存地址。(通俗地说,只有类在加载时,被分配具体的内存空间,符号引用才会解析到具体对应的内存地址,变为直接引用,否则Class文件只存在符号引用;或者说调用一个类变量或类方法时,我们需要知道其在内存中的具体位置,才可以调用成功,所以类没有加载时,是无法知道其内存地址的,符号引用是无法调用成功的)

    类或接口表

    • tag tag是标记位用于区分常量类型。一下是14种常量类型代表的具体含义:

    name_index
    name_index是一个索引值,指向常量池中一个CONSTANT_Utf8_info类型常量,此常量代表这个类或接口的全限定名。

    其他的表如方法表、属性表等都类似,这里不一一细说。

    展开全文
  • PassJava (佳必过) 项目全套学习教程连载中...本地VirtualBox 网络地址 192.168.56.1,则修改虚拟机IP地址为同一个网段下,比如192.168.56.10 2.配置虚拟机IP地址 打开Vagrant 配置文件 C:UsersAdministratorVagran...

    PassJava (佳必过) 项目全套学习教程连载中,关注公众号第一时间获取。

    配置虚拟机网络

    1.查看VirtualBox Host-Only Network

    1bd82eda966072bd90f01fa8732609d4.png

    本地VirtualBox 网络地址 192.168.56.1,则修改虚拟机IP地址为同一个网段下,比如192.168.56.10

    2.配置虚拟机IP地址

    打开Vagrant 配置文件 C:UsersAdministratorVagrantfile

    # config.vm.network "private_network", ip: "192.168.33.10"
    修改为
    config.vm.network "private_network", ip: "192.168.56.10"

    3.重新加载虚拟机

    vagrant reload

    4.查看虚拟机IP地址

    虚拟机IP地址:192.168.56.10,和配置文件中的一致

    14d496994d433405c2391903c1698430.png

    5.测试本机是否可以ping通虚拟机

    ping 192.168.56.10,可以ping通

    62bf3500530dc64b070f439424995254.png

    6.测试虚拟机是否可以ping通本机

    ping 192.168.10.160,可以ping通

    fbbc99dd06443cc74acf737cc317fe91.png

    公众号

    bcef49d6b3e0a3b562a9afef66acb658.png
    展开全文
  • 易语言本地虚拟机源码系统结构:显示工具路径,读入未用分区,获取分区位置,设置虚拟机分区,读入虚拟分区,操作并显示日志,处理显示错误提示,取驱动器文本列表,写配置目录,处理结果文件,格式化时间,取Dos短路径,...
  • 本人今日在研究虚拟机时想要将一个安装包上传到linux上面去,但是使用xshell连接时连接被拒绝(linux虚拟机网络设置的是自动连接),测试时发现linux虚拟机可以ping通本地电脑,但是反过来不行,后来发现是由于...
  • 3.获取虚拟机上centos07的地址,记住这个ip地址,等下用Xshell远程连接会用到。4.打开Xshell工具,点击文件,点击新建5.连接时输入你虚拟机上的centos07的账号和密码。安装jdk141.打开xftp,输入密码2.下载jdk14...
  • 一般情况下系统源一般为网络源,但是在一些...第一个获取虚拟机的IP地址,如果已经知道,就直接用,不知道就登录远程centos,输入命令ifconfig -a,里面有本地局域网IP,由于这里是测试,远程离线库,IP问题可以自己
  • 【RHEL7】给虚拟机配置Yum本地仓库

    千次阅读 2018-09-13 20:04:19
    这里我们通过系统镜像文件获取本地源。   1.VMware选择使用镜像文件   2.进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件),使用Vim编辑器创建一个名为rhel7.repo的新配置文件...
  • 本地的虚机打开出现如下错误 点击获取所有权 这时候不要删除虚拟机,这种错误一般是由于虚拟机没有正常关闭引起的。 根据提示我们找到了.lck文件(后缀名为“.LCK”格式的文件。它记录着验证者的个人信息,...
  • 正在虚拟机弄东西 突然死机了 重启之后发现虚拟机启动不了 提示虚拟机正在使用中请获取所有权,但是不管怎么弄,就是打开不了,于是查了下资料 因为突然关闭 所有配置文件多了锁定文件 进你的虚拟机本地文件夹里 ...
  • 比如:Class 文件的组成结构,Java 的单继承在 Class 文件结构里是如何体现的?反射机制是如何实现的,通过类名创建类的实例在虚拟机里是如何操作的?反编译的字节码指令在虚拟机里是如何实现的,ldc 与 ldc_w 有何...
  • 安装虚拟机后,我们就要想办法进行文件传输,一方面我们可以用虚拟机自带的Tools,另一方面我们可以采用SecureCRT 进行传输。...service sshd start再用ifconfig获取本地ip 打开SecureCRT,新建sess
  • 在vmware上安装centos 7,注意把网络选择为桥接模式,在...为了方便,可以在宿主机的hosts文件中给虚拟机的ip一个域名,也要注意,虚拟机使用dhcp获取动态ip,可能ip会变化,使用ip addr检查即可。 转载于:https:...
  • 1、首先打开虚拟机,调出终端,输入指令:ifconfig | grep inet 找出虚拟机的IP(一般是第二条记录,我...图中的红色方框代表所要创建会话的名字,图中的椭圆框代表虚拟机IP(第一步所获取的IP)。 除了这两个地方要...
  • 由于最近工作需要,研究了如何在本地获得远程服务器上虚拟机开机时间的获取。 首先的思路是想用libvirt的virsh命令来取,但是看了一边它的API,没有相应的命令可用。 于是转换思路,考虑linux系统中会有记录系统文件...
  • 我们在开发过程中,虽然公司往往应该有测试环境,但是为了方便,还是有的时候需要在本地运行虚拟机。 vmware虚拟机在使用过程中,偶尔会出现“该虚拟机似乎正在使用中”,无法正常打开,获取控制权也无效,这个时候...
  • 再通过Java代码从Kafka的Topic中获取数据临时保存到本地文件中,再将本地文件上传到HDFS上 1.虚拟机启动 zookeeper、Kafka。 2.在启动一个生产者、一个消费者。 注:脚本文件:/root/log [root@hdp-1 log]# ./...
  • 由于是第一次碰linux,这个问题搞了我好几天了,,,一直以为是我配置错了,结果是我本地的服务没开,,,,,,,,,无语了,, 开启后就可以了: 如果开了,但是还是获取不到,可以继续下面的操作(这...
  • 配置虚拟机网络

    2020-04-09 09:50:46
    PassJava (佳必过) 项目全套学习教程连载中...本地VirtualBox 网络地址 192.168.56.1,则修改虚拟机IP地址为同一个网段下,比如192.168.56.10 2.配置虚拟机IP地址 打开Vagrant 配置文件 C:\Users\Administrator\Vag...
  • Android虚拟机

    2019-11-12 09:42:39
    文章目录JVM结构解析编译流程类加载器加载流程JVM内存管理Java栈区本地方法栈方法...Loading:类的信息从文件获取并且载入到JVM的内存里 Verifying:检查读入的结构是否符合jvm规范的描述 Preparing:分配一个结构...
  • Java虚拟机(二)

    2021-01-05 00:33:49
    应用程序运行时始终获取的都是我们虚拟机内部的数据信息,我们加载的类可以是本地文件,可以是来自于网络,也可以是在运行过程中生成的。因为所有的数据信息都可以以二进制数据的方式保存,因此,我们可以通过各种...
  • 注:此文是我在读完周志明老师的深入理解Java虚拟机之后总结的一篇文章,请阅读此书获取更加详细的信息.在这篇文章中,我们将会介绍:编译器与解释器的关系什么样的代码才会在运行时被编译成本地代码?在何时被编译...
  • 局域网内无法使用UDL文件获取SQL Server服务器名称 环境: 1.本地windows10操作系统笔记本一台 2.本地计算机开的windows xp虚拟机一台 描述: 1本地计算机安装了sql server2016,服务器名称为DESKTOP-98LU63V\SQL...
  • 1、本地的linux虚拟机设置为桥接模式,使其可以被外网访问 2、去natapp官网注册一个账号,实名认证后购买一个免费的隧道: https://natapp.cn/ 3、购买后进行配置 照着下图配置好后保存 4、下载客户端 将下载好...
  • 规范中没有明确限制或约束Java虚拟机实现的某些具体细节,这样的话,设计者完全可以自主决定规范中不曾描述的虚拟机内部细节,比如:类加载中的加载阶段并没有指明二进制字节流必须得从某个Class文件获取、内存...
  • 类加载器用来取得从网络获取的或存于本地机器上的类文件字节码。下一步由字节码校验器检查这些类文件是否有正确的格式,以确认在运行时不会有破坏内存的行为。Java解释器将字节码解释翻译成机器码,而JIT编译器也可...
  • Linux虚拟机设置静态IP

    千次阅读 2018-04-25 15:57:18
    虚拟机工具:VMware Workstation Pro 12 LInux版本:CentOS 7 1、设置本地VM8虚拟地址 以Windows系统为例 打开控制面板\网络和 Internet\网络连接 若是适配器获取IP规则为自动获取ip则改为手动设置ip 可以...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 233
精华内容 93
关键字:

虚拟机获取本地文件