hive數字貨幣價格預測
❶ 深入理解spark核心思想與源碼分析 怎麼樣
SparkSQL主要的推動者是Databricks。提到SparkSQL不得不提的就是Shark。Shark可以理解為Spark社區這邊搞的一個」HiveonSpark」,把Hive的物理執行計劃使用Spark計算引擎去執行。這裡面會有一些問題,Hive社區那邊沒有把物理執行計劃到執行引擎這個步驟抽象出公共API,所以Spark社區這邊要自己維護一個Hive的分支,而且Hive的設計和發展不太會考慮到如何優化Spark的Job。但是前面提到的HiveonSpark卻是和Hive一起發布的,是由Hive社區控制的。所以後來Spark社區就停止了Shark的開發轉向SparkSQL(「坑了」一部分當時信任Shark的人)。SparkSQL是把SQL解析成RDD的transformation和action,而且通過catalyst可以自由、靈活的選擇最優執行方案。對資料庫有深入研究的人就會知道,SQL執行計劃的優化是一個非常重要的環節,SparkSQL在這方面的優勢非常明顯,提供了一個非常靈活、可擴展的架構。但是SparkSQL是基於內存的,元數據放在內存裡面,不適合作為數據倉庫的一部分來使用。所以有了SparkSQL的HiveContext,就是兼容Hive的SparkSQL。它支持HiveQL,HiveMetastore,HiveSerDesandHiveUDFs以及JDBCdriver。這樣看起來很完美,但是實際上也有一些缺點:SparkSQL依賴於Hive的一個snapshot,所以它總是比Hive的發布晚一個版本,很多Hive新的feature和bugfix它就無法包括。而且目前看Spark社區在Spark的thriftserver方面的投入不是很大,所以感覺它不是特別想朝著這個方向發展。還有一個重要的缺點就是SparkSQL目前還不能通過分析SQL來預測這個查詢需要多少資源從而申請對應的資源,所以在共享集群上無法高效地分配資源和調度任務。
❷ Hadoop,Hive,Spark 之間是什麼關系
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。Hadoop也是apache開源大數據的一個生態圈總稱,裡麵包含跟大數據開源框架的一些軟體,包含hdfs,hive,zookeeper,hbase等等;Hadoop的框架最核心的設計就是:HDFS和MapRece。HDFS為海量的數據提供了存儲,則MapRece為海量的數據提供了計算。
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapRece統計,不必開發專門的MapRece應用,十分適合數據倉庫的統計分析。
Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。通過名為 Mesos 的第三方集群框架可以支持此行為。
hadoop(hive)<-spark(擴展)
❸ 如何使用Spark SQL 的JDBC server
運行環境
集群環境:CDH5.3.0
具體JAR版本如下:
spark版本:1.2.0-cdh5.3.0
hive版本:0.13.1-cdh5.3.0
hadoop版本:2.5.0-cdh5.3.0
啟動 JDBC server
cd /etc/spark/conf
ln -s /etc/hive/conf/hive-site.xml hive-site.xml
cd /opt/cloudera/parcels/CDH/lib/spark/
chmod- -R 777 logs/
cd /opt/cloudera/parcels/CDH/lib/spark/sbin
./start-thriftserver.sh --master yarn --hiveconf hive.server2.thrift.port=10008
Connecting to the JDBC server with Beeline
cd /opt/cloudera/parcels/CDH/lib/spark/bin
beeline -u jdbc:hive2://hadoop04:10000
[root@hadoop04 bin]# beeline -u jdbc:hive2://hadoop04:10000
scan complete in 2ms
Connecting to jdbc:hive2://hadoop04:10000
Connected to: Spark SQL (version 1.2.0)
❹ 全球有哪些企業公開持有數字貨幣
全球29家知名公司持有超過300億美金的數字資產
最近出現了一種新趨勢,因為許多知名公司決定利用比特幣(BTC)進行儲備,而不是持有傳統持有的資產。在Microstrategy購買了價值2.5億美元的BTC之後,這一趨勢開始逐漸流行起來。不久之後,該公司繼續購買了更多的比特幣。經過幾次購買,Microstrategy已將其持有量增加到70,470 BTC或供應量的.336%。收購Microstrategy之後,Square Inc.等企業就開始了收購。和Ruffer投資公司加入了比特幣的購買趨勢。
根據門戶網站bitcointreasuries.org的數據,很多公司持有超過110萬個比特幣或價值超過300億美元的加密資產。在十億美元的Microstrategy公司在八月份購買了價值2.5億美元的比特幣之後,知名公司持有的大量比特幣儲備開始膨脹。現在有29家公司持有加密貨幣代替股票和現金等傳統儲備。
到目前為止,在網站bitcointreasuries.org上總共列出了29家公司,該網站將所有公司劃分為三個不同的部分。公開交易,私人和類似ETF的持有人。
共有15家公開交易的公司,包括Microstrategy Inc.,Galaxy Digital Holdings,Square Inc.,Hut 8 Mining Corp,Voyager Digital LTD,Riot Blockchain,Inc.,Bit Digital,Inc.,Coin Citadel Inc.,Advanced Bitcoin Technologies AG,Digitalx,Hive區塊鏈,Cypherpunk Holdings Inc.,Bigg Digital Assets Inc.,Argo Blockchain和Frmo Corp.這15家公開交易的公司的總市值約為100,003 BTC,持有比特幣資金的私人公司部分包括四家私人公司,包括Mtgox kk,Block.one,Tezos Foundation和Stone Ridge Holdings Group。在所有四家公司的儲備中,私人公司的總市值比上市公司多317,383 BTC。
bitcointreasuries.org列表的底部有九個類似於ETF的持有人,其基金包括Grayscale Bitcoin Trust,Coinshares,Ruffer Investment,3iq The Bitcoin Fund,Grayscale Digital Large Cap,Bitwise 10 Crypto Index Fund,WisdomTree Bitcoin,21shares AG ,以及ETC Group的比特幣ETP。
其中包括加拿大餐館連鎖店Tahini's和加拿大圖形軟體公司Snappa。Tahini的餐飲連鎖店透露,該公司將其所有現金儲備都換成了BTC,而Snappa則表示,該公司將40%的現金儲備用於比特幣交易。加拿大上市公司Mogo也剛剛宣布將其儲備的1.5%投資於比特幣,並計劃明年購買更多。當Tahini決定告訴其財務顧問之後,他將立即購買比特幣時,他建議使用黃金。餐館老闆說,貴金屬黃金已經成為可靠的避風港。
該公司在推特上寫道: 「我們看著我們的財務顧問,並告訴他,由於比特幣,黃金將變成騙局。」 塔希尼補充說:「他笑了,居高臨下地回到了6000年的論點上。」
❺ 為什麼使用HiveHive提供了什麼Hive支持哪些用戶
為什麼使用Hive?
為什麼使用Hive?那麼,在哪裡使用Hive呢?在載入了60億行(經度、維度、時間、數據值、高度)數據集到MySQL後,系統崩潰了,並經歷過數據丟失。這可能部分是因為我們最初的策略是將所有的數據都存儲到單一的一張表中了。後來,我們調整了策略通過數據集和參數進行分表,這有所幫助但也因此引入了額外的消耗,而這並非是我們願意接受的。
相反,我們決定嘗試使用Apache Hive技術。我們安裝了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3還包含有許多其他相關工具,包括Sqoop和Hue這些在我們的架構中都標識出來了,如圖23-3底部所示。
我們使用Apache Sqoop轉儲數據到Hive中,然後通過寫一個Apache OODT包裝器,來使Hive按照空間/時間約束查詢數據,然後將結果提供給RCMET和其他用戶(圖23-2中間部分顯示)。RCMES集群的完整的架構如圖23- 3所示。我們有5台機器,包括圖中所示的一個主/從配置,通過一個運行GigE的私人網進行連接。
Hive提供了什麼
Photobucket公司使用Hive的主要目標是為業務功能、系統性能和用戶行為提供答案。為了滿足這些需求,我們每晚都要通過Flume從數百台伺服器上的MySQL資料庫中轉儲來自Web伺服器和自定義格式日誌TB級別的數據。這些數據有助於支持整個公司許多組織,比如行政管理、廣告、客戶支持、產品開發和操作,等等。對於歷史數據,我們保持所有MySQL在每月的第一天創建的所有的數據作為分區數據並保留30天以上的日誌文件。Photobucket使用一個定製的ETL框架來將MySQL資料庫中數據遷移到Hive中。使用Flume將日誌文件數據寫入到HDFS中並按照預定的Hive流程進行處理。
Hive支持的用戶有哪些
行政管理依賴於使用Hadoop提供一般業務健康狀況的報告。Hive允許我們解析結構化資料庫數據和非結構化的點擊流數據,以及業務所涉及的數據格式進行讀取。
廣告業務使用Hive篩選歷史數據來對廣告目標進行預測和定義配額。產品開發無疑是該組織中產生最大數量的特定的查詢的用戶了。對於任何用戶群,時間間隔變化或隨時間而變化。Hive是很重要的,因為它允許我們通過對在當前和歷史數據中運行A / B測試來判斷在一個快速變化的用戶環境中新產品的相關特性。
在Photobucket公司中,為我們的用戶提供一流的系統是最重要的目標。從操作的角度來看,Hive被用來匯總生成跨多個維度的數據。在公司里知道最流行的媒體、用戶、參考域是非常重要的。控制費用對於任何組織都是重要的。一個用戶可以快速消耗大量的系統資源,並顯著增加每月的支出。Hive可以用於識別和分析出這樣的惡意用戶,以確定哪些是符合我們的服務條款,而哪些是不符合的。也可以使用Hive對一些操作運行A / B測試來定義新的硬體需求和生成ROI計算。Hive將用戶從底層MapRece代碼解放出來的能力意味著可以在幾個小時或幾天內就可以獲得答案,而不是之前的數周。
Hive中的資料庫
Hive中資料庫的概念本質上僅僅是表的一個目錄或者命名空間。然而,對於具有很多組和用戶的大集群來說,這是非常有用的,因為這樣可以避免表命名沖突。通常會使用資料庫來將生產表組織成邏輯組。
如果用戶沒有顯式指定資料庫,那麼將會使用默認的資料庫default。
下面這個例子就展示了如何創建一個資料庫:
hive> CREATE DATABASE financials;
如果資料庫financials已經存在的話,那麼將會拋出一個錯誤信息。使用如下語句可以避免在這種情況下拋出錯誤信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
雖然通常情況下用戶還是期望在同名資料庫已經存在的情況下能夠拋出警告信息的,但是IF NOT EXISTS這個子句對於那些在繼續執行之前需要根據需要實時創建資料庫的情況來說是非常有用的。
在所有的資料庫相關的命令中,都可以使用SCHEMA這個關鍵字來替代關鍵字TABLE。
隨時可以通過如下命令方式查看Hive中所包含的資料庫:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果資料庫非常多的話,那麼可以使用正則表達式匹配來篩選出需要的資料庫名,正則表達式這個概念,將會在第6.2.3節「Like和RLike」介紹。下面這個例子展示的是列舉出所有以字母h開頭,以其他字元結尾(即.*部分含義)的資料庫名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...
Hive會為每個資料庫創建一個目錄。資料庫中的表將會以這個資料庫目錄的子目錄形式存儲。有一個例外就是default資料庫中的表,因為這個資料庫本身沒有自己的目錄。
資料庫所在的目錄位於屬性hive.metastore.warehouse.dir所指定的頂層目錄之後,這個配置項我們已經在前面的第2.5.1節「本地模式配置」和第2.5.2節「分布式模式和偽分布式模式配置」中進行了介紹。假設用戶使用的是這個配置項默認的配置,也就是/user/hive/warehouse,那麼當我們創建資料庫financials時,Hive將會對應地創建一個目錄/user/hive/warehouse/financials.db。這里請注意,資料庫的文件目錄名是以.db結尾的。
用戶可以通過如下的命令來修改這個默認的位置:
hive> CREATE DATABASE financials
> LOCATION '/my/preferred/directory';
用戶也可以為這個資料庫增加一個描述信息,這樣通過DESCRIBE DATABASE <database> 命令就可以查看到該信息。
hive> CREATE DATABASE financials
> COMMENT 'Holds all financial tables';
hive> DESCRIBE DATABASE financials;
financials Holds all financial tables
hdfs://master-server/user/hive/warehouse/financials.db
從上面的例子中,我們可以注意到,DESCRIEB DATABASE語句也會顯示出這個資料庫所在的文件目錄位置路徑。在這個例子中,URI格式是hdfs。如果安裝的是MapR,那麼這里就應該是maprfs。對於亞馬遜彈性MapRece(EMR)集群,這里應該是hdfs,但是用戶可以設置hive.metastore.warehouse.dir為亞馬遜S3特定的格式(例如,屬性值設置為s3n://bucketname...)。用戶可以使用s3作為模式,但是如果使用新版的規則s3n會更好。
前面DESCRIBE DATABASE語句的輸出中,我們使用了master-server來代表URI許可權,也就是說應該是由文件系統的「主節點」(例如,HDFS中運行NameNode服務的那台伺服器)的伺服器名加上一個可選的埠號構成的(例如,伺服器名:埠號這樣的格式)。如果用戶執行的是偽分布式模式,那麼主節點伺服器名稱就應該是localhost。對於本地模式,這個路徑應該是一個本地路徑,例如file:///user/hive/warehouse/financials.db。
如果這部分信息省略了,那麼Hive將會使用Hadoop配置文件中的配置項fs.default.name作為master-server所對應的伺服器名和埠號,這個配置文件可以在$HADOOP_HOME/conf這個目錄下找到。
需要明確的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/
warehouse/financials.db是等價的,其中master-server是主節點的DNS名和可選的埠號。
為了保持完整性,當用戶指定一個相對路徑(例如,some/relative/path)時,對於HDFS和Hive,都會將這個相對路徑放到分布式文件系統的指定根目錄下(例如,hdfs:///user/<user-name>)。然而,如果用戶是在本地模式下執行的話,那麼當前的本地工作目錄將是some/relative/path的父目錄。
為了腳本的可移植性,通常會省略掉那個伺服器和埠號信息,而只有在涉及到另一個分布式文件系統實例(包括S3存儲)的時候才會指明該信息。
此外,用戶還可以為資料庫增加一些和其相關的鍵-值對屬性信息,盡管目前僅有的功能就是提供了一種可以通過DESCRIBE DATABASE EXTENDED <database>語句顯示出這些信息的方式:
hive> CREATE DATABASE financials
> WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02');
hive> DESCRIBE DATABASE financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
hive> DESCRIBE DATABASE EXTENDED financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
{date=2012-01-02, creator=Mark Moneybags);
USE命令用於將某個資料庫設置為用戶當前的工作資料庫,和在文件系統中切換工作目錄是一個概念:
hive> USE financials;
現在,使用像SHOW TABLES這樣的命令就會顯示當前這個資料庫下所有的表。
不幸的是,並沒有一個命令可以讓用戶查看當前所在的是哪個資料庫!幸運的是,在Hive中是可以重復使用USE…命令的,這是因為在Hive中並沒有嵌套資料庫的概念。
可以回想下,在第2.7.2節「變數和屬性」中提到過,可以通過設置一個屬性值來在提示符裡面顯示當前所在的資料庫(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> ...
最後,用戶可以刪除資料庫:
hive> DROP DATABASE IF EXISTS financials;
IF EXISTS子句是可選的,如果加了這個子句,就可以避免因資料庫finanacials不存在而拋出警告信息。
默認情況下,Hive是不允許用戶刪除一個包含有表的資料庫的。用戶要麼先刪除資料庫中的表,然後再刪除資料庫;要麼在刪除命令的最後面加上關鍵字CASCADE,這樣可以使Hive自行先刪除資料庫中的表:
hive> DROP DATABASE IF EXISTS financials CASCADE;
如果使用的是RESTRICT這個關鍵字而不是CASCADE這個關鍵字的話,那麼就和默認情況一樣,也就是,如果想刪除資料庫,那麼必須先要刪除掉該資料庫中的所有表。
如果某個資料庫被刪除了,那麼其對應的目錄也同時會被刪除。
❻ 虛擬貨幣、數字貨幣、加密貨幣、代幣、通證有什麼區別
一、定義不同:
1.虛擬貨幣:
虛擬貨幣為指非真實的貨幣。
2.數字貨幣:
數字貨幣為電子貨幣形式的替代貨幣。數字金幣和密碼貨幣都屬於數字貨幣(DIGICCY)。
3.加密貨幣:
加密貨幣為一種使用密碼學原理來確保交易安全及控制交易單位創造的交易媒介。
4.代幣(通證):
一種形狀及尺寸類似貨幣,但限制使用范圍、不具通貨效力的物品,其通證則為代幣英文Token的諧音。
二、特點不同:
1.虛擬貨幣:
虛擬貨幣不是一般等價物,而是價值相對性的表現形式,或者說是表現符號;也可以說,虛擬貨幣是個性化貨幣。在另一種說法中,也可稱為信息貨幣。
2.數字貨幣:
是一種不受管制的、數字化的貨幣,通常由開發者發行和管理,被特定虛擬社區的成員所接受和使用。
3.加密貨幣:
加密貨幣基於去中心化的共識機制 ,與依賴中心化監管體系的銀行金融系統相對。
4.代幣(通證):
通常需要以金錢換取,用在商店、游樂場、大眾運輸工具等地方,做為憑證以使用服務、換取物品等。
(6)hive數字貨幣價格預測擴展閱讀
現階段數字貨幣更像一種投資產品,因為缺乏強有力的擔保機構維護其價格的穩定,其作為價值尺度的作用還未顯現,無法充當支付手段。數字貨幣作為投資產品,其發展離不開交易平台、運營公司和投資。
數字貨幣是一把雙刃劍,一方面,其所依託的區塊鏈技術實現了去中心化,可以用於數字貨幣以外的其他領域,這也是比特幣受到熱捧的原因之一;另一方面,如果數字貨幣被作為一種貨幣受到公眾的廣泛使用,則會對貨幣政策有效性、金融基礎設施、金融市場、金融穩定等方面產生巨大影響。
❼ 如何做Spark 版本兼容
SparkSQL主要的推動者是Databricks。
提到SparkSQL不得不提的就是Shark。
Shark可以理解為Spark社區這邊搞的一個」HiveonSpark」,把Hive的物理執行計劃使用Spark計算引擎去執行。
這裡面會有一些問題,Hive社區那邊沒有把物理執行計劃到執行引擎這個步驟抽象出公共API,所以Spark社區這邊要自己維護一個Hive的分支,而且Hive的設計和發展不太會考慮到如何優化Spark的Job。
但是前面提到的HiveonSpark卻是和Hive一起發布的,是由Hive社區控制的。
所以後來Spark社區就停止了Shark的開發轉向SparkSQL(「坑了」一部分當時信任Shark的人)。
SparkSQL是把SQL解析成RDD的transformation和action,而且通過catalyst可以自由、靈活的選擇最優執行方案。
對資料庫有深入研究的人就會知道,SQL執行計劃的優化是一個非常重要的環節,SparkSQL在這方面的優勢非常明顯,提供了一個非常靈活、可擴展的架構。
但是SparkSQL是基於內存的,元數據放在內存裡面,不適合作為數據倉庫的一部分來使用。
所以有了SparkSQL的HiveContext,就是兼容Hive的SparkSQL。
它支持HiveQL,HiveMetastore,HiveSerDesandHiveUDFs以及JDBCdriver。
這樣看起來很完美,但是實際上也有一些缺點:SparkSQL依賴於Hive的一個snapshot,所以它總是比Hive的發布晚一個版本,很多Hive新的feature和bugfix它就無法包括。
而且目前看Spark社區在Spark的thriftserver方面的投入不是很大,所以感覺它不是特別想朝著這個方向發展。
還有一個重要的缺點就是SparkSQL目前還不能通過分析SQL來預測這個查詢需要多少資源從而申請對應的資源,所以在共享集群上無法高效地分配資源和調度任務。
❽ 某電商雙11數據分析與預測為什麼會用到hive,可不可以直接用Hadoop
首先明確Hive和Hadoop兩者的關系:
1、Hadoop是一種用於存儲、讀取以及處理海量數據的技術。你可以將他等價理解為個人PC的文件系統,只不過它能夠承載遠比一兩塊硬碟所能儲存的多得多的數據;
2、Hive是一種構建在Hadoop之上的工具,它通過書寫SQL語句的方式部分實現了Hadoop的功能,也就是說,所有Hive具備的能力,Hadoop都有,只不過Hive提供了一套描述工具,讓你用可讀性更強、更通用的方式描述你想解決的問題,然後由Hive將其轉換成Hadoop的底層邏輯,最終解決問題。
所以,你問的問題也就不言自明了,當然可以直接基於Hadoop,使用Java、Python等語言直接編寫MapRece的處理過程;但是,常規的數據分析如果使用Hive,可能只需要若干Select查詢語句即可完成,若編寫代碼完成,可能需要安裝配置本地IDE、完成相關代碼庫的依賴、MapRece完整邏輯的實現、任務的提交、計算結果的獲取等等一系列龐雜的細節。兩廂對比,我認為雖然理論上可以直接用Hadoop,但是在真實業務場景下,就是不能用的。
希望我說明白了~
❾ 如何升級hive schema version
為什麼使用Hive?
為什麼使用Hive?那麼,在哪裡使用Hive呢?在載入了60億行(經度、維度、時間、數據值、高度)數據集到MySQL後,系統崩潰了,並經歷過數據丟失。這可能部分是因為我們最初的策略是將所有的數據都存儲到單一的一張表中了。後來,我們調整了策略通過數據集和參數進行分表,這有所幫助但也因此引入了額外的消耗,而這並非是我們願意接受的。
相反,我們決定嘗試使用Apache Hive技術。我們安裝了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3還包含有許多其他相關工具,包括Sqoop和Hue這些在我們的架構中都標識出來了,如圖23-3底部所示。
我們使用Apache Sqoop轉儲數據到Hive中,然後通過寫一個Apache OODT包裝器,來使Hive按照空間/時間約束查詢數據,然後將結果提供給RCMET和其他用戶(圖23-2中間部分顯示)。RCMES集群的完整的架構如圖23- 3所示。我們有5台機器,包括圖中所示的一個主/從配置,通過一個運行GigE的私人網進行連接。
Hive提供了什麼
Photobucket公司使用Hive的主要目標是為業務功能、系統性能和用戶行為提供答案。為了滿足這些需求,我們每晚都要通過Flume從數百台伺服器上的MySQL資料庫中轉儲來自Web伺服器和自定義格式日誌TB級別的數據。這些數據有助於支持整個公司許多組織,比如行政管理、廣告、客戶支持、產品開發和操作,等等。對於歷史數據,我們保持所有MySQL在每月的第一天創建的所有的數據作為分區數據並保留30天以上的日誌文件。Photobucket使用一個定製的ETL框架來將MySQL資料庫中數據遷移到Hive中。使用Flume將日誌文件數據寫入到HDFS中並按照預定的Hive流程進行處理。
Hive支持的用戶有哪些
行政管理依賴於使用Hadoop提供一般業務健康狀況的報告。Hive允許我們解析結構化資料庫數據和非結構化的點擊流數據,以及業務所涉及的數據格式進行讀取。
廣告業務使用Hive篩選歷史數據來對廣告目標進行預測和定義配額。產品開發無疑是該組織中產生最大數量的特定的查詢的用戶了。對於任何用戶群,時間間隔變化或隨時間而變化。Hive是很重要的,因為它允許我們通過對在當前和歷史數據中運行A / B測試來判斷在一個快速變化的用戶環境中新產品的相關特性。
在Photobucket公司中,為我們的用戶提供一流的系統是最重要的目標。從操作的角度來看,Hive被用來匯總生成跨多個維度的數據。在公司里知道最流行的媒體、用戶、參考域是非常重要的。控制費用對於任何組織都是重要的。一個用戶可以快速消耗大量的系統資源,並顯著增加每月的支出。Hive可以用於識別和分析出這樣的惡意用戶,以確定哪些是符合我們的服務條款,而哪些是不符合的。也可以使用Hive對一些操作運行A / B測試來定義新的硬體需求和生成ROI計算。Hive將用戶從底層MapRece代碼解放出來的能力意味著可以在幾個小時或幾天內就可以獲得答案,而不是之前的數周。
Hive中的資料庫
Hive中資料庫的概念本質上僅僅是表的一個目錄或者命名空間。然而,對於具有很多組和用戶的大集群來說,這是非常有用的,因為這樣可以避免表命名沖突。通常會使用資料庫來將生產表組織成邏輯組。
如果用戶沒有顯式指定資料庫,那麼將會使用默認的資料庫default。
下面這個例子就展示了如何創建一個資料庫:
hive> CREATE DATABASE financials;
如果資料庫financials已經存在的話,那麼將會拋出一個錯誤信息。使用如下語句可以避免在這種情況下拋出錯誤信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
雖然通常情況下用戶還是期望在同名資料庫已經存在的情況下能夠拋出警告信息的,但是IF NOT EXISTS這個子句對於那些在繼續執行之前需要根據需要實時創建資料庫的情況來說是非常有用的。
在所有的資料庫相關的命令中,都可以使用SCHEMA這個關鍵字來替代關鍵字TABLE。
隨時可以通過如下命令方式查看Hive中所包含的資料庫:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果資料庫非常多的話,那麼可以使用正則表達式匹配來篩選出需要的資料庫名,正則表達式這個概念,將會在第6.2.3節「Like和RLike」介紹。下面這個例子展示的是列舉出所有以字母h開頭,以其他字元結尾(即.*部分含義)的資料庫名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...
❿ hive 自定義函數需要哪些jar包
為什麼使用Hive?為什麼使用Hive?那麼,在哪裡使用Hive呢?在載入了60億行(經度、維度、時間、數據值、高度)數據集到MySQL後,系統崩潰了,並經歷過數據丟失。這可能部分是因為我們最初的策略是將所有的數據都存儲到單一的一張表中了。後來,我們調整了策略通過數據集和參數進行分表,這有所幫助但也因此引入了額外的消耗,而這並非是我們願意接受的。相反,我們決定嘗試使用ApacheHive技術。我們安裝了Hive0.5+20,使用CDHv3和ApacheHadoop(0202+320)。CDHv3還包含有許多其他相關工具,包括Sqoop和Hue這些在我們的架構中都標識出來了,如圖23-3底部所示。我們使用ApacheSqoop轉儲數據到Hive中,然後通過寫一個ApacheOODT包裝器,來使Hive按照空間/時間約束查詢數據,然後將結果提供給RCMET和其他用戶(圖23-2中間部分顯示)。RCMES集群的完整的架構如圖23-3所示。我們有5台機器,包括圖中所示的一個主/從配置,通過一個運行GigE的私人網進行連接。Hive提供了什麼Photobucket公司使用Hive的主要目標是為業務功能、系統性能和用戶行為提供答案。為了滿足這些需求,我們每晚都要通過Flume從數百台伺服器上的MySQL資料庫中轉儲來自Web伺服器和自定義格式日誌TB級別的數據。這些數據有助於支持整個公司許多組織,比如行政管理、廣告、客戶支持、產品開發和操作,等等。對於歷史數據,我們保持所有MySQL在每月的第一天創建的所有的數據作為分區數據並保留30天以上的日誌文件。Photobucket使用一個定製的ETL框架來將MySQL資料庫中數據遷移到Hive中。使用Flume將日誌文件數據寫入到HDFS中並按照預定的Hive流程進行處理。Hive支持的用戶有哪些行政管理依賴於使用Hadoop提供一般業務健康狀況的報告。Hive允許我們解析結構化資料庫數據和非結構化的點擊流數據,以及業務所涉及的數據格式進行讀取。廣告業務使用Hive篩選歷史數據來對廣告目標進行預測和定義配額。產品開發無疑是該組織中產生最大數量的特定的查詢的用戶了。對於任何用戶群,時間間隔變化或隨時間而變化。Hive是很重要的,因為它允許我們通過對在當前和歷史數據中運行A/B測試來判斷在一個快速變化的用戶環境中新產品的相關特性。在Photobucket公司中,為我們的用戶提供一流的系統是最重要的目標。從操作的角度來看,Hive被用來匯總生成跨多個維度的數據。在公司里知道最流行的媒體、用戶、參考域是非常重要的。控制費用對於任何組織都是重要的。一個用戶可以快速消耗大量的系統資源,並顯著增加每月的支出。Hive可以用於識別和分析出這樣的惡意用戶,以確定哪些是符合我們的服務條款,而哪些是不符合的。也可以使用Hive對一些操作運行A/B測試來定義新的硬體需求和生成ROI計算。Hive將用戶從底層MapRece代碼解放出來的能力意味著可以在幾個小時或幾天內就可以獲得答案,而不是之前的數周。Hive中的資料庫Hive中資料庫的概念本質上僅僅是表的一個目錄或者命名空間。然而,對於具有很多組和用戶的大集群來說,這是非常有用的,因為這樣可以避免表命名沖突。通常會使用資料庫來將生產表組織成邏輯組。如果用戶沒有顯式指定資料庫,那麼將會使用默認的資料庫default。下面這個例子就展示了如何創建一個資料庫:hive>CREATEDATABASEfinancials;如果資料庫financials已經存在的話,那麼將會拋出一個錯誤信息。使用如下語句可以避免在這種情況下拋出錯誤信息:hive>;雖然通常情況下用戶還是期望在同名資料庫已經存在的情況下能夠拋出警告信息的,但是IFNOTEXISTS這個子句對於那些在繼續執行之前需要根據需要實時創建資料庫的情況來說是非常有用的。在所有的資料庫相關的命令中,都可以使用SCHEMA這個關鍵字來替代關鍵字TABLE。隨時可以通過如下命令方式查看Hive中所包含的資料庫:hive>SHOWDATABASES;defaultfinancialshive>CREATEDATABASEhuman_resources;hive>SHOWDATABASES;defaultfinancialshuman_resources如果資料庫非常多的話,那麼可以使用正則表達式匹配來篩選出需要的資料庫名,正則表達式這個概念,將會在第6.2.3節「Like和RLike」介紹。下面這個例子展示的是列舉出所有以字母h開頭,以其他字元結尾(即.*部分含義)的資料庫名:hive>SHOWDATABASESLIKE'h.*';human_resourceshive>Hive會為每個資料庫創建一個目錄。資料庫中的表將會以這個資料庫目錄的子目錄形式存儲。有一個例外就是default資料庫中的表,因為這個資料庫本身沒有自己的目錄。資料庫所在的目錄位於屬性hive.metastore.warehouse.dir所指定的頂層目錄之後,這個配置項我們已經在前面的第2.5.1節「本地模式配置」和第2.5.2節「分布式模式和偽分布式模式配置」中進行了介紹。假設用戶使用的是這個配置項默認的配置,也就是/user/hive/warehouse,那麼當我們創建資料庫financials時,Hive將會對應地創建一個目錄/user/hive/warehouse/financials.db。這里請注意,資料庫的文件目錄名是以.db結尾的。用戶可以通過如下的命令來修改這個默認的位置:hive>CREATEDATABASEfinancials>LOCATION'/my/preferred/directory';用戶也可以為這個資料庫增加一個描述信息,這樣通過DESCRIBEDATABASE命令就可以查看到該信息。hive>CREATEDATABASEfinancials>COMMENT'Holdsallfinancialtables';hive>DESCRIBEDATABASEfinancials;://master-server/user/hive/warehouse/financials.db從上面的例子中,我們可以注意到,DESCRIEBDATABASE語句也會顯示出這個資料庫所在的文件目錄位置路徑。在這個例子中,URI格式是hdfs。如果安裝的是MapR,那麼這里就應該是maprfs。對於亞馬遜彈性MapRece(EMR)集群,這里應該是hdfs,但是用戶可以設置hive.metastore.warehouse.dir為亞馬遜S3特定的格式(例如,屬性值設置為s3n://bucketname)。用戶可以使用s3作為模式,但是如果使用新版的規則s3n會更好。前面DESCRIBEDATABASE語句的輸出中,我們使用了master-server來代表URI許可權,也就是說應該是由文件系統的「主節點」(例如,HDFS中運行NameNode服務的那台伺服器)的伺服器名加上一個可選的埠號構成的(例如,伺服器名:埠號這樣的格式)。如果用戶執行的是偽分布式模式,那麼主節點伺服器名稱就應該是localhost。對於本地模式,這個路徑應該是一個本地路徑,例如file:///user/hive/warehouse/financials.db。如果這部分信息省略了,那麼Hive將會使用Hadoop配置文件中的配置項fs.default.name作為master-server所對應的伺服器名和埠號,這個配置文件可以在$HADOOP_HOME/conf這個目錄下找到。需要明確的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/warehouse/financials.db是等價的,其中master-server是主節點的DNS名和可選的埠號。為了保持完整性,當用戶指定一個相對路徑(例如,some/relative/path)時,對於HDFS和Hive,都會將這個相對路徑放到分布式文件系統的指定根目錄下(例如,hdfs:///user/)。然而,如果用戶是在本地模式下執行的話,那麼當前的本地工作目錄將是some/relative/path的父目錄。為了腳本的可移植性,通常會省略掉那個伺服器和埠號信息,而只有在涉及到另一個分布式文件系統實例(包括S3存儲)的時候才會指明該信息。此外,用戶還可以為資料庫增加一些和其相關的鍵-值對屬性信息,盡管目前僅有的功能就是提供了一種可以通過DESCRIBEDATABASEEXTENDED語句顯示出這些信息的方式:hive>CREATEDATABASEfinancials>WITHDBPROPERTIES('creator'='MarkMoneybags','date'='2012-01-02');hive>DESCRIBEDATABASEfinancials;financialshdfs://master-server/user/hive/warehouse/financials.dbhive>;financialshdfs://master-server/user/hive/warehouse/financials.db{date=2012-01-02,creator=MarkMoneybags);USE命令用於將某個資料庫設置為用戶當前的工作資料庫,和在文件系統中切換工作目錄是一個概念:hive>USEfinancials;現在,使用像SHOWTABLES這樣的命令就會顯示當前這個資料庫下所有的表。不幸的是,並沒有一個命令可以讓用戶查看當前所在的是哪個資料庫!幸運的是,在Hive中是可以重復使用USE…命令的,這是因為在Hive中並沒有嵌套資料庫的概念。可以回想下,在第2.7.2節「變數和屬性」中提到過,可以通過設置一個屬性值來在提示符裡面顯示當前所在的資料庫(Hivev0.8.0版本以及之後的版本才支持此功能):hive>sethive.cli.print.current.db=true;hive(financials)>USEdefault;hive(default)>sethive.cli.print.current.db=false;hive>最後,用戶可以刪除資料庫:hive>;IFEXISTS子句是可選的,如果加了這個子句,就可以避免因資料庫finanacials不存在而拋出警告信息。默認情況下,Hive是不允許用戶刪除一個包含有表的資料庫的。用戶要麼先刪除資料庫中的表,然後再刪除資料庫;要麼在刪除命令的最後面加上關鍵字CASCADE,這樣可以使Hive自行先刪除資料庫中的表:hive>CASCADE;如果使用的是RESTRICT這個關鍵字而不是CASCADE這個關鍵字的話,那麼就和默認情況一樣,也就是,如果想刪除資料庫,那麼必須先要刪除掉該資料庫中的所有表。如果某個資料庫被刪除了,那麼其對應的目錄也同時會被刪除。