From 07ae304434a5d8924d84fc86dcdd0a02dfaa2812 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 13 Jul 2015 09:50:40 +0200 Subject: [PATCH 1/8] s3 notebook storage --- zeppelin-zengine/pom.xml | 8 +- .../org/apache/zeppelin/conf/Credentials.java | 28 ++++ .../zeppelin/conf/ZeppelinConfiguration.java | 10 ++ .../notebook/repo/S3NotebookRepo.java | 155 ++++++++++++++++++ 4 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java create mode 100644 zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java diff --git a/zeppelin-zengine/pom.xml b/zeppelin-zengine/pom.xml index d4207a59088..f19d936ea3e 100644 --- a/zeppelin-zengine/pom.xml +++ b/zeppelin-zengine/pom.xml @@ -50,7 +50,13 @@ zeppelin-interpreter ${project.version} - + + + com.amazonaws + aws-java-sdk-s3 + 1.10.1 + + org.slf4j slf4j-api diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java new file mode 100644 index 00000000000..24a5f773b0a --- /dev/null +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java @@ -0,0 +1,28 @@ +package org.apache.zeppelin.conf; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; + +/** + * + * @author vgmartinez + * + */ +public class Credentials { + //static String aws_access_key_id = System.getenv("AWS_ACCESS_KEY_ID"); + //static String aws_secret_access_key = System.getenv("AWS_SECRET_ACCESS_KEY"); + + static String aws_access_key_id = "AKIAIHDMNYZE3NLWQO5A"; + static String aws_secret_access_key = "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"; + + private static AWSCredentials credentials = new BasicAWSCredentials(aws_access_key_id, + aws_secret_access_key); + + public AWSCredentials getCredentials() { + return credentials; + } + + public static void setCredentials(AWSCredentials credentials) { + Credentials.credentials = credentials; + } +} diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index a56b07ba1db..a9155a536ea 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -340,6 +340,14 @@ public String getTrustStorePassword() { public String getNotebookDir() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_DIR); } + + public String getUser() { + return getString(ConfVars.ZEPPELIN_USER); + } + + public String getBucketName() { + return getString(ConfVars.ZEPPELIN_BUCKET); + } public String getInterpreterDir() { return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_DIR); @@ -411,6 +419,8 @@ public static enum ConfVars { ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), + ZEPPELIN_BUCKET("zeppelin.bucket.name", "dataswarm"), + ZEPPELIN_USER("zeppelin.notebook.user", "vmgarcia"), ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not. diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java new file mode 100644 index 00000000000..42cda3f1bd2 --- /dev/null +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java @@ -0,0 +1,155 @@ +package org.apache.zeppelin.notebook.repo; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.zeppelin.conf.Credentials; +import org.apache.zeppelin.conf.ZeppelinConfiguration; +import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars; +import org.apache.zeppelin.notebook.Note; +import org.apache.zeppelin.notebook.NoteInfo; +import org.apache.zeppelin.notebook.Paragraph; +import org.apache.zeppelin.scheduler.Job.Status; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.amazonaws.AmazonClientException; +import com.amazonaws.AmazonServiceException; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.DeleteObjectRequest; +import com.amazonaws.services.s3.model.GetObjectRequest; +import com.amazonaws.services.s3.model.ListObjectsRequest; +import com.amazonaws.services.s3.model.ObjectListing; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.S3ObjectSummary; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +/** + * + * @author root + * + */ +public class S3NotebookRepo implements NotebookRepo{ + + Logger logger = LoggerFactory.getLogger(S3NotebookRepo.class); + Credentials cred = new Credentials(); + private static String bucketName = ""; + AmazonS3 s3client = new AmazonS3Client(cred.getCredentials()); + + private ZeppelinConfiguration conf; + String user = null; + String userShare = null; + + public S3NotebookRepo(ZeppelinConfiguration conf) throws IOException { + this.conf = conf; + user = conf.getUser(); + bucketName = conf.getBucketName(); + } + + @Override + public List list() throws IOException { + List infos = new LinkedList(); + NoteInfo info = null; + try { + ListObjectsRequest listObjectsRequest = new ListObjectsRequest() + .withBucketName(bucketName) + .withPrefix(user + "/" + "notebook"); + ObjectListing objectListing; + do { + objectListing = s3client.listObjects(listObjectsRequest); + + for (S3ObjectSummary objectSummary : + objectListing.getObjectSummaries()) { + if (objectSummary.getKey().contains("note.json")) { + try { + info = getNoteInfo(objectSummary.getKey()); + if (info != null) { + infos.add(info); + } + } catch (IOException e) { + logger.error("Can't read note ", e); + } + } + } + + listObjectsRequest.setMarker(objectListing.getNextMarker()); + } while (objectListing.isTruncated()); + } catch (AmazonServiceException ase) { + + } catch (AmazonClientException ace) { + logger.info("Caught an AmazonClientException, " + + "which means the client encountered " + + "an internal error while trying to communicate" + + " with S3, " + + "such as not being able to access the network."); + logger.info("Error Message: " + ace.getMessage()); + } + logger.info("NOTE NAME: " + infos.get(1).getName()); + return infos; + } + + private Note getNote(String key) throws IOException { + GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.setPrettyPrinting(); + Gson gson = gsonBuilder.create(); + + S3Object s3object = s3client.getObject(new GetObjectRequest( + bucketName, key)); + + InputStream ins = s3object.getObjectContent(); + String json = IOUtils.toString(ins, conf.getString(ConfVars.ZEPPELIN_ENCODING)); + ins.close(); + Note note = gson.fromJson(json, Note.class); + + for (Paragraph p : note.getParagraphs()) { + if (p.getStatus() == Status.PENDING || p.getStatus() == Status.RUNNING) { + p.setStatus(Status.ABORT); + } + } + return note; + } + + private NoteInfo getNoteInfo(String key) throws IOException { + Note note = getNote(key); + return new NoteInfo(note); + } + + @Override + public Note get(String noteId) throws IOException { + return getNote(user + "/" + "notebook" + "/" + noteId + "/" + "note.json"); + } + + @Override + public void save(Note note) throws IOException { + GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.setPrettyPrinting(); + Gson gson = gsonBuilder.create(); + String json = gson.toJson(note); + String key = user + "/" + "notebook" + "/" + note.id(); + + File file = File.createTempFile("note.json", ".txt"); + file.deleteOnExit(); + Writer writer = new OutputStreamWriter(new FileOutputStream(file)); + + writer.write(json); + writer.close(); + s3client.putObject(new PutObjectRequest( + bucketName, key, file)); + } + + @Override + public void remove(String noteId) throws IOException { + s3client.deleteObject(new DeleteObjectRequest(bucketName, + noteId)); + } +} From 4ccc5c6f98fc34c1d887a758c05adbd69d44aeec Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 13 Jul 2015 10:55:19 +0200 Subject: [PATCH 2/8] set variable in zeppelin-env.sh --- conf/zeppelin-env.sh.template | 2 ++ zeppelin-server/pom.xml | 4 +++ zeppelin-web/pom.xml | 2 +- zeppelin-zengine/pom.xml | 2 +- .../org/apache/zeppelin/conf/Credentials.java | 7 ++--- .../zeppelin/conf/ZeppelinConfiguration.java | 7 +++-- .../notebook/repo/S3NotebookRepo.java | 31 ++++++++++++------- 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/conf/zeppelin-env.sh.template b/conf/zeppelin-env.sh.template index 43d302bbb3d..b1025c2bf00 100644 --- a/conf/zeppelin-env.sh.template +++ b/conf/zeppelin-env.sh.template @@ -26,6 +26,8 @@ # export ZEPPELIN_LOG_DIR # Where log files are stored. PWD by default. # export ZEPPELIN_PID_DIR # The pid files are stored. /tmp by default. # export ZEPPELIN_NOTEBOOK_DIR # Where notebook saved +# export ZEPPELIN_BUCKET # Bucket where notebook saved +# export ZEPPELIN_USER # User in bucket where notebook saved. For example bucket/user/notebook/2A94M5J1Z/note.json # export ZEPPELIN_IDENT_STRING # A string representing this instance of zeppelin. $USER by default. # export ZEPPELIN_NICENESS # The scheduling priority for daemons. Defaults to 0. diff --git a/zeppelin-server/pom.xml b/zeppelin-server/pom.xml index 29a6a5b7da4..e85a3ae21da 100644 --- a/zeppelin-server/pom.xml +++ b/zeppelin-server/pom.xml @@ -151,6 +151,10 @@ org.scala-lang scalap + + joda-time + joda-time + diff --git a/zeppelin-web/pom.xml b/zeppelin-web/pom.xml index 316fae738b2..181b8e2965e 100644 --- a/zeppelin-web/pom.xml +++ b/zeppelin-web/pom.xml @@ -80,7 +80,7 @@ com.github.eirslett frontend-maven-plugin - 0.0.23 + 0.0.20 diff --git a/zeppelin-zengine/pom.xml b/zeppelin-zengine/pom.xml index f19d936ea3e..fb8ba084c5c 100644 --- a/zeppelin-zengine/pom.xml +++ b/zeppelin-zengine/pom.xml @@ -55,7 +55,7 @@ com.amazonaws aws-java-sdk-s3 1.10.1 - + org.slf4j diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java index 24a5f773b0a..7ff396d7d97 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java @@ -9,11 +9,8 @@ * */ public class Credentials { - //static String aws_access_key_id = System.getenv("AWS_ACCESS_KEY_ID"); - //static String aws_secret_access_key = System.getenv("AWS_SECRET_ACCESS_KEY"); - - static String aws_access_key_id = "AKIAIHDMNYZE3NLWQO5A"; - static String aws_secret_access_key = "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"; + static String aws_access_key_id = System.getenv("AWS_ACCESS_KEY_ID"); + static String aws_secret_access_key = System.getenv("AWS_SECRET_ACCESS_KEY"); private static AWSCredentials credentials = new BasicAWSCredentials(aws_access_key_id, aws_secret_access_key); diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index a9155a536ea..8ec864c1bd1 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -23,6 +23,7 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.configuration.tree.ConfigurationNode; +import org.apache.zeppelin.notebook.repo.S3NotebookRepo; import org.apache.zeppelin.notebook.repo.VFSNotebookRepo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -419,9 +420,9 @@ public static enum ConfVars { ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), - ZEPPELIN_BUCKET("zeppelin.bucket.name", "dataswarm"), - ZEPPELIN_USER("zeppelin.notebook.user", "vmgarcia"), - ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), + ZEPPELIN_BUCKET("zeppelin.bucket.name", "zeppelin"), + ZEPPELIN_USER("zeppelin.notebook.user", "user"), + ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", S3NotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not. ZEPPELIN_NOTEBOOK_AUTO_INTERPRETER_BINDING("zeppelin.notebook.autoInterpreterBinding", true), diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java index 42cda3f1bd2..6dbf35c76ba 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java @@ -36,20 +36,20 @@ /** * - * @author root + * @author vgmartinez * */ public class S3NotebookRepo implements NotebookRepo{ Logger logger = LoggerFactory.getLogger(S3NotebookRepo.class); - Credentials cred = new Credentials(); + Credentials aws = new Credentials(); private static String bucketName = ""; - AmazonS3 s3client = new AmazonS3Client(cred.getCredentials()); + String user = ""; + + AmazonS3 s3client = new AmazonS3Client(aws.getCredentials()); private ZeppelinConfiguration conf; - String user = null; - String userShare = null; - + public S3NotebookRepo(ZeppelinConfiguration conf) throws IOException { this.conf = conf; user = conf.getUser(); @@ -94,7 +94,6 @@ public List list() throws IOException { "such as not being able to access the network."); logger.info("Error Message: " + ace.getMessage()); } - logger.info("NOTE NAME: " + infos.get(1).getName()); return infos; } @@ -135,9 +134,9 @@ public void save(Note note) throws IOException { gsonBuilder.setPrettyPrinting(); Gson gson = gsonBuilder.create(); String json = gson.toJson(note); - String key = user + "/" + "notebook" + "/" + note.id(); + String key = user + "/" + "notebook" + "/" + note.id() + "/" + "note.json"; - File file = File.createTempFile("note.json", ".txt"); + File file = File.createTempFile("note", "json"); file.deleteOnExit(); Writer writer = new OutputStreamWriter(new FileOutputStream(file)); @@ -149,7 +148,17 @@ public void save(Note note) throws IOException { @Override public void remove(String noteId) throws IOException { - s3client.deleteObject(new DeleteObjectRequest(bucketName, - noteId)); + + String key = user + "/" + "notebook" + "/" + noteId; + final ListObjectsRequest listObjectsRequest = new ListObjectsRequest() + .withBucketName(bucketName).withPrefix(key); + + ObjectListing objects = s3client.listObjects(listObjectsRequest); + do { + for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { + s3client.deleteObject(bucketName, objectSummary.getKey()); + } + objects = s3client.listNextBatchOfObjects(objects); + } while (objects.isTruncated()); } } From 08b0675d369ba9eb915955ff9e255c6024b25c0f Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 13 Jul 2015 11:30:01 +0200 Subject: [PATCH 3/8] fix the version of eirslett --- zeppelin-web/pom.xml | 2 +- .../java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/zeppelin-web/pom.xml b/zeppelin-web/pom.xml index 181b8e2965e..316fae738b2 100644 --- a/zeppelin-web/pom.xml +++ b/zeppelin-web/pom.xml @@ -80,7 +80,7 @@ com.github.eirslett frontend-maven-plugin - 0.0.20 + 0.0.23 diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java index 6dbf35c76ba..752ea0721da 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java @@ -24,7 +24,6 @@ import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.DeleteObjectRequest; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; From a6d4dff0394d4592f41dc2d6c71f62f927e66cb5 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 13 Jul 2015 12:55:35 +0200 Subject: [PATCH 4/8] change class storage to VFSNotebookRepo --- .../java/org/apache/zeppelin/conf/ZeppelinConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index 8ec864c1bd1..0332d115b81 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -422,7 +422,7 @@ public static enum ConfVars { ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), ZEPPELIN_BUCKET("zeppelin.bucket.name", "zeppelin"), ZEPPELIN_USER("zeppelin.notebook.user", "user"), - ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", S3NotebookRepo.class.getName()), + ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not. ZEPPELIN_NOTEBOOK_AUTO_INTERPRETER_BINDING("zeppelin.notebook.autoInterpreterBinding", true), From aecff8e1467f01472a69654af7603d0dc3873165 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 13 Jul 2015 13:54:29 +0200 Subject: [PATCH 5/8] add licensed --- .../org/apache/zeppelin/conf/Credentials.java | 18 ++++++++++++++++++ .../zeppelin/notebook/repo/S3NotebookRepo.java | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java index 7ff396d7d97..87248a6fe23 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/Credentials.java @@ -1,3 +1,21 @@ +/* + * 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. + */ + + package org.apache.zeppelin.conf; import com.amazonaws.auth.AWSCredentials; diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java index 752ea0721da..0b90262f50c 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package org.apache.zeppelin.notebook.repo; import java.io.File; From 518ee797c7bd4459add405d1a80c5efa3e8733ba Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 14 Jul 2015 09:25:18 +0200 Subject: [PATCH 6/8] renaming variables --- conf/zeppelin-env.sh.template | 36 +++++++++---------- .../zeppelin/conf/ZeppelinConfiguration.java | 8 ++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/conf/zeppelin-env.sh.template b/conf/zeppelin-env.sh.template index b1025c2bf00..bfaf436b787 100644 --- a/conf/zeppelin-env.sh.template +++ b/conf/zeppelin-env.sh.template @@ -17,28 +17,28 @@ # # export JAVA_HOME= -# export MASTER= # Spark master url. eg. spark://master_addr:7077. Leave empty if you want to use local mode. -# export ZEPPELIN_JAVA_OPTS # Additional jvm options. for example, export ZEPPELIN_JAVA_OPTS="-Dspark.executor.memory=8g -Dspark.cores.max=16" -# export ZEPPELIN_MEM # Zeppelin jvm mem options Default -Xmx1024m -XX:MaxPermSize=512m -# export ZEPPELIN_INTP_MEM # zeppelin interpreter process jvm mem options. Default = ZEPPELIN_MEM -# export ZEPPELIN_INTP_JAVA_OPTS # zeppelin interpreter process jvm options. Default = ZEPPELIN_JAVA_OPTS +# export MASTER= # Spark master url. eg. spark://master_addr:7077. Leave empty if you want to use local mode. +# export ZEPPELIN_JAVA_OPTS # Additional jvm options. for example, export ZEPPELIN_JAVA_OPTS="-Dspark.executor.memory=8g -Dspark.cores.max=16" +# export ZEPPELIN_MEM # Zeppelin jvm mem options Default -Xmx1024m -XX:MaxPermSize=512m +# export ZEPPELIN_INTP_MEM # zeppelin interpreter process jvm mem options. Default = ZEPPELIN_MEM +# export ZEPPELIN_INTP_JAVA_OPTS # zeppelin interpreter process jvm options. Default = ZEPPELIN_JAVA_OPTS -# export ZEPPELIN_LOG_DIR # Where log files are stored. PWD by default. -# export ZEPPELIN_PID_DIR # The pid files are stored. /tmp by default. -# export ZEPPELIN_NOTEBOOK_DIR # Where notebook saved -# export ZEPPELIN_BUCKET # Bucket where notebook saved -# export ZEPPELIN_USER # User in bucket where notebook saved. For example bucket/user/notebook/2A94M5J1Z/note.json -# export ZEPPELIN_IDENT_STRING # A string representing this instance of zeppelin. $USER by default. -# export ZEPPELIN_NICENESS # The scheduling priority for daemons. Defaults to 0. +# export ZEPPELIN_LOG_DIR # Where log files are stored. PWD by default. +# export ZEPPELIN_PID_DIR # The pid files are stored. /tmp by default. +# export ZEPPELIN_NOTEBOOK_DIR # Where notebook saved +# export ZEPPELIN_NOTEBOOK_S3_BUCKET # Bucket where notebook saved +# export ZEPPELIN_NOTEBOOK_S3_USER # User in bucket where notebook saved. For example bucket/user/notebook/2A94M5J1Z/note.json +# export ZEPPELIN_IDENT_STRING # A string representing this instance of zeppelin. $USER by default. +# export ZEPPELIN_NICENESS # The scheduling priority for daemons. Defaults to 0. -# export ZEPPELIN_SPARK_USEHIVECONTEXT # Use HiveContext instead of SQLContext if set true. true by default. -# export ZEPPELIN_SPARK_CONCURRENTSQL # Execute multiple SQL concurrently if set true. false by default. -# export ZEPPELIN_SPARK_MAXRESULT # Max number of SparkSQL result to display. 1000 by default. +# export ZEPPELIN_SPARK_USEHIVECONTEXT # Use HiveContext instead of SQLContext if set true. true by default. +# export ZEPPELIN_SPARK_CONCURRENTSQL # Execute multiple SQL concurrently if set true. false by default. +# export ZEPPELIN_SPARK_MAXRESULT # Max number of SparkSQL result to display. 1000 by default. # Options read in YARN client mode -# export HADOOP_CONF_DIR # yarn-site.xml is located in configuration directory in HADOOP_CONF_DIR. +# export HADOOP_CONF_DIR # yarn-site.xml is located in configuration directory in HADOOP_CONF_DIR. # Pyspark (supported with Spark 1.2.1 and above) # To configure pyspark, you need to set spark distribution's path to 'spark.home' property in Interpreter setting screen in Zeppelin GUI -# export PYSPARK_PYTHON # path to the python command. must be the same path on the driver(Zeppelin) and all workers. -# export PYTHONPATH # extra PYTHONPATH. +# export PYSPARK_PYTHON # path to the python command. must be the same path on the driver(Zeppelin) and all workers. +# export PYTHONPATH # extra PYTHONPATH. diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index 0332d115b81..059028c544c 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -343,11 +343,11 @@ public String getNotebookDir() { } public String getUser() { - return getString(ConfVars.ZEPPELIN_USER); + return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_BUCKET); } public String getBucketName() { - return getString(ConfVars.ZEPPELIN_BUCKET); + return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_BUCKET); } public String getInterpreterDir() { @@ -420,8 +420,8 @@ public static enum ConfVars { ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), - ZEPPELIN_BUCKET("zeppelin.bucket.name", "zeppelin"), - ZEPPELIN_USER("zeppelin.notebook.user", "user"), + ZEPPELIN_NOTEBOOK_S3_BUCKET("zeppelin.bucket.name", "zeppelin"), + ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.notebook.user", "user"), ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not. From 2781621963e24a95840a6af336b58c5a3ed668d7 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 16 Jul 2015 10:40:19 +0200 Subject: [PATCH 7/8] change the property name --- conf/zeppelin-site.xml.template | 18 ++++++++++++++++++ .../zeppelin/conf/ZeppelinConfiguration.java | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/conf/zeppelin-site.xml.template b/conf/zeppelin-site.xml.template index 7bd5c3a429c..da5e229a78a 100644 --- a/conf/zeppelin-site.xml.template +++ b/conf/zeppelin-site.xml.template @@ -52,12 +52,30 @@ path or URI for notebook persist + + zeppelin.bucket.name + zeppelin + path or URI for notebook persist + + + + zeppelin.bucket.user + user + path or URI for notebook persist + + zeppelin.notebook.storage org.apache.zeppelin.notebook.repo.VFSNotebookRepo notebook persistence layer implementation + + zeppelin.notebook.storage + org.apache.zeppelin.notebook.repo.S3NotebookRepo + notebook persistence layer implementation + + zeppelin.interpreter.dir interpreter diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index 059028c544c..d99bc426cdb 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -343,7 +343,7 @@ public String getNotebookDir() { } public String getUser() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_BUCKET); + return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_USER); } public String getBucketName() { @@ -421,7 +421,7 @@ public static enum ConfVars { ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), ZEPPELIN_NOTEBOOK_S3_BUCKET("zeppelin.bucket.name", "zeppelin"), - ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.notebook.user", "user"), + ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.bucket.user", "user"), ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not. From 6b8abcd2c8e8f225e0f88f58446b1b2956937d21 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 20 Jul 2015 10:53:57 +0200 Subject: [PATCH 8/8] add description to properties --- conf/zeppelin-site.xml.template | 19 +++++++++++-------- .../zeppelin/conf/ZeppelinConfiguration.java | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/conf/zeppelin-site.xml.template b/conf/zeppelin-site.xml.template index da5e229a78a..c2294cbd445 100644 --- a/conf/zeppelin-site.xml.template +++ b/conf/zeppelin-site.xml.template @@ -52,27 +52,30 @@ path or URI for notebook persist + + zeppelin.notebook.storage - org.apache.zeppelin.notebook.repo.S3NotebookRepo + org.apache.zeppelin.notebook.repo.VFSNotebookRepo notebook persistence layer implementation diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index d99bc426cdb..5ace502aae1 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -420,8 +420,8 @@ public static enum ConfVars { ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), - ZEPPELIN_NOTEBOOK_S3_BUCKET("zeppelin.bucket.name", "zeppelin"), - ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.bucket.user", "user"), + ZEPPELIN_NOTEBOOK_S3_BUCKET("zeppelin.notebook.s3.bucket", "zeppelin"), + ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.notebook.s3.user", "user"), ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), // Decide when new note is created, interpreter settings will be binded automatically or not.