1. 程式人生 > >大資料之hive基礎理論

大資料之hive基礎理論

關於大資料 Hadoop是什麼 海量資料分散式的儲存和計算框架 資料儲存:HDFS: Hadoop Distributed File System 資料計算:YARN/MapReduce

1 hive 產生背景

hive定義:

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive. 官方網址:

http://hive.apache.org/ hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。 Hive是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL),這是一種可以儲存、查詢和分析儲存在 Hadoop 中的大規模資料的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的使用者查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。 使用sql 管理 讀 寫分散式儲存的大資料的一個數據倉庫軟體。

2 分散式儲存

分散式儲存:HDFS、S3、OSS Hive定義了SQL語言:HQL (類SQL) 通常用於離線處理 SQL =Hive=MapReduce/Spark/Tez===>YARN Hive on MapReduce Hive on Spark Hive on Tez

3為什麼要使用Hive

1) SQL   傳統資料庫都使用的SQL語句,而Hive使用的是HQL語句。容易上手。
2) Hadoop   MapReduce是基於HDFS系統的,通常而言Hive處理資料都是度多寫少。Hive的表更新是採用覆蓋的方式,而這種情況下處理資料絕大部分都會訪問整個表。這對在大規模資料集上執行的資料倉庫非常見效。
3) MetaStore: Pig/Impala/Presto/SparkSQL(共享元資料資訊)

Hive與RDBMS的關係 SQL: Hive QL和SQL的關係 實時性 事務 分散式 資料量 在這裡插入圖片描述

用過資料庫的都知道,資料庫需要在建立時制定好資料格式,也就是俗稱的建表。傳統資料庫和Hive在使用前都需要建表,但是不知道小夥伴們有沒有遇到這種情況。傳統資料庫在建表之後往裡面導資料時,通常會因為很多問題導致SQL異常,從而加載出錯,而常見的情況就是資料格式不對。 傳統資料庫在載入資料的時候會嚴格檢查資料格式,如果不符合規範就會拒絕載入。而這種驗證過程將耗費大量時間,這對於大資料而言,時間上是無法滿足需求的。而Hive在插入資料的時候並不會驗證資料,它只會在查詢的時候驗證。這種載入時驗證的方式稱之為讀時模式,而查詢時驗證的方式則稱之為寫時模式

metastore是hive元資料的集中存放地 metastore預設使用內嵌的derby資料庫作為儲存引擎 Derby引擎的缺點:一次只能開啟一個會話 使用Mysql作為外接儲存引擎,多使用者同時訪問

4 Hive安裝

解壓:tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/
配置環境變數: ~/.bash_profile
	export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
	export PATH=$HIVE_HOME/bin:$PATH
生效: source ~/.bash_profile
Hive配置:$HIVE_HOME/conf
	hive-env.sh
		HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
	hive-site.xml配置的就是MySQL的相關資訊
	拷貝mysql驅動到$HIVE_HOME/lib
<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://localhost:3306/ruoze_d5?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</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>root</value>
</property>

Hive安裝

內嵌模式:元資料保持在內嵌的Derby模式,只允許一個會話連線

本地獨立模式:在本地安裝Mysql,把元資料放到Mysql內

遠端模式:元資料放置在遠端的Mysql資料庫。 想說的是,hive只是個工具,包括它的資料分析,依賴於mapreduce,它的資料管理,依賴於外部系統

這一步其實不是必須的,因為Hive預設的metadata(元資料)是儲存在Derby裡面的,但是有一個弊端就是同一時間只能有一個Hive例項訪問,這適合做開發程式時做本地測試。

Hive提供了增強配置,可將資料庫替換成mysql等關係型資料庫,將儲存資料獨立出來在多個服務示例之間共享。

5 安裝問題

1 mysql賦權 2 賬戶密碼問題 3 hostname 問題

<value>jdbc:mysql://localhost:3306/ruoze_d5?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</value>

檢視log hive 配置檔案

[[email protected] conf]$ pwd 
/home/hadoop/app/hive-1.1.0-cdh5.7.0/conf
[[email protected] conf]$ ll
total 24
-rw-r--r--. 1 hadoop hadoop 1196 Mar 24  2016 beeline-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop 2429 Oct 22 17:03 hive-env.sh
-rw-r--r--. 1 hadoop hadoop 2378 Mar 24  2016 hive-env.sh.template
-rw-r--r--. 1 hadoop hadoop 2662 Mar 24  2016 hive-exec-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop 3505 Mar 24  2016 hive-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop  732 Oct 23 13:35 hive-site.xml
檢視log存放路徑
[[email protected] conf]$ cat hive-log4j.properties.template

# Define some default values that can be overridden by system properties
hive.log.threshold=ALL
hive.root.logger=WARN,DRFA
hive.log.dir=${java.io.tmpdir}/${user.name}
hive.log.file=hive.log

6 啟動 hive

#./hive

[[email protected] ~]$ 
[[email protected] ~]$ hive
which: no hbase in (/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/usr/java/jdk1.7.0_80/bin:/usr/java/jdk1.7.0_80/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/sbin:/usr/java/jdk1.7.0_80/bin:/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)

Logging initialized using configuration in jar:file:/home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/hive-common-1.1.0-cdh5.7.0.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive (default)> 

快速入門 建立表。插入資料。

create table ruoze_helloworld(id int,name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

load data local inpath '/home/hadoop/data/helloworld.txt' overwrite into table ruoze_helloworld;

alter database ruoze_d5 character set latin1;