This is an automated email from the ASF dual-hosted git repository. mwalch pushed a commit to branch 1.9 in repository https://gitbox.apache.org/repos/asf/accumulo-docker.git
commit f80b5036d909b125cab3d781dba88d933b5b5bd8 Author: Mike Walch <mwa...@apache.org> AuthorDate: Tue Mar 19 11:07:59 2019 -0400 Support Accumulo 1.9 docker image --- CONTRIBUTING.md | 30 ++++++++ Dockerfile | 92 ++++++++++++++++++++++++ LICENSE | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++++ NOTICE | 5 ++ README.md | 57 ++++++++++++++- accumulo-site.xml | 51 ++++++++++++++ generic_logger.xml | 67 ++++++++++++++++++ monitor_logger.xml | 48 +++++++++++++ 8 files changed, 551 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7daf3d0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,30 @@ +<!-- +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. +--> + +# Contributing to the Accumulo Docker Image + +Contributions to the Accumulo Docker Image can be made by creating a pull request to +this repo on GitHub. + +Before creating a pull request, follow the instructions in the [README.md] to build +the image and use it to run Accumulo in Docker. + +For general instructions on contributing to Accumulo projects, check out the +[Accumulo Contributor guide][contribute]. + +[README.md]: README.md +[contribute]: https://accumulo.apache.org/contributor/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e4b8808 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,92 @@ +# 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. + +FROM centos:7 + +RUN yum install -y java-1.8.0-openjdk-devel make gcc-c++ wget +ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk + +ARG ACCUMULO_VERSION=1.9.2 +ARG HADOOP_VERSION=2.8.5 +ARG ZOOKEEPER_VERSION=3.4.13 +ARG HADOOP_USER_NAME=accumulo +ARG ACCUMULO_FILE= +ARG HADOOP_FILE= +ARG ZOOKEEPER_FILE= + +ENV HADOOP_USER_NAME $HADOOP_USER_NAME + +ENV APACHE_DIST_URLS \ + https://www.apache.org/dyn/closer.cgi?action=download&filename= \ +# if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/ + https://www-us.apache.org/dist/ \ + https://www.apache.org/dist/ \ + https://archive.apache.org/dist/ + +COPY README.md $ACCUMULO_FILE $HADOOP_FILE $ZOOKEEPER_FILE /tmp/ + +RUN set -eux; \ + download() { \ + local f="$1"; shift; \ + local distFile="$1"; shift; \ + local success=; \ + local distUrl=; \ + for distUrl in $APACHE_DIST_URLS; do \ + if wget -nv -O "$f" "$distUrl$distFile"; then \ + success=1; \ + break; \ + fi; \ + done; \ + [ -n "$success" ]; \ + }; \ + \ + if [ -z "$HADOOP_FILE" ]; then \ + download "hadoop.tar.gz" "hadoop/core/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz"; \ + else \ + cp "/tmp/$HADOOP_FILE" "hadoop.tar.gz"; \ + fi; \ + if [ -z "$ZOOKEEPER_FILE" ]; then \ + download "zookeeper.tar.gz" "zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz"; \ + else \ + cp "/tmp/$ZOOKEEPER_FILE" "zookeeper.tar.gz"; \ + fi; \ + if [ -z "$ACCUMULO_FILE" ]; then \ + download "accumulo.tar.gz" "accumulo/$ACCUMULO_VERSION/accumulo-$ACCUMULO_VERSION-bin.tar.gz"; \ + else \ + cp "/tmp/$ACCUMULO_FILE" "accumulo.tar.gz"; \ + fi; + +RUN tar xzf accumulo.tar.gz -C /tmp/ +RUN tar xzf hadoop.tar.gz -C /tmp/ +RUN tar xzf zookeeper.tar.gz -C /tmp/ + +RUN mv /tmp/hadoop-$HADOOP_VERSION /opt/hadoop +RUN mv /tmp/zookeeper-$ZOOKEEPER_VERSION /opt/zookeeper +RUN mv /tmp/accumulo-$ACCUMULO_VERSION /opt/accumulo + +RUN cp /opt/accumulo/conf/examples/2GB/native-standalone/* /opt/accumulo/conf/ +RUN /opt/accumulo/bin/build_native_library.sh + +ADD ./accumulo-site.xml /opt/accumulo/conf +ADD ./generic_logger.xml /opt/accumulo/conf +ADD ./monitor_logger.xml /opt/accumulo/conf + +ENV HADOOP_HOME /opt/hadoop +ENV ZOOKEEPER_HOME /opt/zookeeper +ENV ACCUMULO_HOME /opt/accumulo +ENV PATH "$PATH:$ACCUMULO_HOME/bin" + +ENTRYPOINT ["accumulo"] +CMD ["help"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..3aa48d9 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +Apache Accumulo Docker +Copyright 2019 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/README.md b/README.md index 6fbad74..b4c39a5 100644 --- a/README.md +++ b/README.md @@ -1 +1,56 @@ -= Accumulo Docker = +# Apache Accumulo Docker Image + +## Obtain the Docker image + +To obtain the docker image created by this project, you can either pull it from DockerHub at +`apache/accumulo` or build it yourself. To pull the image from DockerHub, run the command below: + + docker pull apache/accumulo + +While it is easier to pull from DockerHub, the image will default to the software versions below: + +| Software | Version | +|-------------|---------------| +| [Accumulo] | 1.9.3 | +| [Hadoop] | 2.8.5 | +| [Zookeeper] | 3.4.13 | + +If these versions do not match what is running on your cluster, you should consider building +your own image with matching versions. However, Accumulo must be 2.0.0+. Below are instructions for +building an image: + +1. Clone the Accumulo docker repo + + git clone g...@github.com:apache/accumulo-docker.git + +2. Build the default Accumulo docker image using the command below. + + cd /path/to/accumulo-docker + docker build -t accumulo . + + Or build the Accumulo docker image with specific released versions of Hadoop, Zookeeper, etc that will downloaded from Apache using the command below: + + docker build --build-arg ZOOKEEPER_VERSION=3.4.8 --build-arg HADOOP_VERSION=2.7.0 -t accumulo . + + Or build with an Accumulo tarball (located in same directory as DockerFile) using the command below: + + docker build --build-arg ACCUMULO_VERSION=1.9.3-SNAPSHOT --build-arg ACCUMULO_FILE=accumulo-1.9.3-SNAPSHOT-bin.tar.gz -t accumulo . + +## Image basics + +The entrypoint for the Accumulo docker image is the `accumulo` script. While the primary use +case for this image is to start Accumulo processes (i.e tserver, master, etc), you can run other +commands in the `accumulo` script to test out the image: + +```bash +# No arguments prints Accumulo command usage +docker run accumulo +# Print Accumulo version +docker run accumulo version +# Print Accumulo classpath +docker run accumulo classpath +``` + +[Accumulo]: https://accumulo.apache.org/ +[Hadoop]: https://hadoop.apache.org/ +[Zookeeper]: https://zookeeper.apache.org/ diff --git a/accumulo-site.xml b/accumulo-site.xml new file mode 100644 index 0000000..2f7046c --- /dev/null +++ b/accumulo-site.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- This is the main configuration file for Apache Accumulo. Available configuration properties can be + found in the Accumulo documentation on the Accumulo project website (https://accumulo.apache.org/) --> +<configuration> + <!-- Set location in HDFS where Accumulo will store data --> + <property> + <name>instance.volumes</name> + <value>hdfs://localhost:8020/accumulo</value> + </property> + <!-- Set location of Zookeepers --> + <property> + <name>instance.zookeeper.host</name> + <value>localhost:2181</value> + </property> + <!-- Change secret before initialization. All servers must have same secret --> + <property> + <name>instance.secret</name> + <value>DEFAULT</value> + </property> + <property> + <name>tserver.memory.maps.native.enabled</name> + <value>true</value> + </property> + <property> + <name>trace.user</name> + <value>root</value> + </property> + <property> + <name>trace.password</name> + <value>secret</value> + </property> + <property> + <name>tserver.port.search</name> + <value>true</value> + </property> +</configuration> diff --git a/generic_logger.xml b/generic_logger.xml new file mode 100644 index 0000000..5e22fbc --- /dev/null +++ b/generic_logger.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + + <!-- Write out INFO and higher to the console --> + <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> + <param name="Threshold" value="INFO"/> + <layout class="org.apache.log4j.PatternLayout"> + <param name="ConversionPattern" value="%d{ISO8601} [%-8c{2}] %-5p: %m%n"/> + </layout> + </appender> + + <!-- Send all logging data to a centralized logger --> + <appender name="N1" class="org.apache.log4j.net.SocketAppender"> + <param name="remoteHost" value="${org.apache.accumulo.core.host.log}"/> + <param name="port" value="${org.apache.accumulo.core.host.log.port}"/> + <param name="application" value="${org.apache.accumulo.core.application}:${org.apache.accumulo.core.ip.localhost.hostname}"/> + <param name="Threshold" value="WARN"/> + </appender> + + <!-- If the centralized logger is down, buffer the log events, but drop them if it stays down --> + <appender name="ASYNC" class="org.apache.log4j.AsyncAppender"> + <appender-ref ref="N1" /> + </appender> + + <!-- Log accumulo events to the debug, normal and remote logs. --> + <logger name="org.apache.accumulo" additivity="false"> + <level value="DEBUG"/> + <appender-ref ref="CONSOLE" /> + <appender-ref ref="ASYNC" /> + </logger> + + <logger name="org.apache.accumulo.core.file.rfile.bcfile"> + <level value="INFO"/> + </logger> + + <logger name="org.mortbay.log"> + <level value="WARN"/> + </logger> + + <logger name="org.apache.zookeeper"> + <level value="ERROR"/> + </logger> + + <!-- Log non-accumulo events to the debug and normal logs. --> + <root> + <level value="INFO"/> + <appender-ref ref="CONSOLE" /> + </root> + +</log4j:configuration> diff --git a/monitor_logger.xml b/monitor_logger.xml new file mode 100644 index 0000000..46843c0 --- /dev/null +++ b/monitor_logger.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + + <!-- Write out INFO and higher to the console --> + <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> + <param name="Threshold" value="INFO"/> + <layout class="org.apache.log4j.PatternLayout"> + <param name="ConversionPattern" value="%d{ISO8601} [%-8c{2}] %-5p: %m%n"/> + </layout> + </appender> + + <!-- Keep the last few log messages for display to the user --> + <appender name="GUI" class="org.apache.accumulo.server.monitor.LogService"> + <param name="keep" value="40"/> + <param name="Threshold" value="WARN"/> + </appender> + + <!-- Log accumulo messages to debug, normal and GUI --> + <logger name="org.apache.accumulo" additivity="false"> + <level value="DEBUG"/> + <appender-ref ref="CONSOLE" /> + <appender-ref ref="GUI" /> + </logger> + + <!-- Log non-accumulo messages to debug, normal logs. --> + <root> + <level value="INFO"/> + <appender-ref ref="CONSOLE" /> + </root> + +</log4j:configuration>