當前位置:首頁 » 編程語言 » hadoop和sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hadoop和sql

發布時間: 2023-05-08 10:07:39

1. sql-on-Hadoop技術與資料庫技術的差異在哪裡

主要是方向的差異。

關系資料庫技術建立在關系數據模型之上,是主要用來存儲結構化數據並支持數據的插入、查詢、更新、刪除等操作的資料庫。Hadoop技術為面向大數據分析和處理的並行計算模型。兩者反向不一樣。

簡介:

資料庫是「按照數據結構來組織、存儲和管理數據的倉庫」。是一個長期存儲在計算機內的、有組織的、可共享的、統一管理的大量數據的集合。

資料庫是存放數據的倉庫。它的存儲空間很大,可以存放百萬條、千萬條、上億條數據。但是資料庫並不是隨意地將數據進行存放,是有一定的規則的,否則查詢的效率會很低。當今世界是一個充滿著數據的互聯網世界,充斥著大量的數據。

即這個互聯網世界就是數據世界。數據的來源有很多,比如出行記錄、消費記錄、瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。

2. Hadoop下的impala資料庫語法SQL應用

Impala的SQL解析與執行計劃生成部分是由impala-frontend(Java)實現的,監聽埠是21000。用戶通過Beeswax介面BeeswaxService.query()提交一個請求,在impalad端的處理邏輯是由void ImpalaServer::query(QueryHandle& query_handle, const Query& query)這個函數(在impala-beeswax-server.cc中實現)完成的。
在impala中一條SQL語句先後經歷BeeswaxService.Query->TClientRequest->TExecRequest,最後把TExecRequest交由impala-coordinator分發給多個backend處理。本文主要講一條SQL語句是怎麼一步一步變成TExecRequest的。

3. 請教hadoop與nosql的關系

兩者沒有任何關系啊
hadoop是個分布式的陸帶基礎架構,nosql是指的非關系型資料庫
兩者沒有侍悉喚任何老凱關系

4. Hadoop、Hive、Spark三者的區別和關系

Hadoop分為兩大部分:HDFS、Maprece。

HDFS為海量的數據提供了存儲,而MapRece則為海量的數據提供了計算。

由於編寫MapRece程序繁瑣復雜,而sql語言比較簡單,程序員就開發出了支持sql的hive。hive的出現方便了程序員和沒有計算機背景的數據分析人員。我們只需要編寫相對簡單的sql命令,hive會幫我們翻譯為maprece程序交給計算機去執行。

mapreceh這個計算框架每次執行都是從磁碟中讀取的,而spark則是直接從內存中讀取的。由於MapRece 的框架限制,一個 MapRece 任務只能包含一次 Map 和一次 Rece,計算完成之後,MapRece 會將運算結果寫回到磁碟中(更准確地說是分布式存儲系統)供下次計算使用。如果所做的運算涉及大量循環,比如估計模型參數的梯度下降或隨機梯度下降演算法就需要多次循環使用訓練數據,那麼整個計算過程會不斷重復地往磁碟里讀寫中間結果。這樣的讀寫數據會引起大量的網路傳輸以及磁碟讀寫,極其耗時,而且它們都是沒什麼實際價值的廢操作。因為上一次循環的結果會立馬被下一次使用,完全沒必要將其寫入磁碟。

所以spark可以理解為maprece的改進升級版

5. NoSQL與Hadoop的區別

NoSQL,是not
only
sql,是非關系資料庫,不同於oracle等關系數桐飢據庫。
hadoop,是分虧輪燃布式解決方案,即為Maprece(計算銷虛的)和HDFS(文件系統),使用Hadoop和NoSQL可以構造海量數據解決方案。

6. 會hadoop sql Linux能幹嘛

可以面試一下職位:
1、Linux運維工程師:Linux運維是現在每個企業都不能夠缺少崗位,對於大公司的Linux運維來說是非常重要,還需懂基本的語言,對於小公司來說技術要求相對於低一點,基本用不到什麼太多開發的知識。
2、linux伺服器開發:如果是用C/C++之類的話,要求也很高。因為互聯網行業才人流動性相對大,所以工資可觀,特別是對優化延遲什麼的了解很深入的,發展前景是最好的。這個崗位相對於招聘比較少的,不過這部分的從業人員對於技術要求都是非常高的。
3、Linux內核開發:是比較具有難度的工作崗位了,在手機公司是最常見的,比如說華為、小米等這些公司都有這種職位,工資待遇也是非常不錯的,知識單一化一些,但是答畝操作系統硬體更新是非常快的,操作理論要去更高一些,方向以及就業都是相關的。
4、雲計算:雲計算在目前市場上是Linux學習之後從業比較受關注的,也是比較火的技術之一,稿沒對大數據以及人工智慧有著很大的支撐作用,相對於來說這塊的人員從業薪資待遇是非常高的,同時技術基礎要求也是高標準的。
5、自動化清敬森運維:自動化運維技術一直都有,不過近年來因為python技術的興起,讓自動化運維再次火爆起來。要求運維人員對開發的掌握程度較高。也是目前的高薪崗位之一。

7. 大數據分析一般用學習什麼技術_適用於大數據分析的技術哪一個

1、Java編程技術

Java編程技術是大數據學習的基礎,Java是一種強類型語言,擁有極高的跨平台能力,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等,是大數據工程師最喜歡的編程工具,因此,想學好大數據,掌握Java基礎是必不可少的!

2、Linux命令

對於大數據開發通常是在Linux環境下進行的,相比Linux操作系統,Windows操作系統是封閉的操作系統,開源的大數據軟體很受限制,因此,想從事大數據開發相關工作,還需掌握Linux基礎操作命令。

3、Hadoop

Hadoop是大數據開發的重要框架,其核心是HDFS和MapRece,HDFS為海量的數據提供了存儲,MapRece為海量的數據提供了計算,因此,需要重點掌握,除此之外,還需要掌握Hadoop集群、Hadoop集群管理、YARN以及Hadoop高級管理等相關技術與操作!

4、Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行,十分適合數據倉庫的統計分析。對於Hive需掌握其安裝、應用及高級操作等。野蠢埋

5、Avro與Protobuf

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行,十分適合數據倉庫的統計分析。對於Hive需掌握其安裝、應用及高級操作等。

6、ZooKeeper

ZooKeeper是Hadoop和Hbase的重要組件,是一個為分布式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分布式同步、組件服務等,在大數據開發中要掌握ZooKeeper的常用命令及功能的實現方法。

7、HBase

HBase是一個分布式的、面向列的開源資料庫,它不同於一般的關系資料庫,更適合於非結構化數據存儲的資料庫,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,大數據開發需掌握HBase基礎知識、應用、架構以及高級用檔隱法等。

8、phoenix

phoenix是用Java編寫的基於JDBCAPI操作HBase的開源SQL引擎,其具有動態列、散列載入、查詢伺服器、追蹤、事務、用戶自定義函數、二級索引、命名空間映射、數據收集、行時間戳列、分頁查詢、跳躍查詢、視圖以及多租戶的特性,大數據開發需掌握其原理和使用方法。

9、Redis

phoenix是用Java編寫的基於JDBCAPI操作HBase的開源SQL引擎,其具有動態列、散列載入、查詢伺服器、追蹤、事務、用戶自定義函數、二級索引、命名空間映射、數據收集、行時間戳列、分頁查詢、跳躍查詢、視圖以及頌螞多租戶的特性,大數據開發需掌握其原理和使用方法。

8. 技術干貨:SQL on Hadoop在快手大數據平台的實踐與優化

快手大數據架構工程師鍾靚近日在 A2M 人工智慧與機器學習創新峰會分享了題為《SQL on Hadoop 在快手大數據平台的實踐與優化》的演講,主要從 SQL on Hadoop 介紹、快手 SQL on Hadoop 平台概述、SQL on Hadoop 在快手的使用經驗和改進分析、快手 SQL on Hadoop 的未來計劃四方面介紹了 SQL on Hadoop 架構。

SQL on Hadoop,顧名思義它是基於 Hadoop 生態的一個 SQL 引擎架構,我們其實常常聽到 Hive、SparkSQL、Presto、Impala 架構。接下來,我會簡單的描述一下常用的架構情況。

HIVE,一個數據倉庫系統。它將數據結構映射到存儲的數據中,通過 SQL 對大規模的分布式存儲數據進行讀、寫、管理。

根據定義的數據模式,以及輸出 Storage,它會對輸入的 SQL 經過編譯、優化,生成對應引擎的任務,然後調度執行生成的任務。

HIVE 當前支持的引擎類型有:MR、SPARK、TEZ。

基於 HIVE 本身的架構,還有一些額外的服務提供方式,比如 HiveServer2 與 MetaStoreServer 都是 Thrift 架構。

此外,HiveServer2 提供遠程客戶端提交 SQL 任務的功能,MetaStoreServer 則提供遠程客戶端操作元數據的功能。

Spark,一個快速、易用,以 DAG 作為執行模式的大規模數據處理的統一分析引擎,主要模塊分為 SQL 引擎、流式處理 、機器學習、圖處理。

SPARKSQL 基於 SPARK 的計算引擎,做到了統一數據訪問,集成 Hive,支持標准 JDBC 連接。SPARKSQL 常用於數據交互分析的場景。

SPARKSQL 的主要執行邏輯,首先是將 SQL 解析為語法樹,然後語義分析生成邏輯執行計劃,接著與元數據交互,進行邏輯執行計劃的優化,最後,將邏輯執行翻譯為物理執行計劃,即 RDD lineage,並執行任務。

PRESTO,一個互動式分析查詢的開源分布式 SQL 查詢引擎。

因為基於內存計算,PRESTO 的計算性能大於有大量 IO 操作的 MR 和 SPARK 引擎。它有易於彈性擴展,支持可插拔連接的特點。

業內的使用案例很多,包括 FaceBook、AirBnb、美團等都有大規模的使用。

我們看到這么多的 SQL on Hadoop 架構,它側面地說明了這種架構比較實用且成熟。利用 SQL on Hadoop 架構,我們可以實現支持海量數據處理的需求。

查詢平台每日 SQL 總量在 70 萬左右,DQL 的總量在 18 萬左右。AdHoc 集群主要用於交互分析及機器查詢,DQL 平均耗時為 300s;AdHoc 在內部有 Loacl 任務及加速引擎應用,所以查詢要求耗時較低。

ETL 集群主要用於 ETL 處理以及報表的生成。DQL 平均耗時為 1000s,DQL P50 耗時為 100s,DQL P90 耗時為 4000s,除上述兩大集群外,其它小的集群主要用於提供給單獨的業務來使用。

服務層是對上層進行應用的。在上層有四個模塊,這其中包括同步服務、ETL 平台、AdHoc 平台以及用戶程序。在調度上層,同樣也有四方面的數據,例如服務端日誌,對它進行處理後,它會直接接入到 HDFS 里,我們後續會再對它進行清洗處理;服務打點的數據以及資料庫信息,則會通過同步服務入到對應的數據源里,且我們會將元數據信息存在後端元數據系統中。

網頁爬取的數據會存入 hbase,後續也會進行清洗與處理。

HUE、NoteBook 主要提供的是互動式查詢的系統。報表系統、BI 系統主要是 ETL 處理以及常見的報表生成,額外的元數據系統是對外進行服務的。快手現在的引擎支持 MR、Presto 及 Spark。

管理系統主要用於管理我們當前的集群。HiveServer2 集群路由系統,主要用於引擎的選擇。監控系統以及運維系統,主要是對於 HiveServer2 引擎進行運維。

我們在使用 HiveServer2 過程中,遇到過很多問題。接下來,我會詳細的為大家闡述快手是如何進行優化及實踐的。

當前有多個 HiveServer2 集群,分別是 AdHoc 與 ETL 兩大集群,以及其他小集群。不同集群有對應的連接 ZK,客戶端可通過 ZK 連接 HiveServer2 集群。

為了保證核心任務的穩定性,將 ETL 集群進行了分級,分為核心集群和一般集群。在客戶端連接 HS2 的時候,我們會對任務優先順序判定,高優先順序的任務會被路由到核心集群,低優先順序的任務會被路由到一般集群。

BeaconServer 服務為後端 Hook Server 服務,配合 HS2 中的 Hook,在 HS2 服務之外實現了所需的功能。當前支持的模塊包括路由、審計、SQL 重寫、任務控制、錯誤分析、優化建議等。

•無狀態,BeaconServer 服務支持水平擴展。基於請求量的大小,可彈性調整服務的規模。

•配置動態載入,BeaconServer 服務支持動態配置載入。各個模塊支持開關,服務可動態載入配置實現上下線。比如路由模塊,可根據後端加速引擎集群資源情況,進行路由比率調整甚至熔斷。

•無縫升級,BeaconServer 服務的後端模塊可單獨進行下線升級操作,不會影響 Hook 端 HS2 服務。

•Hive 支持 SPARK 與 TEZ 引擎,但不適用於生產環境。

•SQL on Hadoop 的 SQL 引擎各有優缺點,用戶學習和使用的門檻較高。

•不同 SQL 引擎之間的語法和功能支持上存在差異,需要大量的測試和兼容工作,完全兼容的成本較高。

•不同 SQL 引擎各自提供服務會給數倉的血緣管理、許可權控制、運維管理、資源利用都帶來不便。

•在 Hive 中,自定義實現引擎。

•自動路由功能,不需要設置引擎,自動選擇適合的加速引擎。

•根絕規則匹配 SQL,只將兼容的 SQL 推給加速引擎。

•復用 HiveServer2 集群架構。

基於 HiveServer2,有兩種實現方式。JDBC 方式是通過 JDBC 介面,將 SQL 發送至後端加速引擎啟動的集群上。PROXY 方式是將 SQL 下推給本地的加速引擎啟動的 Client。

JDBC 方式啟動的後端集群,均是基於 YARN,可以實現資源的分時復用。比如 AdHoc 集群的資源在夜間會自動回收,作為報表系統的資源進行復用。

路由方案基於 HS2 的 Hook 架構,在 HS2 端實現對應 Hook,用於引擎切換;後端 BeaconServer 服務中實現路由 服務,用於 SQL 的路由規則的匹配處理。不同集群可配置不同的路由規則。

為了保證後算路由服務的穩定性,團隊還設計了 Rewrite Hook,用於重寫 AdHoc 集群中的 SQL,自動添加 LIMIT 上限,防止大數據量的 SCAN。

•易於集成,當前主流的 SQL 引擎都可以方便的實現 JDBC 與 PROXY 方式。再通過配置,能簡單的集成新的查詢引擎,比如 impala、drill 等。

•自動選擇引擎,減少了用戶的引擎使用成本,同時也讓遷移變得更簡單。並且在加速引擎過載 的情況下,可以動態調整比例,防止因過載 對加速性能的影響。

•自動降級,保證了運行的可靠性。SQL 路由支持 failback 模塊,可以根據配置選擇是否再路由引擎執行失敗後,回滾到 MR 運行。

•模塊復用,對於新增的引擎,都可以復用 HiveServer2 定製的血緣採集、許可權認證、並發鎖控制等方案,大大降低了使用成本。

•資源復用,對於 adhoc 查詢佔用資源可以分時動態調整,有效保證集群資源的利用率。

當查詢完成後,本地會輪詢結果文件,一直獲取到 LIMIT 大小,然後返回。這種情況下,當有大量的小文件存在,而大文件在後端的時候,會導致 Bad Case,不停與 HDFS 交互,獲取文件信息以及文件數據,大大拉長運行時間。

在 Fetch 之前,對結果文件的大小進行預排序,可以有數百倍的性能提升。

示例:當前有 200 個文件。199 個小文件一條記錄 a,1 個大文件混合記錄 a 與 test 共 200 條,大文件名 index 在小文件之後。

Hive 中有一個 SimpleFetchOptimizer 優化器,會直接生成 FetchTask,減小資源申請時間與調度時間。但這個優化會出現瓶頸。如果數據量小,但是文件數多,需要返回的條數多,存在能大量篩掉結果數據的 Filter 條件。這時候串列讀取輸入文件,導致查詢延遲大,反而沒起到加速效果。

在 SimpleFetchOptimizer 優化器中,新增文件數的判斷條件,最後將任務提交到集群環境,通過提高並發來實現加速。

示例:讀取當前 500 個文件的分區。優化後的文件數閾值為 100。

一個表有大量的子分區,它的 DESC 過程會與元數據交互,獲取所有的分區。但最後返回的結果,只有跟表相關的信息。

與元數據交互的時候,延遲了整個 DESC 的查詢,當元數據壓力大的時候甚至無法返回結果。

針對於 TABLE 的 DESC 過程,直接去掉了跟元數據交互獲取分區的過程,加速時間跟子分區數量成正比。

示例:desc 十萬分區的大表。

•復用 split 計算的數據,跳過 rece 估算重復統計輸入過程。輸入數據量大的任務,調度速率提升 50%。

•parquetSerde init 加速,跳過同一表的重復列剪枝優化,防止 map task op init 時間超時。

•新增 LazyOutputFormat,有 record 輸出再創建文件,避免空文件的產生,導致下游讀取大量空文件消耗時間。

•statsTask 支持多線程聚合統計信息,防止中間文件過多導致聚合過慢,增大運行時間。

•AdHoc 需要打開並行編譯,防止 SQL 串列編譯導致整體延遲時間增大的問題。

HS2 啟動時會對物化視圖功能進行初始化,輪詢整個元資料庫,導致 HS2 的啟動時間非常長,從下線狀態到重新上線間隔過大,可用性很差。

將物化視圖功能修改為延遲懶載入,單獨線程載入,不影響 HS2 的服務啟動。物化視圖支持載入中獲取已緩存信息,保證功能的可用性。

HS2 啟動時間從 5min+提升至<5s。

HS2 本身上下線成本較高,需要保證服務上的任務全部執行完成才能進行操作。配置的修改可作為較高頻率的操作,且需要做到熱載入。

在 HS2 的 ThriftServer 層我們增加了介面,與運維系統打通後,配置下推更新的時候自動調用,可實現配置的熱載入生效。

HiveServer2 的 scratchdir 主要用於運行過程中的臨時文件存儲。當 HS2 中的會話創建時,便會創建 scratchdir。在 HDFS 壓力大的時候,大量的會話會阻塞在創建 scratchdir 過程,導致連接數堆積至上限,最終 HS2 服務無法再連入新連接,影響服務可用性。

對此,我們先分離了一般查詢與 create temporay table 查詢的 scratch 目錄,並支持 create temporay table 查詢的 scratch 的懶創建。當 create temporay table 大量創建臨時文件,便會影響 HDFS NameNode 延遲時間的時候,一般查詢的 scratchdir HDFS NameNode 可以正常響應。

此外,HS2 還支持配置多 scratch,不同的 scratch 能設置載入比率,從而實現 HDFS 的均衡負載。

Hive 調度其中存在兩個問題。

一、子 Task 非執行狀態為完成情況的時候,若有多輪父 Task 包含子 Task,導致子 Task 被重復加入調度隊列。這種 Case,需要將非執行狀態修改成初始化狀態。

二、當判斷子 Task 是否可執行的過程中,會因為狀態檢測異常,無法正常加入需要調度的子 Task,從而致使查詢丟失 Stage。而這種 Case,我們的做法是在執行完成後,加入一輪 Stage 的執行結果狀態檢查,一旦發現有下游 Stage 沒有完成,直接拋出錯誤,實現查詢結果狀態的完備性檢查。

•HS2 實現了介面終止查詢 SQL。利用這個功能,可以及時終止異常 SQL。

•metastore JDOQuery 查詢優化,關鍵字異常跳過,防止元數據長時間卡頓或者部分異常查詢影響元數據。

•增加開關控制,強制覆蓋外表目錄,解決 insert overwrite 外表,文件 rename 報錯的問題。

•hive parquet 下推增加關閉配置,避免 parquet 異常地下推 OR 條件,導致結果不正確。

•executeForArray 函數 join 超大字元串導致 OOM,增加限制優化。

•增加根據 table 的 schema 讀取分區數據的功能,避免未級聯修改分區 schema 導致讀取數據異常。

•部分用戶並沒有開發經驗,無法處理處理引擎返回的報錯。

•有些錯誤的報錯信息不明確,用戶無法正確了解錯誤原因。

•失敗的任務排查成本高,需要對 Hadoop 整套系統非常熟悉。

•用戶的錯誤 SQL、以及需要優化的 SQL,大量具有共通性。人力維護成本高,但系統分析成本低。

SQL 專家系統基於 HS2 的 Hook 架構,在 BeaconServer 後端實現了三個主要的模塊,分別是 SQL 規則控制模塊、SQL 錯誤分析模塊,與 SQL 優化建議模塊。SQL 專家系統的知識庫,包含關鍵字、原因說明、處理方案等幾項主要信息,存於後端資料庫中,並一直積累。

通過 SQL 專家系統,後端可以進行查詢 SQL 的異常控制,避免異常 SQL 的資源浪費或者影響集群穩定。用戶在遇到問題時,能直接獲取問題的處理方案,減少了使用成本。

示例:空分區查詢控制。

SQL 專家系統能解決一部分 HS2 的任務執行的錯誤診斷需求,但是比如作業 健康 度、任務執行異常等問題原因的判斷,需要專門的系統來解決,為此我們設計了作業診斷系統。

作業診斷系統在 YARN 的層面,針對不同的執行引擎,對搜集的 Counter 和配置進行分析。在執行層面,提出相關的優化建議。

作業診斷系統的數據也能通過 API 提供給 SQL 專家系統,補充用於分析的問題原因。

作業診斷系統提供了查詢頁面來查詢運行的任務。以下是命中 map 輸入過多規則的任務查詢過程:

9. hadoop中centos6yum安裝sql失敗

可能因為網路問題或其他原因導致安裝失敗。您可以嘗試以下解決方案:

1.檢查網路連接:確保您的網路連接正常,可以通過ping命返鬧滾令測試網路連接。

2.更新yum源:如果您的yum源過期或不可用,可以嘗試更彎圓新yum源。具體方法可以參考CentOS官方文檔漏余或其他相關文檔。

3.更換yum源:如果更新yum源仍然無法解決問題,可以嘗試更換其他可用的yum源。

4.手動安裝SQL軟體包:如果以上方法都無法解決問題,您可以手動下載SQL軟體包並安裝。具體方法可以參考相關文檔或官方網站。

希望這些解決方案可以幫助您解決問題。如果您還有其他問題,請隨時向我提問。

10. hadoop與傳統的關系型資料庫(如oracle)相比,有什麼優勢及劣勢

hadoop的hdfs支持海量數據量存儲 maprece支持對海量數據的分布式處理x0dx0aoracle雖然可以搭建集群 但是當數據量達到一定限度之後查詢處理速度會變得很慢 且對機器性能要求很高x0dx0a其實這兩個東西不是同類 hadoop是一個分布式雲處理架構,傾向於數據計算 而oracle是一個關系型資料庫,傾向於數據存儲。要說比較可以比較hbase與oracle。x0dx0ahbase是一種nosql資料庫,列式資料庫,支持海量數據存儲,支持列的擴展,但是查詢操作較復雜,不如oracle這類關系型資料庫簡單,且只支持一個索引,但是Hbase在表結構設置合理情況下,查詢速度跟數據量大小沒有太大關系,即數據量的大小不會影響到查詢速度,順便說句Hbase查詢速度可以達到ms級