通过Loadrunner连接操作Hadoop HDFS

本文以Loadrunner的Java_Vuser脚本为例,来做一次HDFS的文件操作测试,由于LoadRunner 11只支持JDK1.6,所以Hadoop选择的Jar包也只能用Hadoop2.6.0,但是这不影响连接高版本的hadoop-HDFS(本次测试就实现了连接操作hadoop2.7下HDFS)。

1、在loadrunner中新建脚本(本文以LoadRunner11为例),要求选择协议类型为Java->Java Vuser

2、在Run-time Settings设置JDK路径,由于LoadRunner11不支持jdk1.8,本次测试是拷贝了一份低版本的JDK1.6,所以路径选择固定路径模式,如下所示:

3、可以上网下载一份Hadoop2.6.0的JAR包(官网和网上都能搜到),我专门准备了一份供大家下载(做了精简,去掉了一些与本次测试无关的Jar包):http://download.csdn.net/detail/smooth00/9881769,将JAR包放到Loadrunner的include目录下或其它指定目录下,并在Run-time Settings中配置Classpath:

4、在Loadrunner中以java Vuser协议创建脚本,脚本样例如下:

/*

* LoadRunner Java script. (Build: _build_number_)

*

* Script Description:

*                   

*/

import java.io.FileInputStream; 

import java.io.FileNotFoundException; 

import java.io.FileOutputStream; 

import java.io.InputStream; 

import java.io.IOException; 

import java.io.OutputStream; 

import java.net.URI; 

import java.net.URISyntaxException; 

import org.apache.hadoop.conf.Configuration; 

import org.apache.hadoop.fs.BlockLocation; 

import org.apache.hadoop.fs.FileStatus; 

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.FSDataOutputStream; 

import org.apache.hadoop.fs.Path; 

import org.apache.hadoop.io.IOUtils; 

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

import org.apache.log4j.xml.DOMConfigurator;

import java.io.File;

import lrapi.lr;

public class Actions

{

    FileSystem fs = null;

    private Configuration configuration =null;

    private String keyFS ="fs.defaultFS";

    private String keyUser ="hadoop.user"; 

    //上传文件  测试成功

    // @uploadFile 要上传的本地文件

    // @intputFile 输入到HDFS的文件

    public void testUpload(String uploadFile,String intputFile) throws Exception{ 

        InputStream in = new FileInputStream(uploadFile); 

        OutputStream out = fs.create(new Path(intputFile));

        IOUtils.copyBytes(in, out, 1024, true);//in输入源, out输出源头, 1024缓冲区大小 ,true 是否关闭数据流。如果是false,就在finally里关掉 

    }


    //创建文件夹  测试成功 

    public void testMkdir(String dirs) throws IllegalArgumentException, IOException{ 

        boolean  flag = fs.mkdirs(new Path(dirs));

        System.out.println(flag);//如果创建目录成功会返回true 

    }


    //下载文件  测试成功

    // @outputFile 要下载的HDFS文件

    // @downloadFile 要下载到本地的文件

    public void testDownload(String outputFile,String downloadFile) throws IllegalArgumentException, IOException{ 

InputStream in = fs.open(new Path(outputFile));//intput.txt

        OutputStream out = new FileOutputStream(downloadFile);//下载到本地路径 以及重命名后的名字 

        IOUtils.copyBytes(in, out, 4096, true); 

    }


    //删除文件  测试成功 

    public void testDelFile(String delFile) throws IllegalArgumentException, IOException{ 

        boolean flag = fs.delete(new Path(delFile),true);//如果是删除路径  把参数换成路径即可"/a/test4"  inpufile

        //第二个参数true表示递归删除,如果该文件夹下还有文件夹或者内容 ,会变递归删除,若为false则路径下有文件则会删除不成功 

        System.out.println("删除文件 or 路径"); 

        System.out.println("delete?"+flag);//删除成功打印true 

    }


    //重命名文件  测试成功

    // @oldFile 要下载的HDFS文件

    // @newFile 要下载到本地的文件

    public void testRename(String oldFile,String newFile) throws IllegalArgumentException, IOException{ 

        boolean flag = fs.rename(new Path(oldFile),new Path(newFile));//第一个参数改名为第二个参数 

        String result=flag?"成功":"失败"; 

        System.out.println("result of rename?"+result);//删除成功打印true 

    }


    //查看文件是否存在    测试成功 

    public void CheckFile(String existFile) throws IllegalArgumentException, IOException{ 

        boolean  flag = fs.exists(new Path(existFile)); 

        System.out.println("Exist?"+flag);//如果创建目录成功会返回true 

    }


    //寻找文件在文件集中位置  测试成功 

    public void FileLoc(String searchFile) throws IllegalArgumentException, IOException{ 

        FileStatus  filestatus = fs.getFileStatus(new Path(searchFile)); 

        //System.out.println("filestatus?"+filestatus);//如果创建目录成功会返回true 

        BlockLocation[] blkLocations=fs.getFileBlockLocations(filestatus, 0, filestatus.getLen());//文件开始与结束 


        int blockLen=blkLocations.length;//块的个数

System.out.println("块数:"+blockLen);

        System.out.println("---------分割线--------"); 

        for(int i=0;i

            String[] hosts=blkLocations[i].getHosts(); 

            System.out.println("block_"+i+"location:"+hosts[0]); 

        } 

        System.out.println("---------分割线---------"); 


    }


    //直接在hdfs上创建文件并在其中输入文字  测试成功

    // @content 要写入文件的文字内容

    // @outputFile 写入的HDFS文件

    public void testCreateTextFile(String content,String outputFile) throws IllegalArgumentException, IOException{ 


        byte[] buff=content.getBytes();//想要输入内容

        Path path=new Path(outputFile);//文件存放路径及文件名称  /a/test4/javawrite.txt

        FSDataOutputStream outputStream=fs.create(path); 

        outputStream.write(buff, 0, buff.length); 

        System.out.println("输出文件成功"); 


    }

public int init() throws Throwable {

    //System.setProperty("hadoop.home.dir", "D:\\Program Files\\HP\\LoadRunner\\include\\hadoop\\hadoop-common-2.2.0-bin-master");

    //加载日志输出方式

    File directory = new File(".");

    DOMConfigurator.configure(directory.getCanonicalPath()+"\\log4j.xml");//加载log4j.xml文件

    //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件

    Logger log=Logger.getLogger("org.zblog.test");

    System.setProperty("hadoop.home.dir", directory.getCanonicalPath()+"\\hadoop-common-2.2.0-bin-master");

            //初始化

    configuration=new Configuration();

    //configuration.set(keyFS,"hdfs://172.17.2.12:8020");

            configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

    configuration.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");

            //configuration.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());

    fs = FileSystem.get(new URI("hdfs://172.16.1.80:8020"), configuration,"hdfs");//hdfs为用户名

    //fs = FileSystem.get(URI.create(fsname), configuration, user);

return 0;

}//end of init

public int action() throws Throwable {

    testMkdir("/a//test4");

    testCreateTextFile("hello hadoop world!\n","/a/test4/intput.txt");

    testUpload("d://textdownload.txt","/a/test4/intput.txt");

    testDownload("/a/test4/intput.txt","d://textdownload2.txt");

    testRename("/a/test4/intput.txt","/a/test4/intput");

    FileLoc("/a/test4/intput");

    testDelFile("/a/test4/intput");


return 0;

}//end of action

public int end() throws Throwable {

return 0;

}//end of end

}

需要说明的,本次样例脚本中,还引用了hadoop-common-2.2.0-bin-master(主要是因为在windows下开发Hadoop需要用到winutils.exe,本次的目的是为了在Windows下运行以上脚本后,能同时输出hadoop-HDFS运行日志),下载地址为(免积分):http://download.csdn.net/detail/nma_123456/8663763

5、将下载的hadoop-common-2.2.0-bin-master解压到Loadrnner脚本目录下(hadoop-common-2.2.0-bin-master下一层是bin目录)

6、同样在Loadrnner脚本目录下创建hadoop的日志配置文件log4j.xml,配置内容如下:

7、一切就绪后,就可以运行脚本了(记住HDFS的连接地址,如hdfs://172.17.2.12:8020和用户要配置正确),运行成功如下所示:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容