diff --git a/Dockerfile b/Dockerfile index 1bbd031..0c94096 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,46 @@ FROM sequenceiq/hadoop-docker:2.7.0 MAINTAINER SequenceIQ -# zookeeper -ENV ZOOKEEPER_VERSION 3.4.6 -RUN curl -s http://mirror.csclub.uwaterloo.ca/apache/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz | tar -xz -C /usr/local/ +# Zookeeper +ENV ZOOKEEPER_VERSION 3.4.8 +RUN curl -s https://archive.apache.org/dist/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz | tar -xz -C /usr/local/ RUN cd /usr/local && ln -s ./zookeeper-$ZOOKEEPER_VERSION zookeeper ENV ZOO_HOME /usr/local/zookeeper ENV PATH $PATH:$ZOO_HOME/bin RUN mv $ZOO_HOME/conf/zoo_sample.cfg $ZOO_HOME/conf/zoo.cfg RUN mkdir /tmp/zookeeper -# hbase +# HBase ENV HBASE_MAJOR 1.1 ENV HBASE_MINOR 2 ENV HBASE_VERSION "${HBASE_MAJOR}.${HBASE_MINOR}" -RUN curl -s http://apache.mirror.gtcomm.net/hbase/$HBASE_VERSION/hbase-$HBASE_VERSION-bin.tar.gz | tar -xz -C /usr/local/ -RUN cd /usr/local && ln -s ./hbase-$HBASE_VERSION hbase +RUN if [ $HBASE_MAJOR == 0.98 ]; then \ + curl -s https://archive.apache.org/dist/hbase/$HBASE_VERSION/hbase-$HBASE_VERSION-hadoop2-bin.tar.gz | tar -xz -C /usr/local/ && \ + cd /usr/local && ln -s ./hbase-$HBASE_VERSION-hadoop2 hbase; \ + elif [ $HBASE_MAJOR == 1.0 ]; then \ + curl -s https://archive.apache.org/dist/hbase/hbase-$HBASE_VERSION/hbase-$HBASE_VERSION-bin.tar.gz | tar -xz -C /usr/local/ && \ + cd /usr/local && ln -s ./hbase-$HBASE_VERSION hbase; \ + else \ + curl -s https://archive.apache.org/dist/hbase/$HBASE_VERSION/hbase-$HBASE_VERSION-bin.tar.gz | tar -xz -C /usr/local/ && \ + cd /usr/local && ln -s ./hbase-$HBASE_VERSION hbase; \ + fi ENV HBASE_HOME /usr/local/hbase ENV PATH $PATH:$HBASE_HOME/bin -RUN rm $HBASE_HOME/conf/hbase-site.xml -ADD hbase-site.xml $HBASE_HOME/conf/hbase-site.xml -# phoenix +# Phoenix ENV PHOENIX_VERSION 4.6.0 -RUN curl -s http://apache.mirror.vexxhost.com/phoenix/phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR/bin/phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR-bin.tar.gz | tar -xz -C /usr/local/ +RUN curl -s https://archive.apache.org/dist/phoenix/phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR/bin/phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR-bin.tar.gz | tar -xz -C /usr/local/ RUN cd /usr/local && ln -s ./phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR-bin phoenix ENV PHOENIX_HOME /usr/local/phoenix ENV PATH $PATH:$PHOENIX_HOME/bin -RUN cp $PHOENIX_HOME/phoenix-core-$PHOENIX_VERSION-HBase-$HBASE_MAJOR.jar $HBASE_HOME/lib/phoenix.jar -RUN cp $PHOENIX_HOME/phoenix-server-$PHOENIX_VERSION-HBase-$HBASE_MAJOR.jar $HBASE_HOME/lib/phoenix-server.jar +RUN ln -s $PHOENIX_HOME/phoenix-core-$PHOENIX_VERSION-HBase-$HBASE_MAJOR.jar $HBASE_HOME/lib/phoenix.jar +RUN ln -s $PHOENIX_HOME/phoenix-$PHOENIX_VERSION-HBase-$HBASE_MAJOR-server.jar $HBASE_HOME/lib/phoenix-server.jar + +# HBase and Phoenix configuration files +RUN rm $HBASE_HOME/conf/hbase-site.xml +RUN rm $HBASE_HOME/conf/hbase-env.sh +ADD hbase-site.xml $HBASE_HOME/conf/hbase-site.xml +ADD hbase-env.sh $HBASE_HOME/conf/hbase-env.sh # bootstrap-phoenix ADD bootstrap-phoenix.sh /etc/bootstrap-phoenix.sh @@ -37,4 +49,5 @@ RUN chmod 700 /etc/bootstrap-phoenix.sh CMD ["/etc/bootstrap-phoenix.sh", "-bash"] -EXPOSE 8765 +# expose Zookeeper and Phoenix queryserver ports +EXPOSE 2181 8765 diff --git a/README.md b/README.md index 0bd277d..58b077e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ -docker-phoenix +Apache Phoenix on Docker ============== +[![DockerPulls](https://img.shields.io/docker/pulls/sequenceiq/phoenix.svg)](https://registry.hub.docker.com/u/sequenceiq/phoenix/) +[![DockerStars](https://img.shields.io/docker/stars/sequenceiq/phoenix.svg)](https://registry.hub.docker.com/u/sequenceiq/phoenix/) A Docker image to quick start [Apache Phoenix](http://phoenix.apache.org/) on [Apache HBase](https://hbase.apache.org/) to provide an SQL interface. @@ -8,12 +10,17 @@ Apache Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC driv ###Versions Apache Hadoop - 2.7.0 -Apache HBase - 1.1.2 +Apache HBase - 0.98.x, 1.0.x, 1.1.x Apache Phoenix - 4.4.0+ ###Launch -`docker run -it sequenceiq/phoenix:v4.1onHbase-0.98.5` -> to normal launch +`docker run -it sequenceiq/phoenix` -> to normal launch -###Alternative launch -`docker run -it sequenceiq/phoenix:v4.1onHbase-0.98.5 /etc/bootstrap-phoenix.sh -sqlline` -> to launch directly the sqlline for phoenix +`docker run -it -p 8765:8765 sequenceiq/phoenix` -> if you want to use the queryserver + +`queryserver.py` -> to launch the Phoenix Avatica queryserver to handle REST requests over wire protocol +or `queryserver.py start` -> to launch in the background + +###Alternative launch +`docker run -it sequenceiq/phoenix /etc/bootstrap-phoenix.sh -sqlline` -> to launch directly the sqlline for phoenix diff --git a/bootstrap-phoenix.sh b/bootstrap-phoenix.sh index a48d337..0b264c1 100644 --- a/bootstrap-phoenix.sh +++ b/bootstrap-phoenix.sh @@ -12,7 +12,6 @@ cd $HADOOP_PREFIX/share/hadoop/common ; for cp in ${ACP//,/ }; do echo == $cp; service sshd start $HADOOP_PREFIX/sbin/start-dfs.sh $HADOOP_PREFIX/sbin/start-yarn.sh -$ZOO_HOME/bin/zkServer.sh start $HBASE_HOME/bin/start-hbase.sh if [[ $1 == "-d" ]]; then @@ -26,3 +25,8 @@ fi if [[ $1 == "-sqlline" ]]; then /usr/local/phoenix/hadoop2/bin/sqlline.py localhost fi + +if [[ $1 == "-qs" ]]; then + echo "Starting queryserver" + /usr/local/phoenix/bin/queryserver.py +fi diff --git a/hbase-env.sh b/hbase-env.sh new file mode 100644 index 0000000..5f96788 --- /dev/null +++ b/hbase-env.sh @@ -0,0 +1,137 @@ +# +#/** +# * Licensed to the Apache Software Foundation (ASF) under one +# * or more contributor license agreements. See the NOTICE file +# * distributed with this work for additional information +# * regarding copyright ownership. The ASF licenses this file +# * to you under the Apache License, Version 2.0 (the +# * "License"); you may not use this file except in compliance +# * with the License. You may obtain a copy of the License at +# * +# * http://www.apache.org/licenses/LICENSE-2.0 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# */ + +# Set environment variables here. + +# This script sets variables multiple times over the course of starting an hbase process, +# so try to keep things idempotent unless you want to take an even deeper look +# into the startup scripts (bin/hbase, etc.) + +# The java implementation to use. Java 1.7+ required. +export JAVA_HOME=/usr/java/default + +# Extra Java CLASSPATH elements. Optional. +# export HBASE_CLASSPATH= + +# The maximum amount of heap to use. Default is left to JVM default. +# export HBASE_HEAPSIZE=1G + +# Uncomment below if you intend to use off heap cache. For example, to allocate 8G of +# offheap, set the value to "8G". +# export HBASE_OFFHEAPSIZE=1G + +# Extra Java runtime options. +# Below are what we set by default. May only work with SUN JVM. +# For more on why as well as other possible settings, +# see http://wiki.apache.org/hadoop/PerformanceTuning +export HBASE_OPTS="-XX:+UseConcMarkSweepGC" + +# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+ +export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" +export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" + +# Uncomment one of the below three options to enable java garbage collection logging for the server-side processes. + +# This enables basic gc logging to the .out file. +# export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps" + +# This enables basic gc logging to its own file. +# If FILE-PATH is not replaced, the log file(.gc) would still be generated in the HBASE_LOG_DIR . +# export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:" + +# This enables basic GC logging to its own file with automatic log rolling. Only applies to jdk 1.6.0_34+ and 1.7.0_2+. +# If FILE-PATH is not replaced, the log file(.gc) would still be generated in the HBASE_LOG_DIR . +# export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc: -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M" + +# Uncomment one of the below three options to enable java garbage collection logging for the client processes. + +# This enables basic gc logging to the .out file. +# export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps" + +# This enables basic gc logging to its own file. +# If FILE-PATH is not replaced, the log file(.gc) would still be generated in the HBASE_LOG_DIR . +# export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:" + +# This enables basic GC logging to its own file with automatic log rolling. Only applies to jdk 1.6.0_34+ and 1.7.0_2+. +# If FILE-PATH is not replaced, the log file(.gc) would still be generated in the HBASE_LOG_DIR . +# export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc: -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M" + +# See the package documentation for org.apache.hadoop.hbase.io.hfile for other configurations +# needed setting up off-heap block caching. + +# Uncomment and adjust to enable JMX exporting +# See jmxremote.password and jmxremote.access in $JRE_HOME/lib/management to configure remote password access. +# More details at: http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html +# NOTE: HBase provides an alternative JMX implementation to fix the random ports issue, please see JMX +# section in HBase Reference Guide for instructions. + +# export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" +# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101" +# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102" +# export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103" +# export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104" +# export HBASE_REST_OPTS="$HBASE_REST_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10105" + +# File naming hosts on which HRegionServers will run. $HBASE_HOME/conf/regionservers by default. +# export HBASE_REGIONSERVERS=${HBASE_HOME}/conf/regionservers + +# Uncomment and adjust to keep all the Region Server pages mapped to be memory resident +#HBASE_REGIONSERVER_MLOCK=true +#HBASE_REGIONSERVER_UID="hbase" + +# File naming hosts on which backup HMaster will run. $HBASE_HOME/conf/backup-masters by default. +# export HBASE_BACKUP_MASTERS=${HBASE_HOME}/conf/backup-masters + +# Extra ssh options. Empty by default. +# export HBASE_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HBASE_CONF_DIR" + +# Where log files are stored. $HBASE_HOME/logs by default. +# export HBASE_LOG_DIR=${HBASE_HOME}/logs + +# Enable remote JDWP debugging of major HBase processes. Meant for Core Developers +# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070" +# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8071" +# export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8072" +# export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8073" + +# A string representing this instance of hbase. $USER by default. +# export HBASE_IDENT_STRING=$USER + +# The scheduling priority for daemon processes. See 'man nice'. +# export HBASE_NICENESS=10 + +# The directory where pid files are stored. /tmp by default. +# export HBASE_PID_DIR=/var/hadoop/pids + +# Seconds to sleep between slave commands. Unset by default. This +# can be useful in large clusters, where, e.g., slave rsyncs can +# otherwise arrive faster than the master can service them. +# export HBASE_SLAVE_SLEEP=0.1 + +# Tell HBase whether it should manage it's own instance of Zookeeper or not. +# export HBASE_MANAGES_ZK=true + +# The default log rolling policy is RFA, where the log file is rolled as per the size defined for the +# RFA appender. Please refer to the log4j.properties file to see more details on this appender. +# In case one needs to do log rolling on a date change, one should set the environment property +# HBASE_ROOT_LOGGER to ",DRFA". +# For example: +# HBASE_ROOT_LOGGER=INFO,DRFA +# The reason for changing default to RFA is to avoid the boundary case of filling out disk space as +# DRFA doesn't put any cap on the log size. Please refer to HBase-5655 for more context.