메뉴 건너뛰기

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


번호 제목 글쓴이 날짜 조회 수
279 AIX 7.1에 Hadoop설치(정리중) 총관리자 2016.09.12 236
278 No broker partitions consumed by consumer thread오류 발생시 확인/조치할 사항 총관리자 2016.09.02 151
277 [Mybatis]Spring과 연동하지 않고 Java+Mybatis 형태의 프로그램 샘플소스 총관리자 2016.09.01 806
276 초기 오류(java.lang.NoSuchMethodError)에 따른 후속 작업에서 오류(java.lang.NoClassDefFoundError)가 발생되는 상황(quartz에서 주기적으로 작업시) 총관리자 2016.08.29 591
275 특정문자열이나 URI를 임의로 select 절에 지정하여 사용할때 사용하는 sparql 문장 총관리자 2016.08.25 376
274 로컬에 있는 jar파일을 지정하고 dependency로 가져오기 총관리자 2016.08.19 79
273 jena jar파일실행시 org.apache.jena.tdb.TDB.init에서 java.lang.NullPointerException발생시 조치사항 총관리자 2016.08.19 134
272 springframework를 이용한 war를 생성하는 build.gradle파일(참고용) 총관리자 2016.08.19 650
271 spark submit용 jar파일을 만드는 sbt 용 build.sbt설정 파일(참고용) 총관리자 2016.08.19 161
270 spark, kafka, mariadb, jena, springframework등을 이용하여 공통모듈을 jar로 만들기 위한 build.gradle파일(참고용) 총관리자 2016.08.19 611
269 kafka 0.9.0.1버젼의 producer와 kafka버젼이 0.10.0.1인 consumer가 서로 대화하는 모습 총관리자 2016.08.18 288
268 build.gradle을 pom.xml로 변환하는 방법 총관리자 2016.08.18 1147
267 Jena는 기본적으로 multi thread환경을 지원하지 않는다. 총관리자 2016.08.16 94
266 down된 broker로 메세지를 전송하려는 경우의 오류 내용및 조치사항 총관리자 2016.08.12 238
265 여러가지 방법으로 특정 jar파일을 exclude하지 못하는 경우 해당 jar파일을 제외시키는 방법 총관리자 2016.08.11 122
264 jar파일의 dependency찾는 프로그램 총관리자 2016.08.11 52
263 compile할때와 exclude할때 대상을 표현하는 명칭이 다르므로 주의할것 총관리자 2016.08.10 503
262 외부 jar파일을 만들려고하는jar파일의 package로 포함하는 방법 총관리자 2016.08.10 81
261 servlet-api를 jar형태로 build할때 포함하지 말고 java 설치 위치의 jre/lib/ext에 복사하여 사용하는것이 좋다. 총관리자 2016.08.10 445
260 [Elephas] Jena Elephas를 이용하여 Spark에서 rdfTriples의 RDD를 만들고 RDD관련 작업하는 샘플소스 총관리자 2016.08.10 90

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.

위로