前面我们介绍了zeppelin的修改,前面由于自己的原因,对zeppelin的修改过于多,现在由于优化了,我们两个类,

一个是zeppelin-server的NotebookServer的类的broadcastParagraph(Note note,Paragraph p)的代码,另外

的一个是zeppelin-zengine里面的Note的run(String paragraphId)的这个方法还有添加了Utils的这个类对于数据集的查找,对于这两个方法,就可以完美的对

zeppelin的数据集的修改。

我们首先介绍一下zeppelin的工作原理以及我们做的修改原理

1.zeppelin的实现

原先zeppelin的实现原理是当我在note的paragraph里面写spark语句的时候,当我们点击运行或点击其他的note的时候,

此时,zeppelin会保存那个paragraph里面的所有数据,而且不会进行改变。当我们需要运行的时候,

zeppelin就会去找notebook里面paragraph的text属性然后进行运行以及修改状态和显示到页面。

2.zeppelin的修改点

关于zeppelin的paragraph.text保存到数据库的操作没有进行更改,将用户所写数据原样的保存到数据库中

改动一:

在run的时候,把待运行paragraph里面的text数据中的数据集改为真实路径提交到zeppelin中运行

改动二:

运行完成回显数据的时候修改其paragraph状态,再恢复成为用户输入的样子(把真实路径换为数据集)

下面贴一下代码

zeppelin-zengine的Note的类

 public void run(String paragraphId) {
//根据是否逾期来选择读取数据的方式
if(Utils.isOverDueTime()){
// setdataMap = findData();
setdataMap = Utils.finddataMap();
setdataList = Utils.finddataList();
}
Paragraph p = getParagraph(paragraphId);
p.setListener(jobListenerFactory.getParagraphJobListener(this)); if (p.isBlankParagraph()) {
logger.info("skip to run blank paragraph. {}", p.getId());
p.setStatus(Job.Status.FINISHED);
return;
} String requiredReplName = p.getRequiredReplName();
Interpreter intp = factory.getInterpreter(p.getUser(), getId(), requiredReplName); if (intp == null) {
String intpExceptionMsg =
p.getJobName() + "'s Interpreter " + requiredReplName + " not found";
InterpreterException intpException = new InterpreterException(intpExceptionMsg);
InterpreterResult intpResult =
new InterpreterResult(InterpreterResult.Code.ERROR, intpException.getMessage());
p.setReturn(intpResult, intpException);
p.setStatus(Job.Status.ERROR);
throw intpException;
}
if (p.getConfig().get("enabled") == null || (Boolean) p.getConfig().get("enabled")) {
p.setAuthenticationInfo(p.getAuthenticationInfo()); Paragraph p2 = p;
if (p.settings != null) {
String text = p2.getText();
if (text != null && text.contains("#")) {
p2 = p.cloneParagraphForUser(p.getId());
p2.setListener(jobListenerFactory.getParagraphJobListener(this));
p2.setAuthenticationInfo(p.getAuthenticationInfo());
//替换数据
for (String s : setdataList){
if(! text.contains("#")){
break;
}
if(text.contains(s)){
text = text.replaceAll(s, setdataMap.get(s));
}
}
p2.setText(text);
p2.setInterpreterFactory(factory);
p2.setNote(p.getNote());
}
}
intp.getScheduler().submit(p2);
}
}

zeppelin-server的NotebookServer

 public void broadcastParagraph(Note note, Paragraph p) {
Paragraph cacheP = note.getParagraph(p.getId());
if(cacheP == null)
cacheP = p;
if (cacheP.getText() != null && !cacheP.getText().equals(p.getText())) {
if (p.getReturn() instanceof InterpreterResult) {
cacheP.setReturn(p.getResult(), p.getException());
} else {
cacheP.setResult(p.getReturn());
}
cacheP.setStatus(p.getStatus());
return;
}
// if (p.settings != null) {
// //clone()方法
// p2 = p.cloneParagraphForUser(p.getId());
//
// String text = p2.getText();
// if (text != null) {
// if (text.contains("/tmp/xjdx.txt")) {
// text = text.replaceAll("/tmp/xjdx.txt", "#mydata");
// p2.setText(text);
// }
// }
// }
if (note.isPersonalizedMode()) {
broadcastParagraphs(p.getUserParagraphMap(), cacheP);
} else {
broadcast(note.getId(), new Message(OP.PARAGRAPH).put("paragraph", cacheP));
}
}

下面介绍一下Utils的类

public class Utils {

    //数据库信息
// private static final String driver = "com.mysql.jdbc.Driver";
// private static final String url = "jdbc:mysql://172.20.11.10:3306/xxxx?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false";
// private static final String username = "xxxx";
// private static final String password = "xxxx"; private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
private static final long ALLOW_TIME = 10 * 1000;
private static Date preTime = null; private static HashMap<String,String> setdataMap = null;
private static ArrayList<String> setdataList = null; static{
driver = Config.getConfig("jdbc_driverClassName");
url = Config.getConfig("jdbc_url");
username = Config.getConfig("jdbc_username");
password = Config.getConfig("jdbc_password");
} //是否逾期时间
public static boolean isOverDueTime() {
Date d = new Date();
if (preTime == null || (d.getTime() - preTime.getTime()) > ALLOW_TIME || setdataList == null || setdataMap == null)
return true;
return false;
} //进行实时查询数据库查询
public static HashMap<String,String> finddataMap(){
try {
preTime = new Date();
setdataMap = new HashMap<>();
Class.forName(driver);
Connection conn = (Connection) DriverManager.getConnection(url, username, password);
String sql = "select dataset.ds_name , dataset_storage.item_value from dataset left join dataset_storage on dataset.id = dataset_storage.dataset_id and dataset_storage.item_key = 'majorPath'";
PreparedStatement pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
if((rs.getString("item_value")) != null ){
setdataMap.put("#" + rs.getString("ds_name"),rs.getString("item_value"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return setdataMap;
} public static ArrayList<String> finddataList(){
setdataList = new ArrayList<>();
if(setdataMap != null){
for (String s:setdataMap.keySet()){
setdataList.add(s) ;
}
}
return setdataList;
} }

以上就是对于zeppelin的数据集修改的二次优化

zeppelin的数据集的优化的更多相关文章

  1. 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化

    一.二次代价函数 1. 形式: 其中,C为代价函数,X表示样本,Y表示实际值,a表示输出值,n为样本总数 2. 利用梯度下降法调整权值参数大小,推导过程如下图所示: 根据结果可得,权重w和偏置b的梯度 ...

  2. SqlServer性能优化 即席查询(十三)

    执行计划,查询类别: 1.即席查询     2.预定义查询 select c.EnglishProductCategoryName,p.EnglishProductName,p.Color,p.Siz ...

  3. MSSQL数据批量插入优化详细

    序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据是如何插入的呢?我今天就此问题做个探 ...

  4. Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理

    前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...

  5. Hadoop中两表JOIN的处理方法(转)

    1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...

  6. (转)MapReduce中的两表join几种方案简介

    转自:http://blog.csdn.net/leoleocmm/article/details/8602081 1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而 ...

  7. Hadoop中两表JOIN的处理方法

    Dong的这篇博客我觉得把原理写的很详细,同时介绍了一些优化办法,利用二次排序或者布隆过滤器,但在之前实践中我并没有在join中用二者来优化,因为我不是作join优化的,而是做单纯的倾斜处理,做joi ...

  8. (转)MapReduce 中的两表 join 几种方案简介

    1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...

  9. apriori && fpgrowth:频繁模式与关联规则挖掘

    已迁移到我新博客,阅读体验更佳apriori && fpgrowth:频繁模式与关联规则挖掘 详细代码我放在github上:click me 一.实验说明 1.1 任务描述 1.2 数 ...

随机推荐

  1. 对DOM操作的一些总结

    一.DOM节点 分为三大类: 1.元素节点 :<html>.<body>.<p>等标签 2.文本节点 :标签内的文本.例如<p>这就是文本节点</ ...

  2. vue2 关于ref

    1,VUE2子组件索引 <div id="app"> <navbar></navbar> <pagefooter></page ...

  3. 在Git上创建新分支(实用性高!!!)

    在github上创建仓库: Create a new repository on the command line touch README.md git init git add README.md ...

  4. spring-cloud构架微服务(2)-全局配置二

    接上篇,实际项目中,可能会遇到有些配置项,例如:邮件地址.手机号等在服务已经上线之后做了改动(就当会出现这种情况好了).然后你修改了配置信息,就得一个一个去重启对应的服务.spring-全局配置提供了 ...

  5. CSS中的鼠标样式明细

    <INPUT   TYPE="submit"   style="cursor:   hand"   value="hand">  ...

  6. java工程师要求

    高级JAVA研发工程师 8000-15000元/月 职位信息 职位描述 岗位要求:1.五年以上软件研发经验,两年以上软件架构设计经验:2.精通weblogic.jboss tomcat.websphe ...

  7. 创建Gradle工程出现Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradleXX'.问题解决

    在 Eclipse EE Oxygen 中创建 Gradle Project的时候 出现如下错误: org.gradle.tooling.GradleConnectionException: Coul ...

  8. mongoose添加属性问题

    在项目中遇到这样一个问题. 项目地址: https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCar ...

  9. python剑指offer最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 使用快排中的partition思想. ①我们设定part ...

  10. iOS 多线程 之 GCD(大中枢派发)(二)

    本文接着上一篇讲.主要讲:dispatch_source. dispatch_source主要用户监听事件,可以监听如下事件 DISPATCH_SOURCE_TYPE_DATA_ADD DISPATC ...