首页 文章 精选 留言 我的

精选列表

搜索[计算机基础],共10000篇文章
优秀的个人博客,低调大师

让Spark如虎添翼的Zeppelin – 基础篇

Spark 是一个非常好的计算平台,支持多种语言,同时基于内存的计算速度也非常快。整个开源社区也很活跃。 但是Spark在易用性上面还是有一些美中不足。 对于刚接触的人来说,上手以及环境搭建还是有一些困难。 另外,如果希望将结果绘制成图表分享给别人,还需要很长一段路程。 目前已经有一些解决方案: 【TBD】Jupyter Notebook 使用很广泛,但是看起来主要还是以前ipython-notebook的增强版。 目前笔者对其了解不多 Spark 母公司DataBricks提供的DataBricks Community Edition, 里面自带Spark集群 + Notebook。 易用性、功能性都很不错。缺点是集群架设在AWS之上,无法跟自己本地的Spark 集群连在一起 Apache Zeppelin 这是一个刚刚从Incubation转正的项目 但是已经在各大公司均有采用,比如美团、微软等等 本文主要就是介绍如何在本地搭建一个Zeppelin 使得Spark更易用,同时可以很方便的将自己的工作成功展示给客户 借用别人的一个效果图镇楼^_^ 注意: Zeppelin自带Spark实例,您无需自己构建一个Spark 集群就可以学习Zeppelin Zeppelin 当前(2016年8月19日)最新版本0.6.1, 只兼容2.0+ 1)如果您本地有Spark 集群并且版本是1.6.1 + Scala 2.10 , 请下载Zeppelin 0.6.0的版本 2)如果官网的速度比较慢,可以参考下面的方式到百度盘下载 链接: http://pan.baidu.com/s/1ctBBJo 密码: e68g 1、 下载 如果您需要的是0.6.0的版本,可以参考上面百度盘的下载链接。 如果您需要的是0.6.1+的版本,可以直接到官网下载, 里面的Mirror下载速度一般还不错 2、 安装 版本: Zeppelin 0.6.0 + 自建Spark集群(1.6.1) 感觉Zeppelin还是不太成熟,并开箱就用,还需要不少人工调整才能正常工作 1)解压之后,首先需要从模板创建一个新的zeppelin-env.sh, 并设置SPARK_HOME. 比如: 1exportSPARK_HOME=/usr/lib/spark 如果是基于Hadoop 或者 Mesos 搭建的Spark 集群,还需要进行另外的设置。 2)从模板创建一个新的zeppelin-site.xml,并将之前的8080端口改到比如8089,避免与Tomcat等端口冲突 <property> <name>zeppelin.server.port</name> <value>8089</value> <description>Serverport.</description> </property> 3)替换jackson相关类库 a)默认自带的是2.5.*, 但是实际使用的时候指定的是2.4.4 b)并且可能2.4.4 与 2.5.* 并不完全兼容。 c)因此需要使用2.4.4 替换2.5.* , 有下面3个jar需要替换: jackson-annotations-2.4.4.jar jackson-core-2.4.4.jar jackson-databind-2.4.4.jar d)这真的是非常坑人的一个地方。。。 做完上诉几步之后,就可以启动啦: 启动/停止命令: bin/zeppelin-daemon.shstop/start 启动之后,打开http://localhost:8089 就可以看到Zeppelin的主界面啦 3. 配置Spark解释器 Spark Interpreter的配置非常简单,可以直接参考下图的配置方式: 4. 几点使用经验 Zeppline自带比较详细的Tutorial, 各位看自带的notebook tutorial 可能效果更好。 但是我在第一次使用的时候,遇到了不少坑,在此记录下来,给大家做个参考: (1) 任务提交之后不会自动停止 当Zeppelin 提交任务之后,可以看到Spark Master UI 上面,当前任务即使执行完成了,也不会自动退掉 这是因为,Zeppelin 默认就像人手工运行了spark-shell spark://master-ip:7077 一样, 除非手动关闭shell命令,否则会一直占用着资源 解决办法就是将spark 解释器(interpreter) 重启 手动的重启办法: 1.打开Interpreter界面,搜索到Spark部分并点击重启 2.推荐: 调用Restful API 进行重启。 a.可以通过Chrome的Network 监控看一下点击restart之后具体调用的API的情况。如下图: b.这个ID(2BUDQXH2R)在各自的环境可能各不相同。另外这个API是PUT的方式,可以直接使用下面的python代码在UI上自动重启 %python importrequests r=requests.put("http://IP:8089/api/interpreter/setting/restart/2BUDQXH2R") printr.text (2) 异常提示:Cannot call methods on a stopped SparkContext 比如我们在Spark Master UI 上面将当前job kill 之后,在Zeppelin这边重启执行任务就会遇到这个异常信息。 解决办法很简单: 重启解析器 (3) 不要主动调用 sc.stop() 这是官方明确说明的:scala 的spark-shell 自动初始化了SparkContext / SqlContext 等等 不能自己调用sc.stop() 之后重启创建一个SparkContext 可能笔者水平原因,尝试自己创建新的sc 之后,各种奇奇怪怪的问题 (4) 关于python module Python Interpreter可以使用当前Zeppelin所在机器的python 所有的model 同时支持python 2 与 python 3 这是一个很有用的功能,比如我使用spark将数据计算完成之后,生成了一个并不太大的csv文件。这个时候完全可以使用Pandas强大的处理能力来进行二次处理,并最终使用Zeppelin的自动绘图能力生成报表 与Tableau之类的BI工具相比功能差了一些,不过各有所长。Zeppelin 对程序员来说可以算是非常方便的一个工具了。 对日常的一些简单报表的工作量大大减小了 (5) 可以设置自动运行时间 在整个Note的最上端,可以设置当前notebook 定期执行。 而且注意: 还可以设置执行完成之后自动重启interpreter 参考下图: 本文作者:rangerwolf 来源:51CTO

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

07HTML基础-meta其它类型

meta其它类型 Keywords类型 作用: 告诉搜索引擎当前网页的关键词, 在SEO中非常重要, 能够提高搜索命中率, 让别人更容易找到你 格式: <meta name="keywords" content="IT前言技术、iOS技术、HTML5技术、Android技术" /> Descriiption类型 作用: 告诉搜索引擎当前网页的主要内容, 在SEO中非常重要, 当别人在搜索引擎中搜索到你的网站时会自动作为对你网站的描述信息展示给用户, 能够提高搜索命中率, 让别人更容易找到你 格式: <meta name="description" content="江哥热爱于IT前言技术、iOS技术、HTML5技术、Android技术研究" /> Author类型 作用: 告诉搜索引擎当前网页的作业, install B专用 格式: <meta name="author" content="Jonathan_Lee" /> Refresh类型 作用: 告诉浏览器多久自动刷新一次页面并指向新页面, 常用于新老域名交替时, 访问老域名自动跳转到新域名, 或用语一些需要定时刷新的聊天室等. 格式: <meta http-equiv="Refresh" content="2;URL=http://www.baidu.com/"> Robots类型 作用: 告诉搜索引擎当前网页的作业, 写给网络爬虫看的内容 格式: <meta name="robots" content="all|none|index|follow|noindex|nofollow" /> index: 告诉搜索引擎允许抓取当前页面 noindex:告诉搜索引擎不允许抓取当前页面 follow: 告诉搜索引擎可以从当前页面上找到链接,然后继续访问抓取下去 nofollow:告诉搜索引擎不允许从当前页面上找到链接, 拒绝其继续访问 all: 告诉搜索引擎允许抓取当前页面, 并且允许从此页找到链接继续访问 none: 告诉搜索引擎不允许抓取这个页面,并且不允许从此页找到链接、拒绝其继续访问 常见组合 <META NAME="ROBOTS" CONTENT="INDEX,FOLLOW">:可以抓取本页,而且可以顺着本页继续索引别的链接 有可以写成<META NAME="ROBOTS" CONTENT="ALL"> <META NAME="ROBOTS" CONTENT="NOINDEX,FOLLOW">:不许抓取本页,但是可以顺着本页抓取索引别的链接 <META NAME="ROBOTS" CONTENT="INDEX,NOFOLLOW">:可以抓取本页,但是不许顺着本页抓取索引别的链接 <META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW">:不许抓取本页,也不许顺着本页抓取索引别的链接。 注意事项: 不要把两个对立的反义词写到一起,例如 例如<META NAME="ROBOTS" CONTENT="INDEX,NOINDEX"> 学习交流方式: 1.微信公众账号搜索: 李南江(配套视频,代码,资料各种福利获取) 2.加入前端学习交流群: 302942894 / 289964053 / 11550038

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

Docker基础之二: Linux快速入门

Linux快速使用教程 (提示:对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。) 由于Docker是的容器都依赖于linux 内核,因此这一节主要是快速简单的介绍一下linux,如果你对linux比较熟悉,可略过。 1 为什么要使用linux 本身开源免费 支持众多开源的软件,诸如mysql, apache, mongodb, nodeJS等 基本上90%以上的互联网公司都使用linux作为后端服务器 云主机大多数都是基于linux系统 2 选取什么发行版本 Linux包含了很多的发行版本,包括ubuntu, centos, redhat, federa等等,但是他们都是基于linux kernel,各个发行版本都会做相应的包装、优化和简化,但是基本上内核版本不会有太大的差异。根据我的经验,我推荐使用ubuntu 或者centos。Ubuntu的优点是: 内核更新及时 软件安装和更新方便 GUI简单实用 CentOS就是Red Hat Enterprise 的开源版本,也是不错的选择,考虑到Ubuntu对Docker的完美支持,我一般推荐使用Ubuntu. 3 图形界面 Or 命令行界面 在安装的时候,ubuntu14.04提供了桌面版和服务器版,如果你要使用eclipse等工具进行开发,肯定要选择桌面版;如果你只是运行后台程序,最好选择服务器版,多使用服务器版把linux的命令用熟悉也是一种学习和锻炼。 4 英文 Or 中文 一般来说使用linux的用户都是相对专业的用户,我建议一律使用英文的操作系统。使用英文操作系统,可以熟悉英文,同时不会出现奇怪的乱码字符。 5 安装ubuntu 14.04 安装的时候就根据提示一步步的进行就可以了,在中途选择软件的时候,至少把SSH server选上,方便后续连接入系统。安装完毕后,我们通过之前设置的用户名和密码登录,接下来我们做一些常用配置。 5.1 启用root用户 root用户是linux的最高权限用户,相当于windows的超级管理员。我们可以通过下面的方式来启用root用户: root@gctest:~# sudo passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 根据提示输入当前用户的密码,然后再输入root的密码。sudo是以管理员身份运行命令。然后通过su 命令切换到root用户. 5.2 使用vim vim是ubuntu默认的文本编辑器,学习使用linux第一步就是学会使用vi。有的时候vim可能是没有安装的,我们需要手动来进行安装: root@gctest:~# sudo apt-get update && apt-get install vim Hit http://mirrors.163.com precise Release.gpg Hit http://mirrors.163.com precise Release Hit http://apt.ghostcloud.cn ubuntu-precise Release.gpg 安装成功之后,我们就可以使用vim了。vim 是vi的升级版,有了很多优化。常用的命令有: i – 从当前位置开始插入数据 a – 在当前位置后面插入数据 esc – 退出编辑模式 : - 在vim中执行一条指令,比如wq就是保存加退出 / - 搜索文字 上下左右键 – 移动光标,vi 里面不能用方向键,但是vim里面是可以使用的 虽然还有很多命令,但是用上面的基本就能操作了。 5.3 配置网络 ubuntu的网络配置是放在/etc/network/interfaces下的,我们通过vim来进行查看和修改 # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.0.0 gateway 192.168.0.1 dns-nameservers 61.139.2.69 218.6.200.139 修改完毕后,我们需要重启网络,一个比较好的方式是禁用再启用网络: root@gctest:~# ifdown -a && ifup -a 5.4 启用SSH Server SSH是Secure Shell的缩写,是linux的标准远程连接工具,通过这个工具我们可以以命令行的方式远程连接到 linux主机之上。首先我们需要检查在主机上是否安装了ssh server root@shev:~# dpkg -l | grep openssh-server ii openssh-server 1:6.6p1-2ubuntu2 amd64 secure shell (SSH) server, for secure access from remote machines 如果没有安装就不会有下面的输出。接下来,我们需要配置ssh # vim /etc/ssh/sshd_config #允许Root登录 PermitRootLogin yes #允许通过密码进行验证登录 PasswordAuthentication yes ` 保存退出后,执行 root@gctest:~# restart ssh 然后验证能否本地登录 root@shev:~# ssh root@localhost The authenticity of host 'localhost (::1)' can't be established. ECDSA key fingerprint is 3a:8c:00:76:4d:4d:62:a7:c7:18:a0:00:e6:d0:17:c7. Are you sure you want to continue connecting (yes/no)? 根据提示输入用户密码,如果可以登录说明安装成功,最后执行exit,退出ssh连接。 5.5 通过客户端连接linux主机 目前市面上有很多ssh客户端,包括免费的XShell, Secure CRT等,如果你使用linux或mac系统,本身就自带 ssh 客户端。Ssh 命令登录,需要指定用户和ip地址,格式如下: ssh <用户名>@<IP> #如:ssh root@192.168.1.10 表示,以root用户登录192.168.1.10机器。 5.6 免密码登录linux主机 免密码登录的原理是在你需要登录的远程主机上,存放当前机器的公钥。 在当前机器生成公钥和私钥 ssh-keygen 根据提示生成以后,会在~/.ssh/目录下生成相关的文件。这里的~指的是用户的目录,比如,在linux下abc用户的目录为/home/abc,root用户的目录为/root,在mac下是在/Users/<用户名> 将公钥id_rsa.pub拷贝到目标机器上 scp ~/.ssh/id_rsa.pub root@192.168.1.10:~/ 这行命令将当前用户的公钥拷贝到远程机器的root用户目录下 ssh root@192.168.1.10 ssh-keygen #在远端产生密钥 cat id_rsa.pub >> ~/.ssh/authorized_keys #加入信任列表 rm id_rsa.pub #删除公钥 exit #退出远程机器 这时已经返回到当前机器,再执行ssh root@192.168.1.10就不再需要输入密码了。 5.7 安装软件 Ubuntu软件安装用的是和debian一样的系统——apt。apt就是一个软件仓库,你只需要指定仓库地址,然后就可以进行搜索和安装. 添加源:默认的ubuntu源是指向国外的,位于/etc/apt/sources.list,我们可以在网上搜索国内的源,比如:网易源,阿里源等deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse 搜索软件root@shev:/etc/apt# apt-cache search apache2 | grep ^apache2 apache2 - Apache HTTP Server apache2-bin - Apache HTTP Server (binary files and modules) apache2-data - Apache HTTP Server (common files) apache2-dbg - Apache debugging symbols apache2-dev - Apache HTTP Server (development headers) apache2-doc - Apache HTTP Server (on-site documentation) apache2-mpm-event - transitional event MPM package for apache2 apache2-mpm-prefork - transitional prefork MPM package for apache2 apache2-mpm-worker - transitional worker MPM package for apache2 apache2-utils - Apache HTTP Server (utility programs for web servers) apache2.2-bin - Transitional package for apache2-bin apache2-mpm-itk - transitional itk MPM package for apache2 apache2-suexec - transitional package for apache2-suexec-pristine apache2-suexec-custom - Apache HTTP Server configurable suexec program for mod_suexec apache2-suexec-pristine - Apache HTTP Server standard suexec program for mod_suexec 安装软件root@shev:/etc/apt# apt-get install apache2 Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cert Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils openssl-blacklist The following NEW packages will be installed: apache2 apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cert 0 upgraded, 8 newly installed, 0 to remove and 72 not upgraded. Need to get 1285 kB of archives. After this operation, 5348 kB of additional disk space will be used. Do you want to continue? [Y/n] y 卸载软件 root@shev:/etc/apt# apt-get purge apache2 查找本地安装的软件 root@shev:/etc/apt# dpkg -l

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

Docker基础之八: 容器的网络

容器的网络 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。) 根据之前的教程我们只是运行了简单的应用程序。之前我们编译了自己的image,在本节中我们将讲述如何管理容器的网络。 1 容器命名 如果你仔细查看docker ps的输出,你会看到docker自动生成了容器的名称: root@gctest:~/.ghostcloud/bin# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09475612bb40 ghostcloud.cn:5005/gcali:1.0.8 "/usr/local/ghostclou" 2 minutes ago Up 2 minutes gcsagent f8eb8005de81 myimage "/bin/sh -c 'echo 'he" 15 minutes ago Exited (0) 15 minutes ago compassionate_cray 46ffa55f5680 ubuntu "/bin/bash" 37 minutes ago Exited (0) 29 minutes ago lonely_mirzakhani 40b4301839a1 ubuntu "echo hello-world" 40 minutes ago Exited (0) 40 minutes ago compassionate_torvalds compassionate_cray就是一个名称。通过容器命令,可以提供两个有用的功能: 默认你是通过容器的ID进行操作,你可以为特定容器设置容器名称,比如如果容器是一个web应用,你可以把它标记为web。 容器之间,可以通过名称进行相互的引用和链接. 容器的名称通过--name来进行设置: $ docker run -d -P --name web training/webapp python app.py 我们可以通过docker inspect来查看容器的详细参数: ``` ##2 容器的默认网络 Docker自身通过网络驱动来管理网络。默认Docker提供两种网络驱动,bridge和overlay。你可以自己编写网络驱动作为插件,但是这个工作比较麻烦,这儿就省略了。 Docker安装后,会自动生成3种网络: root@gctest:~# docker network ls NETWORK ID NAME DRIVER 782f465fa194 none null 6887a082de45 host host 6e75573f448f bridge bridge bridge是一种特殊的网络模式,这是默认的网络模式。我们可以通过inspect来查看详细信息: ```Bash root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": { "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "48fbb1fa53db756cc4afdf4db81182bd4347bf208dba49ed27c3187ea2d6c8c0", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 从上面我们可以看出,桥接的网卡是172.17.0.1/16,网关是172.17.0.1。其中有一个容器连接到了这个桥接网络中,它的ip是172.17.0.2/16。 如果你想将容器从网络中移除,你可以使用: root@gctest:~# docker network disconnect bridge 85a5 root@gctest:~# docker network inspect bridge [ { "Name": "bridge", "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ] 3 创建自己的桥接网络 Docker原生支持bridge和overlay网络,bridge只能在单个主机上使用。overlay可以在多台主机间使用,这部分将在后续进行详细讲解。下面我们就来建立一个自己的网络: root@gctest:~# docker network create -d bridge mybridge 36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9 root@gctest:~# docker network ls NETWORK ID NAME DRIVER 6e75573f448f bridge bridge 782f465fa194 none null 6887a082de45 host host 36328af2a0b1 mybridge bridge -d表示使用已有的bridge来创建新的网络,你也可以省略该参数,这个是默认参数。 4 添加容器到网络 默认情况,容器使用的是同一个bridge网络,这样可能有一定的安全隐患,为了做到完全的隔离,我们可以自己建一个桥接网络,然后在启动容器时将容器加入到自己的网络中。比如: root@gctest:~# docker run -it --net=mybridge ubuntu /bin/bash 如果你inspect你的网络,你会看到详细的连接信息: root@gctest:~/.ghostcloud/bin# docker network inspect mybridge [ { "Name": "mybridge", "Id": "36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "2c1fda7b6efda429d2bf7c85a131200ee370512cea214a7fe423c28d952e1320": { "EndpointID": "1b988bffa26ca9e6ee3cbfc5081b8adb5dcb5cde359404ff6afb73fb954a2b93", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": { "EndpointID": "0440158825ce6c1e6efc224238ab83084761a9c2e6fa28f162d2188e514aa737", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {} } ] 如果启动时没有指定网络或想加入多个网络,可以通过connect命令加入。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

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

用户登录
用户注册