Spark2.4.8集成并讀寫hive表資料
- 一、Hive簡介
- 二、Hive安裝
- 三、Hive的本地模式和遠程模式配置
- 1. 本地模式配置
- 2. **遠程模式**
- 四、創建Hive表
- 五、SparkSQL集成Hive
一、Hive簡介
Apache Hive?資料倉庫軟體通過SQL實作對分布式存盤中的大型資料集的讀寫和管理,結構可以投射到存盤中的資料上,Hive提供命令列工具和JDBC驅動程式連接用戶,
本質上:Hive是一個翻譯器,借助Hive引擎將SQL陳述句轉成MR程式且構建于HDFS上的一個資料倉庫,
它支持SQL(SQL99的一個子集),可以寫SQL陳述句來分析海量的資料
二、Hive安裝
- 下載Hive(下載地址),并上傳至虛擬機上
- 解壓安裝
tar -zxvf apache-hive-2.3.0-bin.tar.gz -C ~/training/ - 設定環境變數
export HIVE_HOME=/training/apache-hive-2.3.0-bin export PATH=$PATH:$HIVE_HOME/bin - 讓環境變數生效
source ~/.bash_profile
三、Hive的本地模式和遠程模式配置
1. 本地模式配置
-
安裝MySQL
需要借助MySQL來存盤metadata元資料,所以需要安裝mysql,MySQL可以安裝在與hive所在的同一臺虛擬機上,也可以安裝在Windows上或者其他的服務器上,你喜歡哪種選擇哪種,如果你已經有了MySQL資料庫,那直接配置即可,如果沒有,則需要先安裝MySQL資料庫,
以下為在centos7上安裝的MySQL的程序,僅供大家參考:
-
洗掉掉centos7自帶的mariadb相關庫
yum remove mysql-libs -
配置MySQLyum源:
(0) 在虛擬機上先查看MySQL的yum源:yum repolist all | grep mysql(1)下載并安裝mysql的yum源:
地址:
https://dev.mysql.com/downloads/repo/yum/
版本:mysql80-community-release-el7-3.noarch.rpm
安裝:rpm -Uvh mysql80-community-release-el7-3.noarch.rpm(2)修改MySQL的yum源檔案:
編輯:vi /etc/yum.repos.d/mysql-community.repo,添加如下內容:# 我們使用MySQL57版本,其他版本禁用即可 # Enable to use MySQL 5.7 [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysqlMySQL的yum源配置如下圖所示:

(3)再次確認下,當前的yum源是不是mysql57:
yum repolist enabled | grep mysql

(4)安裝MySQL:
yum -y install mysql-community-server(5)啟動MySQL服務器:
systemctl start mysqld.service(6)查看MySQL啟動狀態:
systemctl status mysqld.service(7)修改root默認密碼:
-
先獲取臨時密碼:
grep 'temporary password' /var/log/mysqld.log -
登錄到mysql中去修改:
2.1 命令列登錄:
mysql -uroot -p123456
2.2 命令列修改密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sjm_123456';
-
-
-
配置Hive資料庫
命令列登錄到MySQL中,安裝如下步驟執行即可:
創建一個新的資料庫:create database hive;
創建一個新的用戶:
create user ‘hiveowner’@’%’ identified by ‘Sjm_123456’;
給該用戶授權
grant all on hive.* TO ‘hiveowner’@’%’;
grant all on hive.* TO ‘hiveowner’@‘localhost’ identified by ‘Sjm_123456’;
flush privileges;

-
在hive安裝目錄下的conf下創建hive-site.xml檔案,并添加如下內容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveowner</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Sjm_123456</value> </property> </configuration> -
上傳mysql驅動包到/training/apache-hive-2.3.0-bin/lib目錄下,
注意一定要使用高版本的MySQL驅動(5.1.43以上的版本) -
初始化Hive
schematool -dbType mysql -initSchema執行成功后的日志如下:

-
驗證Hive是否安裝成功,
在虛擬機命令列中,執行:hive,回車即可,看到如下類似資訊說明安裝配置ok了:

2. 遠程模式
特點:
元資料資訊存盤在遠程的MySQL資料庫中
注意使用高版本的MySQL驅動(5.1.43以上的版本)
安裝:
如果你windows上已經安裝了mysql,只需如下操作:
創建一個新的資料庫:create database hive;
創建一個新的用戶:
create user ‘hiveowner’@’%’ identified by ‘Sjm_123456’; —這里是你MySQL root用戶密碼
給該用戶授權
grant all on hive.* TO ‘hiveowner’@’%’;
flush privileges;
只需在hive-site.xml中更改下url等相關資訊即可
四、創建Hive表
-
創建Hive的內部表edu_teacher,建表陳述句如下:
create table edu_teacher (id string, name string, intro string, career string, level int, avatar string, sort int, is_deleted int, gmt_create string, gmt_modified string) row format delimited fields terminated by '\t';創建表如下圖所示:

-
在hive的命令列中匯入edu_teacher.csv資料到edu_teacher表中,執行如下命令:
load data local inpath '/root/edu_teacher.csv' into table edu_teacher;注意:這里是將本地的檔案匯入hive表中
如下所示:

-
驗證下hive表中是否已經存在資料了,在hive的命令列中執行如下命令:
select * from edu_teacher;結果如下:

五、SparkSQL集成Hive
-
把Hive和Hadoop如下組態檔復制到$SPARK_HOME/conf目錄下:
hive-site.xml
core-site.xml
hdfs-site.xml
注意:如果spark是全分布,則需要將上述三個檔案同時復制到spark的所有節點 -
啟動Spark Shell的時候 加入MySQL的驅動
bin/spark-shell --master spark://niit01:7077 --jars /training/spark-2.4.8-bin-hadoop2.7/jars/mysql-connector-java-5.1.6.jar注意:由于我的MySQL驅動也復制到spark的jars目錄下
啟動成功后如下圖所示:

-
使用Spark shell 操作Hive
-
創建emp表
spark.sql("create table emp(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int,deptno int)row format delimited fields terminated by ','")創建成功后如下圖所示:

在hive中查看會看到如下圖所示:

在HDFS上會創建一個emp目錄,如下圖所示:

-
匯入本地上的emp.csv資料到hive中的emp表
spark.sql("load data local inpath '/root/emp.csv' into table emp")注意:這里因版本的問題,可能會報錯,可以先忽略,因資料已經匯入到表中,后續可以查找MySQL驅動、spark和hive的版本的對應關系即可解決
匯入成功后會在hdfs上看到有資料檔案被匯入到emp這個目錄下,如圖所示:

在hive命令列中查看,也會查詢出資料:

-
-
使用Spark-sql操作Hive
- 啟動spark-sql:
bin/spark-sql --master spark://niit01:7077 --jars /training/spark-2.4.8-bin-hadoop2.7/jars/mysql-connector-java-5.1.6.jar - 查看hive所有的表:
結果如圖:show tables

目前只有一張emp表(之前在hive中創建的edu_teacher被我洗掉掉了) - 查看emp表
結果如圖:select * from emp

注意:上述select陳述句會產生一個job,如圖所示:

- 啟動spark-sql:
-
可以重新創建其他表,如下所示:
CREATE TABLE check_standard (id int,dict_id int,standard_name string,standard_type int,create_time string,create_by string,update_time string,update_by string) row format delimited fields terminated by '\t'
注意:創建表不會產生Job將測驗資料check_standard.csv匯入到check_standard表中
load data local inpath '/root/check_standard.csv' into table check_standard;再次查看下:
select * from check_standard;結果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/348313.html
標籤:其他
下一篇:kafka3.0集群搭建程序


