Spark on Hive-derby數據庫-thriftserver-多客戶端使用

首先,要明確spark on hivehive on spark 的區別。

--spark on hive:是spark 通過spark-sql 使用hive 語句操作hive,底層運行的還是 spark rdd。它是通過sparksql來加載hive的配置文件,獲取到hive的元數據信息,這樣就可以拿到hive的所有表的數據,接下來就可以用sparksql來操作hive表中的數據。

--hive on spark:是hive的執行引擎變成了spark,不再是mapreduce。這個要相對于麻煩,需要重新編譯spark源碼,打成jar包,將hive的執行引擎換成spark。

其次,hive的meta數據支持三種方式存儲,一種遠端存儲,兩種本地存儲。遠端存儲比較適合生產環境。詳細信息查看 hive metastore

一、本地derby存儲

這種方式是最簡單的存儲方式,本人只在hive-site.xml中添加如下配置:

<configuration>

<property>?

<name>javax.jdo.option.ConnectionURL</name>?

<value>jdbc:derby:;databaseName=metastore_db;create=true</value>?

</property>? ?

<property>?

<name>javax.jdo.option.ConnectionDriverName</name>?

<value>org.apache.derby.jdbc.EmbeddedDriver</value>?

</property>? ?

<property>?

<name>hive.metastore.local</name>?

<value>true</value>?

</property>? ?

<property>?

<name>hive.metastore.warehouse.dir</name>?

<value>/user/hive/warehouse</value>?

</property>? ?

<property>?

<name>hive.metastore.warehouse.dir</name>?

<value>/user/hive/warehouse</value>?

</property>? ?

</configuration>

注意:使用derby存儲方式時,運行hive會在當前目錄生成一個derby文件和一個metastore_db目錄。這種存儲方式的弊端是在同一個目錄下同時只能有一個hive客戶端能使用數據庫,否則會提示如下錯誤:

hive>?show?tables;??

FAILED:?Error?in?metadata:?javax.jdo.JDOFatalDataStoreException:?Failed?to?start?database?'metastore_db',?see?the?next?exception?for?details.??

NestedThrowables:??

java.sql.SQLException:?Failed?to?start?database?'metastore_db',?see?the?next?exception?for?details.??

FAILED:?Execution?Error,?return?code?1?from?org.apache.hadoop.hive.ql.exec.DDLTask?

二、本地mysql存儲

這種方式存儲需要在本地運行一個mysql服務器,并做如下配置(需要將mysql的jar包拷貝到$HIVE_HOME/lib目錄下)

<configuration>??

<property>??

<name>hive.metastore.warehouse.dir</name>??

<value>/user/hive_remote/warehouse</value>??

</property>??

<property>??

<name>hive.metastore.local</name>??

<value>true</value>??

</property>??

<property>??

<name>javax.jdo.option.ConnectionURL</name>??

<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>??

</property>??

<property>??

<name>javax.jdo.option.ConnectionDriverName</name>??

<value>com.mysql.jdbc.Driver</value>??

</property>??

<property>??

<name>javax.jdo.option.ConnectionUserName</name>??

<value>hive</value>??

</property>??

<property>??

<name>javax.jdo.option.ConnectionPassword</name>??

<value>password</value>??

</property>??

</configuration>

三、遠端mysql

這種方式存儲需要在遠端服務器運行一個mysql服務器,并且需要在Hive服務器啟動meta服務。遠程mysql服務器ip:192.168.200.110,數據庫hive_remote,配置如下:

<configuration>??

<property>??

????<name>hive.metastore.warehouse.dir</name>??

????<value>/user/hive/warehouse</value>??

</property>??

<property>??

????<name>javax.jdo.option.ConnectionURL</name>??

????<value>jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true</value>??

</property>??

<property>??

????<name>javax.jdo.option.ConnectionDriverName</name>??

????<value>com.mysql.jdbc.Driver</value>??

</property>??

<property>??

????<name>javax.jdo.option.ConnectionUserName</name>??

????<value>hive</value>??

</property>??

<property>??

????<name>javax.jdo.option.ConnectionPassword</name>??

????<value>password</value>??

</property>??

<property>??

????<name>hive.metastore.local</name>??

????<value>false</value>??

</property>??

<property>??

????<name>hive.metastore.uris</name>??

????<value>thrift://192.168.1.188:9083</value>??

</property>??

</configuration>??

注意:這里把hive的服務端和客戶端都放在同一臺服務器上了。服務端和客戶端可以拆開,將hive-site.xml配置文件拆為如下兩部分:

1)服務端配置:

<configuration>??

<property>??

????<name>hive.metastore.warehouse.dir</name>??

????<value>/user/hive/warehouse</value>??

</property>??

<property>??

????<name>javax.jdo.option.ConnectionURL</name>??

????<value>jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true</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>test1234</value>??

</property>??

</configuration>

2)客戶端配置:

<configuration>??

<property>??

????<name>hive.metastore.warehouse.dir</name>??

????<value>/user/hive/warehouse</value>??

</property>??

<property>??

????<name>hive.metastore.local</name>??

????<value>false</value>??

</property>??

<property>??

????<name>hive.metastore.uris</name>??

????<value>thrift://192.168.1.188:9083</value>??

</property>??

</configuration>

啟動hive服務端程序:hive?--service?metastore

客戶端直接使用hive命令即可

由于公司使用的是內網環境,網盤用不了,自己裝的虛擬環境也不能通過yum來進行安裝,下載的rpm包又缺少其他的依賴,只能選擇本地derby存儲。接下來,配置spark on hive(前提hdfs、yarn、hive已經搭建好了):

1、hive-site.xml配置:

<configuration>

<property>

????<name>hive.cli.print.header</name>

????<value>true</value>

????<description>Whether to print the names of the columns in query output.</description>

</property>

<property>

????<name>hive.cli.print.current.db</name>

????<value>true</value>

????<description>Whether to include the current database in the Hive prompt.</description>

</property>

<property>

????<name>hive.metastore.uris</name>

????<value>thrift://hadoop110:9083</value>

</property>

<property>

???????? <name>hive.metastore.warehouse.dir</name>

???????? <value>hdfs://hadoop110:9000/user/hive/warehouse</value>

</property>

</configuration>

2、在spark的conf中創建hive-site.xml的軟連接 ln -s /xxx/xxx/hive-site.xml

3、配置spark-env.sh:

export JAVA_HOME=/opt/module/jdk1.8.0_211

export SCALA_HOME=/opt/module/scala-2.11.12

export HADOOP_HOME=/opt/module/hadoop-2.7.2

export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

4、將spark的jars中的所有包上傳到hdfs上,然后在spark-default.xml中配置路徑。這樣可以提高程序運行過程中尋找jar包的效率

hadoop fs -put spark/jars/* /spark_jars/

spark-default.xml中配置:

spark.yarn.jars=hdfs://hadoop110:9000/spark_jars/*

5、啟動hive服務:hive --service metastore &

6、啟動spark的thriftserver服務:/opt/module/spark-2.1/sbin/start-thriftserver.sh

7、啟動beeline,注意:下次啟動需要在同一個目錄下,否則就會生成新的元數據文件。

啟動多個beeline窗口也可以訪問滴。哈哈哈!!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 一、Hive概述 HIve是什么?為什么要使用hive?對于一個初步接觸hive的初學者,這些都是迷惑的,因此本文...
    不清不慎閱讀 819評論 0 4
  • hive.ddl.output.format:hive的ddl語句的輸出格式,默認是text,純文本,還有json...
    博弈史密斯閱讀 1,963評論 0 6
  • 1 Hive Metastore 1.1相關概念 Hive Metastore有三種配置方式,分別是: Embed...
    hexg1016閱讀 699評論 0 0
  • 說明:不少讀者反饋,想使用開源組件搭建Hadoop平臺,然后再部署Kylin,但是遇到各種問題。這里我為讀者部署一...
    大詩兄_zl閱讀 2,095評論 0 2
  • 一、Hive 介紹 二、準備工作 三、Hive下載 四、Hive 安裝 五、Hive 啟動 一、Hive 介紹 H...
    Ada54閱讀 1,988評論 0 7