中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive能做什么

發布時間:2021-12-08 10:30:37 來源:億速云 閱讀:300 作者:小新 欄目:云計算

這篇文章給大家分享的是有關Hive能做什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Hive能做什么?

  • Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

  • Hive是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL https://my.oschina.net/u/2000675/blog/746016#navbar-header),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL(Hive SQL),它允許熟悉 SQL 的用戶查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的復雜的分析工作(HQL函數庫)。

為什么要使用Hive?

  • 操作接口采用類SQL語法,提供快速開發的能力

  • 避免了去寫MapReduce,減少開發人員的學習成本

  • 擴展功能很方便

Hive與傳統數據庫對比

 HiveRDBMS
查詢語言HQLSQL
數據存儲HDFSRaw Device or Local FS
執行MapReduceExcutor
執行延遲
處理數據規模
數據類型全部數據(歷史和在線---分析)在線數據
冗余程度    高冗余低冗余(通過范式)
.........
......

...

Hive的架構

Hive能做什么

  • 用戶接口主要有三個:CLI,Client 和WUI。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動Client模式的時候,需要指出Hive Server所在節點,并且在該節點啟動Hive Server。WUI是通過瀏覽器訪問Hive。

  • Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。

  • 解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,并在隨后有MapReduce調用執行。

  • Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含*的查詢,比如select * from tbl不會生成MapRedcue任務)。

  • Thriff (參考http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/)

Hive相關概念

  • Operator(最小的處理單元):每個操作符代表HDFS的一個操作或者一道MapReduce作業    

  • Operator都是Hive定義的一個處理過程

  • Operator定義(樹狀結構):

  • protectedList<Operator<?extendsSerializable>>childOperators;
    protectedList<Operator<?extendsSerializable>>parentOperators;
    protectedbooleandone;// 初始化值為false


     
  • ANTLR詞法語法分析工具解析HQL

Hive能做什么

Hive的三種模式

  • Local模式:該模式連接到一個In-memory的數據庫Derby,一般用于Unit Test

        Hive能做什么

  • Hive單用戶模式:通過網絡連接到一個數據庫中,是最經常使用到的模式Hive能做什么

  • Hive多用戶模式:用于非Java客戶端訪問元數據庫,在服務器端啟動MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer訪問元數據庫

1.本地 derby

這種方式是最簡單的存儲方式,只需要在 hive-site.xml 做如下配置便可

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> </property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
 
注:使用 derby 存儲方式時,運行 hive 會在當前目錄生成一個 derby 文件和一個 metastore_db
目錄。這種存儲方式的弊端是在同一個目錄下同時只能有一個 hive 客戶端能使用數據庫,否則會提示如下錯誤

[html] view plaincopyprint? hive> show tables;
FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db', see the next exception for details.
NestedThrowables:
java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details.
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show tables;
FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details.
NestedThrowables:
java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details.
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

2.本地 mysql

這種存儲方式需要在本地運行一個 mysql 服務器,并作如下配置(需要將 mysql 的驅動 jar 包拷貝到$HIVE_HOME/lib 目錄下)。
# /opt/hive-1.2.1/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value> </property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
</configuration>

附:

安裝 mysql
Yum install mysql-server -y
啟動服務
service mysqld start
mysql
修改 mysql 權限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION; flush privileges;
delete from user where Host != '%';

刪除多余會對權限造成影響的數據刷新權限
[ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)

錯誤的原因: Hadoop jline 版本和 hive 的 jline 不一致

3.遠端 mysql
3.1.remote 一體

這種存儲方式需要在遠端服務器運行一個 mysql 服務器,并且需要在 Hive 服務器啟動 meta
服務。
這里用 mysql 的測試服務器,ip 位 192.168.1.214,新建 hive_remote 數據庫,字符集位 latine1 <?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.1.188:9083</value>
</property>
</configuration>

注:這里把 hive 的服務端和客戶端都放在同一臺服務器上了。服務端和客戶端可以拆開,

3.2.Remote 分開

將 hive-site.xml 配置文件拆為如下兩部分

-服務端配置文件 啟動:hive --service metastore

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>

-客戶端配置文件 啟動:hive

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave2:9083</value>
</property>
</configuration>

感謝各位的閱讀!關于“Hive能做什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

调兵山市| 平度市| 时尚| 登封市| 石门县| 马龙县| 阳朔县| 北碚区| 许昌市| 灌南县| 抚顺市| 耿马| 高青县| 旅游| 温州市| 犍为县| 南投市| 吕梁市| 抚州市| 西平县| 竹山县| 资阳市| 清丰县| 龙游县| 池州市| 安溪县| 论坛| 台北县| 土默特左旗| 黎川县| 冷水江市| 江口县| 蒙自县| 册亨县| 休宁县| 阿合奇县| 岑溪市| 同德县| 平潭县| 合阳县| 苏尼特左旗|