Installing Elasticsearch on OSX Mavericks

I'm trying to install Elasticsearch 1.1.0 on OSX Mavericks but i got the following errors when i'm trying to start:

:> ./elasticsearch
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.Version
at org.elasticsearch.bootstrap.Bootstrap.buildErrorMessage(Bootstrap.java:252)
at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:236)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)

Also when i'm executing the same command with -v arg, i got this error:

:> ./elasticsearch -v
Exception in thread "main" java.lang.NoSuchFieldError: LUCENE_36
at org.elasticsearch.Version.<clinit>(Version.java:42)

Here's my environment:

Java version

>: java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

Instalation path (downloaded .tar.gz archive from elasticsearch download page and extracted here):

/usr/local/elasticsearch-1.1.0

ENV vars:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home 
CLASSPATH=/usr/local/elasticsearch-1.1.0/lib/*.jar:/usr/local/elasticsearch-1.1.0/lib/sigar/*.jar

UPDATE

i finally make it working, unfortunally not sure how because i tried a lot of changes :). But here's a list of changes i made that can help:

  • i removed jdk and jre and reinstalled on a clean env. http://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html#A1096855

  • i deleted all the cache dirs.I suppose this can be the 'cause' for that it's working now

~/Library/Caches

/Library/Caches

  • i removed CLASSPATH env var.

  • ES_PATH and ES_HOME env vars are not set either, but i think this is not so important.

Note: now it's working also if i'm installing with brew.

Thanks.


Solution 1:

You should really consider using brew. It's a great tool that will take care of dependencies, version control and much more.

To install Elasticsearch using brew, simply:

brew update
brew install elasticsearch

Boom! Done.

After that follow Elasticsearch instructions :

  1. To have launchd start Elasticsearch at login:

    ln -sfv /usr/local/opt/elasticsearch/*.plist ~/Library/LaunchAgents
    
  2. Then to load Elasticsearch now:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch.plist
    

    Or, if you don't want/need launchctl, you can just run:

    elasticsearch
    

Solution 2:

As there are not very good instructions for actually "installing" it onto a Mac:

Short Version:

  1. Install Java (prefer latest supported release)
  2. Set JAVA_HOME environment variable.
  3. Download Elasticsearch version (tar or zip).
  4. Extract Elasticsearch from the downloaded file.
  5. Run bin/elasticsearch from the extracted directory.

Long version:

  1. Download Java

    • Only need the JRE if you will not be writing code on the same machine.

    • I assume that you are getting the latest JDK, which is currently JDK 8 (as you appear to have, and I have installed working on my machine).

  2. Download and extract Elasticsearch and extract it into some directory.

    1. For example: mkdir -p ~/dev/elasticsearch
    2. Optionally move the downloaded file to there:

      mv Downloads/elasticsearch* ~/dev/elasticsearch

    3. Extract the downloaded file:

      cd ~/dev/elasticsearch (if you moved it in step 2)

      • If it's the zip, then unzip elasticsearch-1.1.0.zip (or if you don't want to cd into the directory, then just run unzip elasticsearch-1.1.0.zip -d ~/dev/elasticsearch)

      • If it's the tar, then tar -xvf elasticsearch-1.1.0.tar.gz (or if you don't want to cd into the directory, then just run tar -xvf elasticsearch-1.1.0.tar.gz -C ~/dev/elasticsearch)

    4. Cleanup (if you want) by removing the downloaded file:

      rm elasticsearch-1.1.0.*

  3. Open your .bash_profile file for your bash profile settings:

    vi ~/.bash_profile

  4. In the file, export your environment variable(s)

    export ES_HOME=~/dev/elasticsearch/elasticsearch-1.1.0

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home

    export PATH=$ES_HOME/bin:$JAVA_HOME/bin:$PATH

    • Close and re-open your Terminal OR

    • Run source ~/.bash_profile to update the environment variables

  5. Run Elasticsearch:

    elasticsearch

    • The more traditional way to run it is to do pretty much all of the above, but not add $ES_HOME/bin to the PATH. Then, just go to ES_PATH (cd $ES_PATH, then bin/elasticsearch) or run $ES_PATH/bin/elasticsearch.

Note: Do not setup your CLASSPATH without a very good reason. The scripts will do that for you.

Solution 3:

  1. You should try to using brew with last update:

    brew update
    
  2. And install Cask java:

    brew cask install java
    
  3. After that you can install elasticsearch:

    brew install elasticsearch
    
  4. And to have launched start elasticsearch now use:

    brew services start elasticsearch
    

    Or you can just run:

    elasticsearch
    

Solution 4:

To update ElasticSearch, just run brew upgrade elasticsearch

Solution 5:

Update your java

brew update
brew cask install java

Install it with homebrew brew install elasticsearch