❶ 大數據專業都需要學習哪些軟體啊
一、Phoenix
簡介:這是一個java中間層,可以讓開發者在Apache HBase上執行SQL查詢。Phoenix完全使用Java編寫,代碼位於GitHub上,並且提供了一個客戶端可嵌入的JDBC驅動。
Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其性能量級是毫秒,對於百萬級別的行數來說,其性能量級是秒。
Phoenix最值得關注的一些特性有:
❶嵌入式的JDBC驅動,實現了大部分的java.sql介面,包括元數據API❷可以通過多部行鍵或是鍵/值單元對列進行建模❸完善的查詢支持,可以使用多個謂詞以及優化的掃描鍵❹DDL支持:通過CREATE TABLE、DROP TABLE及ALTER TABLE來添加/刪除列❺版本化的模式倉庫:當寫入數據時,快照查詢會使用恰當的模式❻DML支持:用於逐行插入的UPSERT VALUES、用於相同或不同表之間大量數據傳輸的UPSERT ❼SELECT、用於刪除行的DELETE❽通過客戶端的批處理實現的有限的事務支持❾單表——還沒有連接,同時二級索引也在開發當中➓緊跟ANSI SQL標准
二、Stinger
簡介:原叫Tez,下一代Hive,Hortonworks主導開發,運行在YARN上的DAG計算框架。
某些測試下,Stinger能提升10倍左右的性能,同時會讓Hive支持更多的SQL,其主要優點包括:
❶讓用戶在Hadoop獲得更多的查詢匹配。其中包括類似OVER的字句分析功能,支持WHERE查詢,讓Hive的樣式系統更符合SQL模型。
❷優化了Hive請求執行計劃,優化後請求時間減少90%。改動了Hive執行引擎,增加單Hive任務的被秒處理記錄數。
❸在Hive社區中引入了新的列式文件格式(如ORC文件),提供一種更現代、高效和高性能的方式來儲存Hive數據。
❹引入了新的運行時框架——Tez,旨在消除Hive的延時和吞吐量限制。Tez通過消除不必要的task、障礙同步和對HDFS的讀寫作業來優化Hive job。這將優化Hadoop內部的執行鏈,徹底加速Hive負載處理。
三、Presto
簡介:Facebook開源的數據查詢引擎Presto ,可對250PB以上的數據進行快速地互動式分析。該項目始於 2012 年秋季開始開發,目前該項目已經在超過 1000 名 Facebook 雇員中使用,運行超過 30000 個查詢,每日數據在 1PB 級別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Rece 要好上 10 倍有多。
Presto 當前支持 ANSI SQL 的大多數特效,包括聯合查詢、左右聯接、子查詢以及一些聚合和計算函數;支持近似截然不同的計數(DISTINCT COUNT)等。
❷ python怎麼連接伺服器上的informix
用 PyODBC 吧。
❸ 做大數據分析系統Hadoop需要用哪些軟體
1、ApacheMesos
代碼託管地址:ApacheSVN
Mesos提供了高效、跨分布式應用程序和框架的資源隔離和共享,支持Hadoop、MPI、Hypertable、Spark等。
Mesos是Apache孵化器中的一個開源項目,使用ZooKeeper實現容錯復制,使用linuxContainers來隔離任務,支持多種資源計劃分配(內存和CPU)。提供Java、Python和C++APIs來開發新的並行應用程序,提供基於Web的用戶界面來提查看集群狀態。
2、HadoopYARN
代碼託管地址:ApacheSVN
YARN又被稱為MapRece2.0,借鑒Mesos,YARN提出了資源隔離解決方案Container,但是目前尚未成熟,僅僅提供Java虛擬機內存的隔離。
對比MapRece1.x,YARN架構在客戶端上並未做太大的改變,在調用API及介面上還保持大部分的兼容,然而在YARN中,開發人員使用ResourceManager、ApplicationMaster與NodeManager代替了原框架中核心的JobTracker和TaskTracker。其中ResourceManager是一個中心的服務,負責調度、啟動每一個Job所屬的ApplicationMaster,另外還監控ApplicationMaster的存在情況;NodeManager負責Container狀態的維護,並向RM保持心跳。ApplicationMaster負責一個Job生命周期內的所有工作,類似老的框架中JobTracker。
Hadoop上的實時解決方案
前面我們有說過,在互聯網公司中基於業務邏輯需求,企業往往會採用多種計算框架,比如從事搜索業務的公司:網頁索引建立用MapRece,自然語言處理用Spark等。
3、ClouderaImpala
代碼託管地址:GitHub
Impala是由Cloudera開發,一個開源的MassivelyParallelProcessing(MPP)查詢引擎。與Hive相同的元數據、SQL語法、ODBC驅動程序和用戶介面(HueBeeswax),可以直接在HDFS或HBase上提供快速、互動式SQL查詢。Impala是在Dremel的啟發下開發的,第一個版本發布於2012年末。
Impala不再使用緩慢的Hive+MapRece批處理,而是通過與商用並行關系資料庫中類似的分布式查詢引擎(由QueryPlanner、QueryCoordinator和QueryExecEngine三部分組成),可以直接從HDFS或者HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。
4、Spark
代碼託管地址:Apache
Spark是個開源的數據分析集群計算框架,最初由加州大學伯克利分校AMPLab開發,建立於HDFS之上。Spark與Hadoop一樣,用於構建大規模、低延時的數據分析應用。Spark採用Scala語言實現,使用Scala作為應用框架。
Spark採用基於內存的分布式數據集,優化了迭代式的工作負載以及互動式查詢。與Hadoop不同的是,Spark和Scala緊密集成,Scala像管理本地collective對象那樣管理分布式數據集。Spark支持分布式數據集上的迭代式任務,實際上可以在Hadoop文件系統上與Hadoop一起運行(通過YARN、Mesos等實現)。
5、Storm
代碼託管地址:GitHub
Storm是一個分布式的、容錯的實時計算系統,由BackType開發,後被Twitter捕獲。Storm屬於流處理平台,多用於實時計算並更新資料庫。Storm也可被用於「連續計算」(continuouscomputation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用於「分布式RPC」,以並行的方式運行昂貴的運算。
Hadoop上的其它解決方案
就像前文說,基於業務對實時的需求,各個實驗室發明了Storm、Impala、Spark、Samza等流實時處理工具。而本節我們將分享的是實驗室基於性能、兼容性、數據類型研究的開源解決方案,其中包括Shark、Phoenix、ApacheAccumulo、ApacheDrill、ApacheGiraph、ApacheHama、ApacheTez、ApacheAmbari。
6、Shark
代碼託管地址:GitHub
Shark,代表了「HiveonSpark」,一個專為Spark打造的大規模數據倉庫系統,兼容ApacheHive。無需修改現有的數據或者查詢,就可以用100倍的速度執行HiveQL。
Shark支持Hive查詢語言、元存儲、序列化格式及自定義函數,與現有Hive部署無縫集成,是一個更快、更強大的替代方案。
7、Phoenix
代碼託管地址:GitHub
Phoenix是構建在ApacheHBase之上的一個SQL中間層,完全使用Java編寫,提供了一個客戶端可嵌入的JDBC驅動。Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBasescan,並編排執行以生成標準的JDBC結果集。直接使用HBaseAPI、協同處理器與自定義過濾器,對於簡單查詢來說,其性能量級是毫秒,對於百萬級別的行數來說,其性能量級是秒。Phoenix完全託管在GitHub之上。
Phoenix值得關注的特性包括:1,嵌入式的JDBC驅動,實現了大部分的java.sql介面,包括元數據API;2,可以通過多個行鍵或是鍵/值單元對列進行建模;3,DDL支持;4,版本化的模式倉庫;5,DML支持;5,通過客戶端的批處理實現的有限的事務支持;6,緊跟ANSISQL標准。
8、ApacheAccumulo
代碼託管地址:ApacheSVN
ApacheAccumulo是一個可靠的、可伸縮的、高性能、排序分布式的鍵值存儲解決方案,基於單元訪問控制以及可定製的伺服器端處理。使用GoogleBigTable設計思路,基於ApacheHadoop、Zookeeper和Thrift構建。Accumulo最早由NSA開發,後被捐獻給了Apache基金會。
對比GoogleBigTable,Accumulo主要提升在基於單元的訪問及伺服器端的編程機制,後一處修改讓Accumulo可以在數據處理過程中任意點修改鍵值對。
9、ApacheDrill
代碼託管地址:GitHub
本質上,ApacheDrill是GoogleDremel的開源實現,本質是一個分布式的mpp查詢層,支持SQL及一些用於NoSQL和Hadoop數據存儲系統上的語言,將有助於Hadoop用戶實現更快查詢海量數據集的目的。當下Drill還只能算上一個框架,只包含了Drill願景中的初始功能。
Drill的目的在於支持更廣泛的數據源、數據格式及查詢語言,可以通過對PB位元組數據的快速掃描(大約幾秒內)完成相關分析,將是一個專為互動分析大型數據集的分布式系統。
10、ApacheGiraph
代碼託管地址:GitHub
ApacheGiraph是一個可伸縮的分布式迭代圖處理系統,靈感來自BSP(bulksynchronousparallel)和Google的Pregel,與它們區別於則是是開源、基於Hadoop的架構等。
Giraph處理平台適用於運行大規模的邏輯計算,比如頁面排行、共享鏈接、基於個性化排行等。Giraph專注於社交圖計算,被Facebook作為其OpenGraph工具的核心,幾分鍾內處理數萬億次用戶及其行為之間的連接。
11、ApacheHama
代碼託管地址:GitHub
ApacheHama是一個建立在Hadoop上基於BSP(BulkSynchronousParallel)的計算框架,模仿了Google的Pregel。用來處理大規模的科學計算,特別是矩陣和圖計算。集群環境中的系統架構由BSPMaster/GroomServer(ComputationEngine)、Zookeeper(DistributedLocking)、HDFS/HBase(StorageSystems)這3大塊組成。
12、ApacheTez
代碼託管地址:GitHub
ApacheTez是基於HadoopYarn之上的DAG(有向無環圖,DirectedAcyclicGraph)計算框架。它把Map/Rece過程拆分成若干個子過程,同時可以把多個Map/Rece任務組合成一個較大的DAG任務,減少了Map/Rece之間的文件存儲。同時合理組合其子過程,減少任務的運行時間。由Hortonworks開發並提供主要支持。
13、ApacheAmbari
代碼託管地址:ApacheSVN
ApacheAmbari是一個供應、管理和監視ApacheHadoop集群的開源框架,它提供一個直觀的操作工具和一個健壯的HadoopAPI,可以隱藏復雜的Hadoop操作,使集群操作大大簡化,首個版本發布於2012年6月。
ApacheAmbari現在是一個Apache的頂級項目,早在2011年8月,Hortonworks引進Ambari作為ApacheIncubator項目,制定了Hadoop集群極致簡單管理的願景。在兩年多的開發社區顯著成長,從一個小團隊,成長為Hortonworks各種組織的貢獻者。Ambari用戶群一直在穩步增長,許多機構依靠Ambari在其大型數據中心大規模部署和管理Hadoop集群。
目前ApacheAmbari支持的Hadoop組件包括:HDFS、MapRece、Hive、HCatalog、HBase、ZooKeeper、Oozie、Pig及Sqoop。
❹ 大數據需要掌握哪些技能
大數據技術體系龐大,包括的知識較多
1、學習大數據首先要學習Java基礎
Java是大數據學習需要的編程語言基礎,因為大數據的開發基於常用的高級語言。而且不論是學hadoop,
2、學習大數據必須學習大數據核心知識
Hadoop生態系統;HDFS技術;HBASE技術;Sqoop使用流程;數據倉庫工具HIVE;大數據離線分析Spark、Python語言;數據實時分析Storm;消息訂閱分發系統Kafka等。
3、學習大數據需要具備的能力
數學知識,數學知識是數據分析師的基礎知識。對於數據分析師,了解一些描述統計相關的內容,需要有一定公式計算能力,了解常用統計模型演算法。而對於數據挖掘工程師來說,各類演算法也需要熟練使用,對數學的要求是最高的。
4、學習大數據可以應用的領域
大數據技術可以應用在各個領域,比如公安大數據、交通大數據、醫療大數據、就業大數據、環境大數據、圖像大數據、視頻大數據等等,應用范圍非常廣泛。
❺ myeclipse中如何安裝jython插件
方法一啟動最新的Elcipse(eclipse-jee-ganymede-SR1-win32.zip),選擇Help-Software Updates,打開Available Software選項卡,然後單擊Add Sites 分別輸入JBoos的工具和Hibernate工具在線安裝地址,然後選擇安裝Hibernate ToolsJboos 和Tools Development Release等待安裝成功,安裝過程因要下載不少Jar包,視你的網路速度不同,需要的時間不同,安裝完畢Eclipse將提示你重新啟動,重啟Eclipse安裝完成。(注意:先安裝Hibernate Tools成功後,再安裝Jboos Tools Development Release)方法二一般我還是喜歡下載所需的插件後自己配置, 這樣可以對Hibernate Myeclipse插件進行管理。方法如下:下載所需的Hibernatetools http://www.hibernate.org/6.html將下載得到的文件解壓得到features和plugins文件夾,在eclipse安裝目錄里新建addPlugins文件夾, 同時在addPlugins文件夾下建立Hibernatetools文件夾, 將兩個文件夾(features和plugins)復制到Hibernatetools目錄下,然後在eclipse目錄下建立links文件夾,在links文件夾下建立 hibernatetools.link文件, 打開該文件輸入 Hibernatetools的絕對目錄。我的文件夾如下所示D:\java\plateform\eclipse_jee\eclipse\addPlugins\hibernatetools
D:\java\plateform\eclipse_jee\eclipse\links
links文件夾的hibernatetools.link文件內容如下path=D:/java/plateform/eclipse_jee/eclipse/addPlugins/hibernatetools
這樣重新啟動eclipse即可新建一個工程MyHibernate,然後然後選擇File-New-Hibernate Configuration File(cfg.xml),打開創建Hibernate配置向導,我這里配置了一個SQL Server2000資料庫,選中Create a console configuration 復選項,以此配置文件創建Hibernate控制台配置。創建Hibernate Console Configuration向導有Main、Option、Classpath、Mappings、Common五個選項卡,如果你在工程中已經引入了JDBC驅動則,直接點擊Finish完成即可,以後在完成其他配置。
完成後,你就可以在Hibernate Configuration視圖窗口看到配置項,已經鏈接到數據,並把你資料庫中的表列出來,如果在這一步你沒有成功的話,請檢查你是否以正確安裝的Hibernate Tools和JBoos Tools這個很重要;另外如果提示找不到JDBC驅動的話,說明你工程的classpath中沒有JDBC驅動jar包,載入正確的驅動即可。
如果你不能看到上圖所示的Hibernate Configurations窗口,說明你沒有打開這個View,選擇Windows-Show View-Other,然後選擇Hibernate Configurations即可打開這個窗口,窗口的位置無關緊要,你喜歡放在那裡就把他托過去。
下面將介紹如何使用Hibernate Code Generation來產生資料庫表映射Java對象,首先要在資料庫中創建表,並設置號欄位名和主鍵(主鍵很重要,關於主鍵的選擇建議你使用與業務無關的ID作為主鍵);打開Hibernate視圖找到Hibernate運行圖標下的Hibernate Code Generation Configurations,如果找不到這個圖標說明沒有在Hibernate視圖下。配置一個新的配置項,輸入配置項的名稱MyHibernateCode,選擇Hibernate Configuration(即已配好的Hibernate控制台配置),在Output directory中輸入反向代碼輸出目錄(注意這個目錄一般只需項目的源代碼src),然後復選Reverse engineer from JDBC connection,在Package中輸入包名(你要存放到src下那個包中),最後單擊Setup-Create New打開Reverse engineer配置向導,選擇配置存儲位置(我放到了src目錄下),最後選擇要反向工程的表,如圖;如果你的Database schema中沒有項目,查看你選擇Console configuration是否正確,單擊下面「Refresh」應該就出來了,最後單擊Finish完成返回,然後單擊Exporters選項卡,選擇導出項目,這里選擇了Domain code(.java) 和Hibernate XML Mappings(.hbm.xml),因為使用的JDK版本較高因此復選Use Java 5 syntax項。Refresh和Common項可不進行設置,最後單擊Run運行,產生代碼。產生的代碼和配置文件,如圖示;代碼自動產生後還需要你根據自己的業務邏輯檢查一下,並按你的DAO架構完成,Hibernate Tools到這里已經幫你完成的大量編碼工作。以上是對Hibernate Myeclipse插件的簡單介紹,希望讀者能夠對Hibernate Myeclipse插件有更多的理解。
❻ 如何配置oracle的jdbc驅動
在Linux機器上安裝運行Oracle 摘要:Oracle於去年年底宣布移植Oracle 8和Oracle Application Server到Linux。 這是一個明確無誤的標志:整個世界都應該認識到,Linux已經是一個嚴肅的操作系統,足以承擔企業級的應用。 Uche Ogbuji在下文中解釋了應該如何安裝、配置和初步使用Oracle 8 for Linux。
如何在你的Linux機器上安裝運行Oracle
一篇實用指導
經過了許多謠傳和暗示之後,Oracle於1998年10月7日發布了Linux上的Oracle 8資料庫和Oracle Application Server。這是Linux近期歷史中最為耀眼的一幕。
無論您個人對Oracle公司的看法如何,該公司在大規模數據應用領域的巨大聲譽使這次產品發布成為一個明確 無誤的標志:整個世界都應該認識到,Linux已經是一個嚴肅的操作系統,足以承擔企業級的應用。
但對於任何真正關心Linux的人來說,各種宣傳攻勢只是過眼煙雲,只有代碼才是關鍵的。(only code matters. 譯註:事實上,Oracle 8i, 即8.1.5 for Linux已經開發完成,但其中的JServer模塊有問題,所以Oracle還沒有發布。)
開始行動
在RedHat上安裝Oracle可以是相當輕而易舉的,但要是完全跟著Oracle公司的文檔走就未必那麼容易了 。最快的捷徑是Tom Bisset的主頁:
http://jordan.fortwayne.com/oracle。
如果您看了Tom的主頁,那麼您會注意到他漏了JDBC的安裝。如果您准備使用JDBC(對於跨平台的Oracle應用十分方便),只需在安裝屏幕要求您選擇組件(components)時,加上該選項即可。當然,您應該先裝好JDK。我個人使用Blackdown的JDK 1.1.7。(譯註:Redhat包括JDK)然後需要設置oracle用戶的ClassPath環境變數,最好的辦法是在oracle用戶目錄的.bash_profile 或 .profile中加上一句:
CLASSPATH=/usr/lib/jdk/lib/classes.zip; export CLASSPATH然後,如果您只需做Web Applet的話,在安裝程序"Choose JDBC Components"的時候, 選擇"JDK 1.1 JDBC Thin Driver",如果您需要做完整的Java應用,選擇"JDK 1.1 JDBC OCI Driver"。
另外請注意:安裝程序讓您輸入各口令時,如果口令不符合規范,不會警告。我第一次安裝時,口令里加了".",這在UNIX中是允許的,Oracle就是另一碼事了。直到安裝快結束時,程序才告訴我口令有問題。當時為保險 起見,我從頭做了一次安裝。
安裝程序的另一個問題是試圖往還沒有建立的目錄里拷貝文件。有必要在安裝前
mkdir -p /u01/app/oracle/proct/8.0.5/doc/server.805/install。
這一關過後萬事大吉。
安裝成功後,必須以ROOT身份登錄,運行root.sh。我對root.sh作了以下改動:
· LBIN環境變數從/usr/lbin改成了/usr/local/bin
· 增加環境變數LOG=/tmp/oracle-root.sh.log,這樣腳本的運行結果會記錄下來
root.sh里說到,要想資料庫作為一個伺服器運行,必須先設定TWO_TASK變數;
但是,事實上如果從安裝Oracle的機器上運行root.sh,就沒有必要設這個變數。
Python和Oracle
我配置了一下python(譯註:一種強大,快速的面向對象的腳本語言),以測試Oracle的編程介面和網路介面 。在python中要連Oracle,需要Digital Creation(Zope應用伺服器的作者)的DCOracle模塊。
您只需下載軟體並按照指示照做就行。如果是DCOracle 1.1.0,使用Setup-8.0.4的配置,從ORACLE_LIBS變數中刪去-lsocket, -lnsl, -lgen, -lelf, -laio, 和-lposix4即可,那些都是Solaris專用的。注意Redhat 5.2和6.0中安裝的 python設置不全,config目錄和include目錄被省略,無法編譯安裝第三方的模塊。您必須自己編譯python或者下載一個合適的RPM。找python的RPM,最好的去處可能是Oliver Andrich的 Python & Linux主頁。
只要rpm -e --nodeps python, 然後 rpm -i python,python-dev和其他RPM即可。
裝好python後,我運行了以下的基本查詢,訪問Oracle。
[uche@malatesta uche]$ python
Python 1.5.1 (#1, Sep 3 1998, 22:51:17) [GCC 2.7.2.3] on linux-i386
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> import DCOracle
>>> #connect to DB. scott/tiger are the test database username/password
>>> dbc=DCOracle.Connect("scott/tiger@sforza") #sforza is the local
Oracle
server
>>> c = dbc.cursor()
>>> c.execute("SELECT * FROM emp WHERE emp.deptno = 10")
>>> rows = c.fetchall()
>>> print rows
[(7782, CLARK, MANAGER, 7839, dbiDate(1981-06-09 00:00:00), 2450.0,
None, 10),
(7839, KING, PRESIDENT, None, dbiDate(1981-11-17 00:00:00), 5000.0,
None, 10),
(7934, MILLER, CLERK, 7782, dbiDate(1982-01-23 00:00:00), 1300.0,
None, 10)]
開發工作站配置
我在資料庫伺服器以外的一台機器上編譯安裝了python和其他編程介面。最初,看起來似乎我必須安裝Oracle 的所有PRO*C/C++軟體包。但要把Oracle安裝程序運行到那一步也夠麻煩的,所以我不想那樣辦。於是我找出了寫程序所需
要的最小限量的頭文件(include)、對象文件(object)和庫文件(library):
$ORACLE_HOME/lib/*
$ORACLE_HOME/rdbms/demo/*
$ORACLE_HOME/rdbms/lib/*
我的機器上設ORACLE_HOME為/usr/local/oracle。
注意這些文件還不能讓您可以在C程序中直接嵌入SQL語句,只有完整安裝PRO*C/C++後才行。如果要用JAVA的話,還得增加$ORACLE_HOME/jdbc/lib/*;注意把這個目錄加到ClASSPATH變數中。
JDBC連接
為測試JDBC連接,我作了一個小程序,在一個listbox內顯示測試庫中的所有雇員名。下面的程序1是調用JDBC的java Applet,程序2是調用JAVA程序的HTML超文本。如果您的JDBC已經安裝成功,將程序1拷貝為 JDBCTest.java,將程序2拷貝為JDBCTest.html,
然後:
javac JDBCTest.java
appletviewer JDBCTest.html
您就可以自己看看結果如何了:
程序1:
/*
Applet that reads in several rows from a remote Oracle database
and presents them in a listbox.
*/
import java.sql.*;
import java.awt.*;
import java.applet.*;
import java.lang.*;
public class JDBCTest extends Applet
{
//Single-select ListBox
private List employee_list = new List(5, false)
public void init()
{
setLayout(new BorderLayout());
try {
//Set up the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//Connect to an Oracle database on machine sforza, using username
//"scott" and password "tiger"
Connection DB_conn = DriverManager.getConnection
("jdbc:oracle:thin:@sforza:1521:ORCL", "scott", "tiger");
//Connection DB_conn = DriverManager.getConnection
("jdbc:oracle:thin:scott/tiger@sforza:1521:ORCL");
//Create a JDBC statement object
Statement statement_obj = DB_conn.createStatement();
//Execute a query to get the employee names from the test DB
ResultSet results = statement_obj.executeQuery ("select ENAME from
EMP");
//Populate the list box with all the employee names
while (results.next ()){
employee_list.add(results.getString(1));
}
} catch (SQLException e) {
throw new RuntimeException("SQL Exception " + e.getMessage());
}
add(employee_list);
}
}
http://oracle.chinaitlab.com/install/520180.html
❼ Python如何實現爬取需要登錄的網站代碼實例
final String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
final String user = "store";
final String password = "store_password";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
❽ 是不是到了人生苦短的時候才用Python
Question
1 Python是什麼
2 人們為什麼用Python
3 Python是腳本語言嗎
Python版Hello World
Example
1 Python
2 Java
本文不扯什麼大道理,只是先介紹Python的背景,然後從實用的角度出發舉一兩個真實栗子。
這里寫圖片描述
首先要想了解要一門語言的好壞,或者為什麼招程序員喜歡(卧槽,原來程序員喜歡不是女朋友?)我們的先從語言的產生背景開始,比如:他出現在什麼年代,為了解決什麼問題而出現的等。當然我也只是跟其他語言做一個比較,不討論誰好誰壞,再說語言也沒有什麼好壞之分,就算有好壞之分,也得從實際應用場景出發,所有我們不討論這個問題。
這里寫圖片描述
好,好,大兄弟你們都消消氣,上面我扯的太多了,下面直接上重點…
1. Question
首先還是按照慣例,上來幾個問題,這樣能讓初學者一目瞭然,有個大概的認識
1.1 Python是什麼
是一種面向對象、解釋型計算機程序設計語言,由Guido van Rossum於1989年聖誕節為打發無聊時間,而開發的一個新的腳本解釋程序,可以感覺下什麼叫牛人,是ABC語言的一種繼承,至於為什麼選中Python作為語言名字,是因為他是一叫Monty Python的喜劇團體的愛好者,第一個公開發行版發行於1991年。
他的設計哲學是
優雅
明確
簡單
完全的面向對象。函數,模塊,數字,字元串都是對象,不想Java中還有基本類型,在Python中一切皆對象,那作為程序員的我們害怕找到對象嗎,直接New一個呀,呵呵
這里寫圖片描述
1.2 人們為什麼用Python
這個問題往往是入門者第一個問題,對此我在一本書找到了這樣的解答:
軟體質量
開發這效率
程序的可移植性
眾多標准庫支持
組件集成
享受樂趣
其他的不用多講,需要詳細了解的可以搜索下,我只是提供大家幾個方面讓大家了解,因為往往對於初學者,是迷茫的,因為不支持從什麼方向去了解一個事物,而我就是提供方向的,具體的大家可以自己去了解。我只說下最後一個,詳細的可以參考下這篇文章每個程序員都應該學習使用 Python或Ruby文章裡面也說的很明白,我總結幾點就是
代碼量小
維護成本低
編程效率高
同一樣問題,用不同的語言解決,代碼量差距太多了,一般情況下python是java的1/5,所以說人數苦短,我用python,多留點時間泡妹子吧,不然就老了
這里寫圖片描述
1.3 Python是腳本語言嗎
·
他是一種多用戶語言,至於為什麼大家的第一感覺是腳本語言,我是因為人們看他的他直接寫一個文件,不需要什麼編譯,跟腳本似得,直接運行的就行了。所以說我也很難給你一個確定答案,我就舉一些常見的應用場景:
腳本:可以寫一些輔助自己開的腳本,就比如,Android開發,會涉及到一常用的命令,但是如果是在windows用bat寫,這樣弄到mac就沒法運行的,所以可以用,python寫。另外如果你是伺服器管理員,那麼python腳本很適合你,程序長了用bash寫,你會砸電腦的
網站開發:他有強大的Django,Flask框架
科學計算:有Numpy和Matlab一樣強的數值計算介面
圖形界面程序開發:這個不用多解釋,就是常見的那種界面啦
2. Python版Hello World
通常任何一門語言都有一個hello world的過程,呵呵,所以說我們這里也一樣,因為通過他你會學習到該語言的一個最基本的程序框架和運行過程,這對應初學者才是最重要的。
既然前面也說了,可以把他當腳本語言,那我們就來個最簡單的,操作步驟如下:
在你的工作目錄下創建一個hello.py文件,別問我你不知道工作目錄是什麼,那你該學學計算機基礎了
在該文件里寫入
print 'hello world'
1
1
打開命令行,輸入:
python hello.py
1
1
順利的話你會看到hello world的輸出,是不是感覺好簡單,對,你沒看錯,就這么簡單,現在你可以說你是一個python程序員了,呵呵~
3. Example
這里就舉一個我最近實際應用中的例子,是什麼呢,施主莫急,聽平僧慢慢到來。場景是這樣的最近一個日記軟體本身的客戶端不能用了,但是數據在sqlite資料庫里呀,我們的需求是將裡面的一些數據導出為txt文件,怎麼這需求簡單吧
3.1 Python
首先用python來解決這個問題,據跟上面的描述,我們很清楚的想到如下步驟:
連接sqlite3資料庫
執行查詢語句
打開文件
將查詢的介面寫入的剛剛打開的文件中
關閉數據
關閉文件
呵呵,我有想到了,讓程序員把大象放到冰箱的故事了,可以參考這篇文章拖放三部曲——從「把大象放進冰箱」說起
好了,不廢話了,直接上代碼
#!/usr/bin/python
# -*- coding: cp936 -*-
import sqlite3
import HTMLParser
import codecs
import time
f=codecs.open('note.txt','a',"utf-8") #以追加方式打開一個文件
conn = sqlite3.connect('note.db') #打開sqlite資料庫
print "Opened database successfully";
#執行查詢語句,返回一個cursor
cursor = conn.execute("select created,weather,address,latitude,longitude,content from tb_notescontents,tb_notes where tb_notescontents.note_guid=tb_notes.guid")
#遍歷每一行
for row in cursor:
#取出改行的每一列
created= row[0]
weather= row[1]
address= row[2]
latitude= row[3]
longitude= row[4]
content= row[5]
html_parser = HTMLParser.HTMLParser()
d = time.localtime(created/1000)
currentTime = time.strftime('%Y-%m-%d %H:%M:%S',d)
#因為原理的內容是經過html轉義了,所以要轉回來,形如:今天,
weather = html_parser.unescape(weather)
address = html_parser.unescape(address)
content = html_parser.unescape(content)
f.write(currentTime) #寫入文件
f.write(' ')
f.write(weather)
f.write(' ')
f.write(address)
f.write(' ')
f.write(content)
f.write('\n')
f.write('\n')
f.write('\n')
conn.close() ## 關閉資料庫
f.close() #關閉文件
print "Operation done successfully";
至於邏輯,我在上面步驟也寫的很清楚了,另外程序也謝了很詳細的注釋,所以說就算你不懂python也能很容易的看懂。
可以看到我們大概只用了50行代碼就完成了,這個小需求,但是如果用Java是什麼結果呢
3.2 Java
首先的我們的找一個開發工具,就eclipse吧。創建一個項目,然後添加一個TestMan.java
工程結構如下:
這里寫圖片描述
在TestMan.java中寫一個基本的程序框架
public class TestMain {
public static void main(String[] args) {
}
}
卧槽,這么麻煩,搞了半天才把架子搭好,說實話Java確實中規中矩,干什麼你都得按照他的那一套來,所以說呢,我們就不能直接貼代碼了,步驟還得細分了,啥?
連接sqlite3資料庫
通過JDBC連接:但是因為jdbc(Java Data Base Connectivity,java資料庫連接)是java連接資料庫的一套抽象設計API,既然是抽象的所以是不能直接使用,要找到他的實現,既然是連接sqlite所以應該去sqlite官網或者從bitbucket這里下載,我下載的版本是sqlite-jdbc-3.8.11.2,下載完後將他放到eclipse的環境變數里,下載才把准備工作做完,下面才開始寫代碼
執行查詢語句
打開文件
將查詢的介面寫入的剛剛打開的文件中
關閉數據
關閉文件
現在我們直接上代碼了
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.lang3.StringEscapeUtils;
public class TestMain {
public static void main(String[] args) {
// load the sqlite-JDBC driver using the current class loader
Connection connection = null;
BufferedWriter bufferedWriter = null;
try {
Class.forName("org.sqlite.JDBC");
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:note.db");
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.
ResultSet rs = statement
.executeQuery("select created,weather,address,latitude,longitude,content from tb_notescontents,tb_notes where tb_notescontents.note_guid=tb_notes.guid");
bufferedWriter = new BufferedWriter(
new FileWriter("note.txt", true));
while (rs.next()) {
// read the result set
String created = rs.getString("created");
String weather = rs.getString("weather");
String address = rs.getString("address");
String latitude = rs.getString("latitude");
String longitude = rs.getString("longitude");
String content = rs.getString("content");
// write to file
bufferedWriter.write(created); // 寫入文件
bufferedWriter.write(" ");
bufferedWriter.write(weather);
bufferedWriter.write(" ");
bufferedWriter.write(address);
bufferedWriter.write(" ");
// 轉義html,可以看到我們又引用了commons-lang jar包
content = StringEscapeUtils.unescapeHtml4(content);
bufferedWriter.write(content);
bufferedWriter.newLine();
}
} catch (SQLException e) {
// if the error message is "out of memory",
// it probably means no database file is found
System.err.println(e.getMessage());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
// connection close failed.
System.err.println(e);
}
try {
if (bufferedWriter != null) {
bufferedWriter.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
現在大家可以看見了java和python的區別了吧,在java中什麼功能也提供了,但是得引用各種jar,還得到處找去搜索或下載啦,各種肯爹,不過在python中很多常用庫已經內置了,所以省去了很多麻煩,所以說以我個人感覺,python個適合解決工作中的一些小問題,當然大問題也是么有問題的啦~,文章到此基本結束了,當然我也沒有偏袒那一面,另外我也是只是從我的工作或學習中得到的一些小領悟特此總結此處,如果大家有什麼好的見解歡迎評論吐槽~