2015년 5월 1일 금요일

solr admin에 password 추가하기

https://wiki.apache.org/solr/SolrSecurity

여기서 

Common servlet container example

Jetty realm example

이 두개를 따라 하면 된다.

<jetty.xml>
    <Call name="addBean">
      <Arg>
        <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
          <Set name="contexts">
            <Ref id="Contexts" />
          </Set>
          <Call name="setContextAttribute">
            <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
            <Arg>.*/servlet-api-[^/]*\.jar$</Arg>
          </Call>
          
          
          <!-- Add a customize step to the deployment lifecycle -->
          <!-- uncomment and replace DebugBinding with your extended AppLifeCycle.Binding class 
          <Call name="insertLifeCycleNode">
            <Arg>deployed</Arg>
            <Arg>starting</Arg>
            <Arg>customise</Arg>
          </Call>
          <Call name="addLifeCycleBinding">
            <Arg>
              <New class="org.eclipse.jetty.deploy.bindings.DebugBinding">
                <Arg>customise</Arg>
              </New>
            </Arg>
          </Call>
          -->
          
        </New>
      </Arg>
    </Call>
    <Call name="addBean">
      <Arg>
        <New class="org.eclipse.jetty.security.HashLoginService">
          <Set name="name">Test Realm</Set>
          <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
          <Set name="refreshInterval">0</Set>
        </New>
      </Arg>
    </Call>
    
    <Ref id="DeploymentManager">
      <Call name="addAppProvider">
        <Arg>
          <New class="org.eclipse.jetty.deploy.providers.ContextProvider">
            <Set name="monitoredDirName"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
            <Set name="scanInterval">0</Set>
          </New>
        </Arg>
      </Call>

    </Ref>

<web.xml>
  <welcome-file-list>
    <welcome-file>admin.html</welcome-file>
  </welcome-file-list>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Solr authenticated application</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Test Realm</realm-name>
  </login-config>
    
</web-app>

<realm.properties>
admin: 12345, admin

암호 부분을 강화하려면..
여기에 있는 방법대로..
$ cd ./lib
$ java -cp jetty-util-8.1.10.v20130312.jar org.eclipse.jetty.util.security.Password admin 12345
12345
OBF:19bv19bx19bz19c119c3
MD5:827ccb0eea8a706c4c34a16891f84e7b
CRYPT:adpliAB3dA.06

<realm.properties>
adminMD5:827ccb0eea8a706c4c34a16891f84e7b, admin


Solr ubuntu 설치

Solr를 ubuntu에 설치해보자. 형태소 분석기는 은전한닢을 사용한다. 요즘 핫한 건 elastic search이긴 하나 Solr를 선택한 이유는 admin이 보다 편리하게 되어 있고 예제도 아직은 elastic search보다 많기 때문이다. 결정적으로 분산 Indexing을 많이 안 하지 않을까? 해도 Solr에서 제안하는 Zookeeper를 사용한 분산 Indexing을 써도 돼지 않을까? 싶었고 Solr에서 elastic search로 옮기는 예제는 많은데 반대는 거이 찾아보기 힘들었다. 나중에 필요하면 elastic search로 옮겨가는 걸로...

즉, Solr를 선택한 이유는 초기 공부 및 도입 비용이 elastic search와 비교해 봤을 때 적어 보였기 때문이다.

형태소 분석기 은전한닢은 다음 URL를 보고 설치
http://eunjeon.blogspot.kr/

분석기
wget https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/mecab-ko-lucene-analyzer-0.17.0.tar.gz
설치 URL
https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/src/2397c65dccf333eec2613448c32c2694092f09b4/README.md?at=release-0.17.0

mecab-ko
wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
설치 URL
https://bitbucket.org/eunjeon/mecab-ko

mecab-ko-dic
wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.0-20150517.tar.gz
설치 URL
https://bitbucket.org/eunjeon/mecab-ko-dic

mecab-java
wget https://bitbucket.org/eunjeon/mecab-java/downloads/mecab-java-0.996.tar.gz

팁이라고 하면.. mecab-ko 는 최신거 사용
mecab-ko-dic은 알파 아닌 최신거 사용

설치할 때 에러나는 경우
1. mecab-0.996-ko-0.9.2에서 ./configure  할 때 에러난 경우
>> sudo apt-get install g++
2. he program 'make' is currently not installed.  To run 'make' please ask your administrator to install the package 'make'
라고 에러난 경우
>> sudo apt-get install build-essential
3. /usr/local/libexec/mecab/mecab-dict-index: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
라고 에러난 경우
>> vi ~/.bashrc 혹은 vi ~/.bash_profile 에 아래 거 추가
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
4. mecab-java 컴파일 하다가
unmappable character for encoding ASCII
라고 에러나면
>> export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8



설치 시작하기 은전한닢이 solr 5 번전을 지원 못 하기 때문에 4.10.4로 설치

$ wget http://mirror.apache-kr.org/lucene/solr/4.10.4/solr-4.10.4.tgz
$ tar xvzf solr-4.10.4.tgz
$ cd solr-4.10.4
$ ./bin/solr start

이제부터는 설정 및 스키마 추가등은 메뉴얼대로~

2015년 4월 28일 화요일

Spark ubunto에서 설치

Spark는 버클리 학생들이 아이디어를 제안해서 만들어진 프로젝트이다. 빠르게 버전업 되는 핫한 프레임워크이다. 단지 워낙 빠르게 버전업되고 만들어진지 얼마 안 돼다보니 안정화가 들 돼어 있다. 즉 버그가 많다. 그렇지만 큰 데이터를 분석할 때 그런 듯 싶고 우리가 쓰는 환경은 한 번에 최대 50Mbyte 정도의 데이터만 처리하면 돼기 때문에 In-memory에서 메모리가 깨지는 문제는 아직까진 발견할 수 없다. Gbyte단위로 분석하면 깨지지 않을까 추측을 해본다.

설치라고 해서 할 건 별로 없다. 실행 이미지가 들어 있기 때문이다.

아래주소로 방문해서
http://spark.apache.org/downloads.html

원하는 패키지를 다운 받는다.

wget http://apache.mirror.cdnetworks.com/spark/spark-1.3.1/spark-1.3.1-bin-hadoop2.6.tgz

$ tar xvzf spark-1.3.1-bin-hadoop2.6.tgz

$ cd conf/
$ cp spark-env.sh.template spark-env.sh
$ vi spark-env.sh

# 원하는 설정을 넣어주면 된다. 우리는 다음과 같이 넣었다.
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=3600"
export SPARK_MASTER_IP=192.168.0.1

export SPARK_WORKER_MEMORY=8g
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

$ cp spark-defaults.conf.template spark-defaults.conf
$ vi spark-defaults.conf

# 여기에도 원하는 설정을 넣어주면 된다.
park.master    spark://192.168.0.1:7077
spark.default.parallelism   4

$ cp slaves.template slaves
$ vi slaves
# 노예들을 다 적어 주면 된다. 일할 서버 아이피들..
192.168.0.1
#192.168.0.2
#192.168.0.3

$ cd ..
$ ./sbin/start-all.sh

만약 다음과 같은 에러가 났다면..
Exception in thread "main" java.net.UnknownHostException: test: test: unknown error
        at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
        at org.apache.spark.util.Utils$.findLocalIpAddress(Utils.scala:771)
        at org.apache.spark.util.Utils$.localIpAddress$lzycompute(Utils.scala:763)
        at org.apache.spark.util.Utils$.localIpAddress(Utils.scala:763)
        at org.apache.spark.util.Utils$.localIpAddressHostname$lzycompute(Utils.scala:764)
        at org.apache.spark.util.Utils$.localIpAddressHostname(Utils.scala:764)
        at org.apache.spark.util.Utils$$anonfun$localHostName$1.apply(Utils.scala:816)
        at org.apache.spark.util.Utils$$anonfun$localHostName$1.apply(Utils.scala:816)
        at scala.Option.getOrElse(Option.scala:120)
        at org.apache.spark.util.Utils$.localHostName(Utils.scala:816)
        at org.apache.spark.deploy.worker.WorkerArguments.<init>(WorkerArguments.scala:29)
        at org.apache.spark.deploy.worker.Worker$.main(Worker.scala:528)
        at org.apache.spark.deploy.worker.Worker.main(Worker.scala)
Caused by: java.net.UnknownHostException: anal01: unknown error
        at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
        at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
        at java.net.InetAddress.getLocalHost(InetAddress.java:1479)

        ... 12 more

아래를 추가해주고
$ sudo vi /etc/hosts
127.0.1.1       test

다시 실행
$ ./sbin/start-all.sh