too many open files 的问题怎么解决
Tomcat Too Many Open Files ;Too many open files tomcat 60报“too many open files Too many open files 问题的解决 linux 故障解决,tomcat 故障处理,too many open files 故障处理
发表于 2011 年 01 月 06 日 由 admin
Tomcat Too Many Open Files ;Too many open files tomcat 60报“too many open files Too many open files 问题的解决
linux 故障解决,tomcat 故障处理,too many open files 故障处理这个问题是第一次在Linux环境下碰到,把解决的方法记录下来。
服务器配置:两个双核CPU 20G,4G内存
操作系统:CentOS,内核2618
应用1、搜索服务器,负责全站的搜索和提供内容相关性接口
应用服务器:Tomcat6016+Apache228,其中两个Tomcat实例,一个对外提供服务,一个对内管理索引(创建、删除、检索等)
Web方案:Solr13(With Solr Client For Java)、Java Servlet(Web Service 接口)
应用2、类似于的一个应用
应用服务器:与搜索服务器共享Apache228
Web方案:Php+Mysql
问题症状:搜索服务停止,应用2响应超时,牵连全站的搜索接口调用内容的输出,查看Catalina日志,大量的如下信息:
<!--[if !supportLineBreakNewLine]-->
Java代码
orgapachejkcommonChannelSocket acceptConnections
WARNING: Exception executing accept
javanetSocketException: Too many open files
at javanetPlainSocketImplsocketAccept(Native Method)
at javanetPlainSocketImplaccept(Unknown Source)
at javanetServerSocketimplAccept(Unknown Source)
at javanetServerSocketaccept(Unknown Source)
at orgapachejkcommonChannelSocketaccept(ChannelSocketjava:295)
at orgapachejkcommonChannelSocketacceptConnections(ChannelSocketjava:641)
at orgapachejkcommonSocketAcceptorrunIt(ChannelSocketjava:852)
at orgapachetomcatutilthreadsThreadPool$ControlRunnablerun(ThreadPooljava:684)
at javalangThreadrun(Unknown Source)
orgapachejkcommonChannelSocket acceptConnections
WARNING: Exception executing accept
javanetSocketException: Too many open files
at javanetPlainSocketImplsocketAccept(Native Method)
at javanetPlainSocketImplaccept(Unknown Source)
at javanetServerSocketimplAccept(Unknown Source)
at javanetServerSocketaccept(Unknown Source)
at orgapachejkcommonChannelSocketaccept(ChannelSocketjava:295)
at orgapachejkcommonChannelSocketacceptConnections(ChannelSocketjava:641)
at orgapachejkcommonSocketAcceptorrunIt(ChannelSocketjava:852)
at orgapachetomcatutilthreadsThreadPool$ControlRunnablerun(ThreadPooljava:684)
at javalangThreadrun(Unknown Source)
<!--[endif]-->事件的主题:linux系统出现Too many open files 错误,这是因为文件描述符大小不够,或者有不正常的网络连接(Socket也是一种特殊的文件)、文件IO没有关闭并释放出文件描述符(文件句柄,File Operator)。
使用如下命令查看系统对允许打开最大文件描述符的配置:
ulimit -u 查看open files设置
ulimit -a 查看所有设置
ulimit -u 65535(新的open files 值)修改设置
ulimit -n 65536 设置用户可以同时打开的最大文件数(max open files)
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
使用lsof -p pid [httpd进程的 pid、java的pid]来查看系统中apache进程和java运行时进程当前打开的文件资源,发现两者之和已经接近1024,大于了默认的设置。
修改配置:
修改/etc/security/limitsconf,在文件末加上
soft nofile 65536
hard nofile 65536
系统级文件描述符极限还可以通过将以下三行添加到 /etc/rcd/rclocal 启动脚本中来设置:
# Increase system-wide file descriptor limit
echo 65536 > /proc/sys/fs/file-max
echo 65536 > /proc/sys/fs/inode-max
思考:虽 然调整该参数解决了当前的问题,但并不是最好的方法,出现该错误说明该服务器承载了一定的并发连接,尤其是搜索服务,其中一个实例对外提供搜索,另一个实 例创建索引,两个实例之间也使用socket进行通信(httpclient for java),创建索引的时候会占用大量的文件描述符,如果描述符没有及时释放(不能完全依赖垃圾回收机制,要及时的close);全站的所有与搜索有关的 接口调用都会向其发出请求,而应用2也对外服务不少的请求,较好的办法是将搜索服务从该服务器中分离出来,这样可以分别对两者进行优化(包括调整 Linux系统参数,比如:/etc/sysctlconf中对netipv4的优化),出了问题也容易debug
Facet 是 solr 的高级搜索功能之一 , 可以给用户提供更友好的搜索体验 在搜索关键字的同时 ,能够按照 Facet 的字段进行分组并统计
二 Facet 字段
1 适宜被Facet 的字段
一般代表了实体的某种公共属性 , 如商品的分类 , 商品的制造厂家 , 书籍的出版商等等
2 Facet 字段的要求
Facet 的字段必须被索引 一般来说该字段无需分词 , 无需存储
无需分词是因为该字段的值代表了一个整体概念 , 如电脑的品牌 ” 联想 ” 代表了一个整体概念 , 如果拆成 ” 联 ”,” 想 ” 两个字都不具有实际意义 另外该字段的值无需进行大小写转换等处理 , 保持其原貌即可
无需存储是因为一般而言用户所关心的并不是该字段的具体值 , 而是作为对查询结果进行分组的一种手段 , 用户一般会沿着这个分组进一步深入搜索
3 特殊情况
对于一般查询而言 , 分词和存储都是必要的 比如 CPU 类型 ”Intel 酷睿 2 双核 P7570”,拆分成 ”Intel”,” 酷睿 ”,”P7570” 这样一些关键字并分别索引 , 可能提供更好的搜索体验 但是如果将 CPU 作为 Facet 字段 , 最好不进行分词 这样就造成了矛盾 , 解决方法为 ,将 CPU 字段设置为不分词不存储 , 然后建立另外一个字段为它的 COPY, 对这个 COPY 的字段进行分词和存储
schemaxml
<types>
<fieldType name="string" class="solrStrField" omitNorms="true"/>
<fieldType name="tokened" class="solrTextField" >
<analyzer>
……
</analyzer>
</fieldType>
……
</types>
<fields>
<field name=”cpu” type=”string” indexed=”true” stored=”false”/>
<field name=”cpuCopy” type=” tokened” indexed=”true” stored=”true”/>
……
</fields>
<copyField source="cpu" dest="cpuCopy"/>
三 Facet 组件
Solr 的默认 requestHandler(orgapachesolrhandlercomponentSearchHandler) 已经包含了 Facet 组件 (orgapachesolrhandlercomponentFacetComponent) 如果自定义 requestHandler 或者对默认的 requestHandler 自定义组件列表 , 那么需要将 Facet 加入到组件列表中去
solrconfigxml
<requestHandler name="standard" class="solrSearchHandler" default="true">
……
<arr name="components">
<str>自定义组件名</str>
<str>facet</str>
……
</arr>
</requestHandler>
四 Facet 查询
进行 Facet 查询需要在请求参数中加入 ”facet=on” 或者 ”facet=true” 只有这样 Facet 组件才起作用
1 Field Facet
Facet 字段通过在请求中加入 ”facetfield” 参数加以声明 , 如果需要对多个字段进行 Facet查询 , 那么将该参数声明多次 比如
/selectq=联想
&facet=on
&facetfield=cpu
&facetfield=videoCard
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="cpu">
<int name="Intel 酷睿2双核 T6600">48</int>
<int name="Intel 奔腾双核 T4300">28</int>
<int name="Intel 酷睿2双核 P8700">18</int>
<int name="Intel 酷睿2双核 T6570">11</int>
<int name="Intel 酷睿2双核 T6670">11</int>
<int name="Intel 奔腾双核 T4400">9</int>
<int name="Intel 酷睿2双核 P7450">9</int>
<int name="Intel 酷睿2双核 T5870">8</int>
<int name="Intel 赛扬双核 T3000">7</int>
<int name="Intel 奔腾双核 SU4100">6</int>
<int name="Intel 酷睿2双核 P8400">6</int>
<int name="Intel 酷睿2双核 SU7300">5</int>
<int name="Intel 酷睿 i3 330M">4</int>
</lst>
<lst name="videoCard">
<int name="ATI Mobility Radeon HD 4">63</int>
<int name="NVIDIA GeForce G 105M">24</int>
<int name="NVIDIA GeForce GT 240M">21</int>
<int name="NVIDIA GeForce G 103M">8</int>
<int name="NVIDIA GeForce GT 220M">8</int>
<int name="NVIDIA GeForce 9400M G">7</int>
<int name="NVIDIA GeForce G 210M">6</int>
</lst>
</lst>
<lst name="facet_dates"/>
</lst>
各个 Facet 字段互不影响 , 且可以针对每个 Facet 字段设置查询参数 以下介绍的参数既可以应用于所有的 Facet 字段 , 也可以应用于每个单独的 Facet 字段 应用于单独的字段时通过
f字段名参数名=参数值
这种方式调用 比如 facetprefix 参数应用于 cpu 字段 , 可以采用如下形式
fcpufacetprefix=Intel
11 facetprefix
表示 Facet 字段值的前缀 比如 ”facetfield=cpu&facetprefix=Intel”, 那么对 cpu字段进行 Facet 查询 , 返回的 cpu 都是以 ”Intel” 开头的 ,”AMD” 开头的 cpu 型号将不会被统计在内
12 facetsort
表示 Facet 字段值以哪种顺序返回 可接受的值为 true(count)|false(index,lex) true(count) 表示按照 count 值从大到小排列 false(index,lex) 表示按照字段值的自然顺序( 字母 , 数字的顺序 ) 排列 默认情况下为 true(count) 当 facetlimit 值为负数时 ,默认 facetsort= false(index,lex)
13 facetlimit
限制 Facet 字段返回的结果条数 默认值为 100 如果此值为负数 , 表示不限制
14 facetoffset
返回结果集的偏移量 , 默认为 0 它与 facetlimit 配合使用可以达到分页的效果
15 facetmincount
限制了 Facet 字段值的最小 count, 默认为 0 合理设置该参数可以将用户的关注点集中在少数比较热门的领域
16 facetmissing
默认为 ””, 如果设置为 true 或者 on, 那么将统计那些该 Facet 字段值为 null 的记录
17 facetmethod
取值为 enum 或 fc, 默认为 fc 该字段表示了两种 Facet 的算法 , 与执行效率相关
enum 适用于字段值比较少的情况 , 比如字段类型为布尔型 , 或者字段表示中国的所有省份Solr 会遍历该字段的所有取值 , 并从 filterCache 里为每个值分配一个 filter( 这里要求 solrconfigxml 里对 filterCache 的设置足够大 ) 然后计算每个 filter 与主查询的交集
fc( 表示 Field Cache) 适用于字段取值比较多 , 但在每个文档里出现次数比较少的情况 Solr 会遍历所有的文档 , 在每个文档内搜索 Cache 内的值 , 如果找到就将 Cache 内该值的count 加 1
18 facetenumcacheminDf
当 facetmethod=enum 时 , 此参数其作用 ,minDf 表示 minimum document frequency 也就是文档内出现某个关键字的最少次数 该参数默认值为 0 设置该参数可以减少 filterCache 的内存消耗 , 但会增加总的查询时间 ( 计算交集的时间增加了 ) 如果设置该值的话 ,官方文档建议优先尝试 25-50 内的值
2 Date Facet
日期类型的字段在文档中很常见 , 如商品上市时间 , 货物出仓时间 , 书籍上架时间等等 某些情况下需要针对这些字段进行 Facet 不过时间字段的取值有无限性 , 用户往往关心的不是某个时间点而是某个时间段内的查询统计结果 Solr 为日期字段提供了更为方便的查询统计方式 当然 , 字段的类型必须是 DateField( 或其子类型 )
需要注意的是 , 使用 Date Facet 时 , 字段名 , 起始时间 , 结束时间 , 时间间隔这 4 个参数都必须提供
与 Field Facet 类似 ,Date Facet 也可以对多个字段进行 Facet 并且针对每个字段都可以单独设置参数
21 facetdate
该参数表示需要进行 Date Facet 的字段名 , 与 facetfield 一样 , 该参数可以被设置多次 , 表示对多个字段进行 Date Facet
22 facetdatestart
起始时间 , 时间的一般格式为 ” 1995-12-31T23:59:59Z”, 另外可以使用 ”NOW”,”YEAR”,”MONTH” 等等 , 具体格式可以参考 orgapachesolrschema DateField 的 java doc
23 facetdateend
结束时间
24 facetdategap
时间间隔 如果 start 为 2009-1-1,end 为 2010-1-1gap 设置为 ”+1MONTH” 表示间隔1 个月 , 那么将会把这段时间划分为 12 个间隔段 注意 ”+” 因为是特殊字符所以应该用 ”%2B” 代替
25 facetdatehardend
取值可以为 true|false, 默认为 false 它表示 gap 迭代到 end 处采用何种处理 举例说明 start 为 2009-1-1,end 为 2009-12-25,gap 为 ”+1MONTH”,hardend 为 false 的话最后一个时间段为 2009-12-1 至 2010-1-1;hardend 为 true 的话最后一个时间段为 2009-12-1 至 2009-12-25
26 facetdateother
取值范围为 before|after|between|none|all, 默认为 none
before 会对 start 之前的值做统计
after 会对 end 之后的值做统计
between 会对 start 至 end 之间所有值做统计 如果 hardend 为 true 的话 , 那么该值就是各个时间段统计值的和
none 表示该项禁用
all 表示 before,after,all 都会统计
举例 :
&facet=on
&facetdate=date
&facetdatestart=2009-1-1T0:0:0Z
&facetdateend=2010-1-1T0:0:0Z
&facetdategap=%2B1MONTH
&facetdateother=all
返回结果 :
3 Facet Query
Facet Query 利用类似于 filter query 的语法提供了更为灵活的 Facet 通过 facetquery 参数 , 可以对任意字段进行筛选
例 1:
&facet=on
&facetquery=date:[2009-1-1T0:0:0Z TO 2009-2-1T0:0:0Z]
&facetquery=date:[2009-4-1T0:0:0Z TO 2009-5-1T0:0:0Z]
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries">
<int name="date:[2009-1-1T0:0:0Z TO 2009-2-1T0:0:0Z]">5</int>
<int name="date:[2009-4-1T0:0:0Z TO 2009-5-1T0:0:0Z]">3</int>
</lst>
<lst name="facet_fields"/>
<lst name="facet_dates"/></lst>
例 2:返回结果 :
例 3:
&facet=on
&facetquery=cpu:[A TO G]
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries">
<int name="cpu:[A TO G]">11</int>
</lst>
<lst name="facet_fields"/>
<lst name="facet_dates"/>
</lst>
4 key 操作符
可以用 key 操作符为 Facet 字段取一个别名
例 :
&facet=on
&facetfield={!key=中央处理器}cpu
&facetfield={!key=显卡}videoCard
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="中央处理器">
<int name="Intel 酷睿2双核 T6600">48</int>
<int name="Intel 奔腾双核 T4300">28</int>
<int name="Intel 酷睿2双核 P8700">18</int>
<int name="Intel 酷睿2双核 T6570">11</int>
<int name="Intel 酷睿2双核 T6670">11</int>
<int name="Intel 奔腾双核 T4400">9</int>
<int name="Intel 酷睿2双核 P7450">9</int>
<int name="Intel 酷睿2双核 T5870">8</int>
<int name="Intel 赛扬双核 T3000">7</int>
<int name="Intel 奔腾双核 SU4100">6</int>
<int name="Intel 酷睿2双核 P8400">6</int>
<int name="Intel 酷睿2双核 SU7300">5</int>
<int name="Intel 酷睿 i3 330M">4</int>
</lst>
<lst name="显卡">
<int name="ATI Mobility Radeon HD 4">63</int>
<int name="NVIDIA GeForce G 105M">24</int>
<int name="NVIDIA GeForce GT 240M">21</int>
<int name="NVIDIA GeForce G 103M">8</int>
<int name="NVIDIA GeForce GT 220M">8</int>
<int name="NVIDIA GeForce 9400M G">7</int>
<int name="NVIDIA GeForce G 210M">6</int>
</lst>
</lst>
<lst name="facet_dates"/>
</lst>
5 tag 操作符和 ex 操作符
当查询使用 filter query 的时候 , 如果 filter query 的字段正好是 Facet 字段 , 那么查询结果往往被限制在某一个值内
例 :
&fq=screenSize:14
&facet=on
&facetfield=screenSize
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name=" screenSize">
<int name="140">107</int>
<int name="102">0</int>
<int name="111">0</int>
<int name="116">0</int>
<int name="121">0</int>
<int name="131">0</int>
<int name="133">0</int>
<int name="141">0</int>
<int name="154">0</int>
<int name="155">0</int>
<int name="156">0</int>
<int name="160">0</int>
<int name="170">0</int>
<int name="173">0</int>
</lst>
</lst>
<lst name="facet_dates"/>
</lst>
可以看到 , 屏幕尺寸 (screenSize) 为 14 寸的产品共有 107 件 , 其它尺寸的产品的数目都是0, 这是因为在 filter 里已经限制了 screenSize:14 这样 , 查询结果中 , 除了 screenSize=14 的这一项之外 , 其它项目没有实际的意义
有些时候 , 用户希望把结果限制在某一范围内 , 又希望查看该范围外的概况 比如上述情况 ,既要把查询结果限制在 14 寸屏的笔记本 , 又想查看一下其它屏幕尺寸的笔记本有多少产品 这个时候需要用到 tag 和 ex 操作符
tag 就是把一个 filter 标记起来 ,ex(exclude) 是在 Facet 的时候把标记过的 filter 排除在外
例 :
&fq={!tag=aa}screenSize:14
&facet=on
&facetfield={!ex=aa}screenSize
返回结果 :
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name=" screenSize">
<int name="140">107</int>
<int name="141">40</int>
<int name="133">34</int>
<int name="156">22</int>
<int name="154">8</int>
<int name="116">6</int>
<int name="121">5</int>
<int name="160">5</int>
<int name="155">3</int>
<int name="170">3</int>
<int name="173">3</int>
<int name="102">1</int>
<int name="111">1</int>
<int name="131">1</int>
</lst>
</lst>
<lst name="facet_dates"/>
</lst>
这样其它屏幕尺寸的统计信息就有意义了
五 SolrJ 对 Facet 的支持
SolrServer server = getSolrServer();//获取SolrServer
SolrQuery query = new SolrQuery();//建立一个新的查询
querysetQuery(":");
querysetFacet(true);//设置facet=on
queryaddFacetField(new String[] { "cpu", "videoCard" });//设置需要facet的字段
querysetFacetLimit(10);//限制facet返回的数量
QueryResponse response = serverquery(query);
List<FacetField> facets = responsegetFacetFields();//返回的facet列表
for (FacetField facet : facets) {
Systemoutprintln(facetgetName());
Systemoutprintln("----------------");
List<Count> counts = facetgetValues();
for (Count count : counts) {
Systemoutprintln(countgetName() + ":" + countgetCount());
}
Systemoutprintln();
}
(1)操作系统的选择操作系统一般使用开源版的RedHat、Centos或者Debian作为底层的构建平台,要根据大数据平台所要搭建的数据分析工具可以支持的系统,正确的选择操作系统的版本。
(2)搭建Hadoop集群Hadoop作为一个开发和运行处理大规模数据的软件平台,实现了在大量的廉价计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心的设计是HDFS和MapReduce,HDFS是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,适用于那些有着超大数据集的应用程序;MapReduce是一套可以从海量的数据中提取数据最后返回结果集的编程模型。在生产实践应用中,Hadoop非常适合应用于大数据存储和大数据的分析应用,适合服务于几千台到几万台大的服务器的集群运行,支持PB级别的存储容量。Hadoop家族还包含各种开源组件,比如Yarn,Zookeeper,Hbase,Hive,Sqoop,Impala,Spark等。使用开源组件的优势显而易见,活跃的社区会不断的迭代更新组件版本,使用的人也会很多,遇到问题会比较容易解决,同时代码开源,高水平的数据开发工程师可结合自身项目的需求对代码进行修改,以更好的为项目提供服务。
(3)选择数据接入和预处理工具面对各种来源的数据,数据接入就是将这些零散的数据整合在一起,综合起来进行分析。数据接入主要包括文件日志的接入、数据库日志的接入、关系型数据库的接入和应用程序等的接入,数据接入常用的工具有Flume,Logstash,NDC(网易数据运河系统),sqoop等。对于实时性要求比较高的业务场景,比如对存在于社交网站、新闻等的数据信息流需要进行快速的处理反馈,那么数据的接入可以使用开源的Strom,Sparkstreaming等。当需要使用上游模块的数据进行计算、统计和分析的时候,就需要用到分布式的消息系统,比如基于发布/订阅的消息系统kafka。还可以使用分布式应用程序协调服务Zookeeper来提供数据同步服务,更好的保证数据的可靠和一致性。数据预处理是在海量的数据中提取出可用特征,建立宽表,创建数据仓库,会使用到HiveSQL,SparkSQL和Impala等工具。随着业务量的增多,需要进行训练和清洗的数据也会变得越来越复杂,可以使用azkaban或者oozie作为工作流调度引擎,用来解决有多个hadoop或者spark等计算任务之间的依赖关系问题。
(4)数据存储除了Hadoop中已广泛应用于数据存储的HDFS,常用的还有分布式、面向列的开源数据库Hbase,HBase是一种key/value系统,部署在HDFS上,与Hadoop一样,HBase的目标主要是依赖横向扩展,通过不断的增加廉价的商用服务器,增加计算和存储能力。同时hadoop的资源管理器Yarn,可以为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一等方面带来巨大的好处。Kudu是一个围绕Hadoop生态圈建立的存储引擎,Kudu拥有和Hadoop生态圈共同的设计理念,可以运行在普通的服务器上,作为一个开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力。Redis是一种速度非常快的非关系型数据库,可以将存储在内存中的键值对数据持久化到硬盘中,可以存储键与5种不同类型的值之间的映射。
(5)选择数据挖掘工具Hive可以将结构化的数据映射为一张数据库表,并提供HQL的查询功能,它是建立在Hadoop之上的数据仓库基础架构,是为了减少MapReduce编写工作的批处理系统,它的出现可以让那些精通SQL技能、但是不熟悉MapReduce、编程能力较弱和不擅长Java的用户能够在HDFS大规模数据集上很好的利用SQL语言查询、汇总、分析数据。Impala是对Hive的一个补充,可以实现高效的SQL查询,但是Impala将整个查询过程分成了一个执行计划树,而不是一连串的MapReduce任务,相比Hive有更好的并发性和避免了不必要的中间sort和shuffle。Spark可以将Job中间输出结果保存在内存中,不需要读取HDFS,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Solr是一个运行在Servlet容器的独立的企业级搜索应用的全文搜索服务器,用户可以通过http请求,向搜索引擎服务器提交一定格式的XML,生成索引,或者通过HTTPGET操作提出查找请求,并得到XML格式的返回结果。还可以对数据进行建模分析,会用到机器学习相关的知识,常用的机器学习算法,比如贝叶斯、逻辑回归、决策树、神经网络、协同过滤等。
(6)数据的可视化以及输出API对于处理得到的数据可以对接主流的BI系统,比如国外的Tableau、Qlikview、PowrerBI等,国内的SmallBI和新兴的网易有数(可免费试用)等,将结果进行可视化,用于决策分析;或者回流到线上,支持线上业务的发展。成熟的搭建一套大数据分析平台不是一件简单的事情,本身就是一项复杂的工作,在这过程中需要考虑的因素有很多,比如:稳定性,可以通过多台机器做数据和程序运行的备份,但服务器的质量和预算成本相应的会限制平台的稳定性;可扩展性:大数据平台部署在多台机器上,如何在其基础上扩充新的机器是实际应用中经常会遇到的问题;安全性:保障数据安全是大数据平台不可忽视的问题,在海量数据的处理过程中,如何防止数据的丢失和泄漏一直是大数据安全领域的研究热点。
0条评论