首页 文章 精选 留言 我的

精选列表

搜索[项目管理软件],共10013篇文章
优秀的个人博客,低调大师

python——Django项目模板

views.py 1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.shortcuts import render 5 from message.models import UserMessage 6 # Create your views here. 7 def getform(request): 8 if request.method == 'POST': 9 name = request.POST.get('name','') 10 email = request.POST.get('email','') 11 address = request.POST.get('address','') 12 message = request.POST.get('message','') 13 mess = UserMessage() 14 mess.name = name 15 mess.email = email 16 mess.adress = address 17 mess.message = message 18 mess.save() 19 return render(request, 'message_form.html') settings.py 1 """ 2 Django settings for DjangoTest project. 3 4 Generated by 'django-admin startproject' using Django 1.11.10. 5 6 For more information on this file, see 7 https://docs.djangoproject.com/en/1.11/topics/settings/ 8 9 For the full list of settings and their values, see 10 https://docs.djangoproject.com/en/1.11/ref/settings/ 11 """ 12 13 import os 14 15 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 18 # STATIC_ROOT = os.path.join(BASE_DIR, 'static') 19 20 # Quick-start development settings - unsuitable for production 21 # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ 22 23 # SECURITY WARNING: keep the secret key used in production secret! 24 SECRET_KEY = '42$e_@s@&l+#_$3_d02$f*n0@uqk#-51klz)4z1t_fi2ok!ol7' 25 26 # SECURITY WARNING: don't run with debug turned on in production! 27 DEBUG = True 28 29 ALLOWED_HOSTS = [] 30 31 32 # Application definition 33 34 INSTALLED_APPS = [ 35 'django.contrib.admin', 36 'django.contrib.auth', 37 'django.contrib.contenttypes', 38 'django.contrib.sessions', 39 'django.contrib.messages', 40 'django.contrib.staticfiles', 41 'message' 42 ] 43 44 MIDDLEWARE = [ 45 'django.middleware.security.SecurityMiddleware', 46 'django.contrib.sessions.middleware.SessionMiddleware', 47 'django.middleware.common.CommonMiddleware', 48 'django.middleware.csrf.CsrfViewMiddleware', 49 'django.contrib.auth.middleware.AuthenticationMiddleware', 50 'django.contrib.messages.middleware.MessageMiddleware', 51 'django.middleware.clickjacking.XFrameOptionsMiddleware', 52 ] 53 54 ROOT_URLCONF = 'DjangoTest.urls' 55 56 TEMPLATES = [ 57 { 58 'BACKEND': 'django.template.backends.django.DjangoTemplates', 59 'DIRS': [os.path.join(BASE_DIR, 'templates')], 60 'APP_DIRS': True, 61 'OPTIONS': { 62 'context_processors': [ 63 'django.template.context_processors.debug', 64 'django.template.context_processors.request', 65 'django.contrib.auth.context_processors.auth', 66 'django.contrib.messages.context_processors.messages', 67 ], 68 }, 69 }, 70 ] 71 72 WSGI_APPLICATION = 'DjangoTest.wsgi.application' 73 74 75 # Database 76 # https://docs.djangoproject.com/en/1.11/ref/settings/#databases 77 78 DATABASES = { 79 'default': { 80 'ENGINE': 'django.db.backends.mysql', 81 'NAME': "DjangT", 82 'USER': "root", 83 'PASSWORD':"root", 84 'HOST':"127.0.0.1" 85 } 86 } 87 88 89 # Password validation 90 # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 91 92 AUTH_PASSWORD_VALIDATORS = [ 93 { 94 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 95 }, 96 { 97 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 98 }, 99 { 100 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 101 }, 102 { 103 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 104 }, 105 ] 106 107 108 # Internationalization 109 # https://docs.djangoproject.com/en/1.11/topics/i18n/ 110 111 LANGUAGE_CODE = 'en-us' 112 113 TIME_ZONE = 'UTC' 114 115 USE_I18N = True 116 117 USE_L10N = True 118 119 USE_TZ = True 120 121 # Static files (CSS, JavaScript, Images) 122 # https://docs.djangoproject.com/en/1.11/howto/static-files/ 123 124 STATIC_URL = '/static/' 125 STATICFILES_DIRS = [ 126 os.path.join(BASE_DIR,'static') 127 ] models.py 1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.db import models 5 6 # Create your models here. 7 class UserMessage(models.Model): 8 name = models.CharField(max_length=20,verbose_name=u"用户名") 9 email = models.CharField(max_length=100,verbose_name=u"邮箱",default="",primary_key=True) 10 adress = models.CharField(max_length=200,verbose_name=u"联系地址") 11 message = models.CharField(max_length=500,verbose_name=u"留言信息") 12 13 class Meta: 14 verbose_name = u"用户留言信息" 15 verbose_name_plural = verbose_name urls.py 1 """DjangoTest URL Configuration 2 3 The `urlpatterns` list routes URLs to views. For more information please see: 4 https://docs.djangoproject.com/en/1.11/topics/http/urls/ 5 Examples: 6 Function views 7 1. Add an import: from my_app import views 8 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 Class-based views 10 1. Add an import: from other_app.views import Home 11 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 Including another URLconf 13 1. Import the include() function: from django.conf.urls import url, include 14 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 """ 16 from django.conf.urls import url 17 from django.contrib import admin 18 from message.views import getform 19 20 urlpatterns = [ 21 url(r'^admin/', admin.site.urls), 22 url(r'^form/$', getform) 23 ] message_form.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <link rel="stylesheet" href="/static/css/style.css"> 7 </head> 8 <body> 9 <form action="/form/" method="post" class="smart-green"> 10 <h1>留言信息 11 <span>请留下你的信息.</span> 12 </h1> 13 <label> 14 <span>姓名 :</span> 15 <input id="name" type="text" name="name" class="error" placeholder="请输入您的姓名"/> 16 <div class="error-msg"></div> 17 </label> 18 19 <label> 20 <span>邮箱 :</span> 21 <input id="email" type="email" value="" name="email" placeholder="请输入邮箱地址"/> 22 <div class="error-msg"></div> 23 </label> 24 25 <label> 26 <span>联系地址 :</span> 27 <input id="address" type="text" value="" name="address" placeholder="请输入联系地址"/> 28 <div class="error-msg"></div> 29 </label> 30 31 <label> 32 <span>留言 :</span> 33 <textarea id="message" name="message" placeholder="请输入你的建议"></textarea> 34 <div class="error-msg"></div> 35 </label> 36 <div class="success-msg"></div> 37 <label> 38 <span>&nbsp;</span> 39 <input type="submit" class="button" value="提交"/> 40 </label> 41 <input type='hidden' name='csrfmiddlewaretoken' value='SfHkbL4feo1G00sJQtbO7TtLN4c2BUwa' /> 42 {% csrf_token %} 43 </form> 44 45 </body> 46 </html> style.css 1 .smart-green { 2 margin-left: auto; 3 margin-right: auto; 4 max-width: 500px; 5 background: #F8F8F8; 6 padding: 30px 30px 20px 30px; 7 font: 12px Arial, Helvetica, sans-serif; 8 color: #666; 9 border-radius: 5px; 10 -webkit-border-radius: 5px; 11 -moz-border-radius: 5px; 12 } 13 .smart-green h1 { 14 font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif; 15 padding: 20px 0px 20px 40px; 16 display: block; 17 margin: -30px -30px 10px -30px; 18 color: #FFF; 19 background: #9DC45F; 20 text-shadow: 1px 1px 1px #949494; 21 border-radius: 5px 5px 0px 0px; 22 -webkit-border-radius: 5px 5px 0px 0px; 23 -moz-border-radius: 5px 5px 0px 0px; 24 border-bottom: 1px solid #89AF4C; 25 } 26 .smart-green h1 > span { 27 display: block; 28 font-size: 11px; 29 color: #FFF; 30 } 31 32 .smart-green label { 33 margin: 0px 0px 5px; 34 display: block; 35 } 36 .smart-green label > span { 37 float: left; 38 margin-top: 10px; 39 color: #5E5E5E; 40 } 41 42 .smart-green input[type="text"], .smart-green input[type="email"], .smart-green textarea, .smart-green select { 43 color: #555; 44 height: 30px; 45 line-height: 15px; 46 width: 100%; 47 padding: 0px 0px 0px 10px; 48 margin-top: 2px; 49 border: 1px solid #E5E5E5; 50 background: #FBFBFB; 51 outline: 0; 52 -webkit-box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2); 53 box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2); 54 font: normal 14px/14px Arial, Helvetica, sans-serif; 55 } 56 57 .smart-green textarea { 58 height: 100px; 59 padding-top: 10px; 60 } 61 62 63 .smart-green .button { 64 background-color: #9DC45F; 65 border-radius: 5px; 66 -webkit-border-radius: 5px; 67 -moz-border-border-radius: 5px; 68 border: none; 69 padding: 10px 25px 10px 25px; 70 color: #FFF; 71 text-shadow: 1px 1px 1px #949494; 72 } 73 74 .smart-green .button:hover { 75 background-color: #80A24A; 76 } 77 78 .error-msg{ 79 color: red; 80 margin-top: 10px; 81 } 82 .success-msg{ 83 color: #80A24A; 84 margin-top: 10px; 85 margin-bottom: 10px; 86 } 数据库mysql,使用navicat premium工具。

优秀的个人博客,低调大师

Spring 项目全介绍

Spring Framework Spring Security Spring Web Flow Spring Web Services Spring Dynamic Modules Spring Integration Spring Batch Spring Batch Admin Spring.NET Spring AMQP Spring AMQP.NET Spring GemFire Spring GemFire for .NET Spring LDAP Spring Social Spring Android Spring IDE Spring BlazeDS Integration SpringSource Bundlor Spring Roo Spring Python SpringSource OSGi Test Stubs Spring Security Kerberos Extension SpringSource dm Server SpringSource dm Kernel SpringSource dm Server Samples Spring Data Spring Data Commons Spring Data JDBC Spring Data JPA Spring Data Redis Spring Mobile Spring Data Mongo Spring Data Neo4j Spring Social Facebook Spring Social LinkedIn Spring Social Twitter Spring.NET CodeConfig Spring.NET REST Client Spring.NET Visual Studio 2010 Extension 本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/753163,如需转载请自行联系原作者

优秀的个人博客,低调大师

FFMPEG相关开源项目

1.FFmpeg build for android random architectures with example jnihttps://github.com/appunite/AndroidFFmpeg2.ijkplayer - Android/iOS 基于FFMPEG库的播放器http://git.oschina.net/bbcallen/ijkplayergit下载地址: http://git.oschina.net/bbcallen/ijkplayer.git git@git.oschina.net:bbcallen/ijkplayer.git https://github.com/bbcallen/ijkplayer 3. KxMovie - IOS平台基于FFMPEG播放器https://github.com/kolyvan/kxmovie4.Vitamio - Android/IOS平台上的多媒体框架,带有硬件加速解码和渲染.https://github.com/yixia/VitamioBundle5.YUV2RGB - 顾名思义,YUV转RGB http://wss.co.uk/pinknoise/yuv2rgb/ 6.TSDemux - 将TS流解码为PES或ES 下载这个源码需要FQ。 http://code.google.com/p/tsdemuxer/ 7.MPlayer - 跨平台的视频播放器,可在Linux和其他类Unix系统、Windows及Mac OS X系统使用 http://www.mplayerhq.hu/design7/dload.html 8.VLC - 跨平台的视频播放器。现在也有安卓版本。也可以作为流媒体服务器。 http://www.videolan.org/vlc/index.html 9.FFDshow - 免费的编解码软件,基于windows平台。原因就是directshow就是微软开发的,只能用于windows平台。 http://sourceforge.NET/projects/ffdshow-tryout/ 这是笔者目前接触到的,等以后遇到了,再整理。

优秀的个人博客,低调大师

apache开源项目--HBase

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。 上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。 此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。 HBase访问接口 1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据 2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用 3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据 4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制 5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计 6. Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase HBase数据模型 Table & Column Family Row Key Timestamp Column Family URI Parser r1 t3 url=http://www.taobao.com title=天天特价 t2 host=taobao.com t1 r2 t5 url=http://www.alibaba.com content=每天… t4 host=alibaba.com Ø Row Key: 行键,Table的主键,Table中的记录按照Row Key排序 Ø Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number Ø Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。 Table & Region 当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理: -ROOT- && .META. Table HBase中有两张特殊的Table,-ROOT-和.META. Ø .META.:记录了用户表的Region信息,.META.可以有多个regoin Ø -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region Ø Zookeeper中记录了-ROOT-表的location Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。 MapReduce on HBase 在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,如下图: HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作为Hadoop MapReduce的Source和Sink,对于MapReduce Job应用开发人员来说,基本不需要关注HBase系统自身的细节。 HBase系统架构 Client HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC Zookeeper Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到 Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的 单点问题,见下文描述 HMaster HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作: 1. 管理用户对Table的增、删、改、查操作 2. 管理HRegionServer的负载均衡,调整Region分布 3. 在Region Split后,负责新Region的分配 4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移 HRegionServer HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。 HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多 个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。 HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile), 当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进 行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要 进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前 Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。下图描述了Compaction和Split的过程: 在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式 系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。 每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并 删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知 到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。 HBase存储格式 HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型: 1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile 2. HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File HFile 下图是HFile的存储格式: 首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。正如图中所示的,Trailer中有指针指向其他数 据块的起始点。File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index块记录了每个Data块和Meta块的起始点。 Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。 每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏。后面会详细介绍每个KeyValue对的内部构造。 HFile里面的每个KeyValue对就是一个简单的byte数组。但是这个byte数组里面包含了很多项,并且有固定的结构。我们来看看里面的具体结构: 开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,表示RowKey的长度,紧接着是 RowKey,然后是固定长度的数值,表示Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据了。 HLogFile 上图中示意了HLog文件的结构,其实HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。 HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue,可参见上文描述。 结束 本文对HBase技术在功能和设计上进行了大致的介绍,由于篇幅有限,本文没有过多深入地描述HBase的一些细节技术。目前一淘的存储系统就是基于HBase技术搭建的,后续将介绍“一淘分布式存储系统”,通过实际案例来更多的介绍HBase应用。 本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5103090.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

apache开源项目--Ignite

Apache Ignite 内存数组组织框架是一个高性能、集成和分布式的内存计算和事务平台,用于大规模的数据集处理。Ignite 为应用和不同的数据源之间提供一个高性能、分布式内存中数据组织管理的框架。 集群计算特性: 动态集群 Fork-Join & MapReduce 处理 分布式闭包执行 负载均衡和容错 分布式消息和事件 线性可伸缩 内存缓存和数据网格关键特性: 分布式内存中缓存 优雅的伸缩方案 高性能 分布式内存中事务支持 分布式内存队列和其他数据结构 Web 会话集群 Hibernate L2 缓存集成 分布式 SQL 联合查询 内存数据流: 本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5103006.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

apache开源项目 -- tez

为了更高效地运行存在依赖关系的作业(比如Pig和Hive产生的MapReduce作业),减少磁盘和网络IO,Hortonworks开发了DAG计 算框架Tez。Tez是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduceR/Pig/Hive等系统的底层数据处理 引擎,它天生融入Hadoop 2.0中的资源管理平台YARN,且由Hadoop 2.0核心人员精心打造,势必将会成为计算框架中的后起之秀。本文将重点介绍Tez的最新进展。 在阅读本文之前,读者可先阅读我之前写的三篇文章了解Tez有关背景、设计原理等: (1)浅谈Apache Tez中的优化技术 (2)Apache Tez:一个运行在YARN之上支持DAG作业的计算框架 (3)Tez:运行在YARN上的DAG计算框架 总结起来,Tez有以下几个特色: (1) 丰富的数据流(dataflow,NOT Streaming!)编程接口; (2) 扩展性良好的“Input-Processor-Output”运行模型; (3) 简化数据部署(充分利用了YARN框架,Tez本身仅是一个客户端编程库,无需事先部署相关服务) (4) 性能优于MapReduce (5) 优化的资源管理(直接运行在资源管理系统YARN之上) (6) 动态生成物理数据流(dataflow) 声明:本文大部分内容源自Apache Tez官方主页中的说明文档,有兴趣的读者可进入http://tez.incubator.apache.org/了解更多内容,你也可以根据文档说明安装Tez(需要apache最新版本2.1.0-beta或者3.0.0,CDH暂不支持,版本太老),进而对它有一个更加直观的理解。 1. 优化举例 为了方便大家理解Tez的优化效果,接下来给出两个例子 予以说明。 (1)MRR*应用 比如以下Hive SQL会翻译成两个MR作业,而采用Tez则生成一个DAG作业,可大大减少磁盘IO: SELECT DeptName, COUNT(*) as c FROM EmployeeTable GROUP BY DeptName ORDER BY c; (2)Join应用 比如以下Hive SQL会翻译成四个MR作业,而采用Tez则生成一个DAG作业,可大大减少磁盘IO: SELECT a.state, COUNT(*), AVERAGE(c.price) FROM a JOIN b ON(a.id = b.id) JOIN c ON(a.itemId = c.itemId) GROUP BY a.state 2.术语介绍 可类比数据库中的概念理解这些术语,比如数据库中的逻辑计划和物理计划:Job Vertex、Job Edge和Static Plan属于逻辑计划概念;Vertex、Edge和Dynamic Plan属于物理计划概念。 (1)Job Vertex:作业规划中的一个阶段(Stage); (2) Job Edge:两个不同Job Vertex之间的逻辑关联; (3) Vertex: 运行时生成的物化阶段,由若干个可以执行的Task构成; (4) Edge: Task之间数据移动方式; (5) Task: 能够完成计算任务的线程,实际运行在YARN Container中; (6) Task cardinality: 任务基数,即Vertex产生的Task数目 (7) Static plan: 作业提交时确定的逻辑执行计划 (8) Dynamic plan:在ApplicationMaster执行时产生的物理执行计划 3. Tez中的通信类型 (1)1对于1 第一阶段中的任务按照1:1的映射关系将数据传递给下一个阶段中的任务,典型应用是hash join,如下图所示: (2) 1对于N 第一阶段中的每个任务会产生N份数据(N是下一个阶段中的任务数目),每份数据由下一个阶段的一个任务读取,这类似与MapReduce的Shuffle阶段,具体有两种实现方式: 方式1:每个任务产生的N份数据放到N个文件中,供下一个阶段的任务直接获取,这种方式可能产生过多的文件,可能难以扩展到上千个任务的场景; 方式2:每个任务产生的N份数据放放到一个文件中,并增加一个索引文件记录每份数据中偏移量,这种方式的扩展性非常好,Hadoop MapReduce正是采用了这种实现(设计之初,Hadoop MapReduce层采用方式1中的方案)。 4. Tez新引入的优化机制 (1) 动态确定任务基数 DAG中每个Vertex需启动一定数目的任务并行处理对应的数据,Tez可根据用户设置的策略动态确定每个Vertex需启动的任务数,比如根据数据量、最大并发数等。 (2)解决数据倾斜问题 数据倾斜是分布式计算中影响数据处理效率的最大顽疾之一,很多工作在这方面开展但一直没有非常好的解决方案。目前看来,比较有效的方案是在应用程序层解决,即用户根据实际数据特点编写最有效的应用程序,尽可能避免数据倾斜问题。 数据倾斜的一种典型场景是大批量的数据的key值是相同的,这使得按key划分数据后,大量数据落到一个任务上,从而使得该任务成为“拖后腿”任 务,甚至导致运行失败。为了解决该问题,在数据引擎层面,Tez可根据每个任务的处理数据量调整占用的资源,对于那些处理数据量大的任务,可多分配一些资 源。 5. Tez未来发展 在将来,Tez将增加以下几个特性: (1) 任务抢占,即可通过资源抢占的方式,让优先级更高的任务优先运行; (2) 任务执行断点检查,通过对任务执行过程记录断点,可在任务失败时从断点恢复运行,以避免任务重算(这个功能难度很大); (3) ApplicationMaster执行断点检查,这个可借鉴MapReduce ApplicationMaster实现,就目前YARN的架构设计而言,只能做到(ApplicationMaster失败后)已经完成的任务不重新计 算,对于正在运行的任务需重新计算; (4) 应用程序的Container重用,同一个应用程序的多个任务可重用一个Container中,该功能是一个非常重要的feature,很多YARN上框架都在做! (5) 不同应用程序的Container重用,即不同应用程序的多个任务可重用一个Container,这个功能难度较大! 本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5105262.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册