Azkaban-2.5.0-部署与常见案例
该文章是基于 Hadoop2.7.6_01_部署 、 Hive-1.2.1_01_安装部署 进行的
1. 前言
在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图所示:
2. 工作流调度器azkaban概述
2.1. 为什么需要工作流调度系统
- 一个完整的数据分析系统通常都是由大量任务单元组成:
shell脚本程序,java程序,mapreduce程序、hive脚本等
- 各任务单元之间存在时间先后及前后依赖关系
- 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
1、 通过Hadoop先将原始数据同步到HDFS上;
2、 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
3、 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
4、 将明细数据进行复杂的统计分析,得到结果报表信息;
5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
2.2. 工作流调度实现方式
简单的任务调度:直接使用linux的crontab来定义;
复杂的任务调度:开发调度平台
或使用现成的开源调度系统,比如ooize、azkaban等
2.3. 常见工作流调度系统
市面上目前有许多工作流调度器
在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等
2.4. Azkaban与Oozie对比
对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
详情如下:
- 功能
两者均可以调度mapreduce,pig,java,脚本工作流任务
两者均可以定时执行工作流任务
- 工作流定义
Azkaban使用Properties文件定义工作流
Oozie使用XML文件定义工作流
- 工作流传参
Azkaban支持直接传参,例如${input}
Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
- 定时执行
Azkaban的定时执行任务是基于时间的
Oozie的定时执行任务基于时间和输入数据
- 资源管理
Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
Oozie暂无严格的权限控制
- 工作流执行
Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
Oozie作为工作流服务器运行,支持多用户和多工作流
- 工作流管理
Azkaban支持浏览器以及ajax方式操作工作流
Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流
3. Azkaban介绍
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
它有如下功能特点:
Web用户界面
方便上传工作流
方便设置任务之间的关系
调度工作流
认证/授权(权限的工作)
能够杀死并重新启动工作流
模块化和可插拔的插件机制
项目工作区
工作流和任务的日志记录和审计
3.1. Azkaban使用MySQL存储state的信息
AzkabanWebServer和AzkabanExecutorServer 都是能够访问MySQL的
web server使用DB的原因如下:
Project Management 项目,项目的权限以及上传的文件
Executing Flow State 跟踪执行流,执行程序运行它们
Previous Flow/Jobs 搜索之前的作业和流程执行,以及访问他们的日志文件
Scheduler 保持预定的工作状态
SLA 保持所有sla规则
executor server使用DB的原因如下:
Access the project 从数据库中检索项目文件
Executing Flows/Jobs 检索和更新 流和正在执行的数据
Logs 将输出日志存储到作业中并流入到db中
Interflow dependency 如果流在不同的执行器上运行,则它将从DB中获取状态
4. Azkaban安装部署
将安装文件上传到集群,最好上传到安装 hive、sqoop的机器上,方便命令的执行
准备工作
Azkaban Web服务器
azkaban-web-server-2.5.0.tar.gz
Azkaban执行服务器
azkaban-executor-server-2.5.0.tar.gz
MySQL
azkaban-2.5.0只支持 mysql,需安装mysql服务器,本文档中默认已安装好mysql服务器,下文中会建立 azkaban用户,密码 azkaban.
# 相关信息
[yun@mini01 azkaban]$ pwd
/app/software/azkaban
[yun@mini01 azkaban]$ ll
total
-rw-r--r-- yun yun May : azkaban-executor-server-2.5..tar.gz
-rw-r--r-- yun yun May : azkaban-sql-script-2.5..tar.gz
-rw-r--r-- yun yun May : azkaban-web-server-2.5..tar.gz
# 解压缩包
[yun@mini01 azkaban]$ tar xf azkaban-executor-server-2.5..tar.gz
[yun@mini01 azkaban]$ tar xf azkaban-web-server-2.5..tar.gz
[yun@mini01 azkaban]$ tar xf azkaban-sql-script-2.5..tar.gz
[yun@mini01 azkaban]$ ll
total
drwxrwxr-x yun yun Jul : azkaban-2.5.
drwxrwxr-x yun yun Jul : azkaban-executor-2.5.
-rw-r--r-- yun yun May : azkaban-executor-server-2.5..tar.gz
-rw-r--r-- yun yun May : azkaban-sql-script-2.5..tar.gz
drwxrwxr-x yun yun Jul : azkaban-web-2.5.
-rw-r--r-- yun yun May : azkaban-web-server-2.5..tar.gz
4.1. MySQL部署
建库并授权
# 在mini03上操作
# 建库
MariaDB [(none)]> CREATE DATABASE azkaban DEFAULT CHARACTER SET utf8 ;
Query OK, row affected (0.00 sec) MariaDB [(none)]> show create database azkaban;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| azkaban | CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
row in set (0.00 sec) MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| azkaban |
| hive |
| mysql |
| performance_schema |
| test |
| zhang |
+--------------------+
rows in set (0.00 sec) # 授权
MariaDB [(none)]> grant all on azkaban.* to azkaban@'%' identified by 'azkaban';
Query OK, rows affected (0.00 sec) MariaDB [(none)]>
MariaDB [(none)]> flush privileges;
Query OK, rows affected (0.00 sec) MariaDB [(none)]> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| azkaban | % |
| hive | % |
| root | % |
| root | 127.0.0.1 |
| root | :: |
| | localhost |
| root | localhost |
| | mini03 |
| hive | mini03 |
| root | mini03 |
+---------+-----------+
rows in set (0.00 sec)
导入数据
# 在有azkaban的SQL语句机器上操作
[yun@mini01 azkaban-2.5.]$ pwd
/app/software/azkaban/azkaban-2.5.
[yun@mini01 azkaban-2.5.]$ ll
total
-rwxr-xr-x yun yun Apr create.active_executing_flows.sql
-rwxr-xr-x yun yun Apr create.active_sla.sql
-rwxr-xr-x yun yun Apr create-all-sql-2.5..sql # 包含所有库信息
-rwxr-xr-x yun yun Apr create.execution_flows.sql
-rwxr-xr-x yun yun Apr create.execution_jobs.sql
-rwxr-xr-x yun yun Apr create.execution_logs.sql
-rwxr-xr-x yun yun Apr create.project_events.sql
-rwxr-xr-x yun yun Apr create.project_files.sql
-rwxr-xr-x yun yun Apr create.project_flows.sql
-rwxr-xr-x yun yun Apr create.project_permissions.sql
-rwxr-xr-x yun yun Apr create.project_properties.sql
-rwxr-xr-x yun yun Apr create.projects.sql
-rwxr-xr-x yun yun Apr create.project_versions.sql
-rwxr-xr-x yun yun Apr create.properties.sql
-rwxr-xr-x yun yun Apr create.schedules.sql
-rwxr-xr-x yun yun Apr create.triggers.sql
-rwxr-xr-x yun yun Apr database.properties
-rwxr-xr-x yun yun Apr update-all-sql-2.1.sql
-rwxr-xr-x yun yun Apr update-all-sql-2.2.sql
-rwxr-xr-x yun yun Apr update.execution_logs.2.1.sql
-rwxr-xr-x yun yun Apr update.project_properties.2.1.sql
[yun@mini01 azkaban-2.5.]$ ll /app/software/azkaban/azkaban-2.5./create-all-sql-2.5..sql # 要导入的SQL文件
-rwxr-xr-x yun yun Apr /app/software/azkaban/azkaban-2.5./create-all-sql-2.5..sql
[yun@mini01 azkaban-2.5.]$
[yun@mini01 azkaban-2.5.]$ mysql -hmini03 -uazkaban -pazkaban
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 5.5.-MariaDB MariaDB Server Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use azkaban; # 使用库
Database changed
MariaDB [azkaban]> source /app/software/azkaban/azkaban-2.5./create-all-sql-2.5..sql
………………
MariaDB [azkaban]> show tables;
+------------------------+
| Tables_in_azkaban |
+------------------------+
| active_executing_flows |
| active_sla |
| execution_flows |
| execution_jobs |
| execution_logs |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| schedules |
| triggers |
+------------------------+
rows in set (0.00 sec)
4.2. azkaban执行服器和web服务器部署
[yun@mini01 azkaban]$ pwd
/app/software/azkaban
[yun@mini01 azkaban]$ ll
total
drwxrwxr-x yun yun Jul : azkaban-2.5.
drwxrwxr-x yun yun Jul : azkaban-executor-2.5.
-rw-r--r-- yun yun May : azkaban-executor-server-2.5..tar.gz
-rw-r--r-- yun yun May : azkaban-sql-script-2.5..tar.gz
drwxrwxr-x yun yun Jul : azkaban-web-2.5.
-rw-r--r-- yun yun May : azkaban-web-server-2.5..tar.gz
# 先创建/app/azkaban/ 目录
[yun@mini01 azkaban]$ cp -a azkaban-executor-2.5. /app/azkaban/executor-2.5.
[yun@mini01 azkaban]$ cp -a azkaban-web-2.5. /app/azkaban/web-server-2.5.
[yun@mini01 azkaban]$ cd /app/azkaban/
[yun@mini01 azkaban]$ ll
total
drwxrwxr-x yun yun Jul : executor-2.5.
drwxrwxr-x yun yun Jul : web-server-2.5.
4.3. 为azkaban创建SSL配置
[yun@mini01 azkaban]$ pwd
/app/azkaban
[yun@mini01 azkaban]$ ll
total
drwxrwxr-x yun yun Jul : executor-2.5.
drwxrwxr-x yun yun Jul : web-server-2.5.
[yun@mini01 azkaban]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password: # 输入123456
Re-enter new password: # 输入123456
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
[no]: yes Enter key password for <jetty>
(RETURN if same as keystore password):
# 查看生成的keystore
[yun@mini01 azkaban]$ ll
total
drwxrwxr-x yun yun Jul : executor-2.5.
-rw-rw-r-- yun yun Jul : keystore
drwxrwxr-x yun yun Jul : web-server-2.5.
[yun@mini01 azkaban]$ cp -a keystore web-server-2.5./ # 将keystore拷贝到azkaban的web中
[yun@mini01 azkaban]$ ll web-server-2.5./
total
-rw-r--r-- yun yun Apr azkaban.version
drwxr-xr-x yun yun Apr bin
drwxr-xr-x yun yun Jul : conf
drwxr-xr-x yun yun Apr extlib
-rw-rw-r-- yun yun Jul : keystore
drwxr-xr-x yun yun Jul : lib
drwxr-xr-x yun yun Apr plugins
drwxr-xr-x yun yun Jul : web
4.4. 配置文件
注:先配置好服务器节点上的时区
1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可
2、拷贝该时区文件,覆盖系统本地时区配置
# 也可以是软连接
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4.4.1. web服务器配置
[yun@mini01 conf]$ pwd
/app/azkaban/web-server-2.5./conf
[yun@mini01 conf]$ ll
total
-rw-r--r-- yun yun Jul : azkaban.properties
-rw-r--r-- yun yun Apr azkaban-users.xml
#### azkaban.properties 配置
[yun@mini01 conf]$ vim azkaban.properties
#Azkaban Personalization Settings
azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index
web.resource.dir=web/ #默认根web目录
default.timezone.id=Asia/Shanghai #时区 #Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml #用户配置,具体配置参加下文 #Loader for projects
executor.global.properties=conf/global.properties # global配置文件所在位置
azkaban.project.dir=projects database.type=mysql
mysql.port=
mysql.host=mini03
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections= #最大连接数 # Velocity dev mode
velocity.dev.mode=false # Azkaban Jetty server properties.
jetty.maxThreads= #最大线程数
jetty.ssl.port= #Jetty SSL端口
jetty.port= #Jetty端口
jetty.keystore=keystore #SSL文件名
jetty.password= #SSL文件密码
jetty.keypassword= #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword= # SSL文件密码 # Azkaban Executor settings
executor.port= #执行服务器端口 # mail settings
mail.sender= #发送邮箱
mail.host= #发送邮箱smtp地址
job.failure.email= #任务失败时发送邮件的地址
job.success.email= #任务成功时发送邮件的地址 lockdown.create.projects=false cache.directory=cache #缓存目录 ###### azkaban-users.xml 配置
[yun@mini01 conf]$ vim azkaban-users.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" /> <role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
4.4.2. executor执行服务器配置
[yun@mini01 conf]$ pwd
/app/azkaban/executor-2.5./conf
[yun@mini01 conf]$ vim azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes #jobtype 插件所在位置 #Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects database.type=mysql
mysql.port=
mysql.host=mini03
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections= #最大连接数 # Azkaban Executor settings
executor.maxThreads= #最大线程数
executor.port= #端口号(如修改,请与web服务中一致)
executor.flow.threads= #线程数
4.5. 启动azkaban
先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。
执行服务器
[yun@mini01 executor-2.5.]$ pwd
/app/azkaban/executor-2.5.
[yun@mini01 executor-2.5.]$ ./bin/azkaban-executor-start.sh
# 或者 nohup ./bin/azkaban-executor-start.sh > azkaban-exec_$(date +%Y%m%d%H%M%S).log &
# 方便查看日志
………………
web服务器
[yun@mini01 web-server-2.5.]$ pwd
/app/azkaban/web-server-2.5.
[yun@mini01 web-server-2.5.]$ ./bin/azkaban-web-start.sh # 日志会自己记录
………………
查看java进程
[yun@mini01 executor-2.5.]$ jps
AzkabanWebServer
AzkabanExecutorServer
Jps
4.6. 浏览器访问
https://mini01:8443/
使用admin登录之后
5. Azkaban实战
Azkaba内置的任务类型支持command、java
5.1. Command类型单一job示例
创建job描述文件
在Windows创建文件 command.job,内容如下
command.job
#command.job
type=command
# command=sh hello.sh
command=echo 'hello'
hello.sh
#!/bin/bash
echo 'hello World!' > /tmp/azkaban.info
将job资源文件打包成zip文件
zip command.job
创建project、上传包并执行
1、通过azkaban的web管理平台创建project并上传job压缩包
首先创建project
2、上传zip包
3、启动执行该job
5.2. Command类型多job工作流flow
1、创建有依赖关系的多个job描述
第一个job:foo.job
# foo.job
type=command
command=echo foo
第二个job:bar.job依赖foo.job
# bar.job
type=command
dependencies=foo
command=echo bar
2、将所有job资源文件打到一个zip包中
3、在azkaban的web管理界面创建工程并上传zip包
4、启动工作流flow
5.3. HDFS操作任务
1、创建job描述文件
fs_01.job
# fs.job
type=command
command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/test03_new
fs_02.job
# fs.job
type=command
dependencies=fs_01
command=/app/hadoop/bin/hadoop fs -put /app/software/apache-flume-1.8.-bin.tar.gz /azkaban/test03_new
2、将job资源文件打包成zip文件
3、通过azkaban的web管理平台创建project并上传job压缩包
4、启动执行该job
5.4. MAPREDUCE任务
Mr任务依然可以使用command的job类型来执行
1、创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)
mrwc_01.job
# mrwc.job
type=command
command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/wordcount/input
mrwc_02.job
# mrwc.job
type=command
dependencies=mrwc_01
command=/app/hadoop/bin/hadoop fs -put test.info zhang.info /azkaban/wordcount/input
mrwc_03.job
# mrwc.job
type=command
dependencies=mrwc_02
command=/app/hadoop/bin/hadoop jar hadoop-mapreduce-examples-2.7..jar wordcount /azkaban/wordcount/input /azkaban/wordcount/output
test.info
zhang.info
zxcvbnm
asdfghjkl
qwertyuiop
qwertyuiop qwertyuiop
2、将job资源文件打包成zip文件
3、通过azkaban的web管理平台创建project并上传job压缩包
4、启动执行该job
部分截图如下
[yun@mini02 ~]$ hadoop fs -cat /azkaban/wordcount/output/part-r- asdfghjkl
qwertyuiop
zxcvbnm
5.5. HIVE脚本任务
1、创建job描述文件
hivef_01.job
# hivef.job
type=command
command=/app/hadoop/bin/hadoop fs -mkdir -p /aztest/hiveinput
hivef_01.job
# hivef.job
type=command
dependencies=hivef_01
command=/app/hadoop/bin/hadoop fs -put azkb.dat /aztest/hiveinput
hivef_03.job
# hivef.job
type=command
dependencies=hivef_02
command=/app/hive/bin/hive -f 'aztest.sql'
aztest.sql
CREATE DATABASE IF NOT EXISTS azkaban;
use azkaban;
DROP TABLE IF EXISTS aztest;
DROP TABLE IF EXISTS azres;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput/azkb.dat' into table aztest;
create table azres row format delimited fields terminated by '#' as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count() from aztest;
azkb.dat
,刘晨晨
,王敏
,张立玉
,刘刚
2、将job资源文件打包成zip文件
3、通过azkaban的web管理平台创建project并上传job压缩包
4、启动执行该job
Azkaban-2.5.0-部署与常见案例的更多相关文章
- zabbix Server 4.0 部署及之内置item使用案例
zabbix Server 4.0 部署及之内置item使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zabbix组件架构概述(图片摘自网络) 1>.zabbi ...
- Azkaban学习之路(四)—— Azkaban Flow 2.0的使用
一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用Flow 2.0,因为Flow 1.0会在将 ...
- 分布式任务调度框架 Azkaban —— Flow 2.0 的使用
一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 ...
- jQuery常见案例
jQuery常见案例 通过jQuery实现全选,反选取消: 选择 地址 端口 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 代码实现 <body> ...
- iis 部署webapi常见错误及解决方案
iis 部署webapi常见错误及解决方案 错误一: 原因:asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问, ...
- Android内存溢出、内存泄漏常见案例及最佳实践总结
内存溢出是Android开发中一个老大难的问题,相关的知识点比较繁杂,绝大部分的开发者都零零星星知道一些,但难以全面.本篇文档会尽量从广度和深度两个方面进行整理,帮助大家梳理这方面的知识点(基于Jav ...
- Solr 4.0 部署实例教程
Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...
- ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Azkaban 2.5.0 job type 插件安装
一.环境及软件 安装环境: 安装目录: /usr/local/ae/ankaban Hadoop 安装目录 export HADOOP_HOME=/usr/local/ae/hadoop-1.2.1 ...
- Azkaban 2.5.0 搭建
一.前言 最近试着参照官方文档搭建 Azkaban,发现文档很多地方有坑,所以在此记录一下. 二.环境及软件 安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: ...
随机推荐
- MyBatis源码解析【8】简单demo理解接口式编程
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 上一次我们经过源码的 ...
- 通过 URL 打开 Activity
为每个 Activity 绑定一个 url 可以方便的让第三方 app 直接打开这些 Activity.也可以方便在 app 内部进行页面跳转,解耦. 背景 举一个常见的案例,假设我们有个产品 A,产 ...
- 共享内存 - shmget填坑记
1. 问题引出 最近有个项目,需要两个进程之间传递大量的数据,因此考虑采用了共享 内存机制+信号同步,两个进程,笔者和另外一程序员开发,协议都定好了,开发很顺利. 等到我们联合调试的时候,问题出现了, ...
- Oracle 连接到RMAN
set oracle_sid=orcl rman connect target sys/password@orcl;
- asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值
后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...
- EXISTS 执行顺序
select * from a where a.s_status=1 and exists (select orderid from b where a.orderid=b.orderid) exis ...
- MVC架构介绍—查询功能的开发
select和from语句 注意:select和from可以不设置,默认情况下: select获取映射表的所有字段: from获取实体映射表的表名:如果设置select则必须设置frorm,但是允许仅 ...
- 海西 · 云交付 DevOps实践落地方案
一.背景概述 (一)产品背景 1.互联网+的需要 在信息越来越繁杂的互联网时代,公司所运行的项目越来越多,项目相关服务繁多,服务之间存在复杂的依赖关系,运维与管理任务越来越繁重,手工交付需要花 ...
- SSM(Spring+SpringMvc+Mybatis)整合笔记
1.使用开发工具 jdk1.8 eclipse Tomcat7.0 MySql 2.创建数据库和表,由于重点是整合,所以数据库就随意加几条数据. 3.创建动态Web项目(推荐使用Maven可以用配置来 ...
- Python全栈学习_day005知识点
今日内容大纲: . 字典的增删改查以及其他操作 . 字典的嵌套 . 字典的增删改查以及其他操作 , 'sex': '男'}, 'name_list': ['无双', 'alex', 'BlameK'] ...