Processing math: 75%

apache-maven-3.3.9-bin编译YCSB-0.1.4及YCSB压测mongodb-linux-x86_64-3.2.7全过程

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
性能测试 PTS,5000VUM额度
日志服务 SLS,月写入数据量 50GB 1个月
简介:   为了使用YCSB压测mongo,自己摸索了很久,碰到很多问题,可以说举步维艰,毕竟是开源的东西,网上没有可行的流程化方案参考。下面是自己使用YCSB压测mongo的完整过程,提供给大家参考。
  为了使用YCSB压测mongo,自己摸索了很久,碰到很多问题,可以说举步维艰,毕竟是开源的东西,网上没有可行的流程化方案参考。下面是自己使用YCSB压测mongo的完整过程,提供给大家参考。
 一、YCSB压测需要的软件及其版本
 操作系统:rhel-server-6.4-x86_64
 MongoDB版本:mongodb-linux-x86_64-3.2.7.tar.gz
 JDK版本:jdk-8u11-linux-x64.rpm
 MAVEN版本:apache-maven-3.3.9-bin.zip
 YCSB版本:YCSB-0.1.4.zip
 二、压测环境部署
 1、操作系统、MongoDB数据库已经安装成功,mongoDB的安装可以参考本人博文 MongoDB 3.2 for RHEL6.4 installation
 2、部署JDK环境:
 如果服务器上部署有JDK环境,最好将JDK版本升级到1.8,可能用到的JDK卸载命令:
[root@mongo ycsb]# rpm -qa|grep jdk
jdk-1.8.0_11-fcs.x86_64
[root@mongo ycsb]# rpm -e  jdk-1.8.0_11-fcs.x86_64
 使用root登录并执行:
rpm -ivh  jdk-8u11-linux-x64.rpm
 安装完成后查看JDK版本:
[root@mongo ycsb]# java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
配置root&mongo用户的环境变量
  [root@mongo maven]# cat /root/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin :/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
[root@mongo maven]# cat /home/mongo/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin :/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
3、部署MAVEN环境:
由于,我的mongoDB安装用户是mongo,参与压测的用户有root、mongo,所以我将MAVEN部署到: /home/mongo/Documents/,只需将apache-maven-3.3.9-bin.zip上传到/home/mongo/Documents/
解压后进行mv 
apache-maven-3.3.9-bin maven

[root@mongo maven]# pwd
/home/mongo/Documents/maven
[root@mongo maven]#
[root@mongo maven]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
Maven home: /home/mongo/Documents/maven
Java version: 1.8.0_11, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_11/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-358.el6.x86_64", arch: "amd64", family: "unix"
配置用户root、mongo的环境变量
 [root@mongo maven]# cat /root/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin:/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
[root@mongo maven]# cat /home/mongo/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin :/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
4、部署YCSB环境
 这里强调一下:网上提供的 YCSB-0.1.4,只有百来kb并且都声称不用编译,但是通过实践没有一个是管用的,这里给大家看下编译过的并且可用的YCSB到底多大(希望大家不要在寻找YCSB上绕弯路):
[mongo@mongo mongo]$ du -ksh ycsb
190M ycsb
我将YCSB部署到了mogoDB的安装目录 /opt/mongo/ycsb,部署很简单,将 YCSB-0.1.4.zip上传到/opt/mongo解压然后:mv  YCSB-0.1.4 ycsb
配置用户环境变量:
[root@mongo maven]# cat /root/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin :/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
[root@mongo maven]# cat /home/mongo/.bash_profile |grep PATH
PATH=PATH:HOME/bin
export PATH
export PATH=/opt/mongo/mongosoft/bin: /home/mongo/Documents/maven/bin :/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:$PATH
重头戏是使用maven编译ycsb,这里有2种思路:一种是老老实实配置服务器连接互联网(编译过程中maven要联网下载很多JAR和pom文件,如果网速不好需要的时间非常长,很容易失败)编译、二是自己下载maven2的所有库文件放在/root/目录下的.m2中
配置虚拟机联网可以参考:http://jingyan.baidu.com/article/6c67b1d68facbb2786bb1e7b.html
 这里给出.m2文件夹内的结构及其包含的所有文件,下载地址:http://pan.baidu.com/s/1boIsq5p
接下来是编译ycsb:
[root@mongo ycsb]# pwd
/opt/mongo/ycsb
[root@mongo ycsb]# mvn -nf clean pacakge
[root@mongo ycsb]# mvn -fn clean package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] YCSB Root
[INFO] Core YCSB
[INFO] HBase DB Binding
[INFO] Cassandra DB Binding
[INFO] Gemfire DB Binding
[INFO] Infinispan DB Binding
[INFO] JDBC DB Binding
[INFO] Mapkeeper DB Binding
[INFO] Mongo DB Binding
[INFO] Redis DB Binding
[INFO] Voldemort DB Binding
[INFO] YCSB Release Distribution Builder
.......
[INFO] Building tar : /opt/mongo/ycsb/distribution/target/ycsb-0.1.4.tar.gz
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] YCSB Root .......................................... SUCCESS [  1.357 s]
[INFO] Core YCSB .......................................... SUCCESS [  8.237 s]
[INFO] HBase DB Binding ................................... SUCCESS [ 12.594 s]
[INFO] Cassandra DB Binding ............................... SUCCESS [  4.423 s]
[INFO] Gemfire DB Binding ................................. SUCCESS [  4.129 s]
[INFO] Infinispan DB Binding .............................. SUCCESS [ 15.690 s]
[INFO] JDBC DB Binding .................................... SUCCESS [  3.486 s]
[INFO] Mapkeeper DB Binding ............................... FAILURE [  0.012 s]
[INFO] Mongo DB Binding ................................... SUCCESS [  2.199 s]
[INFO] Redis DB Binding ................................... SUCCESS [ 33.472 s]
[INFO] Voldemort DB Binding ............................... SUCCESS [  9.754 s]
[INFO] YCSB Release Distribution Builder .................. SUCCESS [  6.481 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:42 min
[INFO] Finished at: 2016-06-16T18:08:23-07:00
[INFO] Final Memory: 86M/209M
 这里说明一下:mvn -fn clean package必须使用-fn才能跳过Mapkeeper DB Binding,另外,本次压测中 Mapkeeper DB Binding编译失败没有影响,也用不到;下载完成maven2库后的完整编译过程下载地址:http://pan.baidu.com/s/1eRTH31o
三、压测前的状态信息检查
1、配置环境:/etc/hosts
[root@mongo ycsb]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.144.130   mongo
[root@mongo ycsb]#
[root@mongo ycsb]# cat /root/.bash_profile 
export MONGO_BASE=/opt/mongo
export MONGO_DATA=/opt/mongo/data
export MONGO_LOGS=/opt/mongo/logs
export JAVA_HOME=/usr/java/jdk1.8.0_11/
export YCSB_HOME=/root/Documents/ycsb
export PATH=/opt/mongo/mongosoft/bin:/home/mongo/Documents/maven/bin:/usr/java/jdk1.8.0_11/bin/:/opt/mongo/ycsb/bin:PATH 2、压测文件配置信息 mongodb.url=mongodb://localhost:27017 mongodb.database=zhul mongodb.writeConcern=normal recordcount=10000000 operationcount=10000000 workload=com.yahoo.ycsb.workloads.CoreWorkload readallfields=true readproportion=0.5 updateproportion=0.5 scanproportion=0 insertproportion=0 requestdistribution=zipfian 3、数据库状态检查 [root@mongo ycsb]# ps -ef|grep mongo root     35714  1983  0 17:51 ?        00:00:00 sshd: mongo [priv] mongo    35721 35714  0 17:51 ?        00:00:00 sshd: mongo@pts/3 mongo    35722 35721  0 17:51 pts/3    00:00:00 -bash root     41198 37802  0 21:30 pts/9    00:00:00 grep mongo mongo    47215     1  1 Jun15 ?        00:35:51 mongod --dbpath=/opt/mongo/data --logpath=/opt/mongo/logs/mongodb.log --logappend [root@mongo ycsb]#  [root@mongo ycsb]# netstat -pan|grep 27017 tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      47215/mongod         unix  2      [ ACC ]     STREAM     LISTENING     185900 47215/mongod        /tmp/mongodb-27017.sock [root@mongo ycsb]# [root@mongo ycsb]# ycsb shell basic java -cp /opt/mongo/ycsb/voldemort/src/main/conf:/opt/mongo/ycsb/gemfire/src/main/conf:/opt/mongo/ycsb/jdbc/src/main/conf:/opt/mongo/ycsb/core/target/core-0.1.4.jar:/opt/mongo/ycsb/infinispan/src/main/conf:/opt/mongo/ycsb/nosqldb/src/main/conf:/opt/mongo/ycsb/hbase/src/main/conf com.yahoo.ycsb.CommandLine -db com.yahoo.ycsb.BasicDB YCSB Command Line client Type "help" for command line help Start with "-help" for usage info ***************** properties ***************** "db"="com.yahoo.ycsb.BasicDB" ********************************************** Connected. > quit   [root@mongo ycsb]# 四、执行压测 1、加载压测任务 [root@mongo ycsb]# ./bin/ycsb load  mongodb -P workloads/workloada  任务加载日志下载地址:http://pan.baidu.com/s/1skTvdEX 部分日志展示: Loading workload... Starting test. new database url = localhost:27017/zhul mongo connection created with localhost:27017/zhul [OVERALL], RunTime(ms), 243.0 [OVERALL], Throughput(ops/sec), 0.0 [INSERT], Operations, 1 [INSERT], AverageLatency(us), 52974.0 [INSERT], MinLatency(us), 52974 [INSERT], MaxLatency(us), 52974 [INSERT], 95thPercentileLatency(ms), 52 [INSERT], 99thPercentileLatency(ms), 52 [INSERT], Return=1, 1 [INSERT], 0, 0 [INSERT], 1, 0 [INSERT], 2, 0 [INSERT], 3, 0 [INSERT], 4, 0 [INSERT], 5, 0 [INSERT], 6, 0 [INSERT], 7, 0 [INSERT], 8, 0 [INSERT], 9, 0 [INSERT], 10, 0 [INSERT], 11, 0 [INSERT], 12, 0 [INSERT], 13, 0 [INSERT], 14, 0 [INSERT], 15, 0 [INSERT], 16, 0 [INSERT], 17, 0 [INSERT], 18, 0 [INSERT], 19, 0 [INSERT], 20, 0 2、执行压测任务 [root@mongo ycsb]# ./bin/ycsb run  mongodb -P workloads/workloada 执行任务日志下载地址:http://pan.baidu.com/s/1cjyHyQ 部分日志展示: Loading workload... Starting test. new database url = localhost:27017/zhul mongo connection created with localhost:27017/zhul [OVERALL], RunTime(ms), 1043002.0 [OVERALL], Throughput(ops/sec), 9587.709323663808 [READ], Operations, 4999128 [READ], AverageLatency(us), 65.37705095768702 [READ], MinLatency(us), 30 [READ], MaxLatency(us), 79095 [READ], 95thPercentileLatency(ms), 0 [READ], 99thPercentileLatency(ms), 0 [READ], Return=0, 39699 [READ], Return=1, 4959429 [READ], 0, 4989900 [READ], 1, 6603 [READ], 2, 1196 [READ], 3, 918 [READ], 4, 149 [READ], 5, 58 [READ], 6, 17 [READ], 7, 9 [READ], 8, 5 [READ], 9, 3 [READ], 10, 2 [READ], 11, 1 [READ], 12, 4 [READ], 13, 5 [READ], 14, 76 [READ], 15, 127 [READ], 16, 25 [READ], 17, 11 [READ], 18, 3 [READ], 19, 3 五、压测中遇到的问题总结 1、服务器没有安装JDK、JDK的环境变量没有配置好、JDK版本过低 现象:   File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child     raise child_exception OSError: [Errno 2] No such file or directory 2、ycsb没有经过编译 现象: [mongo@mongo ycsb] ./bin/ycsb load mongodb -threads 100 -P workloads/workloada
java -cp /opt/mongo/ycsb/voldemort/src/main/conf:/opt/mongo/ycsb/gemfire/src/main/conf:/opt/mongo/ycsb/jdbc/src/main/conf:/opt/mongo/ycsb/infinispan/src/main/conf:/opt/mongo/ycsb/nosqldb/src/main/conf:/opt/mongo/ycsb/hbase/src/main/conf com.yahoo.ycsb.Client -db com.yahoo.ycsb.db.MongoDbClient -threads 100 -P workloads/workloada -load
Exception in thread "main" java.lang.NoClassDefFoundError: com/yahoo/ycsb/Client
Caused by: java.lang.ClassNotFoundException: com.yahoo.ycsb.Client
at java.net.URLClassLoader1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.LauncherAppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.yahoo.ycsb.Client.  Program will exit.
3、服务器没有联网的情况下进行ycsb的编译
现象:[root@mongo ycsb]# mvn clean package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] YCSB Root
[INFO] Core YCSB
[INFO] HBase DB Binding
[INFO] Cassandra DB Binding
[INFO] Gemfire DB Binding
[INFO] Infinispan DB Binding
[INFO] JDBC DB Binding
[INFO] Mapkeeper DB Binding
[INFO] Mongo DB Binding
[INFO] Redis DB Binding
[INFO] Voldemort DB Binding
[INFO] YCSB Release Distribution Builder
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building YCSB Root 0.1.4
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ root ---
[INFO] 
[INFO] --- maven-checkstyle-plugin:2.6:checkstyle (validate) @ root ---
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Core YCSB 0.1.4
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ core ---
[INFO] Deleting /opt/mongo/ycsb/core/target
[INFO] 
[INFO] --- maven-checkstyle-plugin:2.6:checkstyle (validate) @ core ---
[INFO] Starting audit...
loading ……
4、ycsb的环境变量配置有问题(可以到/ycsb/bin进行验证)
现象:
[root@mongo ycsb]# 
[root@mongo ycsb]# ycsb shell basic
java -cp /root/Documents/ycsb/voldemort/src/main/conf:/root/Documents/ycsb/gemfire/src/main/conf:/root/Documents/ycsb/jdbc/src/main/conf:/root/Documents/ycsb/infinispan/src/main/conf:/root/Documents/ycsb/dynamodb/conf:/root/Documents/ycsb/accumulo/src/main/conf:/root/Documents/ycsb/nosqldb/src/main/conf:/root/Documents/ycsb/hbase/src/main/conf com.yahoo.ycsb.CommandLine -db com.yahoo.ycsb.BasicDB
Error: Could not find or load main class com.yahoo.ycsb.CommandLine
5、关于ycsb编译过程中到 Mapkeeper DB Binding异常退出,我没找到好方法,但是可以使用mvn -fn clean package跳过
[INFO] Mapkeeper DB Binding ............................... FAILURE [  0.012 s]
六、压测用到的软件下载地址
mongodb-linux-x86_64-3.2.7.tgz  http://pan.baidu.com/s/1kUIHXiv
apache-maven-3.3.9-bin.zip   http://pan.baidu.com/s/1c2hsKLU
jdk-8u11-linux-x64.rpm  http://pan.baidu.com/s/1pL8aFHL
YCSB-0.1.4.zip http://pan.baidu.com/s/1jHSTwge
.m2(maven2的JAR库及pom文件库) http://pan.baidu.com/s/1cHoDQY


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
Linux 编译器 开发工具
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
136 2
|
4月前
|
Java Maven
Maven编译报错
Maven编译报错
84 1
|
24天前
|
Java Maven
Maven编译报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile 解决方案
在执行Maven项目中的`install`命令时,遇到编译插件版本不匹配的错误。具体报错为:`maven-compiler-plugin:3.13.0`要求Maven版本至少为3.6.3。解决方案是将Maven版本升级到3.6.3或降低插件版本。本文详细介绍了如何下载、解压并配置Maven 3.6.3,包括环境变量设置和IDEA中的Maven配置,确保项目顺利编译。
1484 4
Maven编译报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile 解决方案
|
20天前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
154 14
|
3月前
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
662 1
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
125 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
3月前
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
53 0
Linux c/c++之多文档编译
|
2月前
|
Linux
Linux - 如何编译源码安装软件
源码编译安装通常包括三个步骤:1) `./configure` 检测平台特征和依赖项,生成 Makefile;2) `make` 编译源码,生成可执行文件;3) `make install` 将可执行文件安装到指定目录并配置环境变量。
85 0
|
2月前
|
Java 测试技术 项目管理
maven编译本地代码的命令是什么?
【10月更文挑战第26天】maven编译本地代码的命令是什么?
127 0

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等