上次介紹了HDFS,本來想進入Mapreduce,但感覺Mapreduce基本廢棄,于是直接進入了Hive中來。
數據倉庫
數據倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。數據倉庫顧名思義,是一個很大的數據存儲集合,出于企業的分析性報告和決策支持目的而創建,對多樣的業務數據進行篩選與整合。
它為企業提供一定的BI(商業智能)能力,指導業務流程改進、監視時間、成本、質量以及控制。
數據倉庫的輸入方是各種各樣的數據源,最終的輸出用于企業的數據分析、數據挖掘、數據報表等方向。
數據庫和數據倉庫區別
數據庫是面向交易的處理系統,它是針對具體業務在數據庫聯機的日常操作,通常對記錄進行查詢、修改。用戶較為關心操作的響應時間、數據的安全性、完整性和并發支持的用戶數等問題。
數據倉庫一般針對某些主題的歷史數據進行分析,支持管理決策,又被稱為聯機分析處理 OLAP(On-Line Analytical Processing)。
比如,支付寶年度賬單其本質是基于數據倉庫進行數據可視化而成。
數據倉庫,是在數據庫已經大量存在的情況下,為了進一步挖掘數據資源、為了決策需要而產生的,它決不是所謂的“大型數據庫”。
數據倉庫分層
按照數據流入流出的過程,數據倉庫架構可分為三層——源數據(ODS)、數據倉庫(DW)、數據應用(APP)。
Hive
Hive是一個構建在 Hadoop上的數據倉庫框架。最初,Hive是由Facebook開發,后來移交由 Apache!軟件基金會開發,并作為一個 Apache開源項目。
Hive是建立在 Hadoop上的數據倉庫基礎構架。它提供了一系列的工具,可以存儲、查詢和分析存儲在分布式存儲系統中的大規模數據集。Hive定義了簡單的類SQL査詢語言,通過底層的計算引擎,將SQL轉為具體的計算任務進行執行。
Hive支持Mapreduce、Tez、Spark等分布式計算引擎。
Hive環境搭建
在Hive環境搭建無需配置集群,Hive的安裝其實有兩部分組成,一個是Server端、一個是客戶端,所謂服務端其實就是Hive管理Meta的那個Hive,服務端可以裝在任何節點上,可以是Namenode上也可以是Datanode的任意一個節點上。
Hive的客戶端界面工具早期選擇SQuirrel SQL Client,但最近我喜歡上了Apache Zeppelin,Apache Zeppelin是一款基于Web的NoteBook,其實和Juypyter Notebook沒有什么兩樣。
在 Hive環境搭建,需要搭建Mysql,這里選擇節點node02進行Mysql環境搭建。
- [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]# #第一次登錄跳過權限認證
- [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;
- # 設置遠程連接權限
- 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系統中安裝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>
- <!--
- 對應的文件夾需要創建
- -->
- <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驅動,下載地址:https://maven.ityuan.com/maven2/mysql/mysql-connector-java/5.1.33。
下載完成后并放在lib文件夾中,并通過hive初始化Mysql數據庫。
- [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數據庫,容易遇到兩個比較常見的Bug:
第一個Hive初始化Mysql數據庫:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
錯誤原因:系統找不到這個類所在的jar包或者jar包的版本不一樣系統不知道使用哪個。hive啟動報錯的原因是后者
解決辦法:
- com.google.common.base.Preconditions.checkArgument這個類所在的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中高版本的復制到hive的lib中。
第二個Hive初始化Mysql數據庫:Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8 at
報錯原因:在本身的hive-site.xml配置文件中,3215行(見報錯記錄第二行)有特殊字符
解決辦法:進入hive-site.xml文件,跳轉到對應行,刪除里面的特殊字符即可。
如果報Unknown database 'hive',建議直接在MySQL中創建hive數據庫。
最終Hive成功初始化Mysql數據庫如下圖所示:
查看hive數據庫,就會看見對應初始化的表生成。
在輸入hive,即可進入Hive命令行,說明Hive搭建成功。
原文地址:https://mp.weixin.qq.com/s/8vRP6d3bco-LEDo7oHTM6Q