新聞中心
在Hadoop生態(tài)系統(tǒng)中,Hive是一個基于HDFS(Hadoop分布式文件系統(tǒng))的數(shù)據(jù)倉庫解決方案,用于數(shù)據(jù)的存儲和分析。然而,當我們需要刪除Hive中的一些數(shù)據(jù)時,可能會對HDFS數(shù)據(jù)庫操作的復(fù)雜性感到困惑。本文將介紹如何通過。

1. 理解Hive和HDFS
在開始講解如何通過Hive刪除HDFS數(shù)據(jù)庫之前,我們需要先了解一些Hive和HDFS的基本概念。
Hive是一個基于HDFS的數(shù)據(jù)倉庫解決方案,它可以使用SQL語言進行查詢和分析。HDFS是Hadoop中的分布式文件系統(tǒng),它提供了高可靠性、高可擴展性和高吞吐量的數(shù)據(jù)存儲。
Hive將數(shù)據(jù)存儲在HDFS中,而不是在關(guān)系數(shù)據(jù)庫中。因此,如果我們要進行數(shù)據(jù)刪除,我們需要了解如何在HDFS中操作。
2. HDFS數(shù)據(jù)庫刪除
在HDFS中刪除數(shù)據(jù)的方法有很多種,包括使用命令行工具、使用圖形化界面等等。這里我們將介紹使用Hive實現(xiàn)HDFS數(shù)據(jù)庫刪除的方法。
我們需要打開Hive命令行界面。在這里,我們可以使用DROP TABLE語句刪除一個表。例如,我們可以使用以下命令刪除一個名為“mytable”的表:
“`
DROP TABLE mytable;
“`
這個命令將刪除“mytable”表和與此表相關(guān)聯(lián)的所有數(shù)據(jù)。
此外,我們還可以使用TRUNCATE TABLE語句來清空表中的數(shù)據(jù),該語句會保留表本身和表結(jié)構(gòu)。例如,以下命令將清空“mytable”表:
“`
TRUNCATE TABLE mytable;
“`
這個命令將刪除“mytable”表中的所有數(shù)據(jù),但保留表本身和表結(jié)構(gòu)。
3. HDFS數(shù)據(jù)庫刪除注意事項
在使用Hive刪除HDFS數(shù)據(jù)庫時,需要注意以下幾點:
– 刪除一個表將刪除表中的所有數(shù)據(jù)。因此,在刪除一個表之前,必須先備份好重要數(shù)據(jù),以免數(shù)據(jù)丟失。
– 當我們使用TRUNCATE TABLE語句清空一個表時,表結(jié)構(gòu)不會被改變。因此,如果要刪除整個表格(包括表結(jié)構(gòu)),則應(yīng)使用DROP TABLE語句。
– 刪除數(shù)據(jù)可能需要一些時間。因此,在執(zhí)行刪除操作之前,應(yīng)該仔細檢查,確保要刪除的表和數(shù)據(jù)是否正確,以及刪除操作是否必要。
4. 結(jié)論
在本文中,我們介紹了如何通過。雖然HDFS數(shù)據(jù)庫刪除的方法有很多種,但通過Hive可以更加方便地執(zhí)行刪除操作。
當我們需要刪除HDFS數(shù)據(jù)庫時,建議備份重要數(shù)據(jù),并在執(zhí)行刪除操作之前仔細檢查,以確保操作的正確性和必要性。這樣才能避免數(shù)據(jù)丟失和不必要的麻煩。
相關(guān)問題拓展閱讀:
- Hive常用命令
- 為什么使用Hive?Hive提供了什么?Hive支持哪些用戶
Hive常用命令
參數(shù)說明:
EXTERNAL:創(chuàng)建外部表,在建表的同時可以指定源數(shù)據(jù)的路徑(LOCATION),創(chuàng)建內(nèi)部表時,會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑,若創(chuàng)建外部表不會有任何改變。在刪除表時,內(nèi)部表的元數(shù)據(jù)和源數(shù)據(jù)都會被刪除,外部表不會刪除源數(shù)據(jù)。
COMMENT:為表和列增加注釋
PARTITIONED BY:創(chuàng)建分區(qū)表,
——PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY:創(chuàng)建分桶表
SORTED BY:創(chuàng)建排序后分桶表(不常用)
——CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED:是用來設(shè)置創(chuàng)建的表在加載數(shù)據(jù)的時候,支持的列分隔符。Hive默認的分隔符是\001,屬于不可見字符,這個字符在vi里是^A
—— ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001’;
STORED AS:指定存儲文件類型 sequencefile (二進制序列文件)、textfile(文本)、rcfile(列式存儲格式文件)、ORC
如果文件數(shù)據(jù)是純文本,可以使用知則弊 STORED AS TEXTFILE。
如果數(shù)據(jù)需要壓縮,使用 STORED AS SEQUENCEFILE。
LOCATION:指定表在 hdfs 上的存儲位置
注意:若是外部表,則還需要刪除文件(hadoop fs -rm -r -f hdfspath)
注意:INPATH后面的文件路徑不能和hive表路徑在hdfs上一致,更好是兩個不同的文件路徑,在加載過程中,源路徑下的文件會被移動到hive表所在路徑下,如果一致,會找不到文件錯誤;
Hive支持內(nèi)置和自定義開發(fā)的文件格式。以下是Hive內(nèi)置的一些格式:
默認是文本格式.
textfile 存儲空間消耗比較大,并且壓縮的text 無法分割和合并查詢的效率更低,可以直接存儲,加載數(shù)據(jù)的盯讓速度更高.
sequencefile 存儲空間消耗更大,壓縮的文件可以分割和合并查詢效率高,需要通過text文件轉(zhuǎn)化來加載.
rcfile 存儲空間最小,查詢的效率更高 ,需要通過text文件轉(zhuǎn)化來加載,加載的速度更低.
相比傳統(tǒng)的行式存儲引擎,列式存儲引擎具有更高的壓縮比,更少的IO操作而備受青睞(注:列式存儲不是萬能高效的,很多場景下行式存儲仍更加高效),搭族尤其是在數(shù)據(jù)列(column)數(shù)很多,但每次操作僅針對若干列的情景,列式存儲引擎的性價比更高。
為什么使用Hive?Hive提供了什么?Hive支持哪些用戶
為什么使用Hive?
為什么使用Hive?那么,在哪里使用Hive呢?在載入了60億行(經(jīng)度、維度、時間、數(shù)據(jù)值、高度)數(shù)據(jù)集到MySQL后,系統(tǒng)崩潰了,并經(jīng)歷過數(shù)據(jù)丟失。這可能部分是因為我們最初的策略是將所有的數(shù)據(jù)都存儲到單一的一張表中了。后來,我們調(diào)整了策略通過數(shù)據(jù)集和參數(shù)進行分表,這有所幫助但也因此引入了額外的消耗,而這并非是我們愿意接受的。
相反,我們決定嘗試使用Apache Hive技術(shù)。我們安裝了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(+ 320)。CDHv3還包含有許多其他相關(guān)工具,包括Sqoop和Hue這些在我們的架構(gòu)中都標識出來了,如圖23-3底部所示。
我們使用Apache Sqoop轉(zhuǎn)儲數(shù)據(jù)到Hive中,然后纖滑通過寫一個Apache OODT包裝器,來使Hive按照空間/時間約束查詢數(shù)據(jù),然后將結(jié)果提供給RCMET和其他用戶(圖23-2中間部分顯示)。RCMES集群的完整的架構(gòu)如圖23- 3所示。我們有5臺機器,包括圖中所示的一個主/從配置,通過一個運行GigE的私人網(wǎng)進行連接。
Hive提供了什么
Photobucket公司使用Hive的主要目標是為業(yè)務(wù)功能、系統(tǒng)性能和用戶行為提供答案。為了滿足這些需求,我們每晚都要通過Flume從數(shù)百臺服務(wù)器上的MySQL數(shù)據(jù)庫中轉(zhuǎn)儲來自Web服務(wù)器和自定義格式日志TB級別的數(shù)據(jù)。這些數(shù)據(jù)有助于支持整個公司許多組織,比如行政管理、廣告、客戶支持、產(chǎn)品開發(fā)和操作,等等。對于歷史數(shù)據(jù),我們保持所有MySQL在每月的之一天創(chuàng)建的所有的毀培臘數(shù)據(jù)作為分區(qū)數(shù)據(jù)并保留30天以上的日志文件。Photobucket使用一個定制的ETL框架來將MySQL數(shù)據(jù)庫中數(shù)據(jù)遷移到Hive中。使用Flume將日志文件數(shù)據(jù)寫入到HDFS中并按照預(yù)定的Hive流程進行處理。
Hive支持的用戶有哪些
行政管理依賴于使用Hadoop提供一般業(yè)務(wù)健康狀況的報告。Hive允許我們解析結(jié)構(gòu)化數(shù)據(jù)庫數(shù)據(jù)和非結(jié)構(gòu)化的點擊流數(shù)據(jù),以及業(yè)務(wù)所涉及的數(shù)據(jù)格式進行讀取。
廣告業(yè)務(wù)使用Hive篩選歷史數(shù)據(jù)來對廣告目標進行預(yù)測和定義配額。產(chǎn)品開發(fā)無疑是該組織中產(chǎn)生更大數(shù)量的特定的查詢的用戶了。對于任何用戶群,時間間隔變化或隨時間而變化。Hive是很重要的,因為它允許我們通過對在當前和歷史數(shù)據(jù)中運行A / B測試來判斷在一個快速變化的用戶環(huán)境中新產(chǎn)品的相關(guān)特性。
在Photobucket公司中,為我們的用戶提供一流的系統(tǒng)是最重要的目標。從操作的角度來看,Hive被用來匯總生成跨多個維度的數(shù)據(jù)。在公司里知道更流行的媒體、用戶、參考域是非常重要的??刂瀑M中租用對于任何組織都是重要的。一個用戶可以快速消耗大量的系統(tǒng)資源,并顯著增加每月的支出。Hive可以用于識別和分析出這樣的惡意用戶,以確定哪些是符合我們的服務(wù)條款,而哪些是不符合的。也可以使用Hive對一些操作運行A / B測試來定義新的硬件需求和生成ROI計算。Hive將用戶從底層MapReduce代碼解放出來的能力意味著可以在幾個小時或幾天內(nèi)就可以獲得答案,而不是之前的數(shù)周。
Hive中的數(shù)據(jù)庫
Hive中數(shù)據(jù)庫的概念本質(zhì)上僅僅是表的一個目錄或者命名空間。然而,對于具有很多組和用戶的大集群來說,這是非常有用的,因為這樣可以避免表命名沖突。通常會使用數(shù)據(jù)庫來將生產(chǎn)表組織成邏輯組。
如果用戶沒有顯式指定數(shù)據(jù)庫,那么將會使用默認的數(shù)據(jù)庫default。
下面這個例子就展示了如何創(chuàng)建一個數(shù)據(jù)庫:
hive> CREATE DATABASE financials;
如果數(shù)據(jù)庫financials已經(jīng)存在的話,那么將會拋出一個錯誤信息。使用如下語句可以避免在這種情況下拋出錯誤信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
雖然通常情況下用戶還是期望在同名數(shù)據(jù)庫已經(jīng)存在的情況下能夠拋出警告信息的,但是IF NOT EXISTS這個子句對于那些在繼續(xù)執(zhí)行之前需要根據(jù)需要實時創(chuàng)建數(shù)據(jù)庫的情況來說是非常有用的。
在所有的數(shù)據(jù)庫相關(guān)的命令中,都可以使用SCHEMA這個關(guān)鍵字來替代關(guān)鍵字TABLE。
隨時可以通過如下命令方式查看Hive中所包含的數(shù)據(jù)庫:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果數(shù)據(jù)庫非常多的話,那么可以使用正則表達式匹配來篩選出需要的數(shù)據(jù)庫名,正則表達式這個概念,將會在第6.2.3節(jié)“Like和RLike”介紹。下面這個例子展示的是列舉出所有以字母h開頭,以其他字符結(jié)尾(即.*部分含義)的數(shù)據(jù)庫名:
hive> SHOW DATABASES LIKE ‘h.*’;
human_resources
hive> …
Hive會為每個數(shù)據(jù)庫創(chuàng)建一個目錄。數(shù)據(jù)庫中的表將會以這個數(shù)據(jù)庫目錄的子目錄形式存儲。有一個例外就是default數(shù)據(jù)庫中的表,因為這個數(shù)據(jù)庫本身沒有自己的目錄。
數(shù)據(jù)庫所在的目錄位于屬性hive.metastore.warehouse.dir所指定的頂層目錄之后,這個配置項我們已經(jīng)在前面的第2.5.1節(jié)“本地模式配置”和第2.5.2節(jié)“分布式模式和偽分布式模式配置”中進行了介紹。假設(shè)用戶使用的是這個配置項默認的配置,也就是/user/hive/warehouse,那么當我們創(chuàng)建數(shù)據(jù)庫financials時,Hive將會對應(yīng)地創(chuàng)建一個目錄/user/hive/warehouse/financials.db。這里請注意,數(shù)據(jù)庫的文件目錄名是以.db結(jié)尾的。
用戶可以通過如下的命令來修改這個默認的位置:
hive> CREATE DATABASE financials
> LOCATION ‘/my/preferred/directory’;
用戶也可以為這個數(shù)據(jù)庫增加一個描述信息,這樣通過DESCRIBE DATABASE 命令就可以查看到該信息。
hive> CREATE DATABASE financials
> COMMENT ‘Holds all financial tables’;
hive> DESCRIBE DATABASE financials;
financials Holds all financial tables
從上面的例子中,我們可以注意到,DESCRIEB DATABASE語句也會顯示出這個數(shù)據(jù)庫所在的文件目錄位置路徑。在這個例子中,URI格式是hdfs。如果安裝的是MapR,那么這里就應(yīng)該是maprfs。對于亞馬遜彈性MapReduce(EMR)集群,這里應(yīng)該是hdfs,但是用戶可以設(shè)置hive.metastore.warehouse.dir為亞馬遜S3特定的格式(例如,屬性值設(shè)置為s3
前面DESCRIBE DATABASE語句的輸出中,我們使用了master-server來代表URI權(quán)限,也就是說應(yīng)該是由文件系統(tǒng)的“主節(jié)點”(例如,HDFS中運行NameNode服務(wù)的那臺服務(wù)器)的服務(wù)器名加上一個可選的端口號構(gòu)成的(例如,服務(wù)器名:端口號這樣的格式)。如果用戶執(zhí)行的是偽分布式模式,那么主節(jié)點服務(wù)器名稱就應(yīng)該是localhost。對于本地模式,這個路徑應(yīng)該是一個本地路徑,例如
如果這部分信息省略了,那么Hive將會使用Hadoop配置文件中的配置項fs.default.name作為master-server所對應(yīng)的服務(wù)器名和端口號,這個配置文件可以在$HADOOP_HOME/conf這個目錄下找到。
需要明確的是,
warehouse/financials.db是等價的,其中master-server是主節(jié)點的DNS名和可選的端口號。
為了保持完整性,當用戶指定一個相對路徑(例如,some/relative/path)時,對于HDFS和Hive,都會將這個相對路徑放到分布式文件系統(tǒng)的指定根目錄下(例如,
為了腳本的可移植性,通常會省略掉那個服務(wù)器和端口號信息,而只有在涉及到另一個分布式文件系統(tǒng)實例(包括S3存儲)的時候才會指明該信息。
此外,用戶還可以為數(shù)據(jù)庫增加一些和其相關(guān)的鍵-值對屬性信息,盡管目前僅有的功能就是提供了一種可以通過DESCRIBE DATABASE EXTENDED 語句顯示出這些信息的方式:
hive> CREATE DATABASE financials
> WITH DBPROPERTIES (‘creator’ = ‘Mark Moneybags’, ‘date’ = ”);
hive> DESCRIBE DATABASE financials;
financials
hive> DESCRIBE DATABASE EXTENDED financials;
financials
{date=, creator=Mark Moneybags);
USE命令用于將某個數(shù)據(jù)庫設(shè)置為用戶當前的工作數(shù)據(jù)庫,和在文件系統(tǒng)中切換工作目錄是一個概念:
hive> USE financials;
現(xiàn)在,使用像SHOW TABLES這樣的命令就會顯示當前這個數(shù)據(jù)庫下所有的表。
不幸的是,并沒有一個命令可以讓用戶查看當前所在的是哪個數(shù)據(jù)庫!幸運的是,在Hive中是可以重復(fù)使用USE…命令的,這是因為在Hive中并沒有嵌套數(shù)據(jù)庫的概念。
可以回想下,在第2.7.2節(jié)“變量和屬性”中提到過,可以通過設(shè)置一個屬性值來在提示符里面顯示當前所在的數(shù)據(jù)庫(Hive v0.8.0版本以及之后的版本才支持此功能):
hive> set hive.cli.print.current.db=true;
hive (financials)> USE default;
hive (default)> set hive.cli.print.current.db=false;
hive> …
最后,用戶可以刪除數(shù)據(jù)庫:
hive> DROP DATABASE IF EXISTS financials;
IF EXISTS子句是可選的,如果加了這個子句,就可以避免因數(shù)據(jù)庫finanacials不存在而拋出警告信息。
默認情況下,Hive是不允許用戶刪除一個包含有表的數(shù)據(jù)庫的。用戶要么先刪除數(shù)據(jù)庫中的表,然后再刪除數(shù)據(jù)庫;要么在刪除命令的最后面加上關(guān)鍵字CASCADE,這樣可以使Hive自行先刪除數(shù)據(jù)庫中的表:
hive> DROP DATABASE IF EXISTS financials CASCADE;
如果使用的是RESTRICT這個關(guān)鍵字而不是CASCADE這個關(guān)鍵字的話,那么就和默認情況一樣,也就是,如果想刪除數(shù)據(jù)庫,那么必須先要刪除掉該數(shù)據(jù)庫中的所有表。
如果某個數(shù)據(jù)庫被刪除了,那么其對應(yīng)的目錄也同時會被刪除。
關(guān)于hive刪除hdfs中的數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計,網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁設(shè)計,1500元定制網(wǎng)站優(yōu)化全包,先排名后付費,已為上千家服務(wù),聯(lián)系電話:13518219792
分享題目:Hive實現(xiàn)簡單快捷的HDFS數(shù)據(jù)庫刪除(hive刪除hdfs中的數(shù)據(jù)庫)
網(wǎng)站URL:http://www.dlmjj.cn/article/dhghghh.html


咨詢
建站咨詢
