數(shù)據(jù)倉庫和Hive環(huán)境搭建
上次介紹了HDFS,本來想進(jìn)入Mapreduce,但感覺Mapreduce基本廢棄,于是直接進(jìn)入了Hive中來。
數(shù)據(jù)倉庫
數(shù)據(jù)倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。數(shù)據(jù)倉庫顧名思義,是一個(gè)很大的數(shù)據(jù)存儲集合,出于企業(yè)的分析性報(bào)告和決策支持目的而創(chuàng)建,對多樣的業(yè)務(wù)數(shù)據(jù)進(jìn)行篩選與整合。
它為企業(yè)提供一定的BI(商業(yè)智能)能力,指導(dǎo)業(yè)務(wù)流程改進(jìn)、監(jiān)視時(shí)間、成本、質(zhì)量以及控制。
數(shù)據(jù)倉庫的輸入方是各種各樣的數(shù)據(jù)源,最終的輸出用于企業(yè)的數(shù)據(jù)分析、數(shù)據(jù)挖掘、數(shù)據(jù)報(bào)表等方向。
數(shù)據(jù)庫和數(shù)據(jù)倉庫區(qū)別
數(shù)據(jù)庫是面向交易的處理系統(tǒng),它是針對具體業(yè)務(wù)在數(shù)據(jù)庫聯(lián)機(jī)的日常操作,通常對記錄進(jìn)行查詢、修改。用戶較為關(guān)心操作的響應(yīng)時(shí)間、數(shù)據(jù)的安全性、完整性和并發(fā)支持的用戶數(shù)等問題。
數(shù)據(jù)倉庫一般針對某些主題的歷史數(shù)據(jù)進(jìn)行分析,支持管理決策,又被稱為聯(lián)機(jī)分析處理 OLAP(On-Line Analytical Processing)。
比如,支付寶年度賬單其本質(zhì)是基于數(shù)據(jù)倉庫進(jìn)行數(shù)據(jù)可視化而成。
數(shù)據(jù)倉庫,是在數(shù)據(jù)庫已經(jīng)大量存在的情況下,為了進(jìn)一步挖掘數(shù)據(jù)資源、為了決策需要而產(chǎn)生的,它決不是所謂的“大型數(shù)據(jù)庫”。
數(shù)據(jù)倉庫分層
按照數(shù)據(jù)流入流出的過程,數(shù)據(jù)倉庫架構(gòu)可分為三層——源數(shù)據(jù)(ODS)、數(shù)據(jù)倉庫(DW)、數(shù)據(jù)應(yīng)用(APP)。
Hive
Hive是一個(gè)構(gòu)建在 Hadoop上的數(shù)據(jù)倉庫框架。最初,Hive是由Facebook開發(fā),后來移交由 Apache!軟件基金會開發(fā),并作為一個(gè) Apache開源項(xiàng)目。
Hive是建立在 Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以存儲、查詢和分析存儲在分布式存儲系統(tǒng)中的大規(guī)模數(shù)據(jù)集。Hive定義了簡單的類SQL査詢語言,通過底層的計(jì)算引擎,將SQL轉(zhuǎn)為具體的計(jì)算任務(wù)進(jìn)行執(zhí)行。
Hive支持Mapreduce、Tez、Spark等分布式計(jì)算引擎。
Hive環(huán)境搭建
在Hive環(huán)境搭建無需配置集群,Hive的安裝其實(shí)有兩部分組成,一個(gè)是Server端、一個(gè)是客戶端,所謂服務(wù)端其實(shí)就是Hive管理Meta的那個(gè)Hive,服務(wù)端可以裝在任何節(jié)點(diǎn)上,可以是Namenode上也可以是Datanode的任意一個(gè)節(jié)點(diǎn)上。
Hive的客戶端界面工具早期選擇SQuirrel SQL Client,但最近我喜歡上了Apache Zeppelin,Apache Zeppelin是一款基于Web的NoteBook,其實(shí)和Juypyter Notebook沒有什么兩樣。
在 Hive環(huán)境搭建,需要搭建Mysql,這里選擇節(jié)點(diǎn)node02進(jìn)行Mysql環(huán)境搭建。
- [hadoop@node02 ~]$ cd module/
- [hadoop@node02 module]$ mkdir mysql
- [hadoop@node02 module]$ cd mysql/
- [hadoop@node02 mysql]# wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
- [hadoop@node02 mysql]$ sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm
- [hadoop@node02 yum.repos.d]$ yum install mysql-server
- [hadoop@node02 yum.repos.d]# #第一次登錄跳過權(quán)限認(rèn)證
- [hadoop@node02 yum.repos.d]# sudo vim /etc/my.cnf
- ############
- [mysqld]
- # 添加下面一行
- skip-grant-tables
- [hadoop@node02 yum.repos.d]# sudo systemctl start mysqld
- [hadoop@node02 yum.repos.d]# mysql -u root
- mysql> flush privileges;
- Query OK, 0 rows affected (0.00 sec)
- mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
- Query OK, 0 rows affected (0.00 sec)
- mysql> create database hive;
- Query OK, 1 row affected (0.00 sec)
- mysql> exit;
- [hadoop@node02 yum.repos.d]# mysql -u root -p123456
- mysql> use mysql;
- # 設(shè)置遠(yuǎn)程連接權(quán)限
- mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
- Query OK, 0 rows affected, 1 warning (0.00 sec)
- mysql> FLUSH PRIVILEGES;
- Query OK, 0 rows affected (0.00 sec)
下面開始在centos系統(tǒng)中安裝Hive。為了兼顧Hadoop3.1.4版本,我們選擇安裝hive3.1.2版本。Hive下載官方:http://www.apache.org/dyn/closer.cgi/hive/
- [hadoop@node02 module]$ ls
- apache-hive-3.1.2-bin.tar.gz hadoop mysql
- [hadoop@node02 module]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz
- [hadoop@node02 module]$ mv apache-hive-3.1.2-bin hive
- [hadoop@node02 module]$ ls
- apache-hive-3.1.2-bin.tar.gz hadoop hive mysql
- [hadoop@node02 conf]$ mv hive-env.sh.template hive-env.sh
- [hadoop@node02 conf]$ vim hive-env.sh
- #########
- export HADOOP_HOME=/home/hadoop/module/hadoop/hadoop-3.1.4
- export HIVE_CONF_DIR=/home/hadoop/module/hive/conf
- export HIVE_AUX_JARS_PATH=/home/hadoop/module/hive/lib
- [hadoop@node02 conf]$ sudo vim /etc/profile
- #########
- export HIVE_HOME=/home/hadoop/module/hive
- export PATH=$PATH:$HIVE_HOME/bin
- export HIVE_CONF_DIR=$HIVE_HOME/conf
- [hadoop@node02 conf]$ source /etc/profile
- [hadoop@node02 conf]$ mv hive-default.xml.template hive-site.xml
- [hadoop@node02 conf]$ vim hive-site.xml
- #########
- <property>
- <!--
- 對應(yīng)的文件夾需要?jiǎng)?chuàng)建
- -->
- <name>hive.exec.local.scratchdir</name>
- <value>/home/hadoop/module/data/hive/jobs</value>
- </property>
- <property>
- <name>hive.downloaded.resources.dir</name>
- <value>/home/hadoop/module/data/hive/resources</value>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionUserName</name>
- <value>root</value>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionPassword</name>
- <value>123456</value>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionURL</name>
- <value>jdbc:mysql://192.168.147.129:3306/hive?createDatabaseIfNotExsit=true</value>
- </property>
- <!-- MySQL5.7使用com.mysql.jdbc.Driver
- Mysql6版本使用com.mysql.cj.jdbc.Driver
- -->
- <property>
- <name>javax.jdo.option.ConnectionDriverName</name>
- <value>com.mysql.jdbc.Driver</value>
- </property>
為了使用Java連接Mysql,需要下載Mysql驅(qū)動,下載地址:https://maven.ityuan.com/maven2/mysql/mysql-connector-java/5.1.33。
下載完成后并放在lib文件夾中,并通過hive初始化Mysql數(shù)據(jù)庫。
- [hadoop@node02 lib]$ pwd
- /home/hadoop/module/hive/lib
- [hadoop@node02 lib]$ wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.33/mysql-connector-java-5.1.33.jar
- [hadoop@node02 lib]$ schematool -dbType mysql -initSchema
在Hive初始化Mysql數(shù)據(jù)庫,容易遇到兩個(gè)比較常見的Bug:
第一個(gè)Hive初始化Mysql數(shù)據(jù)庫:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
錯(cuò)誤原因:系統(tǒng)找不到這個(gè)類所在的jar包或者jar包的版本不一樣系統(tǒng)不知道使用哪個(gè)。hive啟動報(bào)錯(cuò)的原因是后者
解決辦法:
- com.google.common.base.Preconditions.checkArgument這個(gè)類所在的jar包為:guava.jar
- hadoop-3.2.1(路徑:hadoop\share\hadoop\common\lib)中該jar包為 guava-27.0-jre.jar;而hive-3.1.2(路徑:hive/lib)中該jar包為guava-19.0.1.jar
- 將jar包變成一致的版本:刪除hive中低版本jar包,將hadoop中高版本的復(fù)制到hive的lib中。
第二個(gè)Hive初始化Mysql數(shù)據(jù)庫:Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8 at
報(bào)錯(cuò)原因:在本身的hive-site.xml配置文件中,3215行(見報(bào)錯(cuò)記錄第二行)有特殊字符
解決辦法:進(jìn)入hive-site.xml文件,跳轉(zhuǎn)到對應(yīng)行,刪除里面的特殊字符即可。
如果報(bào)Unknown database 'hive',建議直接在MySQL中創(chuàng)建hive數(shù)據(jù)庫。
最終Hive成功初始化Mysql數(shù)據(jù)庫如下圖所示:
查看hive數(shù)據(jù)庫,就會看見對應(yīng)初始化的表生成。
在輸入hive,即可進(jìn)入Hive命令行,說明Hive搭建成功。