hadoop、hive安裝
hadoop(hdfs+mapReduce+yarn)
前提
準備三台服務器(本文使用虛擬機),安裝jdk1.8
配置
本文使用hadoop版本為3.3.0,解壓hadoop壓縮包到任意目錄,以/export/server/hadoop-3.3.0/
為例。
解壓完畢後,進入hadoop目錄,修改配置文件,位於/etc/hadoop/
目錄下,文本中有關路徑和網絡地址的配置需要根據實際情況修改
- 指定java路徑,指定各個進程運行的用户名 ``` vim hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_341 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root ```
- 核心配置文件,共有四個需要修改 ``` vim core-site.xml
```
``` vim hdfs-site.xml
```
``` vim mapred-site.xml
```
``` vim yarn-site.xml
```
- 設置集羣所在的網絡地址 ``` vim workers
192.168.88.128 192.168.88.129 192.168.88.130 ```
- 將hadoop添加到環境變量 ``` vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
``
編譯環境變量,
source /etc/profile`,執行hadoop命令,驗證是否配置成功
-
將hadoop及環境變量文件同步到其他兩個節點,執行編譯
-
初始化hdfs 在主節點機器執行
hdfs namenode -format
,如果出現storage directory /export/server/hadoop-3.3.0/dfs/name has been successfully formatted
,説明成功
啟動
start-all.sh
啟動成功後,在瀏覽器輸入namenode所在服務器地址加上9870端口,可查看hdfs管理界面,如192.168.88.128:9870
;在瀏覽器輸入namenode所在服務器地址加上8088端口,可查看mapReduce管理界面,如192.168.88.128:8088
問題記錄
啟動時,報錯
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
需要配置免密登錄,才可以啟動其他服務器下的hadoop服務,參考SSH免密登錄配置
hdfs
上傳下載命令
注:
1. 其他常見文件操作命令基本與linux相同,故不記錄
2. 本地路徑可直接寫路徑,也可用前綴file:///
指明絕對路徑;hdfs路徑可直接寫路徑,也可用前綴hdfs://${namenode}:8020/
指明絕對路徑
- 上傳文件
hadoop fs -put 本地路徑 hdfs路徑
- 下載文件
hadoop fs -get hdfs路徑 本地路徑
問題記錄
使用
start-dfs.sh
啟動,控制枱顯示成功,進入管理界面,live nodes
顯示只有一個
可能是使用ip連接的NameNode,如果是這樣的話,需要在hdfs-site.xml
添加如下配置
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
進入管理界面,
live nodes
顯示三個,點進去只顯示一個,如下圖
node列表以主機名+端口去重,三個節點的主機名都是localhost,端口又一樣,因此只顯示一個,解決方法是修改主機名或端口,本文中使用第一個
修改/etc/hostname
文件或使用命令hostnamectl set-hostname node1
修改三個節點的主機名,之後重啟服務器
mr
説明
當前大數據技術下,很多框架封裝了MapReduce,因此對於它瞭解即可
執行計算圓周率,進入/export/server/hadoop-3.3.0/share/hadoop/mapreduce/
目錄,執行hadoop -jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
命令,後面兩個參數可任意修改
問題記錄
執行example的計算pi任務,進入管理界面,發現任務一直沒有執行,或者進度長期沒有變化
執行資源調度的是node1,之前設置了主機名,如果分配給node2節點執行,發起的url為node2:${port}
,此時node1節點並不知道它的實際地址,所以任務進度長期沒有變化
在node1節點上修改/etc/hosts
文件,將所有節點的ip與主機名映射
執行example的計算pi任務,報異常
java.net.UnknownHostException: node3
只修改了node1映射,其他節點的映射也需要修改
hive
前提
- 啟動mysql服務並配置可遠程連接
- 整合hadoop,在
core-sile.xml
文件上,之前已經配置好了,見註釋整合hive 用户代理設置
配置
本文使用hive版本為3.1.2,解壓hive壓縮包到任意目錄,以/export/server/hive-3.1.2/
為例,文本中有關路徑、網絡地址、及MySQL配置信息等需要根據實際情況修改。
-
解決hive與hadoop之間guava版本差異
cd /export/server/hive-3.1.2/lib rm -rf guava-19.0.jar cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar .
-
修改配置文件,進入
conf
目錄,將hive-env.sh.template
重命名為hive-env.sh
,添加以下配置 ``` vim hive-env.sh
export HADOOP_HOME=/export/server/hadoop-3.3.0 export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib ```
conf
目錄下的hive-site.xml
,添加如下配置 ``` vim hive-site.xml
-
將mysql驅動放到hive安裝包lib下,jar包名稱為
mysql-connector-java-8.0.22.jar
,具體過程略 -
初始化hive 執行
bin/schematool -initSchema -dbType mysql -verbos --verbose
,如果出現Initialization script completed
,説明成功。查看MySQL,發現已經有hive3數據庫,且數據表也初始化了 -
支持中文 如果對字段、表使用中文註釋,查看時會發現顯示
???
,這是因為沒有設置UTF-8字符集,因此還需要對元數據表字段做一些調整ALTER TABLE `hive3`.`columns_v2` MODIFY COLUMN `COMMENT` varchar(256) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`table_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`partition_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`partition_keys` MODIFY COLUMN `PKEY_COMMENT` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`index_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4;
啟動
``` nohup ./hive --service metastore &
nohup ./hive --service hiveserver2 &
``
hive默認開放兩個端口。若啟動成功,在瀏覽器輸入
ip:10002,可查看後台頁面;
10000端口使客户端以jdbc方式連接,連接地址為
jdbc:hive2://ip:10000`
連接
- beeline連接
java ./beeline -u jdbc:hive2://ip:10000 -n root 或者 ./beeline !connect jdbc:hive2://ip:10000 root
- 使用idea、dbeaver之類的軟件連接,好處是寫SQL時有智能提示