99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀開源大數(shù)據(jù)查詢分析引擎現(xiàn)狀
開源大數(shù)據(jù)查詢分析引擎現(xiàn)狀
2015-06-04
收藏

開源大數(shù)據(jù)查詢分析引擎現(xiàn)狀


大數(shù)據(jù)查詢分析是云計算中核心問題之一,自從Google在2006年之前的幾篇論文奠定云計算領(lǐng)域基礎(chǔ),尤其是GFS、Map-Reduce、 Bigtable被稱為云計算底層技術(shù)三大基石。GFS、Map-Reduce技術(shù)直接支持了Apache Hadoop項(xiàng)目的誕生。Bigtable和Amazon Dynamo直接催生了NoSQL這個嶄新的數(shù)據(jù)庫領(lǐng)域,撼動了RDBMS在商用數(shù)據(jù)庫和數(shù)據(jù)倉庫方面幾十年的統(tǒng)治性地位。FaceBook的Hive項(xiàng) 目是建立在Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架,提供了一系列用于存儲、查詢和分析大規(guī)模數(shù)據(jù)的工具。當(dāng)我們還浸淫在GFS、Map-Reduce、 Bigtable等Google技術(shù)中,并進(jìn)行理解、掌握、模仿時,Google在2009年之后,連續(xù)推出多項(xiàng)新技術(shù),包括:Dremel、 Pregel、Percolator、Spanner和F1。其中,Dremel促使了實(shí)時計算系統(tǒng)的興起,Pregel開辟了圖數(shù)據(jù)計算這個新方 向,Percolator使分布式增量索引更新成為文本檢索領(lǐng)域的新標(biāo)準(zhǔn),Spanner和F1向我們展現(xiàn)了跨數(shù)據(jù)中心數(shù)據(jù)庫的可能。在Google的第 二波技術(shù)浪潮中,基于Hive和Dremel,新興的大數(shù)據(jù)公司Cloudera開源了大數(shù)據(jù)查詢分析引擎Impala,Hortonworks開源了 Stinger,F(xiàn)ackbook開源了Presto。類似Pregel,UC Berkeley AMPLAB實(shí)驗(yàn)室開發(fā)了Spark圖計算框架,并以Spark為核心開源了大數(shù)據(jù)查詢分析引擎Shark。由于某電信運(yùn)營商項(xiàng)目中大數(shù)據(jù)查詢引擎選型需 求,本文將會對Hive、Impala、Shark、Stinger和Presto這五類主流的開源大數(shù)據(jù)查詢分析引擎進(jìn)行簡要介紹以及性能比較,最后進(jìn) 行總結(jié)與展望。Hive、Impala、Shark、Stinger和Presto的進(jìn)化圖譜如圖1所示。

大數(shù)據(jù)

圖1. Impala、Shark、Stinger和Presto的進(jìn)化圖譜

當(dāng)前主流引擎簡介

基于Map-Reduce模式的Hadoop擅長數(shù)據(jù)批處理,不是特別符合即時查詢的場景。實(shí)時查詢一般使用MPP (Massively Parallel Processing)的架構(gòu),因此用戶需要在Hadoop和MPP兩種技術(shù)中選擇。在Google的第二波技術(shù)浪潮中,一些基于Hadoop架構(gòu)的快速 SQL訪問技術(shù)逐步獲得人們關(guān)注?,F(xiàn)在有一種新的趨勢是MPP和Hadoop相結(jié)合提供快速SQL訪問框架。最近有四個很熱門的開源工具出 來:Impala、Shark、Stinger和Presto。這也顯示了大數(shù)據(jù)領(lǐng)域?qū)τ?a href='/map/hadoop/' style='color:#000;font-size:inherit;'>Hadoop生態(tài)系統(tǒng)中支持實(shí)時查詢的期望。總體來 說,Impala、Shark、Stinger和Presto四個系統(tǒng)都是類SQL實(shí)時大數(shù)據(jù)查詢分析引擎,但是它們的技術(shù)側(cè)重點(diǎn)完全不同。而且它們也不 是為了替換Hive而生,Hive在做數(shù)據(jù)倉庫時是非常有價值的。這四個系統(tǒng)與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具,各有不同的側(cè)重適應(yīng) 面,但從客戶端使用來看它們與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、Thrift接口、ODBC/JDBC驅(qū)動、SQL語法、靈活的文件格式、存儲 資源池等。Hive與Impala、Shark、Stinger、Presto在Hadoop中的關(guān)系如圖2所示。Hive適用于長時間的批處理查詢分 析,而Impala、Shark、Stinger和Presto適用于實(shí)時交互式SQL查詢,它們給數(shù)據(jù)分析人員提供了快速實(shí)驗(yàn)、驗(yàn)證想法的大數(shù)據(jù)分析工 具??梢韵仁褂?a href='/map/hive/' style='color:#000;font-size:inherit;'>Hive進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理,之后使用這四個系統(tǒng)中的一個在Hive處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析。下面,從問題域出發(fā)簡單介紹 Hive、Impala、Shark、Stinger和Presto:

1) Hive,披著SQL外衣的Map-Reduce。Hive是為方便用戶使用Map-Reduce而在外面封裝了一層SQL,由于Hive采 用了SQL,它的問題域比Map-Reduce更窄,因?yàn)楹芏鄦栴},SQL表達(dá)不出來,比如一些數(shù)據(jù)挖掘算法,推薦算法、圖像識別算法等,這些仍只能通過 編寫Map-Reduce完成。

2) Impala:Google Dremel的開源實(shí)現(xiàn)(Apache Drill類似),因?yàn)榻换ナ綄?shí)時計算需求,Cloudera推出了Impala系統(tǒng),該系統(tǒng)適用于交互式實(shí)時處理場景,要求最后產(chǎn)生的數(shù)據(jù)量一定要少。

3) Shark/Spark:為了提高M(jìn)ap-Reduce的計算效率,Berkeley的AMPLab實(shí)驗(yàn)室開發(fā)了Spark,Spark可看 做基于內(nèi)存的Map-Reduce實(shí)現(xiàn),此外,伯克利還在Spark基礎(chǔ)上封裝了一層SQL,產(chǎn)生了一個新的類似Hive的系統(tǒng)Shark。

4) Stinger Initiative(Tez optimized Hive):Hortonworks開源了一個DAG計算框架Tez,Tez可以理解為Google Pregel的開源實(shí)現(xiàn),該框架可以像Map-Reduce一樣,可以用來設(shè)計DAG應(yīng)用程序,但需要注意的是,Tez只能運(yùn)行在YARN上。Tez的一 個重要應(yīng)用是優(yōu)化Hive和PIG這種典型的DAG應(yīng)用場景,它通過減少數(shù)據(jù)讀寫IO,優(yōu)化DAG流程使得Hive速度提供了很多倍。

5) Presto:FaceBook于2013年11月份開源了Presto,一個分布式SQL查詢引擎,它被設(shè)計為用來專門進(jìn)行高速、實(shí)時的數(shù) 據(jù)分析。它支持標(biāo)準(zhǔn)的ANSI SQL,包括復(fù)雜查詢、聚合(aggregation)、連接(join)和窗口函數(shù)(window functions)。Presto設(shè)計了一個簡單的數(shù)據(jù)存儲的抽象層,來滿足在不同數(shù)據(jù)存儲系統(tǒng)(包括HBase、HDFS、Scribe等)之上都可 以使用SQL進(jìn)行查詢。

大數(shù)據(jù)圖2. Hive與Impala、Shark、Stinger、Presto在Hadoop中的關(guān)系

當(dāng)前主流引擎架構(gòu)

Hive

Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為 Map-Reduce任務(wù)進(jìn)行運(yùn)行,十分適合數(shù)據(jù)倉庫統(tǒng)計分析。其架構(gòu)如圖3所示,Hadoop和Map-Reduce是Hive架構(gòu)的根基。Hive 架構(gòu)包括如下組件:CLI(Command Line Interface)、JDBC/ODBC、Thrift Server、Meta Store和Driver(Complier、Optimizer和Executor)。

大數(shù)據(jù)

圖3. Hive架構(gòu)

Impala架構(gòu)

Impala是Cloudera在受到Google的Dremel啟發(fā)下開發(fā)的實(shí)時交互SQL大數(shù)據(jù)查詢工具,它可以看成是Google Dremel架構(gòu)和MPP (Massively Parallel Processing)結(jié)構(gòu)的結(jié)合體。Impala沒有再使用緩慢的Hive&Map-Reduce批處理,而是通過使用與商用并行關(guān)系數(shù)據(jù)庫中 類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統(tǒng)計函數(shù)查詢數(shù)據(jù),從而大大降低了延遲,其架構(gòu)如圖4所 示,Impala主要由Impalad,State Store和CLI組成。Impalad與DataNode運(yùn)行在同一節(jié)點(diǎn)上,由Impalad進(jìn)程表示,它接收客戶端的查詢請求(接收查詢請求的 Impalad為Coordinator,Coordinator通過JNI調(diào)用java前端解釋SQL查詢語句,生成查詢計劃樹,再通過調(diào)度器把執(zhí)行計 劃分發(fā)給具有相應(yīng)數(shù)據(jù)的其它Impalad進(jìn)行執(zhí)行),讀寫數(shù)據(jù),并行執(zhí)行查詢,并把結(jié)果通過網(wǎng)絡(luò)流式的傳送回給Coordinator,由 Coordinator返回給客戶端。同時Impalad也與State Store保持連接,用于確定哪個Impalad是健康和可以接受新的工作。Impala State Store跟蹤集群中的Impalad的健康狀態(tài)及位置信息,由state-stored進(jìn)程表示,它通過創(chuàng)建多個線程來處理Impalad的注冊訂閱和 與各Impalad保持心跳連接,各Impalad都會緩存一份State Store中的信息,當(dāng)State Store離線后,因?yàn)镮mpalad有State Store的緩存仍然可以工作,但會因?yàn)橛行㊣mpalad失效了,而已緩存數(shù)據(jù)無法更新,導(dǎo)致把執(zhí)行計劃分配給了失效的Impalad,導(dǎo)致查詢失敗。 CLI提供給用戶查詢使用的命令行工具,同時Impala還提供了Hue,JDBC,ODBC,Thrift使用接口。

大數(shù)據(jù)
圖4. Impala架構(gòu)

Shark架構(gòu)

Shark是UC Berkeley AMPLAB開源的一款數(shù)據(jù)倉庫產(chǎn)品,它完全兼容Hive的HQL語法,但與Hive不同的是,Hive的計算框架采用Map-Reduce,而 Shark采用Spark。所以,HiveSQL on Map-Reduce,而Shark是Hive on Spark。其架構(gòu)如圖4所示,為了最大程度的保持和Hive的兼容性,Shark復(fù)用了Hive的大部分組件,如下所示:

1) SQL Parser&Plan generation: Shark完全兼容Hive的HQL語法,而且Shark使用了Hive的API來實(shí)現(xiàn)query Parsing和 query Plan generation,僅僅最后的Physical Plan execution階段用Spark代替Hadoop Map-Reduce;

2) metastore:Shark采用和Hive一樣的meta信息,Hive里創(chuàng)建的表用Shark可無縫訪問;

3) SerDe: Shark的序列化機(jī)制以及數(shù)據(jù)類型與Hive完全一致;

4) UDF: Shark可重用Hive里的所有UDF。通過配置Shark參數(shù),Shark可以自動在內(nèi)存中緩存特定的RDD(Resilient Distributed Dataset),實(shí)現(xiàn)數(shù)據(jù)重用,進(jìn)而加快特定數(shù)據(jù)集的檢索。同時,Shark通過UDF用戶自定義函數(shù)實(shí)現(xiàn)特定的數(shù)據(jù)分析學(xué)習(xí)算法,使得SQL數(shù)據(jù)查詢 和運(yùn)算分析能結(jié)合在一起,最大化RDD的重復(fù)使用;

5) Driver:Shark在Hive的CliDriver基礎(chǔ)上進(jìn)行了一個封裝,生成一個SharkCliDriver,這是shark命令的入口;

6) ThriftServer:Shark在Hive的ThriftServer(支持JDBC/ODBC)基礎(chǔ)上,做了一個封裝,生成了一個SharkServer,也提供JDBC/ODBC服務(wù)。

大數(shù)據(jù)

圖5. Shark架構(gòu)

Spark是UC Berkeley AMP lab所開源的類Hadoop Map-Reduce的通用的并行計算框架,Spark基于Map-Reduce算法實(shí)現(xiàn)的分布式計算,擁有Hadoop Map-Reduce所具有的優(yōu)點(diǎn);但不同于Map-Reduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark 能更好地適用于數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)等需要迭代的Map-Reduce的算法。其架構(gòu)如圖6所示:

大數(shù)據(jù)
圖6. Spark架構(gòu)

Hadoop的對比,Spark的中間數(shù)據(jù)放到內(nèi)存中,對于迭代運(yùn)算效率更高,因此Spark適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場合。需要反復(fù)操作的 次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計算密集度較大的場合,受益就相對較小。Spark比Hadoop更通用,Spark提供的數(shù)據(jù) 集操作類型有很多種(map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等),而Hadoop只提供了Map和Reduce兩種操作。Spark可以直接對HDFS進(jìn)行數(shù)據(jù)的讀寫,同樣支持 Spark on YARN。Spark可以與Map-Reduce運(yùn)行于同集群中,共享存儲資源與計算,數(shù)據(jù)倉庫Shark實(shí)現(xiàn)上借用Hive,幾乎與Hive完全兼容。

Stinger架構(gòu)

Stinger是Hortonworks開源的一個實(shí)時類SQL即時查詢系統(tǒng),聲稱可以提升較Hive 100倍的速度。與Hive不同的是,Stinger采用Tez。所以,HiveSQL on Map-Reduce,而Stinger是Hive on Tez。Tez的一個重要作用是優(yōu)化Hive和PIG這種典型的DAG應(yīng)用場景,它通過減少數(shù)據(jù)讀寫IO,優(yōu)化DAG流程使得Hive速度提供了很多倍。 其架構(gòu)如圖7所示, Stinger是在Hive的現(xiàn)有基礎(chǔ)上加了一個優(yōu)化層Tez(此框架是基于Yarn),所有的查詢和統(tǒng)計都要經(jīng)過它的優(yōu)化層來處理,以減少不必要的工作 以及資源開銷。雖然Stinger也對Hive進(jìn)行了較多的優(yōu)化與加強(qiáng),Stinger總體性能還是依賴其子系統(tǒng)Tez的表現(xiàn)。而Tez是 Hortonworks開源的一個DAG計算框架,Tez可以理解為Google Pregel的開源實(shí)現(xiàn),該框架可以像Map-Reduce一樣,用來設(shè)計DAG應(yīng)用程序,但需要注意的是,Tez只能運(yùn)行在YARN上。

大數(shù)據(jù)
圖7. Stinger架構(gòu)

Presto架構(gòu)

2013年11月Facebook開源了一個分布式SQL查詢引擎Presto,它被設(shè)計為用來專門進(jìn)行高速、實(shí)時的數(shù)據(jù)分析。它支持標(biāo)準(zhǔn)的 ANSI SQL子集,包括復(fù)雜查詢、聚合、連接和窗口函數(shù)。其簡化的架構(gòu)如圖8所示,客戶端將SQL查詢發(fā)送到Presto的協(xié)調(diào)器。協(xié)調(diào)器會進(jìn)行語法檢查、分析 和規(guī)劃查詢計劃。調(diào)度器將執(zhí)行的管道組合在一起,將任務(wù)分配給那些里數(shù)據(jù)最近的節(jié)點(diǎn),然后監(jiān)控執(zhí)行過程。客戶端從輸出段中將數(shù)據(jù)取出,這些數(shù)據(jù)是從更底層 的處理段中依次取出的。Presto的運(yùn)行模型與Hive有著本質(zhì)的區(qū)別。Hive將查詢翻譯成多階段的Map-Reduce任務(wù),一個接著一個地運(yùn)行。 每一個任務(wù)從磁盤上讀取輸入數(shù)據(jù)并且將中間結(jié)果輸出到磁盤上。然而Presto引擎沒有使用Map-Reduce。它使用了一個定制的查詢執(zhí)行引擎和響應(yīng) 操作符來支持SQL的語法。除了改進(jìn)的調(diào)度算法之外,所有的數(shù)據(jù)處理都是在內(nèi)存中進(jìn)行的。不同的處理端通過網(wǎng)絡(luò)組成處理的流水線。這樣會避免不必要的磁盤 讀寫和額外的延遲。這種流水線式的執(zhí)行模型會在同一時間運(yùn)行多個數(shù)據(jù)處理段,一旦數(shù)據(jù)可用的時候就會將數(shù)據(jù)從一個處理段傳入到下一個處理段。 這樣的方式會大大的減少各種查詢的端到端響應(yīng)時間。同時,Presto設(shè)計了一個簡單的數(shù)據(jù)存儲抽象層,來滿足在不同數(shù)據(jù)存儲系統(tǒng)之上都可以使用SQL進(jìn) 行查詢。存儲連接器目前支持除Hive/HDFS外,還支持HBase、Scribe和定制開發(fā)的系統(tǒng)。

大數(shù)據(jù)

圖8. Presto架構(gòu)

性能評測總結(jié)

通過對Hive、Impala、Shark、Stinger和Presto的評測和分析,總結(jié)如下:

1) 列存儲一般對查詢性能提升明顯,尤其是大表是一個包含很多列的表。例如,從Stinger(Hive 0.11 with ORCFile)VS Hive,以及Impala的Parquet VS Text file;

2) 繞開MR計算模型,省去中間結(jié)果的持久化和MR任務(wù)調(diào)度的延遲,會帶來性能提升。例如,Impala,Shark,Presto要好于Hive和Stinger,但這種優(yōu)勢隨著數(shù)據(jù)量增加和查詢變復(fù)雜而減弱;

3) 使用MPP數(shù)據(jù)庫技術(shù)對連接查詢有幫助。例如,Impala在兩表,多表連接查詢中優(yōu)勢明顯;

4) 充分利用緩存的系統(tǒng)在內(nèi)存充足的情況下性能優(yōu)勢明顯。例如,Shark,Impala在小數(shù)據(jù)量時性能優(yōu)勢明顯;內(nèi)存不足時性能下降嚴(yán)重,Shark會出現(xiàn)很多問題;

5) 數(shù)據(jù)傾斜會嚴(yán)重影響一些系統(tǒng)的性能。例如,Hive、Stinger、Shark對數(shù)據(jù)傾斜比較敏感,容易造成傾斜;Impala受這方面的影響似乎不大;

對于Hive、Impala、Shark、Stinger和Presto這五類開源的分析引擎,在大多數(shù)情況下,Imapla的綜合性能是最穩(wěn)定的,時間 性能也是最好的,而且其安裝配置過程也相對容易。其他分別為Presto、Shark、Stinger和Hive。在內(nèi)存足夠和非Join操作情況 下,Shark的性能是最好的。

總結(jié)與展望

對大數(shù)據(jù)分析的項(xiàng)目來說,技術(shù)往往不是最關(guān)鍵的,關(guān)鍵在于誰的生態(tài)系統(tǒng)更強(qiáng),技術(shù)上一時的領(lǐng)先并不足以保證項(xiàng)目的最終成功。對于Hive、 Impala、Shark、Stinger和Presto來講,最后哪一款產(chǎn)品會成為事實(shí)上的標(biāo)準(zhǔn)還很難說,但我們唯一可以確定并堅信的一點(diǎn)是,大數(shù)據(jù)分 析將隨著新技術(shù)的不斷推陳出新而不斷普及開來,這對用戶永遠(yuǎn)都是一件幸事。舉個例子,如果讀者注意過下一代Hadoop(YARN)的發(fā)展的話就會發(fā)現(xiàn), 其實(shí)YARN已經(jīng)支持Map-Reduce之外的計算范式(例如Shark,Impala等),因此將來Hadoop將可能作為一個兼容并包的大平臺存 在,在其上提供各種各樣的數(shù)據(jù)處理技術(shù),有應(yīng)對秒量級查詢的,有應(yīng)對大數(shù)據(jù)批處理的,各種功能應(yīng)有盡有,滿足用戶各方面的需求。

除了Hive、Impala、Shark、Stinger和Presto這樣的開源方案外,像Oracle,EMC等傳統(tǒng)廠商也沒在坐以待斃等著自己的市 場被開源軟件侵吞。像EMC就推出了HAWQ系統(tǒng),并號稱其性能比之Impala快上十幾倍,而Amazon的Redshift也提供了比Impala更 好的性能。雖然說開源軟件因?yàn)槠鋸?qiáng)大的成本優(yōu)勢而擁有極其強(qiáng)大的力量,但是傳統(tǒng)數(shù)據(jù)庫廠商仍會嘗試推出性能、穩(wěn)定性、維護(hù)服務(wù)等指標(biāo)上更加強(qiáng)大的產(chǎn)品與之 進(jìn)行差異化競爭,并同時參與開源社區(qū)、借力開源軟件來豐富自己的產(chǎn)品線、提升自己的競爭力,并通過更多的高附加值服務(wù)來滿足某些消費(fèi)者需求。畢竟,這些廠 商往往已在并行數(shù)據(jù)庫等傳統(tǒng)領(lǐng)域積累了大量的技術(shù)和經(jīng)驗(yàn),這些底蘊(yùn)還是非常深厚的??偟膩砜?,未來的大數(shù)據(jù)分析技術(shù)將會變得越來越成熟、越來越便宜、越來 越易用;相應(yīng)的,用戶將會更容易更方便地從自己的大數(shù)據(jù)中挖掘出有價值的商業(yè)信息。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }