大數(shù)據(jù)我們都知道hadoop,可是還會(huì)各種各樣的技術(shù)進(jìn)入我們的視野:Spark,Storm,impala,讓我們都反映不過(guò)來(lái)。為了能夠更好的架構(gòu)大數(shù)據(jù)項(xiàng)目,這里整理一下,供技術(shù)人員,項(xiàng)目經(jīng)理,架構(gòu)師選擇合適的技術(shù),了解大數(shù)據(jù)各種技術(shù)之間的關(guān)系,選擇合適的語(yǔ)言。
我們可以帶著下面問(wèn)題來(lái)閱讀本文章:
1.hadoop都包含什么技術(shù)
2.Cloudera公司與hadoop的關(guān)系是什么,都有什么產(chǎn)品,產(chǎn)品有什么特性
3.Spark與hadoop的關(guān)聯(lián)是什么?
4.Storm與hadoop的關(guān)聯(lián)是什么?
hadoop家族
創(chuàng)始人:Doug Cutting
整個(gè)Hadoop家族由以下幾個(gè)子項(xiàng)目組成:
Hadoop Common:
Hadoop體系最底層的一個(gè)模塊,為Hadoop各子項(xiàng)目提供各 種工具,如:配置文件和日志操作等。詳細(xì)可查看
Hadoop技術(shù)內(nèi)幕 深入解析HADOOP COMMON和HDFS架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理大全1-9章
HDFS:
是Hadoop應(yīng)用程序中主要的分布式儲(chǔ)存系統(tǒng), HDFS集群包含了一個(gè)NameNode(主節(jié)點(diǎn)),這個(gè)節(jié)點(diǎn)負(fù)責(zé)管理所有文件系統(tǒng)的元數(shù)據(jù)及存儲(chǔ)了真實(shí)數(shù)據(jù)的DataNode(數(shù)據(jù)節(jié)點(diǎn),可以有很多)。HDFS針對(duì)海量數(shù)據(jù)所設(shè)計(jì),所以相比傳統(tǒng)文件系統(tǒng)在大批量小文件上的優(yōu)化,HDFS優(yōu)化的則是對(duì)小批量大型文件的訪問(wèn)和存儲(chǔ)。下面為詳細(xì)資料:
什么是HDFS及HDFS架構(gòu)設(shè)計(jì)
HDFS+MapReduce+Hive快速入門(mén)
Hadoop2.2.0中HDFS為何具有高可用性
Java創(chuàng)建hdfs文件實(shí)例
MapReduce:
是一個(gè)軟件框架,用以輕松編寫(xiě)處理海量(TB級(jí))數(shù)據(jù)的并行應(yīng)用程序,以可靠和容錯(cuò)的方式連接大型集群中上萬(wàn)個(gè)節(jié)點(diǎn)(商用硬件)。
詳細(xì)可查看:
Hadoop簡(jiǎn)介(1):什么是Map/Reduce
Hadoop MapReduce基礎(chǔ)
MapReduce工作原理講解
手把手交你寫(xiě)Mapreduce程序?qū)嵗⒉渴鹪贖adoop2.2.0上運(yùn)行
Hive:
Apache Hive是Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),促進(jìn)了數(shù)據(jù)的綜述(將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表)、即席查詢以及存儲(chǔ)在Hadoop兼容系統(tǒng)中的大型數(shù)據(jù)集分析。Hive提供完整的SQL查詢功能——HiveQL語(yǔ)言,同時(shí)當(dāng)使用這個(gè)語(yǔ)言表達(dá)一個(gè)邏輯變得低效和繁瑣時(shí),HiveQL還允許傳統(tǒng)的Map/Reduce程序員使用自己定制的Mapper和Reducer。hive類(lèi)似CloudBase,基于hadoop分布式計(jì)算平臺(tái)上的提供data warehouse的sql功能的一套軟件。使得存儲(chǔ)在hadoop里面的海量數(shù)據(jù) 的匯總,即席查詢簡(jiǎn)單化。
詳細(xì)可查看:
Hive的起源及詳細(xì)介紹
hive詳解視頻
Pig:
Apache Pig是一個(gè)用于大型數(shù)據(jù)集分析的平臺(tái),它包含了一個(gè)用于數(shù)據(jù)分析應(yīng)用的高級(jí)語(yǔ)言以及評(píng)估這些應(yīng)用的基礎(chǔ)設(shè)施。Pig應(yīng)用的閃光特性在于它們的結(jié)構(gòu)經(jīng)得起大量的并行,也就是說(shuō)讓它們支撐起非常大的數(shù)據(jù)集。Pig的基礎(chǔ)設(shè)施層包含了產(chǎn)生Map-Reduce任務(wù)的編譯器。Pig的語(yǔ)言層當(dāng)前包含了一個(gè)原生語(yǔ)言——Pig Latin,開(kāi)發(fā)的初衷是易于編程和保證可擴(kuò)展性。
Pig是SQL-like語(yǔ)言,是在MapReduce上構(gòu)建的一種高級(jí)查詢語(yǔ)言,把一些運(yùn)算編譯進(jìn)MapReduce模型的Map和Reduce中,并且用戶可以定義自己的功能。Yahoo網(wǎng)格運(yùn)算部門(mén)開(kāi)發(fā)的又一個(gè)克隆Google的項(xiàng)目Sawzall。
詳細(xì)可查看:
pig入門(mén)簡(jiǎn)單操作及語(yǔ)法包括支持?jǐn)?shù)據(jù)類(lèi)型、函數(shù)、關(guān)鍵字、操作符等
hadoop家族Pig和Hive有什么不同?
HBase:
Apache HBase是Hadoop數(shù)據(jù)庫(kù),一個(gè)分布式、可擴(kuò)展的大數(shù)據(jù)存儲(chǔ)。它提供了大數(shù)據(jù)集上隨機(jī)和實(shí)時(shí)的讀/寫(xiě)訪問(wèn),并針對(duì)了商用服務(wù)器集群上的大型表格做出優(yōu)化——上百億行,上千萬(wàn)列。其核心是Google Bigtable論文的開(kāi)源實(shí)現(xiàn),分布式列式存儲(chǔ)。就像Bigtable利用GFS(Google File System)提供的分布式數(shù)據(jù)存儲(chǔ)一樣,它是Apache Hadoop在HDFS基礎(chǔ)上提供的一個(gè)類(lèi)Bigatable。
詳細(xì)可查看:
hbase與傳統(tǒng)數(shù)據(jù)的區(qū)別
HBASE分布式安裝視頻下載分享
ZooKeeper:
Zookeeper是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn)。它是一個(gè)針對(duì)大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng),提供的功能包括:配置維護(hù)、名字服務(wù)、 分布式同步、組服務(wù)等。ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。
詳細(xì)可查看:
什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具體作用是什么
Avro:
Avro是doug cutting主持的RPC項(xiàng)目,有點(diǎn)類(lèi)似Google的protobuf和Facebook的thrift。avro用來(lái)做以后hadoop的RPC,使hadoop的RPC模塊通信速度更快、數(shù)據(jù)結(jié)構(gòu)更緊湊。
Sqoop:
Sqoop是一個(gè)用來(lái)將Hadoop和關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)相互轉(zhuǎn)移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)導(dǎo)入Hadoop的HDFS中,也可以將HDFS中數(shù)據(jù)導(dǎo)入關(guān)系型數(shù)據(jù)庫(kù)中。
詳細(xì)可查看:
Sqoop詳細(xì)介紹包括:sqoop命令,原理,流程
Mahout:
Apache Mahout是個(gè)可擴(kuò)展的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫(kù),當(dāng)前Mahout支持主要的4個(gè)用例:
推薦挖掘:搜集用戶動(dòng)作并以此給用戶推薦可能喜歡的事物。
聚集:收集文件并進(jìn)行相關(guān)文件分組。
分類(lèi):從現(xiàn)有的分類(lèi)文檔中學(xué)習(xí),尋找文檔中的相似特征,并為無(wú)標(biāo)簽的文檔進(jìn)行正確的歸類(lèi)。
頻繁項(xiàng)集挖掘:將一組項(xiàng)分組,并識(shí)別哪些個(gè)別項(xiàng)會(huì)經(jīng)常一起出現(xiàn)。
Cassandra:
Apache Cassandra是一個(gè)高性能、可線性擴(kuò)展、高有效性數(shù)據(jù)庫(kù),可以運(yùn)行在商用硬件或云基礎(chǔ)設(shè)施上打造完美的任務(wù)關(guān)鍵性數(shù)據(jù)平臺(tái)。在橫跨數(shù)據(jù)中心的復(fù)制中,Cassandra同類(lèi)最佳,為用戶提供更低的延時(shí)以及更可靠的災(zāi)難備份。通過(guò)log-structured update、反規(guī)范化和物化視圖的強(qiáng)支持以及強(qiáng)大的內(nèi)置緩存,Cassandra的數(shù)據(jù)模型提供了方便的二級(jí)索引(column indexe)。
Chukwa:
Apache Chukwa是個(gè)開(kāi)源的數(shù)據(jù)收集系統(tǒng),用以監(jiān)視大型分布系統(tǒng)。建立于HDFS和Map/Reduce框架之上,繼承了Hadoop的可擴(kuò)展性和穩(wěn)定性。Chukwa同樣包含了一個(gè)靈活和強(qiáng)大的工具包,用以顯示、監(jiān)視和分析結(jié)果,以保證數(shù)據(jù)的使用達(dá)到最佳效果。
Ambari:
Apache Ambari是一個(gè)基于web的工具,用于配置、管理和監(jiān)視Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同樣還提供了集群狀況儀表盤(pán),比如heatmaps和查看MapReduce、Pig、Hive應(yīng)用程序的能力,以友好的用戶界面對(duì)它們的性能特性進(jìn)行診斷。
HCatalog
Apache HCatalog是Hadoop建立數(shù)據(jù)的映射表和存儲(chǔ)管理服務(wù),它包括:
提供一個(gè)共享模式和數(shù)據(jù)類(lèi)型機(jī)制。
提供一個(gè)抽象表,這樣用戶就不需要關(guān)注數(shù)據(jù)存儲(chǔ)的方式和地址。
為類(lèi)似Pig、MapReduce及Hive這些數(shù)據(jù)處理工具提供互操作性。
------------------------------------------------------------------------------------------------------------------------------------------------
Chukwa:
Chukwa是基于Hadoop的大集群監(jiān)控系統(tǒng),由yahoo貢獻(xiàn)。
------------------------------------------------------------------------------------------------------------------------------------------------
Cloudera系列產(chǎn)品:
創(chuàng)始組織:Cloudera公司
1.Cloudera Manager:
有四大功能
(1)管理
(2)監(jiān)控
(3)診斷
(4)集成
Cloudera Manager四大功能
2.Cloudera CDH:英文名稱(chēng):CDH (Cloudera's Distribution, including Apache Hadoop)
Cloudera對(duì)hadoop做了相應(yīng)的改變。
Cloudera公司的發(fā)行版,我們將該版本稱(chēng)為CDH(Cloudera Distribution Hadoop)。
詳細(xì)可以查看
Cloudera Hadoop什么是CDH及CDH版本介紹
相關(guān)資料
CDH3實(shí)戰(zhàn)Hadoop(HDFS) , HBase , Zookeeper , Flume , Hive
CDH4安裝實(shí)踐HDFS、HBase、Zookeeper、Hive、Oozie、Sqoop
Hadoop CDH四種安裝方式總結(jié)及實(shí)例指導(dǎo)
hadoop的CDH4及CDH5系列文檔下載分享
3.Cloudera Flume
Flume是Cloudera提供的日志收集系統(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);
Flume是Cloudera提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接受方(可定制)的能力。
Flume最早是Cloudera提供的日志收集系統(tǒng),目前是Apache下的一個(gè)孵化項(xiàng)目,F(xiàn)lume支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接受方(可定制)的能力 Flume提供了從console(控制臺(tái))、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系統(tǒng),支持TCP和UDP等2種模式),exec(命令執(zhí)行)等數(shù)據(jù)源上收集數(shù)據(jù)的能力。
Flume采用了多Master的方式。為了保證配置數(shù)據(jù)的一致性,F(xiàn)lume[1]引入了ZooKeeper,用于保存配置數(shù)據(jù),ZooKeeper本身可保證配置數(shù)據(jù)的一致性和高可用,另外,在配置數(shù)據(jù)發(fā)生變化時(shí),ZooKeeper可以通知Flume Master節(jié)點(diǎn)。Flume Master間使用gossip協(xié)議同步數(shù)據(jù)。
詳細(xì)可查看:
什么是 flume 日志收集,flume的特性
什么是 flume 日志收集,flume的原理是什么,flume會(huì)遇到什么問(wèn)題
4.Cloudera Impala
什么是impala,如何安裝使用Impala
5.Cloudera hue
Hue是cdh專(zhuān)門(mén)的一套web管理器,它包括3個(gè)部分hue ui,hue server,hue db。hue提供所有的cdh組件的shell界面的接口。你可以在hue編寫(xiě)mr,查看修改hdfs的文件,管理hive的元數(shù)據(jù),運(yùn)行Sqoop,編寫(xiě)Oozie工作流等大量工作。
詳細(xì)可查看:
cloudera hue安裝及Oozie的安裝
什么是Oozie?Oozie簡(jiǎn)介
Cloudera Hue 使用經(jīng)驗(yàn)分享,遇到的問(wèn)題及解決方案
------------------------------------------------------------------------------------------------------------------------------------------------
Spark
創(chuàng)始組織:加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms, Machines, and People Lab) 開(kāi)發(fā)
Spark 是一種與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說(shuō),Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語(yǔ)言中實(shí)現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì) Hadoop 的補(bǔ)充,可以在 Hadoo 文件系統(tǒng)中并行運(yùn)行。通過(guò)名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms, Machines, and People Lab) 開(kāi)發(fā),可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
可以詳細(xì)了解
科普Spark,Spark是什么,如何使用Spark(1)
科普Spark,Spark核心是什么,如何使用Spark(2)
優(yōu)酷土豆用Spark完善大數(shù)據(jù)分析
Hadoop新成員Hadoop-Cloudera公司將Spark加入Hadoop
Storm
創(chuàng)始人:Twitter
Twitter將Storm正式開(kāi)源了,這是一個(gè)分布式的、容錯(cuò)的實(shí)時(shí)計(jì)算系統(tǒng),它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType開(kāi)發(fā)的實(shí)時(shí)處理系統(tǒng),BackType現(xiàn)在已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用Clojure寫(xiě)的。
詳細(xì)可以了解:
storm入門(mén)介紹
Storm-0.9.0.1安裝部署 指導(dǎo)
總體認(rèn)識(shí)storm包括概念,場(chǎng)景,組成
大數(shù)據(jù)架構(gòu)師:hadoop、Storm改選哪一個(gè)?
大數(shù)據(jù)架構(gòu):flume-ng+Kafka+Storm+HDFS 實(shí)時(shí)系統(tǒng)組合
先來(lái)看張表,了解下典型的NoSQL數(shù)據(jù)庫(kù)的分類(lèi)
臨時(shí)性鍵值存儲(chǔ) | 永久性鍵值存儲(chǔ) | 面向文檔的數(shù)據(jù)庫(kù) | 面向列的數(shù)據(jù)庫(kù) |
Memcached | Tokyo Tyrant | MangoDB | Cassandra |
Redis | Flare | CouchDB | HBase |
ROMA | HyperTable | ||
Redis |
1. CouchDB
最佳應(yīng)用場(chǎng)景:適用于數(shù)據(jù)變化較少,執(zhí)行預(yù)定義查詢,進(jìn)行數(shù)據(jù)統(tǒng)計(jì)的應(yīng)用程序。適用于需要提供數(shù)據(jù)版本支持的應(yīng)用程序。
例如: CRM、CMS系統(tǒng)。 master-master復(fù)制對(duì)于多站點(diǎn)部署是非常有用的。
(編注2:master-master復(fù)制:是一種數(shù)據(jù)庫(kù)同步方法,允許數(shù)據(jù)在一組計(jì)算機(jī)之間共享數(shù)據(jù),并且可以通過(guò)小組中任意成員在組內(nèi)進(jìn)行數(shù)據(jù)更新。)
2. Redis
最佳應(yīng)用場(chǎng)景:適用于數(shù)據(jù)變化快且數(shù)據(jù)庫(kù)大小可遇見(jiàn)(適合內(nèi)存容量)的應(yīng)用程序。
例如:股票價(jià)格、數(shù)據(jù)分析、實(shí)時(shí)數(shù)據(jù)搜集、實(shí)時(shí)通訊。
(編注3:Master-slave復(fù)制:如果同一時(shí)刻只有一臺(tái)服務(wù)器處理所有的復(fù)制請(qǐng)求,這被稱(chēng)為 Master-slave復(fù)制,通常應(yīng)用在需要提供高可用性的服務(wù)器集群。)
3. MongoDB
最佳應(yīng)用場(chǎng)景:適用于需要?jiǎng)討B(tài)查詢支持;需要使用索引而不是 map/reduce功能;需要對(duì)大數(shù)據(jù)庫(kù)有性能要求;需要使用 CouchDB但因?yàn)閿?shù)據(jù)改變太頻繁而占滿內(nèi)存的應(yīng)用程序。
例如:你本打算采用 MySQL或 PostgreSQL,但因?yàn)樗鼈儽旧碜詭У念A(yù)定義欄讓你望而卻步。
4. Riak
最佳應(yīng)用場(chǎng)景:適用于想使用類(lèi)似 Cassandra(類(lèi)似Dynamo)數(shù)據(jù)庫(kù)但無(wú)法處理 bloat及復(fù)雜性的情況。適用于你打算做多站點(diǎn)復(fù)制,但又需要對(duì)單個(gè)站點(diǎn)的擴(kuò)展性,可用性及出錯(cuò)處理有要求的情況。
例如:銷(xiāo)售數(shù)據(jù)搜集,工廠控制系統(tǒng);對(duì)宕機(jī)時(shí)間有嚴(yán)格要求;可以作為易于更新的 web服務(wù)器使用。
5. Membase
最佳應(yīng)用場(chǎng)景:適用于需要低延遲數(shù)據(jù)訪問(wèn),高并發(fā)支持以及高可用性的應(yīng)用程序
例如:低延遲數(shù)據(jù)訪問(wèn)比如以廣告為目標(biāo)的應(yīng)用,高并發(fā)的 web 應(yīng)用比如網(wǎng)絡(luò)游戲(例如 Zynga)
6. Neo4j
最佳應(yīng)用場(chǎng)景:適用于圖形一類(lèi)數(shù)據(jù)。這是 Neo4j與其他nosql數(shù)據(jù)庫(kù)的最顯著區(qū)別
例如:社會(huì)關(guān)系,公共交通網(wǎng)絡(luò),地圖及網(wǎng)絡(luò)拓譜
7. Cassandra
最佳應(yīng)用場(chǎng)景:當(dāng)使用寫(xiě)操作多過(guò)讀操作(記錄日志)如果每個(gè)系統(tǒng)組建都必須用 Java編寫(xiě)(沒(méi)有人因?yàn)檫x用 Apache的軟件被解雇)
例如:銀行業(yè),金融業(yè)(雖然對(duì)于金融交易不是必須的,但這些產(chǎn)業(yè)對(duì)數(shù)據(jù)庫(kù)的要求會(huì)比它們更大)寫(xiě)比讀更快,所以一個(gè)自然的特性就是實(shí)時(shí)數(shù)據(jù)分析
8. HBase
(配合 ghshephard使用)
最佳應(yīng)用場(chǎng)景:適用于偏好BigTable:)并且需要對(duì)大數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)訪問(wèn)的場(chǎng)合。
例如: Facebook消息數(shù)據(jù)庫(kù)(更多通用的用例即將出現(xiàn))
編注4:Thrift 是一種接口定義語(yǔ)言,為多種其他語(yǔ)言提供定義和創(chuàng)建服務(wù),由Facebook開(kāi)發(fā)并開(kāi)源。
當(dāng)然,所有的系統(tǒng)都不只具有上面列出的這些特性。這里我僅僅根據(jù)自己的觀點(diǎn)列出一些我認(rèn)為的重要特性。與此同時(shí),技術(shù)進(jìn)步是飛速的,所以上述的內(nèi)容肯定需要不斷更新。我會(huì)盡我所能地更新這個(gè)列表。
//模板路徑
String modelPath="D:\Excel.xls"
//sheet的名字
String sheetName="sheet1";
獲取Excel模板對(duì)象
try {
File file = new File(modelPath);
if(!file.exists()){
System.out.println("模板文件:"+modelPath+"不存在!");
}
fs = new POIFSFileSystem(new FileInputStream(file));
wb = new HSSFWorkbook(fs);
sheet = wb.getSheet(sheetName);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//從heet中獲取行數(shù)
int rowNum = sheet.getLastRowNum();
//獲取行里面的總列數(shù)
row = sheet.getRow(i); //i:第I行
// 獲取行里面的總列數(shù)
int columnNum = 0;
if(row!=null){
columnNum = row.getPhysicalNumberOfCells();
}
//獲取單元格的值
HSSFCell cell = sheet.getRow(i).getCell(j); //第i行,第j列
String cellValue = cell.getStringCellValue();
//替換數(shù)據(jù) 本人的數(shù)據(jù)存放在Map中
for (Entry<String, Object> entry : param.entrySet()) {
String key = entry.getKey();
if(key.equals(cellValue)){
String value = entry.getValue().toString();
setCellStrValue(i, j, value);//設(shè)置第i行,第j列的值為Value
}
}
完整代碼:
/**
* 替換Excel模板中的數(shù)據(jù)
* @param sheetName Sheet名字
* @param modelPath 模板路徑
* @param param 需要替換的數(shù)據(jù)
* @return
* @author 劉澤中
* @Date: 2015年12月11日
*/
public HSSFWorkbook replaceExcel(String sheetName,String modelPath,Map<String, Object> param){
//獲取所讀取excel模板的對(duì)象
try {
File file = new File(modelPath);
if(!file.exists()){
System.out.println("模板文件:"+modelPath+"不存在!");
}
fs = new POIFSFileSystem(new FileInputStream(file));
wb = new HSSFWorkbook(fs);
sheet = wb.getSheet(sheetName);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
replaceExcelDate(param);
return wb;
}
/**
* 根據(jù) Map中的數(shù)據(jù)替換Excel模板中指定數(shù)據(jù)
* @param param
* @author 劉澤中
* @Date: 2015年12月11日
*/
public void replaceExcelDate(Map<String, Object> param){
// 獲取行數(shù)
int rowNum = sheet.getLastRowNum();
for (int i = 0; i < rowNum; i++) {
row = sheet.getRow(i);
// 獲取行里面的總列數(shù)
int columnNum = 0;
if(row!=null){
columnNum = row.getPhysicalNumberOfCells();
}
for (int j = 0; j < columnNum; j++) {
HSSFCell cell = sheet.getRow(i).getCell(j);
String cellValue = cell.getStringCellValue();
for (Entry<String, Object> entry : param.entrySet()) {
String key = entry.getKey();
if(key.equals(cellValue)){
String value = entry.getValue().toString();
setCellStrValue(i, j, value);
}
}
}
}
}
/**
* 設(shè)置字符串類(lèi)型的數(shù)據(jù)
* @param rowIndex--行值 從0開(kāi)始
* @param cellnum--列值 從0開(kāi)始
* @param value--字符串類(lèi)型的數(shù)據(jù)
*
* @author 劉澤中
* @Date: 2015年12月11日
*/
public void setCellStrValue(int rowIndex, int cellnum, String value) {
HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
cell.setCellValue(value);
}
注:80端口要是被占用了就啟動(dòng)不了的,如果被占用可以改成7160之類(lèi)的
再查找ServerName
改成
ServerName localhost:80
就修改這2個(gè)地方就完成了,可以啟動(dòng)了
2、安裝tomcat-connectors-1.2.40-src
CentOS環(huán)境下整合Apache和Tomcat
轉(zhuǎn)載:http://www.aiplaypc.com/111.html