20140605_a virtual cloud computing provider for mobile devices.p

A virtual Cloud Computing Provider for Mobile Devices


Gonzalo Huerta-Canepa(kaist), Dongman Lee(kaist)


Abstract

스마트 디바이스에서 처리 못하는 heavy한 작업일 경우, 클라우드(infrastructure-based)로 offloading 시켜 작업을 하는 방식을 사용함.

하지만 클라우드에 접근하는 것이 항상 보장되지 않으므로 (가격 문제 등), 인접한 스마트 디바이스를 이용하여 Virtual cloud computing platform을 만들어 이 문제를 해결한다.



Introduction

일반적으로 클라우드 서비스를 이용하는 가격은 비싸지 않지만, 그 서비스에 연결하기 위해서 필요한 네트워크 사용료가 비쌈(3G나 4G LTE를 사용하는 상황에서). 따라서 클라우드에 연결하는 비용이 비싸기 때문에 사용 못하는 상황이 생길 수 있음.

이에 대한 해결책으로 인접한 모바일 디바이스들을 P2P방식으로 연결해 AD HOC네트워크를 만들어서 작업을 offloading 시키는 것을 제안함.

작업 offloading을 위한 framework를 virtual mobile cloud computing provider라고 지칭하고 이것을 생성하기 위한 가이드라인을 이 페이퍼를 통해 제시함.


이 framework는 인접한 유저의 모바일 디바이스를 사용하여 기존의 클라우드를 흉내냄.


이것을 위해서 근처에 있는 Stable한 노드들을 찾야아함 (의문점 1. 어떻게 stable한 것을 판별할까?)

stable mode : 그 지역에 계속 머물러 있거나 동일한 패턴으로 활동하는 것을 의미





status of vicinity nodes




connect with stable-mode nodes



stable한 노드들과 연결되어 virtual cloud computing provider를 구성하여 작업을 offloading 시킴.


Motivation

virtual cloud computing provider를 이용하면 두가지 benefits을 얻을 수 있음.

1) offloading benefit을 유지할 수 있음(기존의 클라우드 인프라를 이용했을 때와 마찬가지로)

2) performance enhanced (어플리케이션의 실행 시퀀스를 parallel하게 수정할 필요가 있음)

하지만 해결해야할 issue가 있음

리소스 제공자에게 인센티브가 없음.

이것을 해결하기 위해서

같은 task를 사용하는 user를 찾아서 task를 그 user들에게 나누는 방법을 사용함


Design Considerations

한 mobile devices에서 locally 실행 불가능한 task를 recognize하기 위한 Resource monitoring and management system

기존에 존재하는 cloud api와 seamless하게 통합될 수 있어야 함

->원래 cloud를 사용하는 앱의 경우, virtual cloud를 통해서도 실행이 가능해야하기 때문에 같은 api를 지원해야함

mobile device의 특징을 고려한 적합한 offloading 및 partitioning scheme

비슷하거나 같은 목표를 가진(같은 task나 비슷한 task를 수행하는) 유저를 찾기 위한 activity detection

->특히 최소한의 potential disconnection을 위해서 stable한 user를 찾는 것이 중요

spontaneous한 네트워크 interaction이 지원되야함

중간 결과 저장을 위한 memory cache scheme

가볍고(lightweight) resource 친화적인 아키텍쳐

-> 로컬에서 혼자 돌린 것보다 느려서는 안됨


Architecture

Evaluation

Evaluation Setting

each input data <  100kb

virtual machine on mobile : JamVM on jailbroken iPod touch

version of hadoop : 0.18

cloud computing provider : 4 servers with OpenJDK VM 6

Result and Discussion


mobile device에서 direct하게 실행 시킨 결과보다 대략 1% 성능 감소(성능 차이 거의 없음)

이는 RPC 및 waiting time 때문에 생긴 문제라고 생각 할 수 있음.

하지만 execution time이 줄었으므로( saving in processing time) energy saving 효과를 볼 수 있음 


실험에서 사용된 input data는 100kb 미만의 작은 파일사이즈로 구성됨.

이와 같은 작은 사이즈의 파일은 hadoop의 연산에 있어서 퍼포먼스 측면에서 불이익이 있음


1) 각각의 map processing 마다 새로운 JVM이 만들어짐

mapred.job.reuse.jvm.num.tasks 옵션을 수정하여 해결함->2~3% 성능 향상

2) 각각의 파일에 대해서 데이터 테이블을 기록하기 때문에 메모리 문제 발생 가능

Concatenation(연속화)라는 기법을 사용해서 해결-> 모든 경우에 사용 가능하진 않음

3) start up 시점에서 데이터 노드가 자신의 데이터를 스캐닝 하는 시간이 길어짐







저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

20140526 - 20140530

2014.05.26 12:47

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


 public static void main(String[] args) throws IOException {    

     startService(args, null);

  } 


static void startService(String[] args, DatagramSocket registrationSocket) throws IOException {

    StringUtils.startupShutdownMessage(Nfs3.class, args, LOG);    

    /* Nfs3 constructor에서 

     * super(new RpcProgramNfs3(conf, registrationSocket), conf); << Nfs3Base()

     * Nfs3Base()에서 NFS3_SERVER_PORT 설정   

     */

    final Nfs3 nfsServer = new Nfs3(new Configuration(), registrationSocket);

    

    /* public void startServiceInternal(boolean register) throws IOException 에서

     * nfs server를 mount 시키고 

     * Nfs3Base.java에 있는 start(boolean register)를 호출하여 TCP server를 실행시킨다

     * NFS는 오직 TCP server만을 지원하며 UDP는 지원하지 않는다

     */

    nfsServer.startServiceInternal(true);

  }

저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

hadoop-common/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs

  • /mount/mountd

 super(new RpcProgramMountd(config, registrationSocket));

>> MountdBase의 Constructor에 RpcProgram을 전달

↓↓

public RpcProgramMountd(Configuration config, DatagramSocket registrationSocket) throws IOException {

    // Note that RPC cache is not enabled


    /*  

     *  protected RpcProgram(String program, String host, int port, int       progNumber,int lowProgVersion, int highProgVersion,DatagramSocket registrationSocket)

     *  RpcProgram.java의 Constructor에서 RpcProgram객체에 매개변수를 할당

     *  @param program program name

     *  @param host host where the Rpc server program is started

     *  @param port port where the Rpc server program is listening to

     *  @param progNumber program number as defined in RFC 1050

     *  @param lowProgVersion lowest version of the specification supported

     *  @param highProgVersion highest version of the specification supported

     */ 

    super("mountd", "localhost", config.getInt("nfs3.mountd.port", PORT),

        PROGRAM, VERSION_1, VERSION_3, registrationSocket); 

   

    //export는 공유 대상(mount를 할 대상) 

    exports = new ArrayList<String>();

    exports.add(config.get(Nfs3Constant.EXPORT_POINT,

        Nfs3Constant.EXPORT_POINT_DEFAULT));

    this.hostsMatcher = NfsExports.getInstance(config);


    //mount entry 할당

    this.mounts = Collections.synchronizedList(new ArrayList<MountEntry>());

    UserGroupInformation.setConfiguration(config);

    SecurityUtil.login(config, DFS_NFS_KEYTAB_FILE_KEY,

            DFS_NFS_KERBEROS_PRINCIPAL_KEY);

    //namenode 세팅

    this.dfsClient = new DFSClient(NameNode.getAddress(config), config);

  }

 

 mountd.start(true); // UDP, TCP server Start



저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

mac osx mavericks above


maven, protoc를 설치 해 줘야 한다.

소스를 직접 다운 받는 것도 좋고 macport를 이용해서 설치해도 된다. 

나는 맥포트를 이용

맥 포트 매버릭스용 다운로드 

사용법은 http://www.macports.org/에 잘 나와 있다


맥포트를 설치했다면, 맥포트를 통해서 maven을 설치해준다

명령어는 우분투의 apt-get install과 비슷하다


JAVA_HOME 설정

maven을 통해서 실행을 시키려면 JAVA_HOME이 설정되야 한다.

자바의 설치 주소는

/usr/libexec/java_home -v 

명령어를 실행시키면 나온다.

이렇게 나온 자바 주소를 vi ~/.bash_profile에 가서 

export JAVA_HOME='java_path' 

라고 쓴 후에 저장

그리고 source ~/.bash_profile을 해준다.


maven 설치

sudo port install maven3 

sudo port select --set maven maven3

maven 설치가 완료되면 

mvn -version으로 maven 버전 확인


protocol buffer 설치

protobuf 2.5.0 다운로드

이거 설치법은 이 안에 INSTALL.txt 파일을 보면 자세히 나와 있다 

간략히 요약하면

./configure

./make

./make install


이게 다 설치가 되면 

hadoop source가 있는 디렉토리에 들어가서 

cd hadoop-maven-plugins

mvn install 

이게 다 되면

cd ..

mvn eclipse:eclipse -DskipTests


이게 다 끝나고 나면

이클립스 켜서 import - existing projects into workspace -hadoop 최상위 폴더 선택 후 finish를 누르면 이클립스로 import가 된다.


windows 

다음 사이트를 참조

http://hadoopguide.blogspot.kr/2014/01/install-hadoop-220-source-in-windows-7_25.html 




 



저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

hdfs 분석의 필요성이 있기에 소스코드를 분석해보자 !!

일단 소스코드는 hadoop git에서 받으면 된다

내가 분석할 hdfs 소스는

hadoop-common/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop

hadoop-common/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs 에 있는 소스 파일들이다


hadoop-hdfs/src/main/java/org/apache/hadoop

  • StorageType.java

스토리지 타입을 골라준다 (DISK/SSD)

public static final StorageType DEFAULT = DISK;



저작자 표시 비영리 변경 금지
신고
Posted by youngjinkmi0706

우선 git을 이용하여 소스코드를 다운 받자

 

hadoop-common git : https://github.com/apache/hadoop-common.git 

 

※ 자신의 git repository에 fork 해서 하면 소스 코드 변경 시 용이함

 

maven 설치


​sudo apt-get install maven

 

maven을 설치 했으면 소스코드 최상위 디렉토리에서 빌드를 시작


hadoop-common/BUILDING.txt를 열어보면 빌드 옵션이 나옴

 

처음에 텍스트를 보면 리콰이어먼트들이 나옴 거기에 있는걸 하나씩 설치

특히 Findbugs랑 Protocol buffer 때문에 처음 빌드하면 에러남

 

Findbugs : 설치 후 path 설정해주고

protocol buffer  : 2.5.0으로 변경해 줘야함 변경 후에는 역시 path설정해줘야 함

 

위에 requirement를 다 설치 했으면

mvn package 명령어를 통해서 build 및 binary를 만들 수 있음

및에 보면 옵션을 이용한 명령어 목록이 나오는데 test를 하면 시간이 오래 걸리니

mvn package -Pdist -DskipTests -Dtar 

 

명령어를 이용해서 빌드를 하면 됨 (txt에 다른 옵션들을 사용한 빌드 방법도 있으므로 참고해서 필요한 대로 사용)

 

이렇게 빌드가 된 결과는 

hadoop-dist/target/hadoop-version-snapshot에 있음 (내 경우엔 hadoop-3.0.0-snapshot)

 

그 디렉토리에 보면 여러 디렉토리가 있는데

binary는 /bin에 있고, configure를 해줘야하는 .xml파일들은 /etc에 존재함

 

.xml파일 잘 설정해서 사용하면 됨 

 

끝!

신고
Posted by youngjinkmi0706


티스토리 툴바