Hadoop+HBase+Spark+Hive環境搭建
楊赟快跑 簡書作者 2018-09-24 10:24
摘要:大數據門檻較高,僅僅環境的搭建可能就要耗費我們大量的精力,本文總結了作者是如何搭建大數據環境的(單機版和集群版),希望能幫助學弟學妹們更快地走上大數據學習之路。
0. 準備安裝包
本文所需的系統鏡像、大數據軟件安裝包、開發環境軟件安裝包等都可以在我的百度雲盤中下載。
鏈接:系統鏡像和各種大數據軟件
密碼:n2cn
1. Windows下安裝Ubuntu雙系統
Hadoop等大數據開源框架是不支持Windows系統的,所以需要先安裝一個Linux雙系統。當然,如果你有一臺單獨的電腦用來安裝Ubuntu系統,就不需要安裝雙系統了。
雙系統安裝
請參考安裝指南:
第一步:制定系統啟動U盤
第二步:安裝雙系統
2. 搭建Hadoop平臺
Hadoop是Apache 公司開發的一款可靠的、可擴展性的、分布式計算的開源軟件。以Hadoop分布式文件系統(HDFS)和分布式運算編程框架(MapReduce)為核心,允許在集群服務器上使用簡單的編程模型對大數據集進行分布式處理。下面,請跟著作者一步步搭建自己的Hadoop平臺吧。
2.1更新源
在bash終端中運行如下shell指令,設置root用戶密碼,並切換到root用戶
#設置root密碼
sudo passwd
#切換到root用戶
su root
更新源
apt-get update
安裝vim編譯器
apt-get install vim
備份原始的官方源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
刪除原始的官方源
rm /etc/apt/sources.list
運行如下shell命令,重新創建sources.list文件
vim /etc/apt/sources.list
按 i 進入vim的編輯模式,復制下面的清華源到sources.list文件中,然後按 esc 退出編輯模式,最後輸入:+wq ,按回車保存(也可以按shift + zz 進行保存)。
# 默認註釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消註釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-security main restricted universe multiverse
# 預發布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ artful-proposed main restricted universe multiverse
運行如下shell命令,完成源的更新
apt-get update
2.2 安裝SSH、配置SSH無密碼登陸
Ubuntu 默認已安裝了 SSH client,此外還需要安裝 SSH server:
sudo apt-get install openssh-server
安裝後,修改sshd_config配置
vim /etc/ssh/sshd_config
在文件中設置如下屬性:(按 / 可以進入搜索模式,按esc退出搜索模式)
PubkeyAuthentication yes
PermitRootLogin yes
重啟ssh服務
sudo /etc/init.d/ssh restart
重啟後,可以使用如下命令登陸本機,但此時需要密碼才能登陸:
ssh localhost
首先退出剛才的 ssh,就回到了我們原先的終端窗口,然後利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:
exit # 退出剛才的 ssh localhost
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa # 會有提示,都按回車就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授權
在 Linux 系統中,~ 代表的是用戶的主文件夾(root用戶例外),即 “/home/用戶名” 這個目錄,如你的用戶名為 ubuntu,則 ~ 就代表 “/home/ubuntu/”。 如果是root用戶則~代表/root,此外,命令中的 # 後面的文字是註釋,只需要輸入前面命令即可。
此時再用 ssh localhost 命令,無需輸入密碼就可以直接登陸了。
2.3 安裝JAVA環境
Java環境推薦使用 Oracle 的 JDK,首先,準備好文件 jdk-8u162-linux-x64.tar.gz,然後將文件移到/usr/local目錄下:
mv jdk-8u162-linux-x64.tar.gz /usr/local
解壓文件
tar -zxvf jdk-8u162-linux-x64.tar.gz
重命名文件夾為java
mv jdk-1.8.0_162 java
用vim打開/etc/profile文件(Linux下配置系統環境變量的文件)
vim /etc/profile
按i進入編輯模式,在文件末尾添加如下JAVA環境變量
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
添加環境變量後,結果如下圖所示,按 esc 退出編輯模式,然後輸入:+wq ,按回車保存(也可以按shift + zz 進行保存)。
配置環境變量
最後,需要讓該環境變量生效,執行如下代碼:
source /etc/profile
檢驗JAVA是否安裝成功
echo $JAVA_HOME # 檢驗變量值
java -version
java
javac
如果設置正確的話,java -version 會輸出 java 的版本信息,java 和 javac 會輸出命令的使用指導。
2.4 安裝Hadoop
下載 hadoop-2.7.6.tar.gz 文件,然後將文件移到/usr/local目錄下
mv hadoop-2.7.6.tar.gz /usr/local
解壓
tar -zxvf hadoop-2.7.6.tar.gz
文件夾重命名為hadoop
mv hadoop-2.7.6 hadoop
配置環境變量,打開文件/etc/profile,添加如下Hadoop環境變量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
同樣,需要讓該環境變量生效,執行如下代碼:
source /etc/profile
輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:
hadoop version
2.5 Hadoop配置(單機偽分布式模式)
Hadoop 可以在單節點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。
修改配置文件 core-site.xml (gedit /usr/local/hadoop/etc/hadoop/core-site.xml),將當中的
<configuration>
</configuration>
修改為下面配置:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
同樣的,修改配置文件 hdfs-site.xml(gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml):
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
修改文件 hadoop-env.sh (gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh),在文件開始處添加Hadoop和Java環境變量。
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
Hadoop配置文件說明
Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),偽分布式只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。
配置完成後,執行 NameNode 的格式化:
/usr/local/hadoop/bin/hdfs namenode -format
啟動hadoop
./usr/local/hadoop/sbin/start-all.sh
成功啟動後,運行jps命令
source /etc/profile
jps
如果安裝成功,則會出現如下如下進程
hadoop成功啟動後的進程成功啟動後,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。
2.6 Hadoop配置(集群模式)
2.6.1 設置靜態IP(以主節點為例)
編輯文件/etc/network/interfaces
vim /etc/network/interfaces
在文件後面添加如下配置信息(eth0是網卡名,需要根據實際情況更改)
auto eth0 #網卡名
iface eth0 inet static
address 192.168.1.2 #靜態IP(可根據實際情況自由設置)
netmask 255.255.255.0 #子網掩碼
gateway 192.168.1.1 #網關
dns-nameservers 192.168.1.1 #DNS服務器地址,與網關相同即可
編輯文件/etc/resolve.conf
vim /etc/resolve.conf
在文件中添加如下配置信息
nameserver 192.168.1.1
此dns在系統重啟後會失效,編輯文件/etc/resolvconf/resolv.conf.d/base
vim /etc/resolvconf/resolv.conf.d/base
添加如下內容,從而永久保存DNS配置
nameserver 192.168.1.1
運行如下命令重啟網絡
/etc/init.d/networking restart
如果重啟後無效,則重啟系統。
重啟後如果發現找不到網卡,則啟用系統托管網卡
vim /etc/NetworkManager/NetworkManager.conf
修改
managed=false
為
managed=true
運行如下命令重啟網絡
/etc/init.d/networking restart
如果重啟後無效,則重啟系統。
2.6.2 配置hosts文件(每臺主機都要配置)
修改主機名
vim /etc/hostname
提示:主節點設置為master,從節點設置為slave1、slave2等等。
編輯文件/etc/hosts
vim /etc/hosts
將以下數據復制進入集群的各個主機中
192.168.1.2 master
192.168.1.11 slave1
註意:若再增加一個從機,則添加slave2的信息
使用以下指令在master主機中進行測試,可使用類似指令在slave1上測試:
ping slave1
如果ping的通,說明網絡連接正常,否則請檢查網絡連接或者IP信息是否正確。
2.6.3 SSH無密碼登陸節點(master上配置)
這個操作是要讓 master 節點可以無密碼 SSH 登陸到各個 slave 節點上。
首先生成 master 節點的公匙,在 master節點的終端中執行(因為改過主機名,所以還需要刪掉原有的再重新生成一次):
cd ~/.ssh # 如果沒有該目錄,先執行一次ssh localhost
rm ./id_rsa* # 刪除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回車就可以
讓 master 節點需能無密碼 SSH 本機,在 master 節點上執行:
cat ./id_rsa.pub >> ./authorized_keys
完成後可執行 ssh master 驗證一下(可能需要輸入 yes,成功後執行 exit 返回原來的終端)。接著在 master 節點將上公匙傳輸到 slave1節點:
scp ~/.ssh/id_rsa.pub root@slave1:/root/
scp 是 secure copy 的簡寫,用於在 Linux 下進行遠程拷貝文件,類似於 cp 命令,不過 cp 只能在本機中拷貝。執行 scp 時會要求輸入 slave1 上 root 用戶的密碼。
接著在 slave1 節點上,將 ssh 公匙加入授權
mkdir /root/.ssh # 如果不存在該文件夾需先創建,若已存在則忽略
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
rm /root/id_rsa.pub # 用完就可以刪掉了
如果有其他 slave 節點,也要執行將 master 公匙傳輸到 slave 節點、在 slave 節點上加入授權這兩步。
這樣,在 master 節點上就可以無密碼 SSH 到各個 slave 節點了,可在 master 節點上執行如下命令進行檢驗:
ssh root@slave1
如果不需要密碼,則配置成功。
2.6.4 修改Hadoop配置文件(master上配置)
修改配置文件 core-site.xml (gedit /usr/local/hadoop/etc/hadoop/core-site.xml),將當中的
<configuration>
</configuration>
修改為下面配置:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
同樣的,修改配置文件 hdfs-site.xml(gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml):
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
修改文件 mapred-site.xml (可能需要先重命名,默認文件名為 mapred-site.xml.template),然後配置修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
配置yarn-site.xml(gedit /usr/local/hadoop/etc/hadoop/yarn-site.xml)
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改文件 hadoop-env.sh (gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh),在文件開始處添加Hadoop和Java環境變量。
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
配置slaves(gedit /usr/local/hadoop/etc/hadoop/slaves),刪除默認的localhost,增加從節點:
slave1
註意:若再增加一個從機,再添加slave2
配置好後,將 master 上的 /usr/local/hadoop 文件夾復制到各個節點上。
sudo rm -rf /usr/local/hadoop/tmp # 刪除 Hadoop 臨時文件
sudo rm -rf /usr/local/hadoop/logs # 刪除日誌文件
scp -r /usr/local/hadoop slave1:/usr/local
註意:每臺從機上需要配置Hadoop的環境變量
在master節點上啟動hadoop
./usr/local/hadoop/bin/hdfs namenode -format
./usr/local/hadoop/sbin/start-all.sh
成功啟動後,運行jps命令
source /etc/profile
jps
如果安裝成功,master節點會有NameNode進程,slave節點會有DataNode進程。
成功啟動後,可以訪問 Web 界面 http://master:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。
3. 安裝HBase數據庫
HBase是一個分布式的、面向列的開源數據庫,源於Google的一篇論文《BigTable:一個結構化數據的分布式存儲系統》。HBase以表的形式存儲數據,表有行和列組成,列劃分為若幹個列族/列簇(column family)。欲了解HBase的官方資訊,請訪問HBase官方網站。HBase的運行有三種模式:單機模式、偽分布式模式、分布式模式。
單機模式:在一臺計算機上安裝和使用HBase,不涉及數據的分布式存儲;偽分布式模式:在一臺計算機上模擬一個小的集群;分布式模式:使用多臺計算機實現物理意義上的分布式存儲。這裏出於學習目的,我們只重點討論偽分布式模式。
3.1. HBase安裝
下載 hbase-2.0.0-bin.tar.gz 文件,並將文件移到/usr/local目錄下
mv hbase-2.0.0-bin.tar.gz /usr/local
解壓
tar -zxvf hbase-2.0.0-bin.tar.gz
文件夾重命名
mv hbase-2.0.0 hbase
將hbase下的bin目錄添加到path中,這樣,啟動hbase就無需到/usr/local/hbase目錄下,大大的方便了hbase的使用。教程下面的部分還是切換到了/usr/local/hbase目錄操作,有助於初學者理解運行過程,熟練之後可以不必切換。
編輯/etc/profile文件
vim /etc/profile
在/etc/profile文件尾行添加如下內容:
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH
export HBASE_MANAGES_ZK=true
編輯完成後,按 esc 退出編輯模式,然後輸入:+wq ,按回車保存(也可以按shift + zz 進行保存),最後再執行source命令使上述配置在當前終端立即生效,命令如下:
source /etc/profile
查看HBase版本,確定hbase安裝成功,命令如下:
hbase version
3.2. HBase偽分布模式配置
配置/usr/local/hbase/conf/hbase-site.xml,打開並編輯hbase-site.xml,命令如下:
gedit /usr/local/hbase/conf/hbase-site.xml
在啟動HBase前需要設置屬性hbase.rootdir,用於指定HBase數據的存儲位置,因為如果不設置的話,hbase.rootdir默認為/tmp/hbase-${user.name},這意味著每次重啟系統都會丟失數據。此處設置為HBase安裝目錄下的hbase-tmp文件夾即(/usr/local/hbase/hbase-tmp),添加配置如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
打開文件(gedit /usr/local/hbase/conf/hbase-env.sh)添加java環境變量
export JAVA_HOME=/usr/local/java
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH/usr/local/hbase/bin
3.3 HBase集群模式配置
修改master節點的配置文件hbase-site.xml(gedit /usr/local/hbase/conf/hbase-site.xml)
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1</value>
</property>
<property>
<name>hbase.temp.dir</name>
<value>/usr/local/hbase/tmp</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase/tmp/zookeeper</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
</configuration>
註意:若再增加一個從機,hbase.zookeeper.quorum 添加slave2
修改配置文件regionservers(gedit /usr/local/hbase/conf/regionservers),刪除裏面的localhosts,改為:
master
slave1
若再增加一個從機,添加slave2
傳送Hbase至其它slave節點(從機不需下載安裝包,由主機傳送過去即可,從機環境變量需要配置),即將配置好的hbase文件夾傳送到各個節點對應位置上:
scp -r /usr/local/hbase root@slave1:/usr/local/
註意:每臺從機上需要配置HBase的環境變量
3.4 測試運行
首先切換目錄至HBase安裝目錄/usr/local/hbase;再啟動HBase。命令如下:
/usr/local/hadoop/sbin/start-all.sh #啟動hadoop,如果已啟動,則不用執行該命令
/usr/local/hbase/start-hbase.sh #啟動hbase
hbase shell #進入hbase shell,如果可以進入說明HBase安裝成功了
停止HBase運行,命令如下:
bin/stop-hbase.sh
如果hbase啟動成功,則使用jps命令會出現如下進程
主節點進程
從節點進程
4. 安裝Spark內存計算引擎
Apache Spark 是一個新興的大數據處理通用引擎,提供了分布式的內存抽象。Spark 最大的特點就是快,可比 Hadoop MapReduce 的處理速度快 100 倍。Spark基於Hadoop環境,Hadoop YARN為Spark提供資源調度框架,Hadoop HDFS為Spark提供底層的分布式文件存儲。
4.1. Spark安裝
Spark的安裝過程較為簡單,在已安裝好 Hadoop 的前提下,經過簡單配置即可使用,首先下載 spark-2.3.0-bin-hadoop2.7.tgz 文件,並將文件移到/usr/local目錄下
mv spark-2.3.0-bin-hadoop2.7.tgz /usr/local
解壓
cd /usr/local
tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz
文件夾重命名
mv spark-2.3.0 spark
編輯/etc/profile文件,添加環境變量
vim /etc/profile
在/etc/profile文件尾行添加如下內容:
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
編輯完成後,保存退出,再執行source命令使上述配置在當前終端立即生效,命令如下:
source /etc/profile
4.2. Spark單機配置
配置文件spark-env.sh
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
編輯spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:
export JAVA_HOME=/usr/local/java
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_HDFS_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
SPARK_MASTER_WEBUI_PORT=8079
4.3. Spark集群配置
在master上配置文件spark-env.sh
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
編輯spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:
export JAVA_HOME=/usr/local/java
export SCALA_HOME=/usr/local/scala
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_HDFS_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_HOST=master
export SPARK_WORKER_CORES=2
export SPARK_WORKER_PORT=8901
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export SPARK_MASTER_WEBUI_PORT=8079
保存並刷新配置:
source spark-env.sh
配置從機列表:
cp slaves.template slaves
gedit slaves
在最後加上:
master
slave1
把主機的spark文件夾復制到從機,復制腳本如下:
scp -r /usr/local/spark root@slave1:/usr/local
註意:每臺從機上需要配置Spark的環境變量
4.4 驗證Spark安裝和配置
通過運行Spark自帶的示例,驗證Spark是否安裝成功。
cd /usr/local/spark
./sbin/start-all.sh
bin/run-example SparkPi 2>&1 | grep "Pi is"
運行結果如下圖所示,可以得到π 的 14位小數近似值:
Spark Pi計算結果在主機的瀏覽器輸入http://master:8079(集群模式)或者http://localhost:8079(單機模式)就可以看到有兩個節點在spark集群上。
5. 安裝hive
Hive是一個架構在Hadoop之上的數據倉庫基礎工具,用來處理結構化數據,為大數據查詢和分析提供方便。最初,Hive是由Facebook開發,後來由Apache軟件基金會開發,並作為進一步將它作為名義下Apache Hive為一個開源項目。Hive 不是一個關系數據庫,也不是一個設計用於聯機事務處(OLTP)實時查詢和行級更新的語言。簡單的說,Hive就是在Hadoop上架了一層SQL接口,可以將SQL翻譯成MapReduce去Hadoop上執行,這樣就使得數據開發和分析人員很方便的使用SQL來完成海量數據的統計和分析,而不必使用編程語言開發MapReduce那麽麻煩。
5.1. Hive安裝
下載 apache-hive-1.2.2-bin.tar.gz 文件,並將文件移到/usr/local目錄下
mv apache-hive-1.2.2-bin.tar.gz /usr/local
解壓
tar -zxvf apache-hive-1.2.2-bin.tar.gz
文件夾重命名
mv apache-hive-1.2.2 hive
編輯/etc/profile文件,配置環境變量
vim /etc/profile
在/etc/profile文件尾行添加如下內容:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
編輯完成後,保存退出,再執行source命令使上述配置在當前終端立即生效,命令如下:
source /etc/profile
5.2. 安裝並配置MySQL
我們采用MySQL數據庫保存Hive的元數據,而不是采用Hive自帶的derby來存儲元數據。ubuntu下Mysql的安裝比較簡單,直接運行如下命令。在安裝過程中,會要求配置用戶名和密碼,這個一定要記住。
apt-get install mysql-server
啟動並登陸mysql shell
service mysql start
mysql -u root -p #登陸shell界面
新建hive數據庫
#這個hive數據庫與hive-site.xml中localhost:3306/hive的hive對應,用來保存hive元數據
mysql> create database hive;
將hive數據庫的字符編碼設置為latin1(重要)
mysql> alter database hive character set latin1;
5.3. Hive配置
修改/usr/local/hive/conf下的hive-site.xml,執行如下命令:
cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml
上面命令是將hive-default.xml.template重命名為hive-default.xml,然後,使用vim編輯器新建一個配置文件hive-site.xml,命令如下:
cd /usr/local/hive/conf
vim hive-site.xml
在hive-site.xml中添加如下配置信息,其中:USERNAME和PASSWORD是MySQL的用戶名和密碼。
<?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:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</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>USERNAME</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>PASSWORD</value>
<description>password to use against metastore database</description>
</property>
</configuration>
然後,按鍵盤上的“ESC”鍵退出vim編輯狀態,再輸入:wq,保存並退出vim編輯器。由於Hive在連接MySQL時需要JDBC驅動,所以首先需要下載對應版本的驅動,然後將驅動移動到/usr/local/hive/lib中。
#解壓
tar -zxvf mysql-connector-java-5.1.47.tar.gz
#將mysql-connector-java-5.1.47.tar.gz拷貝到/usr/local/hive/lib目錄下
cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47-bin.jar /usr/local/hive/lib
啟動hive(啟動hive之前,請先啟動hadoop集群)。
./usr/local/hadoop/sbin/start-all.sh #啟動hadoop,如果已經啟動,則不用執行該命令
hive #啟動hive
5.4. Spark和Hive的整合
Hive的計算引擎默認為MapReduce,如果想要用Spark作為Hive的計算引擎,可以參考文章編譯Spark源碼支持Hive並部署
6. 結語
本文介紹了大數據環境的搭建過程,旨在讓學弟學妹們少踩坑。後面,作者將為大家奉獻如何利用Java+Scala來開發大數據應用。如果覺得文章有用的話,別忘記點贊哦O(∩_∩)O~!
Hadoop+HBase+Spark+Hive環境搭建