Windows10 從零搭建 Hadoop/Hive 環境及 Hive 入門


1. Hadoop 概覽
Google 三篇論文(GFS -> HDFS,Map-Reduce -> MR,BigTable -> HBase)是 Hadoop 的思想之源。Hadoop 生態非常龐大,其最初兩大核心是 HDFS 和 MR,分別負責存儲和計算(Hadoop 1.x 中,MR 既負責計算又負責資源調度,Hadoop 2.x,搞出 Yarn 負責調度,MR 只負責計算),由於 MR 被 Spark 取代,下面只簡要看下 HFDS 和 Yarn。

Hadoop 環境搭建參考博文,個人學習畢竟受限個人筆記本資源限制,故而使用偽分布式方式。啟動后可以訪問 http://localhost:50070/ 查看 HDFS 情況。

HDFS 架構概述
圖片來自官方文檔

 

 


NameNode,存儲文件的元數據,如文件名、目錄結構,文件屬性(生成時間、副本數、文件權限),以及每個文件的塊列表和塊所在的 DataNode 等。
DataNode,在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
Secondary NameNode,用來監控HDFS狀態的輔助后台程序,每隔一段時間獲取HDFS元數據的快照。
HDFS 常見命令
注意結合 HDFS 的 UI 界面 http://localhost:50070/ 查看此文件系統的目錄和文件(Utilities)等狀態!

// 查看命令使用幫助
hadoop fs -help rm

// 查看根目錄下文件(等價為 hadoop fs -ls hdfs://localhost:9000/,如果去掉最后邊的 / ,將是查看最內層所有文件)
hadoop fs -ls /

// 遞歸創建目錄(注意 / 開頭)
hadoop fs -mkdir -p /test/test/test

// 遞歸刪除目錄(注意 / 開頭)
hadoop fs -rm -r /test
 
更多命令見官網,用時結合百度查看使用即可。

HDFS 開發
在 Maven 中引入 HDFS 相關依賴包即可

Yarn 架構概述

 

 


2. 安裝 VirtualBox
官網下載最新版本 VirtualBox 並安裝,此過程簡單,可結合百度。筆者使用 VirtualBox-6.1.10-138449-Win.exe。

3. 安裝 Ubuntu
官網下載最新版本 Ubuntu 並安裝到 VirtualBox 中,此過程簡單,可結合百度。筆者使用 ubuntu-20.04-desktop-amd64.iso。最好開辟的硬盤空間大點,最起碼 20G 吧,不然后續如果不夠用,再擴容就比較麻煩了!!筆者在當前用戶目錄下建立了一個 env 文件夾,專門安裝后面的各個環境。

4. 安裝 Hadoop
3.1 安裝 JDK
官網下載並解壓到 env 文件夾,tar -xzf jdk-8u251-linux-x64.tar.gz,可利用mv jdk-8u251-linux-x64.tar.gz jdk重命名為 jdk。配置環境變量,在sudo vi ~/.bashrc最后加入下面的幾行配置,並source ~/.bashrc生效,最后用javac和java試試是否安裝成功。

export JAVA_HOME=jdk安裝路徑
export JRE_HOME=$JAVA_HOME/jre
export PATH=${JAVA_HOME}/bin:$PATH
 
3.2 安裝 Hadoop
官網下載並解壓到 env 文件夾並重命名為 hadoop,筆者使用的是 hadoop-2.6.4.tar.gz 。如下配置環境變量並使之生效(類似於 JDK 環境變量配置)。並使用hadoop version試試是否安裝成功。

export HADOOP_HOME=Hadoop安裝路徑
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

 
偽分布式配置 Hadoop

修改core-site.xml,將修改為:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file: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,將修改為:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:Hadoop解壓路徑/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:Hadoop解壓路徑/tmp/dfs/data</value>
</property>
</configuration>
 
把 hadoop-env.sh 中的 ${JAVA_HOME} 改為 JDK 實際路徑。
在 Hadoop 的 bin 目錄下,使用命令hdfs namenode -format格式化 Namenode,注意觀察有“Exiting with status 0”提示表示成功。
在 Hadoop 的 sbin 目錄下,使用命令./start-dfs.sh來開啟 Namenode 和 Datanode,使用命令./start-yarn.sh啟動 Yarn,然后使用jps試試是否啟動成功。
52624 Jps
16405 NameNode
16742 SecondaryNameNode
52598 NodeManager
16526 DataNode
52431 ResourceManager

 
5. 安裝 Hive
4.1 安裝 Hive
官方下載並解壓到 env 文件夾里,並重命名為 hive,配置環境變量並使之生效。筆者使用 apache-hive-2.3.7-bin.tar.gz。

export HIVE_HOME=Hive安裝路徑
export HIVE_CONF=$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
 
配置hive-site.xml

復制一份 hive-default.xml.template 並更改名字為 hive-site.xml,cp hive-default.xml.template hive-site.xml。然后如下修改對應的 value 的值。並把${system:java.io.tmpdir}全部替換為hive解壓路徑/tmp,將{system:user.name}全部替換為${user.name}。

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8&createDatabaseIfNotExist=true</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>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
 
4.2 安裝 MySQL
1. 安裝 MySQL

官網下載 MySQL,並解壓到 env 文件夾下的 mysql 文件夾下,筆者使用 mysql-server_5.7.30-1ubuntu18.04_amd64.deb-bundle.tar。

 

 

下面是具體安裝步驟,如果出現安裝失敗或者曾經安裝過 MySQL,徹底卸載 MySQL 的方法可參考這篇博文。

#安裝步驟

sudo apt-get install libaio1
#使用以下命令預配置MySQL服務器軟件包(將被要求為root用戶提供您的MySQL安裝密碼):
sudo dpkg-preconfigure mysql-community-server_*.deb
#對於MySQL服務器的基本安裝,請按照數據庫公用文件包,客戶端包,客戶端元包,服務器包和服務器元包的順序如下逐一安裝:
sudo dpkg -i mysql-common_*.deb
sudo dpkg -i mysql-community-client_*.deb
sudo dpkg -i mysql-client_*.deb
sudo dpkg -i mysql-community-server_*.deb
sudo dpkg -i mysql-server_*.deb
#如果中途被dpkg警告未滿足的依賴關系,可用apt-get來修復它們,然后再運行中斷的命令:
sudo apt-get -f install
 
service mysql start啟動 MySQL 可登錄試試是否安裝成功!

2. 配置 MySQL 的 Java 驅動包

官方下載 MySQL 的 Java 驅動包,筆者使用 mysql-connector-java-5.1.49.tar.gz。把解壓出來的 mysql-connector-java-5.1.49-bin.jar 放入 hive 的 lib 目錄中。

3. 創建 Hive 的用戶及數據庫

在 MySQL 數據庫中創建用戶名和密碼均為 hive 的用戶,並賦予其所有數據庫的權限。然后使用 hive 賬號登錄,並創建名字為 hive 的數據庫。

mysql -u root -p
create user 'hive'@'%' identified by 'hive';
grant all privileges on *.* to 'hive'@'localhost' identified by 'hive';
 
4. 啟動 Hive

在 hive 的 bin 目錄下,執行schematool -dbType mysql -initSchema完成元數據的初始化,然后命令行通過hive命令(要保證前面已經在 Hadoop 的 sbin 目錄下執行了./start-dfs.sh和./start-yarn.sh,並啟動了 MySQL)就可使用 Hive 啦!至此,恭喜一路安裝成功了!

6. Hive 入門
Hive 是基於 Hadoop 的數據倉庫工具,可將結構化數據映射成 Hive 表,並提供類似 SQL 的查詢(底層還是轉換成 MR 任務)。

通常用 MySQL 的 hive 數據庫的各個表存放 Hive 數據的元數據信息。

內部表/外部表
Hive 創建的內部表和外部表,外部表刪除后,HDFS 里不會刪除。

hive> create external table person2(
> id int,
> name string,
> age int
> )
> ;
 
建表
# 查詢建表,person3 和 person2 的結構、數據完全一致
create table person3
as
select * from person2;

 
# person4 和 person2 的結構一致,但無數據
create table person4 like person2;
 
# 加載數據到表,要滿足 person4 和 person2 的結構是一致的
insert into person4
select * from person2
 
# 從文件加載數據到表
create table if not exists person5(
id int comment 'ID',
name string comment 'name'
)
comment 'created by Mr Hah'
row format delimited
fields terminated by ','
lines terminated by '\n';

load data local inpath '/home/data/person5.txt' into table person5;
 

 

 


特殊數據類型 array/map/struct
array

 

 

 

 

 

 

 

 

 

 

map

 

 

 

 

 

 

 


struct

 

 

 

 

 

 

 


分區
只需要查詢一些分區就可以的話,就不用全表掃描,節省時間。

 

 

 

 

 


# 添加分區,可在 web 界面(localhost:50070)看到
alter table students add partition(sclass='12003');
 
# 刪除分區,會刪除該分區下所有數據
alter table students drop partition(sclass='12002');

 

 

 


7. Xshell
// 現在服務器安裝 sshd 並啟動
sudo apt-get install openssh-server

sudo /etc/init.d/ssh start

// 如果有輸出 sshd 證明已經開啟 ssh 服務
ps -ef | grep sshd
 
(遠程登錄工具除了 Xshell 還有 SecureCRT)
在 Windows 上下載安裝 Xshell,然后在 Ubuntu 中 ifconfig,找到 ip,發現 ip 是 10.0.2.15,這和 Windows 的 ip(192.xxx) 明顯不在一個網段上,Xshell 肯定訪問不到 Ubuntu。解決辦法是關機 Ubuntu,在 VirtualBox 中點擊設置-網絡,如圖設置網卡 2。

 

 

Ubuntu 開機,再次查看 ip,就有 192.xxx 的了,在 Xshell 中用這個地址訪問即可。

 

 

另外,rz 是一個常用命令,上傳本地文件到遠程。

8. 問題
鎖異常
Unable to acquire IMPLICIT, SHARED lock mydb after 100 attempts.
Error in acquireLocks...
FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time
 
解決辦法是關閉並發,
方式一(hive 命令行中): set hive.support.concurrency=false;
方式二(hive-site.xml 配置):

<property>
<name>hive.support.concurrency</name>
<value>false</value>
<description>
Whether Hive supports concurrency control or not.
A ZooKeeper instance must be up and running when using zookeeper Hive lock manager
</description>
</property>

————————————————
版權聲明:本文為CSDN博主「ccnuacmhdu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ccnuacmhdu/article/details/107142948


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM