Cloudera CDH/CDP 및 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
./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
댓글 1
-
총관리자
2016.06.03 11:41
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
10 | S2RDF를 이용한 다른 버젼의 github링크 | 2016.12.02 | 506 |
9 | DataSetCreator실행시 "Illegal character in fragment at index"오류가 나는 경우 조치방안 | 2016.06.17 | 602 |
8 | 5건의 triple data를 이용하여 특정 작업 폴더에서 작업하는 방법/절차 | 2016.06.16 | 156 |
7 | queryTranslator실행시 NullPointerException가 발생전에 java.lang.ArrayIndexOutOfBoundsException발생시 조치사항 | 2016.06.16 | 937 |
6 | S2RDF를 실행부분만 추출하여 1건의 triple data를 HDFS에 등록, sparql을 sql로 변환, sql실행하는 방법및 S2RDF소스 컴파일 방법 | 2016.06.15 | 551 |
5 | S2RDF모듈의 실행부분만 추출하여 별도록 실행하는 방법(draft) | 2016.06.14 | 292 |
4 | --master yarn 옵션으로 spark client프로그램 실행할때 메모리 부족 오류발생시 조치방법 | 2016.05.27 | 287 |
3 | DataSetCreator.py 실행시 파일을 찾을 수 없는 오류 | 2016.05.27 | 191 |
2 | python실행시 ValueError: zero length field name in format오류 해결방법 | 2016.05.27 | 954 |
» | S2RDF 테스트(벤치마크 테스트를 기준으로 python, scala소스가 만들어져서 기능은 파악되지 못함) [1] | 2016.05.27 | 181 |
S2RDF 바이너리 파일