乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Impala:大數(shù)據(jù)叢林中敏捷迅速的黑斑羚

       heii2 2018-01-13



      在大數(shù)據(jù)蓬勃發(fā)展的今天,基于Hadoop黃金搭檔HDFS和MapReduce的Hive,已經(jīng)無法滿足人們對(duì)于海量數(shù)據(jù)處理速度越來越快的要求。時(shí)勢(shì)造英雄,Cloudera依據(jù)Google的Dremel為原型開發(fā)了跨時(shí)代的查詢引擎:Impala。


      Impala的本意是黑斑羚,產(chǎn)于非洲中南部,行動(dòng)敏捷,奔跑迅速。下面我們就來揭開這只敏捷迅速黑斑羚的神秘面紗,以饗各位看官。 



      01 概述


      Impala是基于MPP的SQL查詢系統(tǒng),可以直接為存儲(chǔ)在HDFS或HBase中的Hadoop數(shù)據(jù)提供快速、交互式的SQL查詢。Impala和Hive一樣也使用了相同的元數(shù)據(jù)、SQL語(yǔ)法(Hive SQL)、ODBC驅(qū)動(dòng)和用戶接口(Hue Beeswax),這就很方便地為用戶提供了一個(gè)相似并且統(tǒng)一的平臺(tái)來進(jìn)行批量或?qū)崟r(shí)查詢。


      Impala系統(tǒng)架構(gòu)圖如下所示:



      Impala主要包括以下組成部分:


      • Impala Shell:客戶端工具,提供一個(gè)交互接口ODBC,供使用者連接到Impalad發(fā)起數(shù)據(jù)查詢或管理任務(wù)等。

      • Impalad:分布式查詢引擎,由Query Planner、Query Coordinator和Query Exec Engine三部分組成,可以直接從HDFS或者HBase中用SELECT、JOIN和統(tǒng)計(jì)函數(shù)查詢數(shù)據(jù)。

      • State Store:主要為跟蹤各個(gè)Impalad實(shí)例的位置和狀態(tài),讓各個(gè)Impalad實(shí)例以集群的方式運(yùn)行起來。

      • Catalog Service:主要跟蹤各個(gè)節(jié)點(diǎn)上對(duì)元數(shù)據(jù)的變更操作,并且通知到每個(gè)節(jié)點(diǎn)。


      Impala支持以下特性:


      • 支持ANSI-92 SQL所有子集,包括CREATE/ALTER/SELECT/INSERT/JOIN/subqueries

      • 支持分區(qū)join、完全分布式聚合以及完全分布式top-n查詢

      • 支持多種數(shù)據(jù)格式:Hadoop原生格式(apache Avro,SequenceFile,RCFile with Snappy,GZIP, BZIP或未壓縮)、文本(未壓縮或者LZO壓縮)和Parquet(Snappy或未壓縮)

      • 可以通過JDBC、ODBC、Hue GUI或者命令行shell進(jìn)行連接



      02 查詢處理流程


      Impalad分為Java前端(Frontend)與C++處理后端(Backend),接受客戶端連接的Impalad即作為這次查詢的Coordinator,Coordinator通過JNI調(diào)用Java前端對(duì)用戶的查詢SQL進(jìn)行分析生成執(zhí)行計(jì)劃樹,不同的操作對(duì)應(yīng)不用的PlanNode, 如:SelectNode, ScanNode, SortNode, AggregationNode, HashJoinNode等等。


      執(zhí)行計(jì)劃樹的每個(gè)原子操作由一個(gè)PlanFragment表示,通常一條查詢語(yǔ)句由多個(gè)Plan Fragment組成, Plan Fragment 0表示執(zhí)行樹的根,匯聚結(jié)果返回給用戶,執(zhí)行樹的葉子結(jié)點(diǎn)一般是Scan操作,分布式并行執(zhí)行。


      Java前端產(chǎn)生的執(zhí)行計(jì)劃樹以Thrift數(shù)據(jù)格式返回給Impala C++后端Coordinator,執(zhí)行計(jì)劃分為多個(gè)階段,每一個(gè)階段叫做一個(gè)PlanFragment,每一個(gè)PlanFragment在執(zhí)行時(shí)可以由多個(gè)Impalad實(shí)例并行執(zhí)行(有些PlanFragment只能由一個(gè)Impalad實(shí)例執(zhí)行,如聚合操作),整個(gè)執(zhí)行計(jì)劃即為一個(gè)執(zhí)行計(jì)劃樹。Coordinator收到執(zhí)行計(jì)劃后,數(shù)據(jù)存儲(chǔ)信息(Impala通過libhdfs與HDFS進(jìn)行交互,通過hdfsGetHosts方法獲得文件數(shù)據(jù)塊所在節(jié)點(diǎn)的位置信息),通過調(diào)度器(現(xiàn)在只有simple-scheduler, 使用round-robin算法)Coordinator::Exec對(duì)生成的執(zhí)行計(jì)劃樹分配給相應(yīng)的后端執(zhí)行器Impalad執(zhí)行(查詢會(huì)使用LLVM進(jìn)行代碼生成,編譯,執(zhí)行),通過調(diào)用GetNext()方法獲取計(jì)算結(jié)果,如果是insert語(yǔ)句,則將計(jì)算結(jié)果通過libhdfs寫回HDFS,當(dāng)所有輸入數(shù)據(jù)被消耗光,執(zhí)行結(jié)束,之后注銷此次查詢服務(wù)。


      Impala查詢處理流程如下圖所示:





      03 訪問Impala


      訪問Impala有兩種方式,一種是使用命令行工具impala-shell,另一種是使用JDBC編程,下面分別闡述。


      Impala-shell


      可以通過命令行工具Impala-shell來創(chuàng)建數(shù)據(jù)庫(kù)、表、插入數(shù)據(jù)、執(zhí)行查詢等。


      Impala shell命令格式如下:


      impala-shell [選項(xiàng)]


      impala-shell使用選項(xiàng)如下:


      選項(xiàng)

      描述

      -B or --delimited

      導(dǎo)致使用分隔符分割的普通文本格式打印查詢結(jié)果。當(dāng)為其他 Hadoop 組件生成數(shù)據(jù)時(shí)有用。對(duì)于避免整齊打印所有輸出的性能開銷有用,特別是使用查詢返回大量的結(jié)果集進(jìn)行基準(zhǔn)測(cè)試的時(shí)候。使用 --output_delimiter 選項(xiàng)指定分隔符。使用 -B 選項(xiàng)常用于保存所有查詢結(jié)果到文件里而不是打印到屏幕上。

      --print_header

      是否打印列名。整齊打印時(shí)是默認(rèn)啟用。同時(shí)使用 -B 選項(xiàng)時(shí),在首行打印列名

      -o filename or  --output_file filename

      保存所有查詢結(jié)果到指定的文件。通常用于保存在命令行使用 -q 選項(xiàng)執(zhí)行單個(gè)查詢時(shí)的查詢結(jié)果。對(duì)交互式會(huì)話同樣生效;此時(shí)你只會(huì)看到獲取了多少行數(shù)據(jù),但看不到實(shí)際的數(shù)據(jù)集。當(dāng)結(jié)合使用 -q 和 -o 選項(xiàng)時(shí),會(huì)自動(dòng)將錯(cuò)誤信息輸出到 /dev/null。

      --output_delimiter=character

      當(dāng)使用 -B 選項(xiàng)以普通文件格式打印查詢結(jié)果時(shí),用于指定字段之間的分隔符。默認(rèn)是制表符 tab ('\t')。假如輸出結(jié)果中包含了分隔符,該列會(huì)被引起且/或轉(zhuǎn)義。

      -p or --show_profiles

      對(duì) shell 中執(zhí)行的每一個(gè)查詢,顯示其查詢執(zhí)行計(jì)劃 (與 EXPLAIN 語(yǔ)句輸出相同) 和發(fā)生低級(jí)故障的執(zhí)行步驟的更詳細(xì)的信息

      -h or --help

      顯示幫助信息

      -i hostname or  --impalad=hostname

      指定連接運(yùn)行 impalad 守護(hù)進(jìn)程的主機(jī)。默認(rèn)端口是 21050。你可以連接到集群中運(yùn)行 impalad 的任意主機(jī)。假如你連接到 impalad 實(shí)例通過 --fe_port 標(biāo)志使用了其他端口,則應(yīng)當(dāng)同時(shí)提供端口號(hào),格式為 hostname:port

      -q query or --query=query

      從命令行中傳遞一個(gè)查詢或其他 shell 命令。執(zhí)行完這一語(yǔ)句后 shell 會(huì)立即退出。限制為單條語(yǔ)句,可以是 SELECT, CREATE  TABLE, SHOW TABLES, 或其他 impala-shell 認(rèn)可的語(yǔ)句。因?yàn)闊o法傳遞 USE 語(yǔ)句再加上其他查詢,對(duì)于 default 數(shù)據(jù)庫(kù)之外的表,應(yīng)在表名前加上數(shù)據(jù)庫(kù)標(biāo)識(shí)符(或者使用 -f 選項(xiàng)傳遞一個(gè)包含 USE 語(yǔ)句和其他查詢的文件)

      -f query_file or --query_file=query_file

      傳遞一個(gè)文件中的 SQL 查詢。文件內(nèi)容必須以分號(hào)分隔

      -k or --kerberos

      當(dāng)連接到 impalad 時(shí)使用 Kerberos 認(rèn)證。如果要連接的 impalad 實(shí)例不支持 Kerberos,將顯示一個(gè)錯(cuò)誤

      -s kerberos_service_name or  --kerberos_service_name=name

      指示impala-shell對(duì)特定impalad服務(wù)主體進(jìn)行身份驗(yàn)證。 如果沒有設(shè)置  kerberos_service_name ,默認(rèn)使用 impala。如果啟用了本選項(xiàng),而試圖建立不支持Kerberos 的連接時(shí),返回一個(gè)錯(cuò)誤。

      -V or --verbose

      啟用詳細(xì)輸出

      --quiet

      關(guān)閉詳細(xì)輸出

      -v or --version

      顯示版本信息

      -c

      查詢執(zhí)行失敗時(shí)繼續(xù)執(zhí)行

      -r or --refresh_after_connect

      建立連接后刷新 Impala 元數(shù)據(jù),與建立連接后執(zhí)行 REFRESH 語(yǔ)句效果相同

      -d default_db or --database=default_db

      指定啟動(dòng)后使用的數(shù)據(jù)庫(kù),與建立連接后使用 USE 語(yǔ)句選擇數(shù)據(jù)庫(kù)作用相同,如果沒有指定,那么使用 default 數(shù)據(jù)庫(kù)

      -l

      啟用 LDAP 認(rèn)證

      -u

      當(dāng)使用 -l 選項(xiàng)啟用 LDAP 認(rèn)證時(shí),提供用戶名(使用短用戶名,而不是完整的 LDAP 專有名稱distinguished name),shell 會(huì)提示輸入密碼


      JDBC編程


      Impala支持JDBC訪問,JAVA程序通過JDBC驅(qū)動(dòng)訪問Impala。配置Impala的JDBC連接包括以下步驟:


      • 配置Impala JDBC端口


      默認(rèn)的Impala JDBC訪問端口是21050,確保Impala上此端口能被其他機(jī)器訪問;如果使用其他端口,啟動(dòng)impalad時(shí)帶上--hs2_port參數(shù)。


      • 在客戶端安裝Impala JDBC驅(qū)動(dòng)


      客戶端impala JDBC驅(qū)動(dòng)包含一些jar文件,文件列表如下:


      1. 下載上述jar文件到impala JDBC客戶端。

      2. 保存jar文件到CLASSPATH路徑中。

      3. 設(shè)置CLASSPATH環(huán)境變量包含jar文件路徑


      在linux系統(tǒng):增加jar路徑到CLASSPATH前面:比如jar文件保存到/opt/jars/,設(shè)置命令為:export CLASSPATH=/opt/jars/*.jar:$CLASSPATH


      在windows系統(tǒng):在“系統(tǒng)屬性”控制面板中修改“環(huán)境變量”,設(shè)置CLASSPATH開頭包含jar文件路徑


      • Java應(yīng)用程序配置JDBC連接字符串,連接Impalad


      JDBC驅(qū)動(dòng)類是org.apache.hive.jdbc.HiveDriver,連接分為以下幾種:


      1. 連接的Impala集群沒有使用Kerberos鑒權(quán),JDBC連接字符串形式為:jdbc:hive2://host:port/;auth=noSasl

      2. 連接的Impala集群使用Kerberos鑒權(quán),JDBC連接字符串形式為:jdbc:hive2://host:port/;principal=principal_name

      3. 連接的Impala集群使用LDAP鑒權(quán),JDBC連接字符串形式為:jdbc:hive2://host:port/db_name;user=ldap_userid;password=ldap_password


      下面的例子使用Impala JDBC編程接口查詢指定表的數(shù)據(jù):




      04 性能調(diào)優(yōu)


      Impala性能調(diào)優(yōu)使用以下方法:


      • 選擇合適的文件格式


      通常情況,對(duì)大量數(shù)據(jù),Parquet文件格式是最好的,因?yàn)樗Y(jié)合了列存儲(chǔ)布局、大的I / O請(qǐng)求大小、壓縮和編碼。


      • 避免數(shù)據(jù)攝入過程產(chǎn)生許多小文件


      使用INSERT……SELECT復(fù)制表數(shù)據(jù),避免對(duì)任何海量數(shù)據(jù)或影響性能的關(guān)鍵型表使用INSERT……VALUES,因?yàn)槊恳粋€(gè)這樣的語(yǔ)句產(chǎn)生一個(gè)單獨(dú)的小數(shù)據(jù)文件。


      如果在數(shù)據(jù)處理中產(chǎn)生過多小文件,需要使用INSERT……SELECT將數(shù)據(jù)復(fù)制到另外一張表,這樣解決了小文件過多的問題。


      • 選擇合適的分區(qū)技術(shù)


      分區(qū)是一種技術(shù),基于一個(gè)或多個(gè)列的值物理上把數(shù)據(jù)分成多部分。當(dāng)你發(fā)出查詢請(qǐng)求一個(gè)特定分區(qū)鍵列的值或值范圍,Impala可以避免讀取無關(guān)的數(shù)據(jù)可能產(chǎn)生的巨大的磁盤I / O。


      分區(qū)技術(shù)適用于以下情況:


      1. 表的數(shù)據(jù)量非常大,讀取整個(gè)表的時(shí)間不在我們的承受范圍之內(nèi)

      2. 表總是依據(jù)某些特定的列進(jìn)行查詢

      3. 列有合理的基數(shù)(不同值的數(shù)量)

      4. 數(shù)據(jù)已經(jīng)經(jīng)過ETL處理


      • 使用COMPUTE STATS搜集連接查詢中海量數(shù)據(jù)表或者影響性能的關(guān)鍵表的統(tǒng)計(jì)信息

      • 最小化返回結(jié)果給客戶端的傳輸開銷


      使用聚合、過濾、限制、避免精細(xì)打印結(jié)果集等方法返回最小化結(jié)果。


      • 在運(yùn)行查詢前使用EXPLAIN查看執(zhí)行計(jì)劃是否高效合理

      • 在運(yùn)行查詢后使用PROFILE從底層確認(rèn)IO、內(nèi)存消耗、網(wǎng)絡(luò)帶寬占用、CPU使用率等信息是否在預(yù)期范圍內(nèi)


      來源:中興大數(shù)據(jù)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多