• day 06Hadoop


    更换虚拟机以后操作的步奏
    1.到每一台机器上修改ip地址 ,然后修改hosts
    1.5 给每台机器配置免密码登录
    2.修改hadoop 的配置文件,发送到每台机器上
    3.启动dfs start-dfs.sh



    PS:Netty现在已经成为大数据的主角了
    PS:安装时hadoop格式化错误的解决方案, 说明 yarn没有起来
    http://blog.csdn.net/weiyongle1996/article/details/74094989

    安装Hadoop可能遇到的问题

    1/运行mr程序出错, yarn没有启动
    connecting to resoucemanager 
    retrying ....  
    retrying .....
    
    原因是没有启动yarn或者启动失败
    
    2/初始化工作目录结构
    hdfs namenode -format 只是初始化了namenode的工作目录
    而datanode的工作目录是在datanode启动后自己初始化的
    
    3/datanode不被namenode识别的问题
    namenode在format初始化的时候会形成两个标识:
    blockPoolId:
    clusterId:
    
    新的datanode加入时,会获取这两个标识作为自己工作目录中的标识
    
    一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然
    持有原来的id,就不会被namenode识别
    
    
    4/datanode下线后多久看到效果
    datanode不是一下线就会被namenode认定为下线的,有一个超时时间
    
    
    5/关于副本数量的问题
    副本数由客户端的参数dfs.replication决定(优先级: conf.set >  自定义配置文件 > jar包中的hdfs-default.xml)

    -------------------------------------------------离线计算系统-----------------------

    0.Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    1.Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
    2.
    Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。[4] 

    HDFS

    对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的(参见图 1),这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。
    存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

    NameNode

    NameNode 是一个通常在 HDFS 实例中的单独机器上运行软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。
    实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
    NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。
    NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间。

    DataNode

    DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。
    DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。

    1.1 什么是HADOOP

    1. HADOOP是apache旗下的一套开源软件平台-------也可以说是中间件
    2. HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
    3. HADOOP的核心组件
      1. HDFS(分布式文件系统)          要统计数据在一台机器上存不下,那么就要分块,还要记住文件在哪台机器上
      2. YARN(运算资源调度系统)       需要一种制度来管理硬件资源    resource manager、node manager
      3. MAPREDUCE(分布式运算编程框架)      任务的执行分为两个阶段,一个是maptask阶段,reducetask阶段。逻辑就写在  Mapreduce框架中。
    4. 广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈
    5. PS: hadoop的生态圈      1.  Hive是查询数据库的一个框架,(HDFS+MapReduce)的一个替代,用sql执行操作。

    6.                                         2. Workflow就是做工作流的问题,  用阿斯卡板,不用 乌贼(因为比较框架太重)
    7.                                          3. 右上角就是机器学习。

    PS:传统的机器算法,和现在都差不多。都是在样本基础的上,分析样本的距离。
    但是,hadoop出来以后,可以把所有的传统的计算算法进行实现,那么,速度执行效率有很大的提升,因为机器学习本身就是非常耗费机器资源的,   因为数据量的计算问题。

                                                            4.flume主要解决大数据的日志问题,因为大数据项目,日志必然很多,所以使用这个框架日志

                                                          5.左下角 sqoop解决的是数据的迁移问题,我们可以把传统的数据转移到关系型数据库,也可以把数据转移到hadoop数据库

    1. PS:hadoop的框架引出, 比如说客户端有个任务统计字符,然后把人物分别打成jar包,放在每个服务器上。最后把做好数据返回给服务器。
      但是比如说中间某台集群的机器挂了,就急需一个框架来解决问题。hadoop来了,我们只需关心业务逻辑,无需关心其他的复杂的问题。
    PS:hadoop是一种框架,但是与传统的框架有不太一样。 因为传统 的框架需要导包,但是hadoop不一样,他需要多态服务器集群然后才可以利用相应的api。
    像一个中间件,做离线的数据分析处理。

    1.3 HADOOP在大数据、云计算中的位置和关系

    1. 云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。

     

    1. 现阶段,云计算的两大底层支撑技术为“虚拟化”和“大数据技术

     

    1. 而HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。

    --------------------------分布式系统----------------------------------

    PS:我的理解就是把一个大的 问题  分解为 多个小的问题  然后再汇总回来 ,完成并行计算。

    ----------------------------------------------------------------------------------------

    3.1.2 案例需求描述

    “Web点击流日志”包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率、访客的来源信息,访客的终端信息等。

    3.1.3 数据来源

    本案例的数据主要由用户的点击行为记录

    获取方式:在页面预埋一段js程序,为页面上想要监听的标签绑定事件,只要用户点击或移动到标签,即可触发ajax请求到后台servlet程序,用log4j记录下事件信息,从而在web服务器(nginx、tomcat等)上形成不断增长的日志文件。

    形如:

    58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"

     

    3.2 数据处理流程

    3.2.1 流程图解析

    本案例跟典型的BI系统极其类似,整体流程如下:

     

    但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同,后续课程都会一一讲解:

    1)         数据采集:定制开发采集程序,或使用开源框架FLUME

    2)         数据预处理:定制开发mapreduce程序运行于hadoop集群

    3)         数据仓库技术:基于hadoop之上的Hive

    4)         数据导出:基于hadoop的sqoop数据导入导出工具

    5)         数据可视化:定制开发web程序或使用kettle等产品

    6)         整个过程的流程调度:hadoop生态圈中的oozie工具或其他类似开源产品

    PS:首先在 web系统的图片上预埋链接,记录到各个系统的分布式框架中的日志文件中。 如果是直接离线处理的话,就在HDFS系统中接着处理,后面使用mapreduce都数据进行分析,
    在这里可以直接保存到Hive数据库中,也可以通过mahout对数据处理,最后导入mysql数据库中,进行数据可视化; 如果是实时对数据处理的话,使用kafka和spark直接汇入mysql,
    到推荐界面(比如锤子手机说科大讯飞,使得科大讯飞用户猛增)
    在推荐界面,还有自己的service进行干预,进行数据推荐(比如天冷就卖手套,情人节卖巧克力)

     --------------------------------Hadoop集群安装-------------------------------------------------------

     

     PS:Hadoop集群的  其实就是  hdfs的集群(name node)和yarn的集群resource manager和 nodenanager

    PS:Hadoop的api非常多,但是我们只用常用的那几个就行了。在视频中都会讲解到。

    4. 集群搭建

    4.1 HADOOP集群搭建

    4.1.1集群简介

    HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起

    HDFS集群:

    负责海量数据的存储,集群中的角色主要有 NameNode / DataNode

    YARN集群:

    负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager

    (那mapreduce是什么呢?它其实是一个应用程序开发包)

     

    本集群搭建案例,以5节点为例进行搭建,角色分配如下:

    hdp-node-01    NameNode  SecondaryNameNode

    hdp-node-02    ResourceManager

    hdp-node-03              DataNode    NodeManager

    hdp-node-04              DataNode    NodeManager

    hdp-node-05              DataNode    NodeManager

    部署图如下:

     

    --------------------------------Hadoop 安装----------------------------

    1.准备Linux环境
    1.0先将虚拟机的网络模式选为NAT

    1.1修改主机名
    vi /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=itcast ###

    1.2修改IP
    两种方式:
    第一种:通过Linux图形界面进行修改(强烈推荐)
    进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply

    第二种:修改配置文件方式(屌丝程序猿专用)
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE="eth0"
    BOOTPROTO="static" ###
    HWADDR="00:0C:29:3C:BF:E7"
    IPV6INIT="yes"
    NM_CONTROLLED="yes"
    ONBOOT="yes"
    TYPE="Ethernet"
    UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
    IPADDR="192.168.1.101" ###
    NETMASK="255.255.255.0" ###
    GATEWAY="192.168.1.1" ###

    1.3修改主机名和IP的映射关系
    vim /etc/hosts

    192.168.1.101 itcast

    1.4关闭防火墙
    #查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off
    1.5 修改sudo
    su root
    vim /etc/sudoers
    给hadoop用户添加执行的权限

    关闭linux服务器的图形界面:
    vi /etc/inittab



    1.5重启Linux
    reboot


    2.安装JDK
    2.1上传alt+p 后出现sftp窗口,然后put d:xxxyylljdk-7u_65-i585.tar.gz

    2.2解压jdk
    #创建文件夹
    mkdir /home/hadoop/app
    #解压
    tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app

    2.3将java添加到环境变量中
    vim /etc/profile
    #在文件最后添加
    export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
    export PATH=$PATH:$JAVA_HOME/bin

    #刷新配置
    source /etc/profile
    -----------------------------------------------------------------------------------------------

     1.cd /home/ 

     2. D:/Study/Java/chuanzhiboke大数据/视频/day06Hadoop/day06/软件/cenos-6.5-hadoop-2.6.4.tar.gz

    mv /home/cenos-6.5-hadoop-2.6.4.tar.gz /root/cenos-6.5-hadoop-2.6.4.tar.gz

    3.tar -zxvf cenos-6.5-hadoop-2.6.4.tar.gz -C apps/ 

    PS:Hadoop虽然是用java 写的(跨平台),但是使用的时候还是要编译一下(需要安装很多的配置环境)。本人学习使用的是上面的tar包,centos6.5, 6.7也能用


    3.安装hadoop2.4.1
    先上传hadoop的安装包到服务器上去/home/hadoop/
    注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop


    伪分布式需要修改5个配置文件

    3.1配置hadoop
    第一个:hadoop-env.sh
    vim hadoop-env.sh
    #第27行
    export JAVA_HOME=/root/apps/jdk1.7.0_45

    第二个:core-site.xml

    <!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://bee1:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/hdpdata</value>
    </property>


    第三个:hdfs-site.xml
    <!-- 指定HDFS副本的数量,其实是可以不用配置 -->
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>

    <property>
    <name>dfs.secondary.http.address</name>
    <value>192.168.1.152:50090</value>
    </property>




    第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
    mv mapred-site.xml.template mapred-site.xml        //因为不编辑模板是空的
    vim mapred-site.xml
    <!-- 指定mr运行在yarn上 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    第五个:yarn-site.xml
    <!-- 指定YARN的老大(ResourceManager)的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>bee1</value>
    </property>
    <!-- reducer获取数据的方式 -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    PS:配置好以后给每个机器传一份   scp -r apps bee3:/root

    -------------------------------------------------------------------------------------


    3.2将hadoop添加到环境变量

    vim /etc/proflie
    export JAVA_HOME=/root/java/jdk1.7.0_65
    export HADOOP_HOME=/itcast/hadoop-2.4.1
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    export JAVA_HOME=/root/apps/jdk1.7.0_45

    export HADOOP_HOME=/root/apps/hadoop-2.6.4
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    把配置文件发给每台机器  sudo scp /etc/profile bee2:/etc            为了每台机器都能使用hadoop

    source /etc/profile

    3.3格式化namenode(是对namenode进行初始化,对配置文件初始化)
    hdfs namenode -format (hadoop namenode -format)

    -------------------------------------------------------------

    PS:没有配置其他小弟,启动的话,可以在任何的机器上去启动
    hadoop-daemon.sh start namenode 启动每一台机器
    hadoop-daemon.sh stop namenode   关闭每一台机器

    PS: 输入JMS测试系统是否启动,上图证明机器启动起来了

    ------------------------------------------------------------------------------

    PS:如果这样启动的话,太浪费时间,我们需要脚本全部启动,slavs文件放所有的配置机器

    PS:然后为老大,和小弟之间配置免密码登录。然后就可以  start-dfs.sh

    关闭                                 stop-dfs.sh

    -----------------------------

    PS: 这个启动的过程很慢

    PS:关闭分布式系统

    
    


    3.4启动hadoop
    先启动HDFS
    sbin/start-dfs.sh


     

     ----------------------启动成功--------------------------------------------------


    再启动YARN
    sbin/start-yarn.sh

    3.5验证是否启动成功
    使用jps命令验证
    27408 NameNode
    28218 Jps
    27643 SecondaryNameNode
    28066 NodeManager
    27803 ResourceManager
    27512 DataNode

    http://192.168.1.101:50070 (HDFS管理界面)
    http://192.168.1.101:8088 (MR管理界面)

    4.配置ssh免登陆
    #生成ssh免登陆密钥
    #进入到我的home目录
    cd ~/.ssh

    ssh-keygen -t rsa (四个回车)
    执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    将公钥拷贝到要免密登陆的目标机器上
    ssh-copy-id localhost
    ---------------------------
    ssh免登陆:
    生成key:
    ssh-keygen
    复制从A复制到B上:
    ssh-copy-id B
    验证:
    ssh localhost/exit,ps -e|grep ssh
    ssh A #在B中执行

    PS:其实namenode和datanode就是运行在分布式机器上的软件

    PS: jps找出执行 的java进程

    PS:
    后来安装的时候,遇到了0个datanode
    1.最后重新安装解决了问题 2.修改了tmp位置 和删除log 的位置
     

    PS:安装时遇到的问题

    1.jps命令找不到   http://blog.csdn.net/zhanglu1236789/article/details/50445261

    ----------------------------------------------------HDFS SHell-----------------------------------------------------------------------------------------------------------------------------------------------------

    PS:服务端查看文件

    PS:   客户端查看文件 (客户端访问命令使用的是箭头所指的,在hadoop/bin目录下面)

     ------------------------上传命令

    1.hadoop fs -put test.sh /               上传test.sh到 /  

    PS:在网页端查看

    PS:在客户端查看

    PS:文件大小为128M才会对文件切分
    PS:经过验证,大文件分成块以后是可以合并的并且使用的。所以框架帮我们做的也是这样的工作。

    2.  观察其他机器备份的文件  

     3.1.hadoop fs -put test.sh /               获取文件

    ------------------------------体验mapreduce wordcount功能------------------------

    PS:执行前确保三件事
    1.集群的时间同步
    2. start-dfs.sh只是启动hdfs
    3.start-yarn.sh也应该启动,他启动的的是计算资源


    1.cp wordtest.txt wordtest2.txt      //创建文件,写入相应的字符,然后复制文件
    2.创建 文件和文件夹上传到 /wordcount/input目录下

    3.到 hadoop 的 share/mapreduce的目录下找到jar包,执行命令                                          执行成功就放在/wordcount/output目录下面

     

    hadoop jar hadoop-mapreduce-examples-2.6.4.jar wordcount /wordcount/input  /wordcount/output

    4.查看mapreduce分析过的文件

    hadoop fs -cat /wordcount/output/part-r-00000

     

    -------------Java API文件系统的操作

    -------------------------------------------
    1.首先添加jar包,需要添加common和hdfs的jar和lib中的jar

    2.因为windows系统,无法执行hadoop的东西,需要添加添加hadoop环境变量
    -----------------------------------------------
    import java.net.URI;
    import java.util.Iterator;
    import java.util.Map.Entry;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.LocatedFileStatus;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.RemoteIterator;
    import org.junit.Before;
    import org.junit.Test;
    /**
     * 
     * 客户端去操作hdfs时,是有一个用户身份的
     * 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop
     * 
     * 也可以在构造客户端fs对象时,通过参数传递进去
     * @author
     *
     */
    public class HdfsClientDemo {
        FileSystem fs = null;
        Configuration conf = null;
        @Before
        public void init() throws Exception{
            
            conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://bee1:9000");
            
            //拿到一个文件系统操作的客户端实例对象
            /*fs = FileSystem.get(conf);*/
            //可以直接传入 uri和用户身份
            fs = FileSystem.get(new URI("hdfs://bee1:9000"),conf,"root"); //最后一个参数为用户名
        }
    
        @Test
        public void testUpload() throws Exception {
            
            Thread.sleep(2000);
            fs.copyFromLocalFile(new Path("D:/wordtest_PC.txt"), new Path("/wordtest_PC.txt.copy"));
            fs.close();
        }
        
        
        @Test
        public void testDownload() throws Exception {
            
            fs.copyToLocalFile(new Path("/wordtest_PC.txt.copy"), new Path("d:/"));
            fs.close();
        }
        
        @Test
        public void testConf(){
            Iterator<Entry<String, String>> iterator = conf.iterator();
            while (iterator.hasNext()) {
                Entry<String, String> entry = iterator.next();
                System.out.println(entry.getValue() + "--" + entry.getValue());//conf加载的内容
            }
        }
        
        /**
         * 创建目录
         */
        @Test
        public void makdirTest() throws Exception {
            boolean mkdirs = fs.mkdirs(new Path("/aaa/bbb"));
            System.out.println(mkdirs);
        }
        
        /**
         * 删除
         */
        @Test
        public void deleteTest() throws Exception{
            boolean delete = fs.delete(new Path("/aaa"), true);//true, 递归删除
            System.out.println(delete);
        }
        
        @Test
        public void listTest() throws Exception{
            
            FileStatus[] listStatus = fs.listStatus(new Path("/"));
            for (FileStatus fileStatus : listStatus) {
                System.err.println(fileStatus.getPath()+"================="+fileStatus.toString());
            }
            //会递归找到所有的文件
            RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
            while(listFiles.hasNext()){
                LocatedFileStatus next = listFiles.next();
                String name = next.getPath().getName();
                Path path = next.getPath();
                System.out.println(name + "---" + path.toString());
            }
        }
        
    /*    public static void main(String[] args) throws Exception {
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://bee1:9000");
            //拿到一个文件系统操作的客户端实例对象
            FileSystem fs = FileSystem.get(conf);
            
            fs.copyFromLocalFile(new Path("G:/access.log"), new Path("/access.log.copy"));
            fs.close();
        }*/
        
    
    }
  • 相关阅读:
    如何在百度文库里面免费下载东西
    CompareTo
    MySql常用日期函数(转载)
    Oracle之ORDER BY
    Spring之Ioc
    在使用与测绘有关软件中的困难
    HDOJ_1008_Elevator
    HDOJ_1005_Number Sequence
    HDOJ_1004_Let the Balloon Rise
    HDOJ_1003_MaxSum
  • 原文地址:https://www.cnblogs.com/bee-home/p/7857969.html
Copyright © 2020-2023  润新知