目錄
一、Spark On Hive原理
? ? ? ? (1)為什么要讓Spark On Hive?
二、MySQL安裝配置(root用戶)
? ? ? ? (1)安裝MySQL
? ? ? ? (2)啟動MySQL設(shè)置開機啟動
? ? ? ? (3)修改MySQL密碼
三、Hive安裝配置
? ? ? ? (1)修改Hadoop的core-site.xml
? ? ? ? (2)創(chuàng)建hive-site.xml
? ? ? ? (3)修改配置文件hive-env.sh
? ? ? ? (4)上傳mysql連接驅(qū)動
? ? ? ? (5)初始化元數(shù)據(jù) (Hadoop集群啟動后)? ? ??
? ? ? ? (6)創(chuàng)建logs目錄,啟動元數(shù)據(jù)服務(wù)
? ? ? ? (7)啟動Hive shell
四、Spark On Hive配置
? ? ? ? (1)創(chuàng)建hive-site.xml(spark/conf目錄)
? ? ? ? (2)放置MySQL驅(qū)動包
? ? ? ? (3)查看hive的hive-site.xml配置
? ? ? ? (4)啟動hive的MetaStore服務(wù)
? ? ? ? (5)Spark On Hive測試
? ? ? ? (6)Pycharm-spark代碼連接測試
一、Spark On Hive原理
? ? ? ? (1)為什么要讓Spark On Hive?
????????對于Spark來說,自身是一個執(zhí)行引擎。但是Spark自己沒有元數(shù)據(jù)管理功能,當(dāng)我們執(zhí)行:?SELECT * FROM person WHERE age > 10的時候, Spark完全有能力將SQL變成RDD提交。
????????但是問題是,Person的數(shù)據(jù)在哪? Person有哪些字段?字段啥類型? Spark完全不知道了。不知道這些東西,如何翻譯RDD運行。在SparkSQL代碼中可以寫SQL那是因為,表是來自DataFrame注冊的。?DataFrame中有數(shù)據(jù),有字段,有類型,足夠Spark用來翻譯RDD用.。如果以不寫代碼的角度來看,SELECT * FROM person WHERE age > 10 spark無法翻譯,因為沒有元數(shù)據(jù)。
? ? ? ? 解決方案:
? ? ? ? Spark提高執(zhí)行引擎能力,Hive的MetaStore提供元數(shù)據(jù)管理功能。選擇Hive的原因是使用Hive的用戶數(shù)量多。

二、MySQL安裝配置(root用戶)
? ? ? ? (1)安裝MySQL
? ? ? ? 命令:
????????rpm? --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
????????rpm -Uvh https://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
????????yum -y install mysql-community-server
? ? ? ? (2)啟動MySQL設(shè)置開機啟動
? ? ? ? 命令:
????????systemctl start mysqld
? ? ? ? systemctl enable mysqld
? ? ? ? (3)修改MySQL密碼
? ? ? ? 命令:
? ? ? ? 查看密碼:grep 'temporary password'?/var/log/mysqld.log
? ? ? ? 修改密碼:
mysql -uroot -p? #登錄MySQL,密碼是剛剛查看的臨時密碼
set global validate_password_policy=LOW;? ?#密碼安全級別低
set? global? validate_password_length=4;? #密碼長度最低四位
ALTER USER 'root'@'localhost' IDENTIFIED BY '密碼'; # 設(shè)置用戶和密碼
# 配置遠(yuǎn)程登陸用戶以及密碼
grant all privileges on *.* to root@"%" identified by 'root' with grant option;
flush privileges;
三、Hive安裝配置
? ? ? ? (1)修改Hadoop的core-site.xml
? ? ? ? 添加內(nèi)容如下:
?????<property>
? ? ? ? ? ? <name>hadoop.proxyuser.noregrets.hosts</name>
? ? ? ? ? ? <value>*</value>
? ? </property>
? ? <property>
? ? ? ? ? ? <name>hadoop.proxyuser.noregrets.groups</name>
? ? ? ? ? ? <value>*</value>
? ? </property>
? ? ? ? 上傳解壓安裝Hive壓縮包并構(gòu)建軟連接
? ? ? ? 命令:
? ? ? ? 解壓:tar -zvxf apache-hive-3.1.3-bin-tar-gz -C /export/servers
? ? ? ? 構(gòu)建軟連接:ln -s /export/servers/apache-hive-3.1.3-bin/ /export/servers/hive
? ? ? ? (2)創(chuàng)建hive-site.xml
? ? ? ? 命令:
? ? ? ? cd /export/servers/hive/conf
? ? ? ? vim hive-site.xml
? ? ? ? 添加內(nèi)容如下:
<configuration>
????????<!-- 存儲元數(shù)據(jù)mysql相關(guān)配置 -->
????????<property>
? ? ????????<name>javax.jdo.option.ConnectionURL</name>
? ? ????????<value>jdbc:mysql://pyspark01:3306/hive?createDatabaseIfNotExist=true&useSSL=false&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>
????????<!-- H2S運行綁定host -->
????????<property>
????????????????<name>hive.server2.thrift.bind.host</name>
????????????????<value>pyspark01</value>
????????</property>
????????<!-- 遠(yuǎn)程模式部署metastore metastore地址 -->
????????<property>
????????????????<name>hive.metastore.uris</name>
????????????????<value>thrift://pyspark01:9083</value>
????????</property>
????????<!-- 關(guān)閉元數(shù)據(jù)存儲授權(quán) -->
????????<property>
????????????????<name>hive.metastore.event.db.notification.api.auth</name>
????????????????<value>false</value>
????????</property>
</configuration>
? ? ? ? (3)修改配置文件hive-env.sh
? ? ? ? 命令:
? ? ? ? cd /export/servers/hive/conf
? ? ? ? cp hive-env.sh.template hive-env.sh
? ? ? ? vim hive-env.sh(修改第48行內(nèi)容)
? ? ? ? 內(nèi)容如下:
? ? ? ??export HADOOP_HOME=/export/servers/hadoop
????????export HIVE_CONF_DIR=/export/servers/hive/conf
????????export HIVE_AUX_JARS_PATH=/export/servers/hive/lib
? ? ? ? (4)上傳mysql連接驅(qū)動
鏈接:https://pan.baidu.com/s/1MJ9QBsE3h1FAxuB3a4iyVw?pwd=1111?
提取碼:1111?
????????MySQL5使用5的連接版本,MySQL8使用8的連接版本。
? ? ? ? (5)初始化元數(shù)據(jù) (Hadoop集群啟動后)? ? ??
????????命令:
? ? ? ? 登錄數(shù)據(jù)庫:
????????mysql -uroot -p
????????CREATE DATABASE hive CHARSET UTF8;? ? ? ? #建表
????????cd /export/server/hive/
????????bin/schematool -initSchema -dbType mysql -verbos
????????#初始化成功會在mysql中創(chuàng)建74張表
? ? ? ? (6)創(chuàng)建logs目錄,啟動元數(shù)據(jù)服務(wù)
????????命令:
? ? ? ? 創(chuàng)建文件夾:mkdir logs
? ? ? ? 啟動元數(shù)據(jù)服務(wù):nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
? ? ? ? (7)啟動Hive shell
? ? ? ? 命令:bin/hive(配置環(huán)境變量可直接使用hive)
四、Spark On Hive配置
? ? ? ? (1)創(chuàng)建hive-site.xml(spark/conf目錄)
? ? ? ? 添加內(nèi)容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--告知Spark創(chuàng)建表存到哪里-->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hive.metastore.warehouse.dir</name>
? ? ? ? ? ? ? ? <value>/user/hive/warehouse</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hive.metastore.local</name>
? ? ? ? ? ? ? ? <value>false</value>
? ? ? ? </property>
<!--告知Spark Hive的MetaStore在哪-->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hive.metastore.uris</name>
? ? ? ? ? ? ? ? <value>thrift://pyspark01:9083</value>
? ? ? ? </property>
</configuration>
? ? ? ? (2)放置MySQL驅(qū)動包
? ? ? ? (3)查看hive的hive-site.xml配置
? ? ? ? 確保有如下配置:
? ? ? ? (4)啟動hive的MetaStore服務(wù)
? ? ? ? 命令:
????????nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
? ? ? ? (5)Spark On Hive測試
? ? ? ? ①創(chuàng)建表sparkonhive
? ? ? ? 命令:
? ? ? ? 在spark目錄下:
? ? ? ? bin/spark? ? ? ? ?
? ? ? ? spark.sql('create table sparkonhive(id int)' )
? ? ? ? ②進入查看查看
? ? ? ? 命令:
? ? ? ? hive目錄:
? ? ? ? bin/hive(配置過環(huán)境變量可直接使用hive)
? ? ? ? (6)Pycharm-spark代碼連接測試
? ? ? ? 在Linux的sparkSQl終端或者h(yuǎn)ive終端創(chuàng)建學(xué)生表,然后使用spark代碼查詢。
? ? ? ? 命令:
? ? ? ? create table student(id int, name string);
? ? ? ? insert into student values(1,'張三'),(2, '李四');
? ? ? ? 使用spark代碼查詢
? ? ? ? 在Spark代碼中加上如下內(nèi)容
文章來源:http://www.zghlxwxcb.cn/news/detail-717309.html
# cording:utf8
import string
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType, StringType, StructType, ArrayType
if __name__ == '__main__':
spark = SparkSession.builder.\
appName('udf_define').\
master('local[*]').\
config('spark.sql.shuffle.partitions', 2).\
config('spark.sql.warehouse.dir', 'hdfs://pyspark01:8020/user/hive/warehouse').\
config('hive.metastore.uris', 'thrift://pyspark01:9083').\
enableHiveSupport().\
getOrCreate()
sc = spark.sparkContext
spark.sql('''
SELECT * FROM student
''').show()
文章來源地址http://www.zghlxwxcb.cn/news/detail-717309.html
到了這里,關(guān)于Spark On Hive原理和配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!