由于自己想知道HiveSQL編譯成MapReduce的具體過程烦周,在面試中也有面試官問到了這個問題,所以準(zhǔn)備花一段時間看一下底層對應(yīng)的源碼。
我使用的是hive版本2.3.7搀绣,hadoop版本2.8.5
源碼編譯
首先使用git clone hive源碼
git clone https://github.com/apache/hive.git
根據(jù)自己的環(huán)境配置選擇相應(yīng)的分支
查看所有分支 :git branch -a
查看當(dāng)前使用分支: git branch
切換分支 :git checkout 分支名
或者下載hive的包栋艳,我下載的是hive-2.3.7的包:
https://codeload.github.com/apache/hive/tar.gz/refs/tags/rel/release-2.3.7
切換到hive源碼的根目錄恰聘,然后輸入以下命令
mvn clean package -DskipTests -Phadoop-2 -Pdist #跳過測試
mvn clean package -Pdist -DskipTests #如果顯示Hadoop依賴問題報錯則可以去掉Hadoop項
mvn clean package -DskipTests -Dmaven.javadoc.skip=true #跳過文檔生成
編譯成功的界面如下:
可能遇到的問題:
1.pentaho-aggdesigner-algorithm:jar缺失
根本原因是阿里云鏡像jar包索引不明,按照其他方法提供的更改POM文件中spring鏡像倉庫依然無法下載jar包吸占,可以手動下載安裝晴叨,也可以嘗試將還原maven默認(rèn)的倉庫地址
mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar -Dfile=pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar(jar絕對路徑)
2.Java環(huán)境問題
在命令行我輸入java命令是正常執(zhí)行的,輸入echo $JAVA_HOME也是可以正確輸出JAVA_HOME路徑矾屯,但是執(zhí)行編譯命令一直報錯JAVA_HOME沒有正確設(shè)置
可以在命令行顯式的設(shè)置JAVA_HOME,我的是Mac,Windows填寫自己配置的路徑即可
set JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
打包成功以后兼蕊,在/hive-rel-release-2.3.7/packaging/target可以找到編譯好的hive包
環(huán)境準(zhǔn)備
Hadoop環(huán)境以及MySQL
由于Hive運(yùn)行依賴Hdfs存儲真實數(shù)據(jù)和MySQL存儲元數(shù)據(jù)(模擬生產(chǎn)場景,不使用默認(rèn)的derby)
在這里不再復(fù)述相關(guān)環(huán)境的搭建與配置件蚕,默認(rèn)Hadoop和MySQL已經(jīng)配置好了
Hive環(huán)境配置
使用命令生成hive-site.xml文件
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
<!-- 需要修改的配置如下:-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:MySQL://localhost1:3306/hive?useSSL=false&characterEncoding=UTF-8</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</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.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
對文件hive-env.sh進(jìn)行編輯遍略,找到HADOOP_HOME,對其更改成我們自己的Hadoop目錄骤坐。
HADOOP_HOME=/Users/yanhaowen/bigdata_tools/hadoop-2.8.5
hive-site.xml的默認(rèn)配置項有些多绪杏,如果直接找我們想要修改的配置,不是很容易纽绍,所以我們可以使用vim的快速查找功能
1.按esc退出insert
2./+想要查找的內(nèi)容蕾久,回車
例如:/JDBC 回車,就會定位到文件中的JDBC的地方
如果有多個匹配成功的拌夏,可以通過n或N進(jìn)行上一個或下一個的匹配
由于使用的是MySQL數(shù)據(jù)庫存儲元數(shù)據(jù)僧著,需要添加mysql相應(yīng)jar包到lib目錄下
例如:mysql-connector-java-5.1.49-bin.jar
配置完成后,初始化hive服務(wù)
bin/schematool -dbType mysql -initSchema
如果初始化過程中遇到問題障簿,那么可以使用下面的命令來查看詳細(xì)信息:
schematool -dbType mysql -initSchema --verbose
完成后盹愚,啟動元數(shù)據(jù)服務(wù)
nohup hive --service metastore &
也可以通過命令查看hive服務(wù)
ps -ef |grep hive
然后啟動hive客戶端,最簡單的啟動hive腳本
然后啟動hive客戶端站故,最簡單的啟動hive腳本
至此皆怕,本地環(huán)境搭建完成毅舆。
參考: