First install Java and maven:
1. Java:
sudo apt-get install default-jre
sudo apt-get install default-jdk
- sudo add-apt-repository ppa:webupd8team/java
- sudo apt-get update
sudo apt-get install oracle-java7-installer
JAVA_HOME="/usr/lib/jvm/java-8-oracle"
alternative:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-amd64"
or:
sudo vim /etc/profile
add:JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-amd64"
2. Maven:
wget http://www-eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
sudo tar xzf apache-maven-3.3.9-bin.tar.gz
sudo cp -r apache-maven-3.3.9 /usr/local
Set environment:
sudo vi /etc/profile — to setup environment variable and sudo gedit ~/.bashrc
- export M3_HOME=/usr/local/apache-maven-3.3.9/
- export PATH=${M3_HOME}/bin:${PATH}
3. Libevent
wget http://monkey.org/~provos/libevent-2.0.12-stable.tar.gz
tar xfvz libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable
./configure --prefix=/usr/local
make && sudo make install
4. Boost
sudo apt-get install libboost-all-dev
when you need to do choice, choose n
sudo ln -sf /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0 /usr/lib/libboost_thread.so
sudo ln -sf /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
5. Thrift
wget http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gz
tar xfvz thrift-0.8.0.tar.gz
cd thrift-0.8.0
./configure --prefix=/usr/local
if encounter configure: error: "Error: libcrypto required."
sudo apt-get install libssl1.0.0/trusty libssl-dev/trusty openssl/trusty
Make sure that
Building C++ Library ......... : yes Building TNonblockingServer .. : yes
make && sudo make install
6. Download YCSB
https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4.tar.gz
tar zxvf ycsb-0.1.4.tar.gz
7. Mapkeeper install
git clone git://github.com/m1ch1/mapkeeper.git or git clone https://github.com/sears/mapkeeper.git
export MKROOT='pwd'/mapkeeper
cd $MKROOT/thrift
make
there will be unint32 error
solve:
sudo gedit /usr/local/thrift/Thrift.h
add: #include <stdint.h>
then make again.
8. LevelDB install
git clone https://github.com/google/leveldb.git
cd leveldb
make
sudo cp -r include/leveldb/ /usr/local/include/
sudo cp out-static/libleveldb.a /usr/local/lib/
9. bind leveldb with mapkeeper
enter mapkeeper directory, enter leveldb directory
make
there are some errors:
edit the Makefile document as follows:
include ../Makefile.config
EXECUTABLE = mapkeeper_leveldb
all :
g++ -Wall -o $(EXECUTABLE) *cpp -I $(THRIFT_DIR)/include/thrift -I $(THRIFT_DIR)/include \
-lboost_thread -lboost_system -lpthread -lboost_filesystem -lboost_program_options -lthrift -lleveldb -I ../thrift/gen-cpp \
-L $(THRIFT_DIR)/lib \
-L ../thrift/gen-cpp -lmapkeeper \
-Wl,-rpath,\$$ORIGIN/../thrift/gen-cpp \
-Wl,-rpath,$(THRIFT_DIR)/lib
run:
./$(EXECUTABLE) --sync
clean :
- rm -rf $(THRIFT_SRC) $(EXECUTABLE) *.o
wipe:
- rm -rf data/*
Run the test:
1. cd mapkeeper/leveldb
run "./mapkeeper_leveldb -d ~/mapkeeper/level/data", which means leveldb server is running!
2. cd ycsb/
run
./bin/ycsb load mapkeeper -P workloads/workloada
which means client is running the test!
Errors: error: there are no arguments to ‘htons’ that depend on a template parameter, so a declaration of ‘htons’ must be available [-fpermissive]
Solution: reference :https://stackoverflow.com/questions/8402479/error-while-compiling-thrift-server
add #include <arpa/inet.h> in the cpp file
Error: LevelDbServer error: conversion from ‘boost::filesystem::path’ to non-scalar type ‘std::string {aka std::basic_string<char>}’ requested
Solution: change the file LevelDbServer.cpp
change line 57 to "std::string mapName = boost::filesystem::path(itr->path().filename()).string();"