欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:spark 大數(shù)據(jù) 數(shù)據(jù)倉庫

柚子快報(bào)激活碼778899分享:spark 大數(shù)據(jù) 數(shù)據(jù)倉庫

http://yzkb.51969.com/

一.數(shù)據(jù)倉庫概述

1.什么是數(shù)據(jù)倉庫?

Bill Inmon:數(shù)據(jù)倉庫是一個(gè)面向主題的、集成的、隨時(shí)間變化的、但信息本身相對穩(wěn)定的數(shù)據(jù)集合,用于對管理決策過程的支持。

Ralph Kimball:數(shù)據(jù)倉庫是一個(gè)將源系統(tǒng)數(shù)據(jù)抽取、清洗、規(guī)格化、提交到維度數(shù)據(jù)存儲(chǔ)的系統(tǒng),為決策的制定提供查詢和分析功能的支持與實(shí)現(xiàn)。

數(shù)據(jù)倉庫的目的是構(gòu)建面向分析的集成化數(shù)據(jù)環(huán)境,為企業(yè)提供決策支持。

2.數(shù)據(jù)倉庫基本概念

1.數(shù)據(jù)源

從外部為數(shù)據(jù)倉庫系統(tǒng)提供進(jìn)行分析的數(shù)據(jù),這些數(shù)據(jù)來源稱為數(shù)據(jù)倉庫的數(shù)據(jù)源。數(shù)據(jù)源并不局限于傳統(tǒng)數(shù)據(jù)庫,也可以是非結(jié)構(gòu)化的信息數(shù)據(jù)。

2.ETL ETL 是將業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)經(jīng)過抽?。‥xtract)、**清洗轉(zhuǎn)換(Transform)和加載(Load)**到數(shù)據(jù)倉庫的過程,目的是將企業(yè)中的分散、凌亂、標(biāo)準(zhǔn)不統(tǒng)一的數(shù)據(jù)整合到一起,為企業(yè)的決策提供分析依據(jù)。

ETL 處理分為五大模塊,分別是:

數(shù)據(jù)抽取 數(shù)據(jù)清洗 數(shù)據(jù)轉(zhuǎn)換 規(guī)則檢查 數(shù)據(jù)裝載。 各模塊之間靈活組合,形成 ETL 處理流程。下面簡單介紹一下各模塊之間的功能。

3.數(shù)據(jù)抽取 數(shù)據(jù)倉庫既然是面向主題的,那么在數(shù)據(jù)源中,只有那些與主題相關(guān)的內(nèi)容才是必需的、有使用價(jià)值的。因此,必須以主題的需求為依據(jù),對數(shù)據(jù)源的內(nèi)容進(jìn)行有目的地選擇,這一過程被稱為“數(shù)據(jù)抽取”(Data Extraction)。對于數(shù)據(jù)的抽取,是從各個(gè)不同的數(shù)據(jù)源抽取到 ODS(Operational Data Store,操作型數(shù)據(jù)存儲(chǔ))中。

(1)對于與存放 DW 的數(shù)據(jù)庫系統(tǒng)相同的數(shù)據(jù)源處理方法

一般情況下,DBMS(Mysql、SQLServer)都會(huì)提供數(shù)據(jù)庫連接功能,在 DW 數(shù)據(jù)庫服務(wù)器和原業(yè)務(wù)系統(tǒng)之間建立直接的連接關(guān)系,接下來就可以寫查詢語句直接訪問。

(2)對于與存放 DW 的數(shù)據(jù)庫系統(tǒng)不同的數(shù)據(jù)源處理方法

一種是通過工具將數(shù)據(jù)源導(dǎo)出成 .txt 或者 .xls 文件,然后再將這些源系統(tǒng)文件導(dǎo)入到 ODS 中。另一種方法是通過程序接口來完成。

(3)對于文件類型數(shù)據(jù)源(.txt/.xls)

業(yè)務(wù)人員可以利用數(shù)據(jù)庫工具將這些數(shù)據(jù)導(dǎo)入到指定的數(shù)據(jù)庫,然后從指定的數(shù)據(jù)庫中抽取。或者業(yè)務(wù)人員借助工具實(shí)現(xiàn)。

(4)增量更新問題

一般情況,業(yè)務(wù)系統(tǒng)會(huì)記錄業(yè)務(wù)發(fā)生的時(shí)間,可以用作增量的標(biāo)志,每次抽取之前首先判斷 ODS 中記錄最大的時(shí)間,然后根據(jù)這個(gè)時(shí)間去業(yè)務(wù)系統(tǒng)取大于這個(gè)時(shí)間的所有記錄。

4.數(shù)據(jù)倉庫具有以下特點(diǎn):

集成性(Integration):數(shù)據(jù)倉庫集成了來自多個(gè)不同來源的數(shù)據(jù),包括內(nèi)部和外部數(shù)據(jù)源,使得用戶可以在一個(gè)統(tǒng)一的平臺(tái)上訪問和分析數(shù)據(jù)。 主題性(Subject-Oriented):數(shù)據(jù)倉庫按照特定的主題或業(yè)務(wù)領(lǐng)域進(jìn)行組織和存儲(chǔ),而不是按照應(yīng)用系統(tǒng)的結(jié)構(gòu)來組織數(shù)據(jù)。這使得用戶可以根據(jù)業(yè)務(wù)需求來理解和分析數(shù)據(jù)。 時(shí)態(tài)性(Time-Variant):數(shù)據(jù)倉庫存儲(chǔ)的數(shù)據(jù)包含了歷史數(shù)據(jù),用戶可以分析和了解數(shù)據(jù)隨時(shí)間的變化趨勢,支持時(shí)間序列分析和歷史數(shù)據(jù)的比較。 非易失性(Non-Volatile):數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉庫就不會(huì)被輕易修改或刪除,而是保留在其中作為歷史記錄,確保數(shù)據(jù)的完整性和可追溯性。 一致性(Consistency):數(shù)據(jù)倉庫中的數(shù)據(jù)經(jīng)過清洗、集成和轉(zhuǎn)換,保證了數(shù)據(jù)的一致性和準(zhǔn)確性,使用戶可以信任數(shù)據(jù)進(jìn)行決策和分析。 易用性(Ease of use):數(shù)據(jù)倉庫提供了靈活、直觀的界面和工具,使用戶可以方便地訪問、查詢和分析數(shù)據(jù),而無需深入了解數(shù)據(jù)的底層結(jié)構(gòu)和技術(shù)細(xì)節(jié)。 高性能(High Performance):數(shù)據(jù)倉庫通過優(yōu)化存儲(chǔ)結(jié)構(gòu)、查詢處理和索引技術(shù),提供了高性能的數(shù)據(jù)查詢和分析能力,以滿足用戶對實(shí)時(shí)和大規(guī)模數(shù)據(jù)處理的需求。

二.HIVE數(shù)據(jù)庫及表操作

1.hive數(shù)據(jù)類型

原始數(shù)據(jù)類型:

TINYINT: 一個(gè)字節(jié)的有符號(hào)整數(shù),取值范圍為-128到127。SMALLINT: 兩個(gè)字節(jié)的有符號(hào)整數(shù),取值范圍為-32768到32767。INT/INTEGER: 四個(gè)字節(jié)的有符號(hào)整數(shù),取值范圍為-2147483648到2147483647。BIGINT: 八個(gè)字節(jié)的有符號(hào)整數(shù),取值范圍為-9223372036854775808到9223372036854775807。FLOAT: 單精度浮點(diǎn)數(shù),取值范圍為-3.4028235E38到3.4028235E38。DOUBLE: 雙精度浮點(diǎn)數(shù),取值范圍為-1.7976931348623157E308到1.7976931348623157E308。BOOLEAN: 代表布爾值,取值為true或false。STRING: 字符串類型,支持任意長度的字符串。VARCHAR: 可變長度的字符串類型,可以指定最大長度。CHAR: 固定長度的字符串類型,需要指定長度。 日期/時(shí)間類型:

DATE: 代表日期,以"YYYY-MM-DD"的格式存儲(chǔ)。TIMESTAMP: 代表時(shí)間戳,存儲(chǔ)日期和時(shí)間信息。 復(fù)雜數(shù)據(jù)類型:

ARRAY: 數(shù)組類型,可以包含多個(gè)相同類型的元素。MAP: 映射類型,類似于字典,包含鍵值對。STRUCT: 結(jié)構(gòu)類型,可以包含多個(gè)字段。 二進(jìn)制類型:

BINARY: 二進(jìn)制數(shù)據(jù)類型,存儲(chǔ)二進(jìn)制數(shù)據(jù)。

2.hive的DDL操作

創(chuàng)建數(shù)據(jù)庫: CREATE DATABASE database_name;

使用數(shù)據(jù)庫: USE database_name;

展示數(shù)據(jù)庫列表: SHOW DATABASES;

創(chuàng)建表: CREATE TABLE table_name (

column1_name column1_data_type,

column2_name column2_data_type,

...

) [ROW FORMAT ...] [STORED AS ...] [LOCATION ...];

展示表列表: SHOW TABLES;

查看表結(jié)構(gòu): DESC[RIBE] table_name;

刪除表: DROP TABLE table_name;

創(chuàng)建分區(qū)表: CREATE TABLE table_name (

column1_name column1_data_type,

column2_name column2_data_type,

...

) PARTITIONED BY (partition_column_name partition_column_data_type, ...);

添加分區(qū): ALTER TABLE table_name ADD PARTITION (partition_column=value, ...);

刪除分區(qū):

ALTER TABLE table_name DROP PARTITION (partition_column=value, ...);

....

三.hive元數(shù)據(jù)

1.hive元數(shù)據(jù)介紹

??

Hive中的元數(shù)據(jù)是指描述和管理存儲(chǔ)在Hive中的數(shù)據(jù)的數(shù)據(jù),也稱為表的元數(shù)據(jù)。這些元數(shù)據(jù)包括表的結(jié)構(gòu)(列名、數(shù)據(jù)類型、分區(qū)等)、表的位置(存儲(chǔ)位置)、表的屬性(例如壓縮格式、存儲(chǔ)格式)以及其他相關(guān)信息。Hive使用元數(shù)據(jù)來管理數(shù)據(jù)和執(zhí)行查詢。

元數(shù)據(jù)通常存儲(chǔ)在Hive的元存儲(chǔ)數(shù)據(jù)庫中,默認(rèn)情況下是Derby數(shù)據(jù)庫,但也可以配置為使用其他數(shù)據(jù)庫,如MySQL或PostgreSQL。元數(shù)據(jù)由Hive的元數(shù)據(jù)管理服務(wù)(Metastore)來管理和維護(hù)。

通過元數(shù)據(jù),用戶可以輕松地了解Hive中可用的表、表的結(jié)構(gòu)、存儲(chǔ)位置等信息。元數(shù)據(jù)還可以幫助Hive優(yōu)化查詢執(zhí)行,例如通過元數(shù)據(jù)了解表的分區(qū)信息,可以避免掃描整個(gè)表來執(zhí)行查詢,從而提高查詢性能。

總的來說,Hive中的元數(shù)據(jù)對于管理和查詢存儲(chǔ)在Hive中的數(shù)據(jù)非常重要,它提供了關(guān)于數(shù)據(jù)的結(jié)構(gòu)和位置的關(guān)鍵信息,為用戶提供了方便的數(shù)據(jù)管理和查詢功能。

2.元數(shù)據(jù)概念:

元數(shù)據(jù)的概念指的是描述數(shù)據(jù)的數(shù)據(jù)。簡單來說,元數(shù)據(jù)是關(guān)于數(shù)據(jù)的信息,而不是數(shù)據(jù)本身。它提供了關(guān)于數(shù)據(jù)的特征、結(jié)構(gòu)、屬性以及其它相關(guān)信息的描述。元數(shù)據(jù)通常用于幫助組織、管理和理解數(shù)據(jù)。

在計(jì)算機(jī)科學(xué)領(lǐng)域,元數(shù)據(jù)扮演著重要的角色,它們在各種系統(tǒng)和應(yīng)用中被廣泛使用。例如,在數(shù)據(jù)庫中,元數(shù)據(jù)描述了表的結(jié)構(gòu)、列的數(shù)據(jù)類型、索引信息等;在文件系統(tǒng)中,元數(shù)據(jù)描述了文件的大小、創(chuàng)建時(shí)間、修改時(shí)間等屬性;在數(shù)據(jù)倉庫中,元數(shù)據(jù)描述了數(shù)據(jù)集的來源、格式、變換規(guī)則等。

元數(shù)據(jù)對于數(shù)據(jù)管理、數(shù)據(jù)分析、數(shù)據(jù)治理等方面都至關(guān)重要。它們可以幫助用戶理解數(shù)據(jù)的含義和結(jié)構(gòu),提高數(shù)據(jù)的可發(fā)現(xiàn)性和可理解性,同時(shí)也為數(shù)據(jù)集成、數(shù)據(jù)質(zhì)量控制等提供支持。

四.Hive高級操作

一.Hive 的高級操作 Hive 提供了豐富的功能來處理和分析大規(guī)模數(shù)據(jù)集。除了基本的 CRUD(創(chuàng)建、讀取、更新、刪除)操作,Hive 還支持一些高級操作,能夠滿足更復(fù)雜的數(shù)據(jù)處理需求。

1. 分區(qū)和分桶 分區(qū) (Partitioning) 分區(qū)是將表的數(shù)據(jù)分成更小的部分,以提高查詢性能和管理效率。分區(qū)可以基于一個(gè)或多個(gè)列,例如日期、國家等。使用分區(qū)后,Hive 只需掃描相關(guān)分區(qū)中的數(shù)據(jù),從而減少掃描的數(shù)據(jù)量。

創(chuàng)建分區(qū)表示例:

CREATE TABLE sales ( item_id INT, amount DOUBLE ) PARTITIONED BY (country STRING, year INT, month INT, day INT);

加載數(shù)據(jù)到分區(qū)表:

LOAD DATA INPATH 'hdfs:///path/to/data' INTO TABLE sales PARTITION (country='USA', year=2023, month=6, day=1);

分桶 (Bucketing) 分桶是將數(shù)據(jù)進(jìn)一步劃分成更小的部分,常用于分區(qū)表。每個(gè)分區(qū)可以包含多個(gè)桶,桶的數(shù)量是預(yù)先定義的,數(shù)據(jù)根據(jù)哈希值分配到不同的桶中。

創(chuàng)建分桶表示例:

CREATE TABLE bucketed_sales ( item_id INT, amount DOUBLE ) CLUSTERED BY (item_id) INTO 10 BUCKETS;

2. 動(dòng)態(tài)分區(qū)插入 動(dòng)態(tài)分區(qū)插入允許在插入數(shù)據(jù)時(shí)自動(dòng)創(chuàng)建分區(qū),而不需要提前手動(dòng)創(chuàng)建分區(qū)。

開啟動(dòng)態(tài)分區(qū):

SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;

動(dòng)態(tài)分區(qū)插入示例:

INSERT INTO TABLE sales PARTITION (country, year, month, day) SELECT item_id, amount, country, year, month, day FROM staging_sales;

3. 窗口函數(shù) 窗口函數(shù)在數(shù)據(jù)分析中非常有用,能夠在指定的數(shù)據(jù)窗口(如行或分區(qū))內(nèi)執(zhí)行復(fù)雜的計(jì)算。

窗口函數(shù)示例:

SELECT item_id, amount, RANK() OVER (PARTITION BY country ORDER BY amount DESC) as rank FROM sales;

4. 視圖和物化視圖 視圖是基于查詢定義的虛擬表,物化視圖則存儲(chǔ)查詢的結(jié)果,提高查詢性能。

創(chuàng)建視圖示例:

CREATE VIEW high_sales AS SELECT item_id, amount FROM sales WHERE amount > 1000;

創(chuàng)建物化視圖示例:

CREATE MATERIALIZED VIEW monthly_sales_summary AS SELECT year, month, SUM(amount) as total_sales FROM sales GROUP BY year, month;

5. 外部表 外部表將 Hive 表映射到外部存儲(chǔ)(如 HDFS 上的文件),刪除外部表時(shí)數(shù)據(jù)不會(huì)被刪除。

創(chuàng)建外部表示例:

CREATE EXTERNAL TABLE external_sales ( item_id INT, amount DOUBLE ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'hdfs:///path/to/external/data';

6. UDF、UDAF 和 UDTF Hive 支持用戶自定義函數(shù)(UDF)、用戶自定義聚合函數(shù)(UDAF)和用戶自定義表生成函數(shù)(UDTF),以擴(kuò)展 Hive 的功能。

創(chuàng)建 UDF 示例(Java 代碼):

package com.example.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class UpperCaseUDF extends UDF { public Text evaluate(Text input) { if (input == null) { return null; } return new Text(input.toString().toUpperCase()); } }

注冊和使用 UDF:

ADD JAR /path/to/udf.jar; CREATE TEMPORARY FUNCTION upper_case as 'com.example.hive.udf.UpperCaseUDF'; SELECT upper_case(name) FROM users;

7. 數(shù)據(jù)類型轉(zhuǎn)換和操作 Hive 支持多種數(shù)據(jù)類型,并提供豐富的數(shù)據(jù)轉(zhuǎn)換和操作函數(shù)。

日期函數(shù)示例:

SELECT TO_DATE('2023-06-01') as date; SELECT DATE_ADD('2023-06-01', 10) as date_plus_10_days;

字符串函數(shù)示例:

SELECT CONCAT(first_name, ' ', last_name) as full_name FROM users; SELECT SUBSTR(name, 1, 3) as name_prefix FROM users;

8. 索引 索引可以加快查詢速度,雖然在 Hive 中索引使用較少,但對于特定查詢場景,索引可以顯著提高性能。

創(chuàng)建索引示例:

CREATE INDEX idx_item_id ON TABLE sales (item_id) AS 'COMPACT' WITH DEFERRED REBUILD;

重建索引:

ALTER INDEX idx_item_id ON sales REBUILD;

五.hive函數(shù)與Streaming

?

Hadoop?Streaming提供了一個(gè)便于進(jìn)行MapReduce編程的工具包,使用它可以基于一些可執(zhí)行命令、腳本語言或其他編程語言來實(shí)現(xiàn)Mapper和 Reducer,Streaming方式是基于Unix系統(tǒng)的標(biāo)準(zhǔn)輸入輸出來進(jìn)行MapReduce Job的運(yùn)行。

任何支持標(biāo)準(zhǔn)輸入輸出特性的編程語言都可以使用Streaming方式來實(shí)現(xiàn)MapReduce?Job,基本原理就是輸入從Unix系統(tǒng)標(biāo)準(zhǔn)輸入,輸出使用Unix系統(tǒng)的標(biāo)準(zhǔn)輸出。

Streaming的實(shí)現(xiàn)需要TRANSFORM()函數(shù)和USING關(guān)鍵字,TRANSFORM()的參數(shù)是表的列名,USING關(guān)鍵字用于指定腳本

六.Hive視圖與索引

1、Hive視圖基本介紹 視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。Hive 中的視圖和RDBMS中視圖的概念一致,都是一組數(shù)據(jù)的邏輯表示,本質(zhì)上就是一條SELECT語句的結(jié)果集。視圖是純粹的邏輯對象,沒有關(guān)聯(lián)的存儲(chǔ)(Hive 3.0.0引入的物化視圖除外),當(dāng)查詢引用視圖時(shí),Hive可以將視圖的定義與查詢結(jié)合起來,例如將查詢中的過濾器推送到視圖中。

2、Hive視圖特點(diǎn) (1)不支持物化視圖 ?;

(2)只能查詢,不能做加載數(shù)據(jù)操作 ? ;

(3)視圖的創(chuàng)建,只是保存一份元數(shù)據(jù),查詢視圖時(shí)才執(zhí)行對應(yīng)的子查詢 ?;

(4)view定義中若包含了ORDER BY/LIMIT語句,當(dāng)查詢視圖時(shí)也進(jìn)行了ORDER BY/LIMIT語句操作,view當(dāng)中定義的優(yōu)先級更高 ? ;

(5)Hive視圖支持迭代視圖。

3、Hive視圖的意義 (1) 使用視圖使數(shù)據(jù)操作更簡便,相當(dāng)于封裝了sql語句,類似于關(guān)系型數(shù)據(jù)庫中的存儲(chǔ)過程。

(2) 使用視圖,基表中的數(shù)據(jù)有了一定的安全性,使用視圖可以基于限制條件過濾數(shù)據(jù),通過視圖限制數(shù)據(jù)訪問可以保護(hù)信息不被隨意查詢。

4、Hive視圖的創(chuàng)建和刪除 --創(chuàng)建視圖: ? ? CREATE VIEW [IF NOT EXISTS] [db_name.]view_name? ? ? ? [(column_name [COMMENT column_comment], ...) ] ? ? ? [COMMENT view_comment] ? ? ? [TBLPROPERTIES (property_name = property_value, ...)] ? ? ? AS SELECT ... ; --查詢視圖: ? ? select colums from view; --刪除視圖: ? ? DROP VIEW [IF EXISTS] [db_name.]view_name; 案例:

CREATE VIEW gal_view IF NOT EXISTS AS SELECT * FROM product1 p LEFT JOIN logistic l ON p.sku=l.lsku;? 5、視圖的使用 SELECT sku,price FROM gal_view; 6、查詢所有的hive視圖? (1) show tables可以查看到新增的視圖

(2)Hive的元數(shù)據(jù)信息一般存儲(chǔ)在mysql,Hive的視圖信息存儲(chǔ)在mysql hive數(shù)據(jù)庫中的 TBLS 表中,通過如下查詢語句可以查詢得到Hive中的所有視圖:

SELECT * FROM TBLS WHERE TBL_TYPE='VIRTUAL_VIEW';

Hive索引 hive的索引可以提高數(shù)據(jù)的檢索效率,避免全表掃描和資源浪費(fèi),對于含有g(shù)roup by的語句,對group by的字段添加索引可以提高查詢速度。

1、Hive索引的實(shí)現(xiàn)原理 在指定列上建立索引,會(huì)產(chǎn)生一張索引表(Hive的一張物理表),里面的字段包括,索引列的值、該值對應(yīng)的HDFS文件路徑、該值在文件中的偏移量。

在執(zhí)行索引字段查詢時(shí)候,首先額外生成一個(gè)MR job,根據(jù)對索引列的過濾條件,從索引表中過濾出索引列的值對應(yīng)的hdfs文件路徑及偏移量,輸出到hdfs上的一個(gè)文件中,然后根據(jù)這些文件中的hdfs路徑和偏移量,篩選原始input文件,生成新的split,作為整個(gè)job的split,這樣就達(dá)到不用全表掃描的目的。

2、創(chuàng)建索引 創(chuàng)建索引的字段最好使用不更新的字段,以免頻繁重建索引數(shù)據(jù)。每次建立、更新數(shù)據(jù)后,都要重建索引以構(gòu)建索引表。

刪除索引

DROP INDEX IF EXISTS product1_index2 ON product1;

七.Hive調(diào)優(yōu)?

hive調(diào)優(yōu)是比較大的專題,需要結(jié)合實(shí)際的業(yè)務(wù),數(shù)據(jù)的類型,分布,質(zhì)量狀況等來實(shí)際的考慮如何進(jìn)行系統(tǒng)性的優(yōu)化,hive底層是mapreduce,所以hadoop調(diào)優(yōu)也是hive調(diào)優(yōu)的一個(gè)基礎(chǔ),hvie調(diào)優(yōu)可以分為幾個(gè)模塊進(jìn)行考慮,數(shù)據(jù)的壓縮與存儲(chǔ),sql的優(yōu)化,hive參數(shù)的優(yōu)化,解決數(shù)據(jù)的傾斜等。

一,數(shù)據(jù)的壓縮與存儲(chǔ)格式 對分析的數(shù)據(jù)選擇合適的存儲(chǔ)格式與壓縮方式能提高h(yuǎn)ive的分析效率:

1)壓縮方式

? ? ? 壓縮可以節(jié)約磁盤的空間,基于文本的壓縮率可達(dá)40%+; 壓縮可以增加吞吐量和性能量(減小載入內(nèi)存的數(shù)據(jù)量),但是在壓縮和解壓過程中會(huì)增加CPU的開銷。所以針對IO密集型的jobs(非計(jì)算密集型)可以使用壓縮的方式提高性能。 幾種壓縮算法:

注意:選擇壓縮算法的時(shí)候需要考慮到是否可以分割,如果不支持分割(切片的時(shí)候需要確定一條數(shù)據(jù)的完整性),則一個(gè)map需要執(zhí)行完一個(gè)文件,如果文件很大,則效率很低。一般情況下hdfs一個(gè)塊(128M)就是一個(gè)map的輸入切片,而block是按物理切割的,可能一條數(shù)據(jù)會(huì)被切到兩個(gè)塊中去,而mapde 切片如何確保一條數(shù)據(jù)在一個(gè)切片中呢?這就是看壓縮算法支不支持分割了,具體的實(shí)現(xiàn)機(jī)制需要看源碼研究。

2)存儲(chǔ)格式(行存與列存)

1. TextFile

Hive數(shù)據(jù)表的默認(rèn)格式,存儲(chǔ)方式:行存儲(chǔ)。 可以使用Gzip壓縮算法,但壓縮后的文件不支持split 在反序列化過程中,必須逐個(gè)字符判斷是不是分隔符和行結(jié)束符,因此反序列化開銷會(huì)比SequenceFile高幾十倍。

2.Sequence Files

Hadoop中有些原生壓縮文件的缺點(diǎn)之一就是不支持分割。支持分割的文件可以并行的有多個(gè)mapper程序處理大數(shù)據(jù)文件,大多數(shù)文件不支持可分割是因?yàn)檫@些文件只能從頭開始讀。Sequence File是可分割的文件格式,支持Hadoop的block級壓縮。 Hadoop API提供的一種二進(jìn)制文件,以key-value的形式序列化到文件中。存儲(chǔ)方式:行存儲(chǔ)。 sequencefile支持三種壓縮選擇:NONE,RECORD,BLOCK。Record壓縮率低,RECORD是默認(rèn)選項(xiàng),通常BLOCK會(huì)帶來較RECORD更好的壓縮性能。 優(yōu)勢是文件和hadoop api中的MapFile是相互兼容的

3. RCFile

存儲(chǔ)方式:數(shù)據(jù)按行分塊,每塊按列存儲(chǔ)。結(jié)合了行存儲(chǔ)和列存儲(chǔ)的優(yōu)點(diǎn):

首先,RCFile 保證同一行的數(shù)據(jù)位于同一節(jié)點(diǎn),因此元組重構(gòu)的開銷很低 其次,像列存儲(chǔ)一樣,RCFile 能夠利用列維度的數(shù)據(jù)壓縮,并且能跳過不必要的列讀取 數(shù)據(jù)追加:RCFile不支持任意方式的數(shù)據(jù)寫操作,僅提供一種追加接口,這是因?yàn)榈讓拥?HDFS當(dāng)前僅僅支持?jǐn)?shù)據(jù)追加寫文件尾部。 行組大?。盒薪M變大有助于提高數(shù)據(jù)壓縮的效率,但是可能會(huì)損害數(shù)據(jù)的讀取性能,因?yàn)檫@樣增加了 Lazy 解壓性能的消耗。而且行組變大會(huì)占用更多的內(nèi)存,這會(huì)影響并發(fā)執(zhí)行的其他MR作業(yè)。

二、創(chuàng)建分區(qū)表,桶表,拆分表 1)創(chuàng)建分區(qū)表:(分區(qū)表相當(dāng)于hive的索引,加快查詢速度)

CREATE external TABLE table_name ? ? (col1 string, ?col2 double)? partitioned by (date string) ? ?ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' Stored AS TEXTFILE location ‘xxxxx’; ? alter table table_name add partitions(key = value) location 'xxxx' (收到設(shè)置分區(qū),靜態(tài)分區(qū)) 設(shè)置動(dòng)態(tài)分區(qū)

set hive.exec.dynamic.partition=true;(可通過這個(gè)語句查看:set hive.exec.dynamic.partition;)? set hive.exec.dynamic.partition.mode=nonstrict; (它的默認(rèn)值是strick,即不允許分區(qū)列全部是動(dòng)態(tài)的) SET hive.exec.max.dynamic.partitions=100000;(如果自動(dòng)分區(qū)數(shù)大于這個(gè)參數(shù),將會(huì)報(bào)錯(cuò)) SET hive.exec.max.dynamic.partitions.pernode=100000; 2)創(chuàng)建桶表:

對于每一個(gè)表(table)或者分區(qū), Hive可以進(jìn)一步組織成桶,也就是說桶是更為細(xì)粒度的數(shù)據(jù)范圍劃分。Hive也是 針對某一列進(jìn)行桶的組織。Hive采用對列值哈希,然后除以桶的個(gè)數(shù)求余的方式?jīng)Q定該條記錄存放在哪個(gè)桶當(dāng)中。

把表(或者分區(qū))組織成桶(Bucket)有兩個(gè)理由:

(1)獲得更高的查詢處理效率。桶為表加上了額外的結(jié)構(gòu),Hive 在處理有些查詢時(shí)能利用這個(gè)結(jié)構(gòu)。具體而言,連接兩個(gè)在(包含連接列的)相同列上劃分了桶的表,可以使用 Map 端連接 (Map-side join)高效的實(shí)現(xiàn)。比如JOIN操作。對于JOIN操作兩個(gè)表有一個(gè)相同的列,如果對這兩個(gè)表都進(jìn)行了桶操作。那么將保存相同列值的桶進(jìn)行JOIN操作就可以,可以大大較少JOIN的數(shù)據(jù)量。

(2)使取樣(sampling)更高效。在處理大規(guī)模數(shù)據(jù)集時(shí),在開發(fā)和修改查詢的階段,如果能在數(shù)據(jù)集的一小部分?jǐn)?shù)據(jù)上試運(yùn)行查詢,會(huì)帶來很多方便。

create table bucketed_user(id int,name string) clustered by (id) ?sorted by(name) into 4 buckets row format delimited fields terminated by '\t' ?stored as textfile; ?

3)拆分表:當(dāng)你需要對一個(gè)很大的表做分析的時(shí)候,但不是每個(gè)字段都需要用到,可以考慮拆分表,生成子表,減少輸入的數(shù)據(jù)量。并且過濾掉無效的數(shù)據(jù),或者合并數(shù)據(jù),進(jìn)一步減少分析的數(shù)據(jù)量

create table tablename? ROW FORMAT DELTMITED FIELDS TERMINATED BY '\t' STORED AS orc tblproperties("orc.compress" = "SNAPPY") as select XXX from XXXX ?

柚子快報(bào)激活碼778899分享:spark 大數(shù)據(jù) 數(shù)據(jù)倉庫

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19296992.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄