open-korean-text / elasticsearch-analysis-openkoreantext

Korean analysis plugin that integrates open-korean-text module into elasticsearch.
Apache License 2.0
126 stars 22 forks source link

엘라스틱 버전 5.5.1에서 실행 실행이 안됩니다 #8

Closed coolwine closed 6 years ago

coolwine commented 7 years ago

{ "name": "dwkim02", "cluster_name": "elasticsearch", "cluster_uuid": "44NEWUJLRT-9EKGDLkh5pg", "version": { "number": "5.5.1", "build_hash": "19c13d0", "build_date": "2017-07-18T20:44:24.823Z", "build_snapshot": false, "lucene_version": "6.6.0" }, "tagline": "You Know, for Search" }

엘라스틱서치는 5.5.1 버전을 쓰고 있고 openkoreantext 2.1.0 버전입니다.

curl -X POST 'http://localhost:9200/_analyze' -d '{ "analyzer": "openkoreantext-analyzer", "text": "한국어를 처리하는 예시입니닼ㅋㅋ" }'

를 실행하여 테스트를 진행하면 다음과 같은 에러가 발생합니다...

어떤게 원인인지 알 수 있을까요?

[2017-08-04T17:42:26,857][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [dwkim02] fatal error in thread [elasticsearch[dwkim 02][index][T#2]], exiting java.lang.ExceptionInInitializerError: null at org.elasticsearch.index.analysis.OpenKoreanTextAnalyzerProvider.<init>(OpenKoreanTextAnalyzerProvider.java:16) ~[?:?] at org.elasticsearch.indices.analysis.AnalysisModule$AnalysisProvider.get(AnalysisModule.java:395) ~[elasticsearch-5.5.1.j ar:5.5.1] at org.elasticsearch.index.analysis.AnalysisRegistry.lambda$getAnalyzer$0(AnalysisRegistry.java:130) ~[elasticsearch-5.5.1 .jar:5.5.1] at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[?:1.8.0_141] at org.elasticsearch.index.analysis.AnalysisRegistry.getAnalyzer(AnalysisRegistry.java:128) ~[elasticsearch-5.5.1.jar:5.5. 1] at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.analyze(TransportAnalyzeAction.java:169) ~[elasti csearch-5.5.1.jar:5.5.1] at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:157) ~ [elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:77) ~[ elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(Transpor tSingleShardAction.java:294) ~[elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(Transpor tSingleShardAction.java:287) ~[elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33) ~[elasticsearch-5. 5.1.jar:5.5.1] at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsear ch-5.5.1.jar:5.5.1] at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:644) ~[elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:638) ~[elasticsearch-5.5.1.jar:5.5.1] at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-5.5.1.jar:5.5.1 ] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_141] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_141] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_141] Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Program%20Files\Elastic\Elasticsearch \plugins\elasticsearch-analysis-openkoreantext\dic" "read") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) ~[?:1.8.0_141] at java.security.AccessController.checkPermission(AccessController.java:884) ~[?:1.8.0_141] at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[?:1.8.0_141] at java.lang.SecurityManager.checkRead(SecurityManager.java:888) ~[?:1.8.0_141] at java.io.File.isDirectory(File.java:844) ~[?:1.8.0_141] at org.apache.lucene.analysis.ko.UserDictionaryLoader.<clinit>(UserDictionaryLoader.java:30) ~[?:?] ... 18 more

keepcosmos commented 7 years ago

윈도우즈에서 사용하시는군요. 사실 제가 윈도우즈 시스템을 잘 몰라서 정확한 문제가 무엇인지 알기 힘든데요,

[?:1.8.0_141] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_141] Caused by:
 java.security.AccessControlException: access denied ("java.io.FilePermission" 
"C:\Program%20Files\Elastic\Elasticsearch \plugins\elasticsearch-analysis-openkoreantext\dic" 
"read") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 

이 라인이 문제인거 같아요. FilePermission 문제라고 나오는군요,

  1. 플러그인이 실행할 때, ${ES_HOME}/plugins/elasticsearch-analysis-openkoreantext/dic 에 있는 사전파일을 읽는데요, 이 패스에 대한 권한이 ES 실행자 권한이랑 다른게 아닌가 일단 추측되구요.

  2. 가능성은 적어보이지만, C:\Program%20Files\Elastic\Elasticsearch \plugins\elasticsearch-analysis-openkoreantext\dic 를 읽고있는데 \Elasticsearch \plugins\ 사이에 띄워쓰기 공백이 하나 있거든요. 혹시 여기도 의심할 여지가 있지 않을까요?

coolwine commented 7 years ago

말씀하신 권한문제가 맞는것 같은데 윈도우로 온갖 권한을 줘봐도 에러는 같았습니다.

비슷한 문제를 보고 찾아보았습니다.

plugin 폴더를 살펴보니 다른 폴더에는 plugin-security.policy 파일이 있었습니다.

그래서 그 파일을 elasticsearch-analysis-openkoreantext 디렉토리로 복사해서 다음과 같이 편집했습니다.

grant { permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "elasticsearch-analysis-openkoreantext"; permission org.elasticsearch.script.ClassPermission "org.elasticsearch.plugin.analysis.openkoreantext.AnalysisOpenKoreanTextPlugin"; permission java.io.FilePermission "C:\Program%20Files\Elastic\Elasticsearch\plugins\elasticsearch-analysis-openkoreantext\dic", "read,write"; };

자바를 몰라 저렇게 편집해놓고 실행해도 에러는 같았습니다.

저 파일이 문제의 원인이 될까요?

keepcosmos commented 7 years ago

혹시 \dic 패스를 elasticsearch를 실행시키는 계정 소유로 주고, 읽고, 쓰게 다 권한을 주셨나요?, 혹시 system admin 소유로 되어있는건 아닌지요?

coolwine commented 7 years ago

image

현재 권한은 로컬계정으로 모두 실행 및 할당 하였습니다.

keepcosmos commented 7 years ago

확인해보니, 말씀하신대로 별도의 permission policy file이 필요한 듯 보입니다. https://www.elastic.co/guide/en/elasticsearch/plugins/2.2/plugin-authors.html#_java_security_permissions

일단 해방 부분을 plugin에 넣고 추가 작업해야할거 같구요, 업데이트 되기 전 급하게 사용하기 위해선 몇가지 옵션이 있는 듯 보이네요,

https://stackoverflow.com/questions/35401917/reading-a-file-in-an-elasticsearch-plugin

coolwine commented 7 years ago

그렇군요 잠깐 해보니 -D 옵션은 안되는것 같구

어서 업데이트 되길 바랄게요

감사합니다.

keepcosmos commented 7 years ago

열어놓을께요~ 업데이트 후 노티하겠습니다.

keepcosmos commented 7 years ago

@coolwine 제 작업환경에서 재현하기가 어렵네요. \plugins\elasticsearch-analysis-openkoreantext\ 밑에 plugin-security.policy 을 만들고

grant {
    permission java.io.FilePermission "dic", "read";
};

를 작성해서 실행해보시겠어요?

혹시 "dic"아 안된다면 해당 위치에 절대경로를 넣어서 실행했을 때, 문제 없는지 확인 부탁드립니다.

coolwine commented 7 years ago

말씀하신 사항들 적용했지만 에러메시지는 같네요

다른 방법을 찾아봐야겠네요ㅠ

keepcosmos commented 7 years ago

네, 한 번 찾아보겠습니다, 일단 5.5.2 용 새 버젼에는 해당 이슈 발생시 로깅만 하고 실행은 되도록 해놨습니다.

coolwine commented 7 years ago

넵 감사합니다