update-alternatives

보통 커맨드라인에서 명령어를 치고 결과를 기다립니다. 가끔 만나는 에러 중 하나는 “command not found” 이며 부딪히고 싶지 않을 땐 미리미리 PATH를 등록해두면 됩니다. 이 포스트에서 설명하려는 기능은 update-alternatives 또는 alternatives 라는 명령어입니다. PATH 말고 다른 방법으로 이를 해결합니다.

update-alternatives 명령어를 정상적으로 사용하면 결과는 /etc/alternatives 라는 디렉토리에 기록됩니다. 아래와 같은 명령어로 확인해보면

$ ls -l /etc/alternatives/
total 0
lrwxrwxrwx  1 root root 55 Feb 12 04:19 appletviewer -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/appletviewer
lrwxrwxrwx  1 root root 56 Feb 12 04:19 appletviewer.1.gz -> /usr/share/man/man1/appletviewer-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 46 Feb 12 04:19 apt -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/apt
lrwxrwxrwx  1 root root 47 Feb 12 04:19 apt.1.gz -> /usr/share/man/man1/apt-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 51 Feb 12 04:19 extcheck -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/extcheck
lrwxrwxrwx  1 root root 52 Feb 12 04:19 extcheck.1.gz -> /usr/share/man/man1/extcheck-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 21 Feb 12 04:25 flume-conf -> /etc/flume/conf.empty
lrwxrwxrwx  1 root root 21 Feb 12 04:29 giraph-conf -> /etc/giraph/conf.dist
lrwxrwxrwx  1 root root 22 Feb 12 04:24 hadoop-conf -> /etc/hadoop/conf.empty
lrwxrwxrwx  1 root root 20 Feb 12 04:24 hbase-conf -> /etc/hbase/conf.dist
lrwxrwxrwx  1 root root 19 Feb 12 04:28 hive-conf -> /etc/hive/conf.dist
lrwxrwxrwx  1 root root 46 Feb 12 04:19 jar -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/jar
lrwxrwxrwx  1 root root 47 Feb 12 04:19 jar.1.gz -> /usr/share/man/man1/jar-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 52 Feb 12 04:19 jarsigner -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/jarsigner
lrwxrwxrwx  1 root root 53 Feb 12 04:19 jarsigner.1.gz -> /usr/share/man/man1/jarsigner-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 46 Feb 12 04:18 java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
lrwxrwxrwx  1 root root 48 Feb 12 04:18 java.1.gz -> /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 48 Feb 12 04:19 javac -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/javac
lrwxrwxrwx  1 root root 49 Feb 12 04:19 javac.1.gz -> /usr/share/man/man1/javac-java-1.6.0-openjdk.1.gz
lrwxrwxrwx  1 root root 50 Feb 12 04:19 javadoc -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/javadoc
lrwxrwxrwx  1 root root 51 Feb 12 04:19 javadoc.1.gz -> /usr/share/man/man1/javadoc-java-1.6.0-openjdk.1.gz
…

$ which javac
/usr/bin/javac

$ readlink /usr/bin/javac
/etc/alternatives/javac

위와 같은 결과를 보면 알 수 있듯이 모두 link 파일입니다.

사용 방법은 아래와 같습니다. (단순 예제)

$ mkdir /usr/lib/scala29
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.2.tgz
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.3-RC2.tgz

$ tar xvfz scala-2.9.2.tgz
$ tar xvfz scala-2.9.3-RC2.tgz

$ update-alternatives --install /usr/bin/scala scala /usr/lib/scala29/scala-2.9.2/bin/scala 5
$ readlink /etc/alternatives/scala
/usr/lib/scala29/scala-2.9.2/bin/scala
$ update-alternatives --install /usr/bin/scala scala /usr/lib/scala29/scala-2.9.3-RC2/bin/scala 10
$ readlink /etc/alternatives/scala
/usr/lib/scala29/scala-2.9.3-RC2/bin/scala
$ update-alternatives --remove scala `readlink /etc/alternatives/scala`
$ readlink /etc/alternatives/scala
/usr/lib/scala29/scala-2.9.2/bin/scala

굳이 귀찮게 PATH에 등록할 필요는 없습니다.

Oozie Install

Apache oozie 설치가 생각보다 까다롭기에 미리 블로그에 정리합니다. 현재 oozie 최신 버전은 3.3.1 이니 저도 그 버전을 기준으로 정리합니다. (사내에서 수정해서 사용하는 것은 이 보다 하위버전) 일단 먼저 하둡을 간단하게 설치합니다. 저는 하둡 1.0.4 버전으로 설치해볼께요.

확실하게 oozie 는 소스를 다운로드받아서 컴파일한 후 설치합니다.

$ wget http://mirror.apache-kr.org/oozie/3.3.1/oozie-3.3.1.tar.gz
$ tar xvfz oozie-3.3.1.tar.gz
$ cd oozie-3.3.1
$ ./bin/mkdistro.sh -DskipTests
...(maven 작업...)

여기까지 작업하면 컴파일 및 패키징까지 완료를 의미합니다.

패키지된 tar파일을 가지고 배포해서 설치작업을 진행합니다.

$ export OOZIE_HOME="/path/oozie"
$ export HADOOP_HOME="/path/hadoop"
$ mv distro/target/oozie-3.3.1-distro.tar.gz `dirname $OOZIE_HOME`
$ cd `dirname $OOZIE_HOME`
$ tar xvfz oozie-3.3.1-distro.tar.gz
$ ln -s oozie-3.3.1 oozie
$ cd oozie
$ wget http://dev.sencha.com/deploy/ext-2.2.1.zip && unzip ext-2.2.1.zip -d ext-2.2.1
$ ./bin/oozie-setup.sh -hadoop 0.20.2 $HADOOP_HOME -extjs ext-2.2.1 -jars "$HADOOP_HOME/lib/commons-configuration-1.6.jar:$HADOOP_HOME/lib/jackson-core-asl-1.8.8.jar:$HADOOP_HOME/lib/jackson-mapper-asl-1.8.8.jar"

하둡버전이 1.0.4를 사용하지만 설치시에 버전은 0.20.2로 작성하시면 됩니다. 하둡 버전에 따라서 core 또는 common 등으로 나뉘기때문에 그걸 구분하기 위한 단순한 정보에 불과합니다.

기본 데이터베이스는 derby고, 지원하는 데이터베이스로는 hsqldb, mysql, postresql, oracle 등이 있습니다. hsqldb, derby, postgresql은 jdbc driver를 제공하지만 그 외는 제공하지 않아서 따로 설치하셔야합니다. (oozie-setup.sh 수행시 -jars 에 포함하시면 됩니다.)

$ ./bin/ooziedb.sh create -sqlfile oozie.sql -run
$ ./bin/oozie-start.sh

다른 데이터베이스를 사용하실분은 conf/oozie-site.xml에서 oozie.service.JPAService.jdbc.* 값을 수정하시면 됩니다. 아래 값 중 “oozie.service.JPAService.create.db.schema” 이 값을 true로 해야 스키마가 없을 때 생성합니다.

  oozie.db.schema.name=oozie
  oozie.service.JPAService.create.db.schema=true
  oozie.service.JPAService.validate.db.connection=false
  oozie.service.JPAService.jdbc.driver=org.hsqldb.jdbcDriver
  oozie.service.JPAService.jdbc.url=jdbc:hsqldb:mem:${oozie.db.schema.name}
  oozie.service.JPAService.jdbc.username=sa
  oozie.service.JPAService.jdbc.password=
  oozie.service.JPAService.pool.max.active.conn=10
$ export OOZIE_URL=http://localhost:11000/oozie
$ $OOZIE_HOME/bin/oozie admin -status
System mode: NORMAL

$HADOOP_HOME/conf/hdfs-site.xml 파일을 열어서 proxyuser 설정을 합니다.

...
  <property>
    <name>hadoop.proxyuser.[USER].groups</name>
    <value>[GROUPS]</value>
  </property>
  <property>
    <name>hadoop.proxyuser.[USER].hosts</name>
    <value>[HOSTS]</value>
  </property>
...

GROUPS, HOSTS는 그냥 “*”로 하셔도 되지만 호스트이나 그룹명을 쉼표로 구분하여 작성하셔도 됩니다. 아 그리고 중요한 것은 M/R작업시 필요한 라이브러리등이 있는데 이를 미리 HDFS에 올려둬야합니다. 패키징할 때 같이 함께 들어있으니 그걸 풀고 올리면 됩니다.

$ cd $OOZIE_HOME
$ tar xvfz oozie-sharelib-3.3.1.tar.gz
$ $HADOOP_HOME/bin/hadoop dfs -put share share

그럼 간단하게 샘플을 가지고 제대로 설치되었는지 확인하도록 하겠습니다.

$ export PATH=$PATH:$HADOOP_HOME/bin:$OOZIE_HOME/bin
$ tar xvfz oozie-examples.tar.gz
$ hadoop dfs -put examples/input-data examples/input-data
$ hadoop dfs -put examples/apps/streaming/workflow.xml examples/apps/streaming/workflow.xml
$ vi examples/apps/streaming/job.properties
# 적절히 값을 수정합니다.
$ oozie job -run -config examples/apps/streaming/job.properties
job: xxxxx
$ oozie job -info xxxxx
Job ID : xxxxx
------------------------------------------------------------------------------------------------------------------------------------
Workflow Name : streaming-wf
App Path      : hdfs://
Status        : RUNNING
Run           : 0
User          :
Group         : -
Created       : 2013-02-14 22:49 GMT
Started       : 2013-02-14 22:49 GMT
Last Modified : 2013-02-14 22:49 GMT
Ended         : -
CoordAction ID: -

Actions
------------------------------------------------------------------------------------------------------------------------------------
ID                                                                            Status    Ext ID                 Ext Status Err Code
------------------------------------------------------------------------------------------------------------------------------------
xxxxx@:start:                                                                 OK        -                      OK         -
------------------------------------------------------------------------------------------------------------------------------------
xxxxx@streaming-node                                                          RUNNING   job_201302142152_0017  RUNNING    -
------------------------------------------------------------------------------------------------------------------------------------

 

$ hadoop dfs -ls examples/output-data/streaming

Found 3 items
-rw-r--r--   3 hadoop supergroup          0 2013-02-14 22:51 /user/[User]/examples/output-data/streaming/_SUCCESS
drwxr-xr-x   - hadoop supergroup          0 2013-02-14 22:51 /user/[User]/examples/output-data/streaming/_logs
-rw-r--r--   3 hadoop supergroup         25 2013-02-14 22:51 /user/[User]/examples/output-data/streaming/part-00000

끝~

Puppet – Modules

자주 반복되는 작업 중에 특히 배포는 매번 나를 귀찮게 한다. 그래서 간단하게 배포 스크립트를 만들어서 쓰는 편인데 지금까지는 fabric을 이용해서 배포를 했지만 이제는 한계점에 도달해서 다른 것으로 변경하려고 한다.

fabric을 이용해서 profile, 자주 쓰이는 기능(사용자/그룹 추가, 업로드 후 untar, link, 키배포, yaml -> xx-site.xml 변경, 템플릿 등)을 만들어서 사용했는데 워낙 간단한 구조라서 유연하지 못하고 다양해지다보니 관리를 하는데 힘들어지고 있다. 많이 사용하는 도구로는 chef, puppet 등이 있겠지만 아주 사소한 이유때문에 puppet을 개인적으로 사용하는 배포툴로 사용할 예정이다.

  • Bigtop에서 제공하는 배포방법으로 puppet을 지원하기때문에 굳이 스크립트를 짤 필요가 없다. 일부만 수정하면 된다.
  • 루비로 된 라이브러리를 되도록이면 쓰지 않으려고 하는데 (아직 정이 가진 않아서) 별도의 language 를 제공하는 점.
  • 맨 첫번째 이유때문에 Chef는 살펴보지 않았지만 내가 원하는 기능은 다 있고 추가적으로 확장하는데 어려움이 없을 것 같다는 점과 오랫동안 성숙해왔다는게 느껴짐.
  • fabric과는 다르게 master/agent 방식으로 동작하고 나름 허가된 agent만 배포가 허용된다.

종속되는 라이브러리가 많지 않고 설치도 어렵지 않게 된다. 물론 귀찮은 분을 위해 따로 스크립트를 만들었다. (Fabric으로 작성) Github 고고 이 puppet-modules 프로젝트는 아래의 gepl과 함께 움직이게 됩니다.

추후에 hadoop1, hadoop2를 추가할 예정이고 현재는 ganglia만 추가했습니다. 이거때문에 Ganglia 3.5 RPM도 만드느라 진 뺐어요. (해본적이 없어서, CentOS 6.3에서만 해본거라 다른 환경에서는 되지 않을 수 있습니다.) 또 재미삼아 만든건데 GeekPle Extra Packages for Linux 의 약자인 gepl 패키지도 rpm으로 묶었습니다. 또 묶을만한게 있으면 코멘트 주세요.

$ rpm -Uvh http://public.geekple.com/yum-repo/gepl-release/gepl-6.3-1.noarch.rpm

available packages
 - ganglia-debuginfo-3.5.0-1.x86_64.rpm
 - ganglia-devel-3.5.0-1.x86_64.rpm
 - ganglia-gmetad-3.5.0-1.x86_64.rpm
 - ganglia-gmond-3.5.0-1.x86_64.rpm
 - ganglia-gmond-modules-python-3.5.0-1.x86_64.rpm
 - libganglia-3.5.0-1.x86_64.rpm
 - ganglia-web-3.5.0-1.noarch.rpm

벌써 2013년도 1/10 이상 지나고 벌써 곧 구정입니다. 여러분 새해 복 많이 받으시고 올 한 해도 뜻한 바를 이루길 바라요. 그리고 어줍짢은 제 블로그 방문해주셔서 감사하고 아는 것은 없지만 질문해주시면 찾아서라도 답변드리겠습니다.

How to create Yum local repository

모르는게 많아서 간혹 네트워크가 되지 않는 경우 Yum 으로 설치하기가 까다롭고 귀찮다. 더 좋은 방법이 있을지는 모르지만 추후에 다양한 활용가치가 있어 일단 정리하려고 합니다.

환경 구성을 도와주는 라이브러리로 createrepo를 yum을 통해 설치합니다. 명령은 아시다시피 다음과 같은 형태로 실행합니다.

$ yum install -y createrepo
$ mkdir -p /opt/cache/yum.local/x86_64
$ createrepo /opt/cache/yum.local/x86_64

위와 같이 메타데이터까지 생성하면 준비가 완료되고 다음 설정파일을 추가함으로써 yum 에서 쓸 수 있도록 합니다.

$ vi /etc/yum.repo.d/local.repo
[local]
name=CentOS-6 - Local
baseurl=file:///opt/cache/yum.local/x86_64

물론 설정파일에 $releasever, $basearch 등을 쓸 수 있고 createrepo할 때도 이를 고려해서 설정하면 더 좋겠죠.

그 외 팁으로 rpm을 받는 방법은 구글링이나 rpmfind를 쓰고 있고 reposync랑 yum plugin을 씁니다.

reposync를 이용하는 방법은 별도로 설치해야하는 프로그램이며 다음과 같이 동기화 시킵니다.

$ reposync -r <repository name>

또 다른 방법인 yum plugin 중 downloadonly 플러그인을 통해서 rpm을 다운로드 받습니다. 물론 install 커맨드를 쓰지만 실제로 설치는 하지 않고 다운로드만 받고 끝납니다. 그리고 현재 시스템을 기준으로 디펜던시 라이브러리를 받으니 참고하세요.

$ yum install yum-plugin-downloadonly
$ yum install --downloadonly <package name>

Apache Bigtop

Hadoop Ecosystem

빅탑의 존재만 알지 실제로는 사용해본적이 없습니다만 이번 주말에 관심가지고 보고 있는데 생각보다 컨셉이 좋은 것 같아요. 회사에서 실무에 써볼만한 것 같습니다. 최근 회사에서 이 부분과 관련해서 변경이 예상되는데 건의해봐야할 것 같아요.

빅탑을 간단하게 설명하면 메타 프로젝트로 일종의 프로젝트를 위한 프로젝트라고 보시면 됩니다. 담고 있는 기능은 소스를 빌드하고 패키징 할 수 있으며 각각의 프로젝트를 다양한 패키지로 묶을 수 있도록 합니다. 예를 들면 rpm, deb 형태를 말합니다. 그 뿐만 아니라 하둡 에코시스템을 위한 테스트를 할 수 있는 기능을 제공합니다. 일단 데비안을 좋아하는 사람이지만 이 포스트에서는 rpm 방식만 언급합니다. 주의할 것은 여기서 말하는 테스트는 유닛테스트를 말하지 않습니다. 또 배포 할 수 있도록 puppet, boxgrinder 를 이용한 vm (ec2, xen, kvm, vmware 등), live-cd 배포등을 지원하고 각각의 스크립트를 제공합니다.

미리 설치가 필요한 것은 yum으로 설치합니다. 더 필요한 것이 있을 수 있으니 (에러가 발생하니) 그때 그때 설치하시면 됩니다. 또한 미리 apache forrest 도 설치하시면 bashrc 또는 bash_profile에 FORREST_HOME과 PATH에 등록하면 좋습니다.

# hadoop
yum install rpm-build fuse-devel fuse fuse-libs libtool redhat-rpm-config lzo-devel cmake
# sqoop
yum install asciidoc xmlto
# hue
yum install cyrus-sasl-devel sqlite-devel openldap-devel mysql-devel

지원하는 하둡 에코시스템으로는 다음과 같습니다. 버전을 바꾸는 것도 그렇게 어렵지 않아요.

  • Hadoop
  • Zookeeper
  • HBase
  • Pig
  • Hive
  • Sqoop
  • Oozie
  • Whirr
  • Mahout
  • Flume
  • Giraph
  • Hue
  • DataFu
  • Solr
  • Crunch

다음과 같이 실행합니다.

$ make
    Bigtop BOM: HADOOP_VERSION=2.0.2-alpha ZOOKEEPER_VERSION=3.4.5 HBASE_VERSION=0.94.2 PIG_VERSION=0.10.0 HIVE_VERSION=0.9.0 SQOOP_VERSION=1.4.2 OOZIE_VERSION=3.3.0 WHIRR_VERSION=0.8.1 MAHOUT_VERSION=0.7 FLUME_VERSION=1.3.0 GIRAPH_VERSION=0.2-SNAPSHOT HUE_VERSION=2.1.0 DATAFU_VERSION=0.0.4 SOLR_VERSION=4.0.0 CRUNCH_VERSION=0.4.0-incubating BIGTOP_UTILS_VERSION=0.6.0 BIGTOP_JSVC_VERSION=1.0.10 BIGTOP_TOMCAT_VERSION=6.0.35
    targets:
    all       (all TGZs/SRPMS/SDEBS)
    srpm      (all SRPMs)
    rpm       (all RPMs)
    sdeb      (all SDEBs)
    deb       (all DEBs)
    clean     (remove build/output dirs)
    realclean (remove build/output/dl dirs)
    hadoop  [hadoop-version, hadoop-info, hadoop-relnotes,
           hadoop-srpm, hadoop-rpm]
           hadoop-sdeb, hadoop-deb]
    zookeeper  [zookeeper-version, zookeeper-info, zookeeper-relnotes,
           zookeeper-srpm, zookeeper-rpm]
           zookeeper-sdeb, zookeeper-deb]
    hbase  [hbase-version, hbase-info, hbase-relnotes,
           hbase-srpm, hbase-rpm]
           hbase-sdeb, hbase-deb]
    pig  [pig-version, pig-info, pig-relnotes,
           pig-srpm, pig-rpm]
           pig-sdeb, pig-deb]
    hive  [hive-version, hive-info, hive-relnotes,
           hive-srpm, hive-rpm]
           hive-sdeb, hive-deb]
    sqoop  [sqoop-version, sqoop-info, sqoop-relnotes,
           sqoop-srpm, sqoop-rpm]
           sqoop-sdeb, sqoop-deb]
    oozie  [oozie-version, oozie-info, oozie-relnotes,
           oozie-srpm, oozie-rpm]
           oozie-sdeb, oozie-deb]
    whirr  [whirr-version, whirr-info, whirr-relnotes,
           whirr-srpm, whirr-rpm]
           whirr-sdeb, whirr-deb]
    mahout  [mahout-version, mahout-info, mahout-relnotes,
           mahout-srpm, mahout-rpm]
           mahout-sdeb, mahout-deb]
    flume  [flume-version, flume-info, flume-relnotes,
           flume-srpm, flume-rpm]
           flume-sdeb, flume-deb]
    giraph  [giraph-version, giraph-info, giraph-relnotes,
           giraph-srpm, giraph-rpm]
           giraph-sdeb, giraph-deb]
    hue  [hue-version, hue-info, hue-relnotes,
           hue-srpm, hue-rpm]
           hue-sdeb, hue-deb]
    datafu  [datafu-version, datafu-info, datafu-relnotes,
           datafu-srpm, datafu-rpm]
           datafu-sdeb, datafu-deb]
    solr  [solr-version, solr-info, solr-relnotes,
           solr-srpm, solr-rpm]
           solr-sdeb, solr-deb]
    crunch  [crunch-version, crunch-info, crunch-relnotes,
           crunch-srpm, crunch-rpm]
           crunch-sdeb, crunch-deb]
    bigtop-utils  [bigtop-utils-version, bigtop-utils-info, bigtop-utils-relnotes,
           bigtop-utils-srpm, bigtop-utils-rpm]
           bigtop-utils-sdeb, bigtop-utils-deb]
    bigtop-jsvc  [bigtop-jsvc-version, bigtop-jsvc-info, bigtop-jsvc-relnotes,
           bigtop-jsvc-srpm, bigtop-jsvc-rpm]
           bigtop-jsvc-sdeb, bigtop-jsvc-deb]
    bigtop-tomcat  [bigtop-tomcat-version, bigtop-tomcat-info, bigtop-tomcat-relnotes,
           bigtop-tomcat-srpm, bigtop-tomcat-rpm]
           bigtop-tomcat-sdeb, bigtop-tomcat-deb]

# 엄청나게 오래 진행됩니다.
$ make rpm
...

rpm 명령이 모두 종료되면 아래와 같은 결과물이 주욱 뜹니다.

$ ls build/*/rpm/RPMS/*
bigtop-jsvc/rpm/RPMS/x86_64:
bigtop-jsvc-1.0.10-1.el6.x86_64.rpm  bigtop-jsvc-debuginfo-1.0.10-1.el6.x86_64.rpm

bigtop-tomcat/rpm/RPMS/noarch:
bigtop-tomcat-6.0.35-1.el6.noarch.rpm

bigtop-utils/rpm/RPMS/noarch:
bigtop-utils-0.6.0-1.el6.noarch.rpm

crunch/rpm/RPMS/noarch:
crunch-0.4.0-1.el6.noarch.rpm  crunch-doc-0.4.0-1.el6.noarch.rpm

datafu/rpm/RPMS/noarch:
pig-udf-datafu-0.0.4-1.el6.noarch.rpm

flume/rpm/RPMS/noarch:
flume-1.3.0-1.el6.noarch.rpm  flume-agent-1.3.0-1.el6.noarch.rpm

giraph/rpm/RPMS/noarch:
giraph-0.2-1.el6.noarch.rpm

hadoop/rpm/RPMS/x86_64:
hadoop-2.0.2-1.el6.x86_64.rpm                hadoop-hdfs-fuse-2.0.2-1.el6.x86_64.rpm               hadoop-mapreduce-historyserver-2.0.2-1.el6.x86_64.rpm
hadoop-client-2.0.2-1.el6.x86_64.rpm         hadoop-hdfs-namenode-2.0.2-1.el6.x86_64.rpm           hadoop-yarn-2.0.2-1.el6.x86_64.rpm
hadoop-conf-pseudo-2.0.2-1.el6.x86_64.rpm    hadoop-hdfs-secondarynamenode-2.0.2-1.el6.x86_64.rpm  hadoop-yarn-nodemanager-2.0.2-1.el6.x86_64.rpm
hadoop-debuginfo-2.0.2-1.el6.x86_64.rpm      hadoop-hdfs-zkfc-2.0.2-1.el6.x86_64.rpm               hadoop-yarn-proxyserver-2.0.2-1.el6.x86_64.rpm
hadoop-doc-2.0.2-1.el6.x86_64.rpm            hadoop-httpfs-2.0.2-1.el6.x86_64.rpm                  hadoop-yarn-resourcemanager-2.0.2-1.el6.x86_64.rpm
hadoop-hdfs-2.0.2-1.el6.x86_64.rpm           hadoop-libhdfs-2.0.2-1.el6.x86_64.rpm
hadoop-hdfs-datanode-2.0.2-1.el6.x86_64.rpm  hadoop-mapreduce-2.0.2-1.el6.x86_64.rpm

hbase/rpm/RPMS/noarch:
hbase-0.94.2-1.el6.noarch.rpm      hbase-master-0.94.2-1.el6.noarch.rpm        hbase-rest-0.94.2-1.el6.noarch.rpm
hbase-doc-0.94.2-1.el6.noarch.rpm  hbase-regionserver-0.94.2-1.el6.noarch.rpm  hbase-thrift-0.94.2-1.el6.noarch.rpm

hive/rpm/RPMS/noarch:
hive-0.9.0-1.el6.noarch.rpm  hive-hbase-0.9.0-1.el6.noarch.rpm  hive-metastore-0.9.0-1.el6.noarch.rpm  hive-server-0.9.0-1.el6.noarch.rpm

hue/rpm/RPMS/x86_64:
hue-2.1.0-1.el6.x86_64.rpm  hue-beeswax-2.1.0-1.el6.x86_64.rpm  hue-common-2.1.0-1.el6.x86_64.rpm  hue-oozie-2.1.0-1.el6.x86_64.rpm  hue-server-2.1.0-1.el6.x86_64.rpm

mahout/rpm/RPMS/noarch:
mahout-0.7-1.el6.noarch.rpm  mahout-doc-0.7-1.el6.noarch.rpm

oozie/rpm/RPMS/noarch:
oozie-3.3.0-1.el6.noarch.rpm  oozie-client-3.3.0-1.el6.noarch.rpm

pig/rpm/RPMS/noarch:
pig-0.10.0-1.el6.noarch.rpm

solr/rpm/RPMS/noarch:
solr-4.0.0-1.el6.noarch.rpm  solr-doc-4.0.0-1.el6.noarch.rpm  solr-server-4.0.0-1.el6.noarch.rpm

sqoop/rpm/RPMS/noarch:
sqoop-1.4.2-1.el6.noarch.rpm  sqoop-metastore-1.4.2-1.el6.noarch.rpm

whirr/rpm/RPMS/noarch:
whirr-0.8.1-1.el6.noarch.rpm

zookeeper/rpm/RPMS/noarch:
zookeeper-3.4.5-1.el6.noarch.rpm  zookeeper-server-3.4.5-1.el6.noarch.rpm

일단 이번 포스트는 rpm 생성하는 것으로 마무리해야할 것 같습니다. 스모크 테스트하는건 나중에 작성을 해야겠습니다.

Personal Maven Repo using GitHub Pages

깃허브 페이지를 이용한 maven repository 만들기입니다. 요즘 블로그를 github에 올려서 쓰시는 분 많은데요. 저 같은 경우는 메이븐 레파지토리를 만들면 편해서 쓰고 있습니다. 제가 먼저 쓴 것도 아니며 이렇게 쓰신 분들 많이 본 것 같아요.

일단 계정이 있어야하겠고 레파지토리 하나 만들어주세요. 저는 http://github.com/dgkim84/maven-repo 로 이미 만들었습니다.

다음 단계는 ph-pages 브랜치를 만들어야하는데 Settings 가면 중간에 아래 화면이 보입니다. 나중에 깨닭은 사실은 굳이 gh-pages를 만들 필요가 없었어요. 웹에서 볼 때 Raw 파일 볼 수 있는 기능이 있는데 그 URL을 사용해도 되겠더군요. 일단 저는 이렇게 했고 페이지도 만들꺼라서 이 방법으로 계속.

Screen Shot 2013-02-01 at 3.39.59 PM

버튼 한번 눌러주시고 쭈쭈욱 다음 단계로 진입하시면 최종적으로 다음과 같이 나옵니다. 전 이미 만들었기때문에 아래는 샘플.
Screen Shot 2013-02-01 at 3.40.34 PM

전 이거 clone 받고 작업했습니다. 예전에 쓸 땐 releases 용도로만 썼는데 쓰고나니 snapshots 도 필요할 것 같아서 이번 기회에 디렉토리 생성합니다.

$ git clone git@github.com:dgkim84/maven-repo
$ cd maven-repo
$ mkdir releases
$ mkdir snapshots

배포는 deploy 이용하죠.

$ mvn deploy:deploy-file -DgroupId=com.geekple.xx -DartifactId=sample -Dversion=1.0.0 -Dpackaging=jar -Dfile=sample-1.0.0.jar -Durl=/Users/dgkim84/projects/maven-repo/releases
$ cd ~/projects/maven-repo
$ git add com
$ git commit -m 'Add sample'
$ git push origin

위의 방법은 pom.xml 도 만들어져있는 프로젝트에서나 가능하고 만약 jar만 있다면 수동으로 copy하시면 되고 pom.xml 만들어주시면 됩니다.

간단하게 마무리 됩니다. 제가 사용하는 방법은 global settings.xml 파일에 설정하는 형태로 써요.

$ vi ~/.m2/settings.xml
<settings>
...
<repositories>
  ...
  <repository>
    <id>dgkim84-github</id>
    <url>http://public.geekple.com/maven-repo/releases</url>
    <releases>
      <enabled>true</enabled>
    </releases>
  </repository>
  ...
</repositories>
...
</settings>

다음 명령어를 프로젝트 디렉토리에 가서 하면 되요. 물론 central repository 에 해당 라이브러리가 있다면 굳이 이 방법을 쓸 필요는 없습니다. 이거 받고 locally나 python SimpleHTTPServer 띄워서 개발용으로 써도 좋겠죠.

$ mvn clean package