메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


1. 다운로드(S2RDF)및 /home/hadoop/s2rdf에 올리기

http://dbis.informatik.uni-freiburg.de/forschung/projekte/DiPoS/S2RDF.html


2. triple data파일을 HDFS에 등록하기(s p o 각각은 t로 구분되어 있어야함)

hadoop fs -put /tmp/test.nq s2rdf


3. HDFS에 있는 RDF data파일을 이용하여 데이타 생성(./DataSetCreator/디렉토리에서 실행)

python3 ./DataSetCreator.py -i s2rdf/test.nq -s 0.25


* 초기에 제공되는 ./DataSetCreator/DataSetCreator.py파일이 Python 2.6.6에서 오류가 발생하여 python의 버젼을 3.5.1로 올림

DataSetCreator.py파일에 있는 print구문에 오류가 있어서 ()로 묶어주는 등의 python소스의 일부 수정이 필요함

DataSetCreator.py파일 상단에 있는 변수값 및 소스내의 spark-submit의 위치를 실제위치로 변경해줘야함

* Helper.scala파일에 hdfs를 호출하는 부분이 있는데 파일을 찾지 못하는 문제가 발생해서 hdfs의 위치를 절대경로 혹은 정확한 위치를 경로포함해서 수정해주고 sbt로 재 컴파일하여 datasetcreator_2.10-1.1.jar를 다시 만들어서 이후의 과정을 진행해야함.


4. 실행순서(확인결과 spark 1.3.1+ hadoop 2.7.2에서 작동되나, 실행시 "Table Not Found"오류가 발생함->소스에서 테이블명칭 앞뒤로 ` `를 덧붙이도옥 소스수정필요함)

가. DataSetCreator: 주어진 RDF Dataset으로 HDFS에 ExtVP모델을 만들고 통계파일(stat_os.txt, stat_so.txt, stat_ss.txt, stat_vt.txt)도 만드는데, 이는 QueryTranslator가 SPARQL쿼리를 SQL로 변환할때 사용된다.

python DataSetCreator.py -i <inputRDFFile> [-s <ScaleUB> (def=1)]

(예, python3 ./DataSetCreator.py -i s2rdf/test1.nq -s 0.25)

=>python3 ./DataSetCreator.py -i s2rdf/test.nq -s 0.25


나. QueryTranslator : SPARQL쿼리를 SQL로 변환한다. 이때 table usage instructions (necessary for ExtVP model usage)도 만들어진다. QueryExecutor가 실행할 composite쿼리 파일(SQL쿼리의 목록을 갖고 있음)을 만드는 translateWatDivQueries.py가 이 라이브러리를 사용한다.(generateWatDivPathQueries.py와 generateWatDivBasicQueries.py는  WatDiv용 sparql을 만들기전에 텡플릿과 값을 이용하여 sparql을 조합/준비하는 과정이고 translateWatDivQueries.py를 이용하여 최종 sparql을 만들어낸다)


--Inc, Sel, Mix 생성(내부적으로 queryTranslator.jar사용함)

generateWatDivPathQueries.py -i <sourceDir> -o <targetDir> -s <WatDivScale>

(예, python3 ./generateWatDivPathQueries.py -i <sourceDir> -o <targetDir> -s <WatDivScale>)


--WatDiv SPARQL쿼리 생성(내부적으로 queryTranslator.jar사용함)

generateWatDivBasicQueries.py -i <sourceDir> -o <targetDir> -s <WatDivScale>


--위에서 생성한것을 SQL로 변환한다.(내부적으로 queryTranslator.jar)

translateWatDivQueries.py -s <sparqlDir (conatins sparqlFiles)> -t <sqlDir>



---------------------------------------실제 변환 과정-----

* /home/hadoop/QueryTranslator/WatDivQuerySet밑에서 sparql을 sql로 변환작업함

가. hadoop fs -mkdir s2rdf/sparql

나. hadoop fs -mkdir s2rdf/sql

다. hadoop fs -put in/test.sparql s2rdf/sparql

라. python3 ./translateYagoQueries.py -s in -t out


* generateWatDivPathQueries.py -i <sourceDir> -o <targetDir> -s <WatDivScale>

가.python3 ./generateWatDivPathQueries.py -i inputInc -o outputInc -s 1

나.python3 ./generateWatDivPathQueries.py -i inputMix -o outputMix -s 1

다.python3 ./generateWatDivPathQueries.py -i inputSel -o outputSel -s 1


* generateWatDivBasicQueries.py -i <sourceDir> -o <targetDir> -s <WatDivScale>

==>python3 /home/hadoop/QueryTranslator/WatDivQuerySet/SPARQL/WatDivBasic/generateWatDivBasicQueries.py -i input -o output -s 1


* translateWatDivQueries.py -s <sparqlDir (conatins sparqlFiles)> -t <sqlDir>



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


다. QueryExecutor : translateWatDivQueries.py를 이용하여 만들어진 SQL Queries가 들어 있는 파일을 실행하는 프로그램

(예, python QueryExecutor.py -d <databaseDirectory> -q <querieListFile>)

==> QueryExecutor.py소스에서 spark-submit option으로 --files IL5-1-U-1--SO-OS-SS-VP__WatDiv1M.sql를 추가해야 함, 

 sql파일명은 위에 형식을 따르게 구성되어야 함 "__"다음에 나오는 "WatDiv1M"을 테이블 명으로 사용함 )

==> 


- python3 ./QueryExecutor.py -d WatDiv1M -q IL5-1-U-1--SO-OS-SS-VP__WatDiv1M.sql -> 성공.. 그러나 결과는 어디서 확인하나?

- python3 ./QueryExecutor.py -d s2rdf -q test1.sql -> 통계정보가 없어서 인지 오류가 발생함

- python3 ./QueryExecutor.py -d s2rdf -q a.sql -> 성공..그러나 결과는 어디서 확인하나??


* 이전에 여러번 실행하면서 오류가 발생했다면 hdfs://mycluster/user/hadoop/s2rdf/data/base.parquet폴더가 존재한다는 오류가 발생하는데 "hadoop fs -rmr hdfs://mycluster/user/hadoop/s2rdf/data/base.parquet"를 이용하여 삭제하고 3번을 다시 실행한다.




참고----------------------*.py파일들 ----

1. DataSetCreator

  ./DataSetCreator/DataSetCreator.py


2. QueryTranslator

 가. WatDivQuerySet

   ./QueryTranslator/WatDivQuerySet/SPARQL/WatDivBasic/generateWatDivBasicQueries.py

   ./QueryTranslator/WatDivQuerySet/SPARQL/selfGenerated/generateWatDivPathQueries.py

   ./QueryTranslator/WatDivQuerySet/translateWatDivQueries.py


 나.YagoQuerySet

   ./QueryTranslator/YagoQuerySet/src/extractYagoSPARQLQueries.py

   ./QueryTranslator/YagoQuerySet/translateYagoQueries.py


3. QueryExecutor

   ./QueryExecutor/QueryExecutor.py


참고----------------------*.jar파일들 -----------

./datasetcreator_2.10-1.1.jar

./DataSetCreator/datasetcreator_2.10-1.1.jar

./DataSetCreator/target/scala-2.10/datasetcreator_2.10-1.1.jar


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


-----DataSetCreator.py가 정상적으로 실행되었을때의 DataSetCreator.log의 내용-------------------------

Generate Vertical Partitioning

Execute $HOME/spark/bin/spark-submit --driver-memory 1g --class runDriver --master yarn  --executor-memory 1g --deploy-mode cluster ./datasetcreator_2.10-1.1.jar s2rdf/ test3.nq VP 0.2 > ./DataBaseCreator.e

rr ...

Time--> 40 sec

Done!

Cluster recovering (time_out = 360sec)...

Done!

Generate Exteded Vertical Partitioning subset SO

Execute $HOME/spark/bin/spark-submit --driver-memory 1g --class runDriver --master yarn  --executor-memory 1g --deploy-mode cluster ./datasetcreator_2.10-1.1.jar s2rdf/ test3.nq SO 0.2 > ./DataBaseCreator.e

rr ...

Time--> 25 sec

Done!

Cluster recovering (time_out = 360sec)...

Done!

Generate Exteded Vertical Partitioning subset OS

Execute $HOME/spark/bin/spark-submit --driver-memory 1g --class runDriver --master yarn  --executor-memory 1g --deploy-mode cluster ./datasetcreator_2.10-1.1.jar s2rdf/ test3.nq OS 0.2 > ./DataBaseCreator.e

rr ...

Time--> 26 sec

Done!

Cluster recovering (time_out = 360sec)...

Done!

Generate Exteded Vertical Partitioning subset SS

Execute $HOME/spark/bin/spark-submit --driver-memory 1g --class runDriver --master yarn  --executor-memory 1g --deploy-mode cluster ./datasetcreator_2.10-1.1.jar s2rdf/ test3.nq SS 0.2 > ./DataBaseCreator.e

rr ...

Time--> 22 sec

Done!

Whole Run Time --> 113 sec


--------hadoop에서 보는 s2rdf-----------------------

-bash-4.1$ hadoop fs -lsr s2rdf

lsr: DEPRECATED: Please use 'ls -R' instead.

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/home/gooper/svc/apps/sda/bin/hadoop/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/home/gooper/svc/apps/sda/bin/hadoop/apache-hive-2.0.1-bin/lib/hive-jdbc-2.0.1-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/home/gooper/svc/apps/sda/bin/hadoop/apache-hive-2.0.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

16/06/09 10:07:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

drwxr-xr-x   - root   supergroup          0 2016-06-09 10:06 s2rdf/ExtVP

drwxr-xr-x   - root   supergroup          0 2016-06-09 10:00 s2rdf/ExtVP/OS

drwxr-xr-x   - root   supergroup          0 2016-06-09 09:54 s2rdf/ExtVP/SO

drwxr-xr-x   - root   supergroup          0 2016-06-09 10:06 s2rdf/ExtVP/SS

drwxr-xr-x   - root   supergroup          0 2016-06-09 09:47 s2rdf/VP

drwxr-xr-x   - hadoop supergroup          0 2016-06-09 09:47 s2rdf/VP/bb.parquet

-rw-r--r--   3 hadoop supergroup          0 2016-06-09 09:47 s2rdf/VP/bb.parquet/_SUCCESS

-rw-r--r--   3 hadoop supergroup        282 2016-06-09 09:47 s2rdf/VP/bb.parquet/_common_metadata

-rw-r--r--   3 hadoop supergroup        419 2016-06-09 09:47 s2rdf/VP/bb.parquet/_metadata

-rw-r--r--   3 hadoop supergroup        499 2016-06-09 09:47 s2rdf/VP/bb.parquet/part-r-00001.parquet

-rw-r--r--   3 hadoop supergroup        282 2016-06-09 09:47 s2rdf/VP/bb.parquet/part-r-00002.parquet

-rw-r--r--   3 hadoop supergroup        282 2016-06-09 09:47 s2rdf/VP/bb.parquet/part-r-00003.parquet

drwxr-xr-x   - hadoop supergroup          0 2016-06-09 09:47 s2rdf/base.parquet

-rw-r--r--   3 hadoop supergroup          0 2016-06-09 09:47 s2rdf/base.parquet/_SUCCESS

-rw-r--r--   3 hadoop supergroup        357 2016-06-09 09:47 s2rdf/base.parquet/_common_metadata

-rw-r--r--   3 hadoop supergroup        559 2016-06-09 09:47 s2rdf/base.parquet/_metadata

-rw-r--r--   3 hadoop supergroup        676 2016-06-09 09:47 s2rdf/base.parquet/part-r-00001.parquet

-rw-r--r--   3 hadoop supergroup        357 2016-06-09 09:47 s2rdf/base.parquet/part-r-00002.parquet

-rw-r--r--   3 hadoop supergroup        357 2016-06-09 09:47 s2rdf/base.parquet/part-r-00003.parquet

-rw-r--r--   3 hadoop supergroup        150 2016-06-02 15:04 s2rdf/test1.nq

-rw-r--r--   3 hadoop supergroup        398 2016-06-02 15:41 s2rdf/test1.sql

-rw-r--r--   3 hadoop supergroup        138 2016-06-08 18:28 s2rdf/test2.nq

-rw-r--r--   3 hadoop supergroup         11 2016-06-09 09:46 s2rdf/test3.nq


번호 제목 글쓴이 날짜 조회 수
39 protege 4.3 다운로드 총관리자 2015.12.09 126
38 select와 group by결과 값이 없는경우의 리턴 값이 다름 file 총관리자 2016.02.05 119
37 solrcloud에 solrdf1.1설치하고 테스트 하기 총관리자 2016.04.22 113
36 TopBraid Composer에서 SPIN 사용법 file 총관리자 2016.02.25 104
35 https://github.com/Merck/Halyard프로젝트 컴파일및 배포/테스트 총관리자 2017.01.24 103
34 RDF storage조합에대한 test결과(4store, Jena+HBase, Hive+HBase, CumulusRDF, Couchbase) 페이지 링크 총관리자 2016.05.26 102
33 fuseki의 endpoint를 이용한 insert, delete하는 sparql예시 총관리자 2018.02.14 101
32 Jena는 기본적으로 multi thread환경을 지원하지 않는다. 총관리자 2016.08.16 94
31 시맨틱 관련 논문 모음 사이트 총관리자 2017.06.13 94
30 [Elephas] Jena Elephas를 이용하여 Spark에서 rdfTriples의 RDD를 만들고 RDD관련 작업하는 샘플소스 총관리자 2016.08.10 90
29 jena의 data폴더를 hadoop nfs를 이용하여 HDFS상의 폴더에 마운트 시키고 fuseki를 통하여 inert를 시도했을때 transaction 오류 발생 총관리자 2016.12.02 82
28 oneM2M Specification(Draft Release 3, 2, 1), Draft Technical Reports 총관리자 2017.10.25 81
» S2RDF 테스트(벤치마크 테스트를 기준으로 python, scala소스가 만들어져서 기능은 파악되지 못함) [2] file 총관리자 2016.05.27 76
26 drools에서 drl관련 로그를 기록하기 위한 클래스 파일 총관리자 2016.07.21 74
25 SPIN(SPARQL Inference Notation)이란.. file 총관리자 2016.02.25 73
24 실시간 쿼리 변환 모니터링(팩트내 필드값의 변경사항을 실시간으로 추적함)하는 테스트 java 프로그램 file 총관리자 2016.07.21 67
23 슬라이딩 윈도우 예제 총관리자 2016.07.28 67
22 halyard 1.3을 다른 서버로 이전하는 방법 총관리자 2017.07.05 66
21 전체 컨택스트 내용 file 총관리자 2017.12.19 66
20 halyard 1.3의 rdf4j-server.war와 rdf4j-workbench.war를 tomcat deploy후 조회시 java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/Cell발생시 조치사항 총관리자 2017.07.05 65

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로