Hive是一個數據倉庫基礎工具在Hadoop中用來處理結構化數據,提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行(具體的Hive架構你們自行搜索)。接下來主要講下Hadoop集羣下Hive的安裝配置,並搭載Derby數據庫(一款小巧的數據庫,用於測試,不推薦開發使用,具體你們自行百度),進行一些基本的數據庫操做,好了,讓咱們開始吧。java
1、環境:一樣的啓用三個節點,分別是虛擬機slave01,slave02,slave03,基於以前已經搭建好的環境,包括JDK、Zookeeper、Hadoopmysql
2、Hive、Derby配置(自行解壓)sql
這裏推薦下載版本較低的Hive,本人經驗教訓告訴你們:高版本易出現問題,好比說個人Hadoop 2.7.6,下載Hive 2.2.0 安裝配置後就出現了不少問題,體驗極差,像 報錯爲:數據庫
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
就屬於版本太高致使的,因此,你們儘可能下載低版本的。apache
(1)設置Hive、Derby環境變量 vim
vim /etc/profile
添加HIVE_HOME、DERBY_HOME,以下:架構
JAVA_HOME=/usr/java/jdk1.8.0_161 JRE_HOME=/usr/java/jdk1.8.0_161/jre SCALA_HOME=/usr/local/scala HADOOP_HOME=/usr/local/hadoop SPARK_HOME=/usr/local/spark ZOOKEEPER_HOME=/usr/local/zookeeper HBASE_HOME=/usr/local/hbase KAFKA_HOME=/usr/local/kafka HIVE_HOME=/usr/local/hive DERBY_HOME=/usr/local/derby PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$KAFKA_HOME/bin:$HIVE_HOME/bin:$DERBY_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbyclient.jar:$DERBY_HOME/lib/derbytools.jar:$DERBY_HOME/lib/derbynet.jar export JAVA_HOME JRE_HOME SCALA_HOME HADOOP_HOME SPARK_HOME ZOOKEEPER_HOME HBASE_HOME KAFKA_HOME HIVE_HOME DERBY_HOME PATH CLASSPATH
使文件生效,運行命令:編輯器
source /etc/profile
(2)修改Hive文件夾conf目錄下配置文件 hive-env.sh 工具
複製一份 hive-env.sh.template 重命名爲 hive-env.sh:oop
cp hive-env.sh.template hive-env.sh
修改 hive-env.sh 內容:
export HIVE_CONF_DIR=/usr/local/hive/conf export HADOOP_HOME=/usr/local/hadoop
(3)配置Hive的Metastore
配置Metastore意味着,指定要Hive的數據庫存儲,一樣,Hive/conf目錄下,複製一份 hive-default.xml.template重命名爲 hive-site.xml:
cp hive-default.xml.template hive-site.xml
修改 hive-site.xml 內容,因爲裏面原內容較多,可經過命令gedit以編輯器模式打開:
gedit 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: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.warehouse.dir</name> <value>/usr/local/hive/warehouse</value> </property> </configuration>
其中,<value>jdbc:derby:;databaseName=metastore_db;create=true</value> 表示使用嵌入式的derby,create爲true表示自動建立數據庫,數據庫名爲metastore_db,另外一種客服模式你們感興趣的能夠本身看下;<value>org.apache.derby.jdbc.EmbeddedDriver</value> 表示使用嵌入式的derby;warehouse文件夾手動建立。
3、驗證Hive
運行Hive以前,須要建立/tmp文件夾在HDFS獨立的Hive文件夾,並給這些新建立的文件夾寫權限:
[hadoop@slave01 bin]$ hadoop fs -mkdir /tmp [hadoop@slave01 bin]$ hadoop fs -chmod g+w /tmp
啓動Hive前,先啓動Hadoop集羣,注意關閉防火牆,再而後啓動Hive,首次啓動可能會出現一個報錯提示:
沒法訪問/usr/local/spark/lib/spark-assembly-*.jar: 沒有那個文件或目錄
雖然過了幾秒後Hive仍然成功啓動,但這個報錯信息是怎麼回事呢?
緣由:spark2之後,原有lib目錄下的大JAR包被分散成多個小JAR包,原來的spark-assembly-*.jar已經不存在,因此hive沒有辦法找到這個JAR包。
解決辦法:進入hive安裝路徑下的bin目錄下,編輯hive,如經過編輯器打開:gedit hive,找到下面的Shell腳本命令:
sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`
修改成:
sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`
好了,讓咱們再次啓動Hive,成功啓動以下:
[hadoop@slave01 bin]$ hive Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-1.2.2.jar!/hive-log4j.properties hive>
以上就是基於Hadoop集羣Hive+derby的安裝配置過程,固然對於數據庫的選擇好比mysql配置過程相似,你們自行參考資料。接下來就是Hive對數據庫的操做了,敬請期待吧!