Hadoop集群搭建(八:Hive的安装配置)
| 實驗 目的 要求 | ? 目的: (1)掌握數據倉庫工具Hive的安裝和配置; 要求:
? |
| ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? ? ? | ?
? 軟件版本: ???? ???選用Hive的2.1.1版本,軟件包名apache-hive-2.1.1-bin.tar.gz; ? 依賴軟件: ??????? *Hive工具使用JDBC方式連接MySQL數據庫,需要用到MySQL數據庫連接工具軟件,選用該軟件的5.1.42版本,軟件包名mysql-connector-java-5.1.42-bin.jar; |
?
實驗內容
步驟一:Hive工具安裝配置
★ Hive安裝過程的所有操作步驟都需要使用admin用戶進行。
★本項步驟只在集群中Cluster-01主機上進行操作即可。
1、把相關軟件包apache-hive-2.1.1-bin.tar.gz和mysql-connector-java-5.1.42-bin.jar上傳到admin用戶家目錄的新建“setups”目錄下;
2、創建用于存放Hive相關文件的目錄,并進入該目錄,創建Hive的本地臨時文件目錄“tmp”,并將軟件包解壓解包到“hive”目錄下;
?????????? 命令:
?????????????? ?$mkdir ~/hive
??????????????? $cd ~/hive
??????????????? $mkdir tmp
??????????????? $tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz
3、配置Hive相關的環境變量,給配置文件進行修改,并在文件末尾添加以下內容;
???? 命令:
????????? $vi ~/.bash_profile
???? 寫入內容:
#hive environment
HIVE_HOME=/home/admin/hive/apache-hive-2.1.1-bin
PATH=$HIVE_HOME/bin:$PATH
export HIVE_HOME PATH
??
?
4、生效環境變量,并查看驗證;
????? 命令:
?????????? $source ~/.bash_profile
?????????? $echo $HIVE_HOME
?????????? $echo $PATH
?
5、進入Hive的配置文件目錄,Hive的配置文件默認都被命名為了模板文件,需要對其進行拷貝重命名之后才能使用:
????? 命令:
? ? ? ? ? ?$ cp hive-env.sh.template hive-env.sh
?????????? $ cp hive-log4j2.properties.template ??hive-log4j2.properties
?????????? $ cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
?????????? $ cp hive-default.xml.template hive-site.xml
6、對配置文件進行修改,找到相關配置項并對其值進行修改;
6.1、找到配置項“HADOOP_HOME”,該項用于指定Hadoop所在的路徑,將其值改為以下內容:
? ? ? ? HADOOP_HOME=/home/admin/hadoop/hadoop-2.7.3
6.2、找到配置項“HIVE_CONF_DIR”,該項用于指定Hive的配置文件所在的路徑,將其值改為以下內容:
? ? ? ? export
? ? ? ? HIVE_CONF_DIR=/home/admin/hive/apache-hive-2.1.1-bin/conf
?
6.3、找到配置項“HIVE_AUX_JARS_PATH”,該項用于指定Hive的lib文件所在的路徑,將其值改為以下內容:
export HIVE_AUX_JARS_PATH=/home/admin/hive/apache-hive-2.1.1-bin/lib
?
7、集群的啟動;
★ 該項的所有操作步驟使用專門用于集群的用戶admin進行。
★ 啟動HBase集群之前首先確保Zookeeper集群已被開啟狀態。(實驗5臺),Zookeeper的啟動需要分別在每個計算機的節點上手動啟動。如果家目錄下執行啟動報錯,則需要進入zookeeper/bin目錄執行啟動命令。
★ 啟動HBase集群之前首先確保Hadoop集群已被開啟狀態。 (實驗5臺)Hadoop只需要在主節點執行啟動命令。
a) 在集群中所有主機上使用命令“zkServer.sh status”查看該節點Zookeeper服務當前的狀態,若集群中只有一個“leader”節點,其余的均為“follower”節點,則集群的工作狀態正常。如果Zookeeper未啟動,則在集群中所有主機上使用命令“zkServer.sh start”啟動Zookeeper服務的腳本;
???? ???????????
b) 在主節點,查看Java進程信息,若有名為“NameNode”、“ResourceManager”的兩個進程,則表示Hadoop集群的主節點啟動成功。在每臺數據節點,若有名為“DataNode”和“NodeManager”的兩個進程,則表示Hadoop集群的數據節點啟動成功, 如果不存在以上三個進程,則在主節點使用此命令,啟動Hadoop集群。
主節點及備用主節點:
通信節點:
c) 確定Hadoop集群已啟動狀態,然后在主節點使用此命令,啟動HBase集群, 在集群中所有主機上使用命令“jps”;
8、在HDFS中分別創建Hive的臨時文件目錄“tmp”,在HDFS中分別創建Hive的數據存儲目錄“warehouse”,在HDFS中分別創建Hive的日志文件目錄“log”,添加三個目錄的用戶組寫權限;
???? 命令:
????????? $ hadoop fs -mkdir -p /user/hive/tmp
????????? $ hadoop fs -mkdir -p /user/hive/warehouse
????????? $ hadoop fs -mkdir -p /user/hive/log
????????? $ hadoop fs -chmod 777 /user/hive/tmp
????????? $ hadoop fs -chmod 777 /user/hive/warehouse
????????? $ hadoop fs -chmod 777 /user/hive/log
9、對配置文件hive-site.xml進行修改
找到下列標簽“<name>”所標識的屬性項名稱所在位置,修改其標簽“<value>”所標識的屬性值部分的內容:
<configuration><!-- 指定Hive的數據臨時文件存儲目錄,需要是位于HDFS上的目錄 --><property><name>hive.exec.scratchdir</name><value>/user/hive/tmp</value></property><!-- 指定Hive的數據存儲目錄,需要是位于HDFS上的目錄 --><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><!-- 指定Hive的日志文件目錄,需要是位于HDFS上的目錄--><property><name>hive.querylog.location</name><value>/user/hive/log</value><description>Location of Hive run time structured log file</description></property></configuration>
10、在MySQL數據庫SQL服務節點Cluster-04中創建一個數據庫“hive”用于存放Hive的元數據,該數據庫的用戶名和密碼均為“hive”,數據庫名、用戶名、密碼均可以自行設定,但需要與Hive配置文件中的內容相對應,連接MySQL數據庫;
??? ??命令:
?????????? $ mysql -hCluster-04 -uroot -pmysqlabc
在控制臺執行以下命令進行數據庫的創建:
CREATE DATABASE hive;(創建數據庫hive)
USE hive;(切換到新創建的hive數據庫)
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';(創建數據庫用戶hive)
GRANT ALL ON hive.* TO 'hive'@'%';(設置hive數據庫的訪問權限,hive用戶擁有所有操作權限并支持遠程訪問)
FLUSH PRIVILEGES;(刷新數據庫權限信息)
show databases;
quit;(退出MySQL數據庫控制臺)
11、添加MySQL連接的相關配置信息;
????? 命令:
?????????? $ vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
??? 找到下列標簽“<name>”所標識的屬性項名稱所在位置,修改其標簽“<value>”所標識的屬性值部分的內容:
<configuration><!-- 指定Hive的日志文件目錄,需要是位于HDFS上的目錄 --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://Cluster-04:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&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>hive</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value></property></configuration>
12、將MySQL的數據庫連接工具包添加到Hive的“lib”目錄下;
????? 命令:
?$ cp -v ~/setups/mysql-connector-java-5.1.42-bin.jar ~/hive/apache-hive-2.1.1-bin/lib
?
13、添加MySQL連接的相關配置信息;
????? 命令:
?????????? $ vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
在編輯器中使用快捷鍵“:”進入到編輯器的命令模式,也稱為末行模式,然后使用命令“%s#${system:java.io.tmpdir}#/home/admin/hive/tmp#g”以及“%s#${system:user.name}#${user.name}#g”替換掉配置文件中的原有配置內容。
14、對Hive進行格式化;
????? 命令:
?????????? $ schematool -initSchema -dbType mysql
步驟二:Hive工具啟動和驗證
★ Hive安裝過程的所有操作步驟都需要使用admin用戶進行。
★本項步驟只在集群中Cluster-01主機上進行操作即可。
?
1、使用命令“hive”啟動Hive,啟動成功后能夠進入Hive的控制臺。
2、在控制臺中使用命令“show databases;”查看當前的數據庫列表。
3、在控制臺中使用命令“show functions;”查看Hive的功能函數。
4、在控制臺中使用命令“desc function sum;”或“desc function extended sum;”查看Hive的功能函數的詳細信息。
5、在控制臺中使用命令“quit;”或“exit;”退出Hive的控制臺。
?
出現的問題與解決方案
錯誤1、啟動hive : ls: cannot access/home/hadoop/spark-2.2.0-bin-hadoop2.6/lib/spark-assembly-*.jar: No such fileor directory問題
sxc@master ~]$ hivels: cannot access /software/spark/spark-2.2.0-bin-hadoop2.7/lib/spark-assembly-*.jar: No such file or directory17/11/27 13:12:56 WARN conf.HiveConf: HiveConf of name hive.metastore.local does not existLogging initialized using configuration in jar:file:/software/hive/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
原因:spark升級到spark2以后,原有lib目錄下的大JAR包被分散成多個小JAR包,原來的spark-assembly-*.jar已經不存在,所以hive沒有辦法找到這個JAR包。
?
解決方法:
打開hive的安裝目錄下的bin目錄,找到hive文件
找到如下的位置
# add Spark assembly jar to the classpathif [[ -n "$SPARK_HOME" ]]thensparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`CLASSPATH="${CLASSPATH}:${sparkAssemblyPath}"fi
原因:
spark升級到spark2以后,原有lib目錄下的大JAR包被分散成多個小JAR包,原來的spark-assembly-*.jar已經不存在,所以hive沒有辦法找到這個JAR包。
解決辦法:把紅色部分改為如下的樣子就可以了
? # add Spark assembly jar to the classpathif [[ -n "$SPARK_HOME" ]]thensparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`CLASSPATH="${CLASSPATH}:${sparkAssemblyPath}"fi
? 知識點總結
HIVE和HBASE區別
1. 兩者分別是什么???
?Apache Hive是一個構建在Hadoop基礎設施之上的數據倉庫。通過Hive可以使用HQL語言查詢存放在HDFS上的數據。HQL是一種類SQL語言,這種語言最終被轉化為Map/Reduce. 雖然Hive提供了SQL查詢功能,但是Hive不能夠進行交互查詢--因為它只能夠在Haoop上批量的執行Hadoop。
?Apache HBase是一種Key/Value系統,它運行在HDFS之上。和Hive不一樣,Hbase的能夠在它的數據庫上實時運行,而不是運行MapReduce任務。Hive被分區為表格,表格又被進一步分割為列簇。列簇必須使用schema定義,列簇將某一類型列集合起來(列不要求schema定義)。例如,“message”列簇可能包含:“to”, ”from” “date”, “subject”, 和”body”. 每一個 key/value對在Hbase中被定義為一個cell,每一個key由row-key,列簇、列和時間戳。在Hbase中,行是key/value映射的集合,這個映射通過row-key來唯一標識。Hbase利用Hadoop的基礎設施,可以利用通用的設備進行水平的擴展。
2. 兩者的特點:
? Hive幫助熟悉SQL的人運行MapReduce任務。因為它是JDBC兼容的,同時,它也能夠和現存的SQL工具整合在一起。運行Hive查詢會花費很長時間,因為它會默認遍歷表中所有的數據。雖然有這樣的缺點,一次遍歷的數據量可以通過Hive的分區機制來控制。分區允許在數據集上運行過濾查詢,這些數據集存儲在不同的文件夾內,查詢的時候只遍歷指定文件夾(分區)中的數據。這種機制可以用來,例如,只處理在某一個時間范圍內的文件,只要這些文件名中包括了時間格式。
?HBase通過存儲key/value來工作。它支持四種主要的操作:增加或者更新行,查看一個范圍內的cell,獲取指定的行,刪除指定的行、列或者是列的版本。版本信息用來獲取歷史數據(每一行的歷史數據可以被刪除,然后通過Hbase compactions就可以釋放出空間)。雖然HBase包括表格,但是schema僅僅被表格和列簇所要求,列不需要schema。Hbase的表格包括增加/計數功能。
3. 限制
? Hive目前不支持更新操作。另外,由于hive在hadoop上運行批量操作,它需要花費很長的時間,通常是幾分鐘到幾個小時才可以獲取到查詢的結果。Hive必須提供預先定義好的schema將文件和目錄映射到列,并且Hive與ACID不兼容。
? HBase查詢是通過特定的語言來編寫的,這種語言需要重新學習。類SQL的功能可以通過Apache Phonenix實現,但這是以必須提供schema為代價的。另外,Hbase也并不是兼容所有的ACID特性,雖然它支持某些特性。最后但不是最重要的--為了運行Hbase,Zookeeper是必須的,zookeeper是一個用來進行分布式協調的服務,這些服務包括配置服務,維護元信息和命名空間服務。
4. 應用場景
? Hive適合用來對一段時間內的數據進行分析查詢,例如,用來計算趨勢或者網站的日志。Hive不應該用來進行實時的查詢。因為它需要很長時間才可以返回結果。
? Hbase非常適合用來進行大數據的實時查詢。Facebook用Hbase進行消息和實時的分析。它也可以用來統計Facebook的連接數。
5. 總結
? Hive和Hbase是兩種基于Hadoop的不同技術--Hive是一種類SQL的引擎,并且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。當然,這兩種工具是可以同時使用的。就像用Google來搜索,用FaceBook進行社交一樣,Hive可以用來進行統計查詢,HBase可以用來進行實時查詢,數據也可以從Hive寫到Hbase,設置再從Hbase寫回Hive。
Hive環境安裝之瀏覽器訪問配置
1、下載hive-2.1.1-src.tar.gz
然后進入目錄${HIVE_SRC_HOME}/hwi/web,執行打包命令:
#jar -cvf hive-hwi-1.2.2.war *
2、得到hive-hwi-1.2.2.war文件,復制到hive下的lib目錄中;
3、修改hive的配置文件hive-site.xml;
4、啟動Hive的web;
?????? 命令:$hive –service hwi
?
5、通過web方式管理Hive;
總結
以上是生活随笔為你收集整理的Hadoop集群搭建(八:Hive的安装配置)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop集群搭建(七:MySQL的安
- 下一篇: Hadoop集群搭建(九:各服务的启动)