一、安装Hadop
1. 安装Java
安装jdk-11
# 安装jdk-8
sudo apt install openjdk-11-jdk
# 查看Java版本
java -version
配置环境变量,这里使用apt install安装,并没有把JAVA_HOME内置到环境变量,那么我们先看下java安装到哪里了。java是由alternatives管理的,即可以在系统中设置并切换多个jdk版本。
使用update-alternatives --config java
查看系统可用java版本,如下所示,可以得到Java的安装路径为:/usr/lib/jvm/java-11-openjdk-arm64/
liujianguo@ubuntu:~/MyTestForAutoNUMA$ update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-11-openjdk-arm64/bin/java
设置JAVA_HOME
# 设置当前工作目录
cd /etc/profile.d
# 在此目录下新建文件
vim my_env.sh
# 在文件中编辑以下内容:
# JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64/
export PATH=$PATH:$JAVA_HOME/bin
# 保存退出后,重新加载环境变量
source /etc/profile
# 查看环境变量加载是否成功
echo $JAVA_HOME
2. 配置无密登录
为避免在操作过程中频繁输入密码,需要配置免密登录。
# 到ssh配置文件目录下
liujianguo@ubuntu:~/.ssh$ pwd
/home/liujianguo/.ssh
# 生成公钥和私钥
ssh-keygen -t rsa
# 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
# 将公钥拷贝到要免密登录的目标机器上
cat ./id_rsa.pub >> ./authorized_keys # 配置登录本机免密
3. 安装Hadoop
(1) 下载解压
从官网上下载安装软件包,选择对应版本的编译好的安装包进行下载。
我的机器为ARM架构的鲲鹏920 CPU,因此下载binary-aarch64软件包:
# 下载安装包
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5-aarch64.tar.gz
# 解压软件包到 /opt/module/ 目录下
tar -zxvf hadoop-3.3.5-aarch64.tar.gz -C /opt/module/
(2) 配置环境变量
# 打开之前配置JAVA_HOME的文件
vim /etc/profile.d/my_env.sh
# 在文件中追加以下内容:
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.5-aarch64
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 保存退出后,更新环境变量
source /etc/profile
# 查看安装是否成功
hadoop version
(3) 配置集群
配置本机伪分布式集群,即:
localhost | |
---|---|
HDFS | NmaeNode SecondaryNameNode DataNode |
YARN | ResourceManager NodeManager |
需要在/opt/module/hadoop-3.3.5/etc/hadoop
目录下配置文件:core-site.xml
, hdfs-site.xml
,yarn-site.xml
, mapred-site.xml
,具体配置方法,可以参考课程尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)
# 当前工作目录
cd $HADOOP_HOME/etc/hadoop
# 编辑文件core-site.xml
vim core-site.xml
# 根据需求修改以下内容,此处仅介绍配置含义,根据自己需求进行配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
# 修改好后,保存退出
# 编辑文件hdfs-site.xml
vim hdfs-site.xml
# 根据需求修改以下内容,此处仅介绍配置含义,根据自己需求进行配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
# 修改好后,保存退出
# 编辑文件yarn-site.xml
vim yarn-site.xml
# 根据需求修改以下内容,此处仅介绍配置含义,根据自己需求进行配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
# 修改好后,保存退出
# 编辑文件mapred-site.xml
vim mapred-site.xml
# 根据需求修改以下内容,此处仅介绍配置含义,根据自己需求进行配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
# 修改好后,保存退出
若需要配置历史服务器,需要在文件中追加以下内容
# 配置历史服务器,编辑文件mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
(4) 启动集群
可以通过以下命令启动hdfs
和yarn
# 当前工作目录
liujianguo@ubuntu:/opt/module/hadoop-3.3.5/sbin$ pwd
/opt/module/hadoop-3.3.5/sbin
# 启动 hdfs 和 yarn
./start-dfs.sh
./start-yarn.sh
# 停止 hdfs 和 yarn
./stop-dfs.sh
./stop-yarn.sh
# 启动历史服务器
./mr-jobhistory-daemon.sh start historyserver
# 停止历史服务器
mr-jobhistory-daemon.sh stop historyserver
4. 常见Hadoop网页端口位置
Web端查看HDFS的NameNode
浏览器中输入:http://hadoop102:9870
查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
- 浏览器中输入:http://hadoop103:8088
- 查看YARN上运行的Job信息
Web端查看JobHistory
二、安装Hive
1. 下载hive
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/,在该网页可以下在不同版本的hive。
通过以下命令下载解压hive软件安装包
# 下载软件安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-4.0.0-alpha-2/apache-hive-4.0.0-alpha-2-bin.tar.gz
# 解压软件安装包到 /opt/module 目录下
tar -zxvf apache-hive-3.1.2- bin.tar.gz -C /opt/module/
2. 配置环境变量
# 打开之前配置JAVA_HOME的文件
vim /etc/profile.d/my_env.sh
# 在文件中追加以下内容:
# HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
# 保存退出后,更新环境变量
source /etc/profile
3. 配置hive-env.sh
# 当前工作目录
pwd
/opt/module/apache-hive-4.0.0-alpha-2-bin/conf
# 拷贝模板文件
cp hive-env.sh.template hive-env.sh
# 编译hive-env.sh文件
vim hive-env.sh
# 在hive-env.sh中追加Hadoop的安装路径
HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.5
4. hive 元数据配置到MySQL(可选)
需要提前安装好MySQL
修改MySQL库下的user表中的root用户允许任意IP连接
mysql> update mysql.user set host='%' where user='root';
mysql> flush privileges;
去MySQL官网找GA version下载
通过以下命令解压到/opt/module/apache-hive-4.0.0-alpha-2-bin/lib
目录下
# 获取包
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.32.tar.gz
# 解压到hive的库文件目录下
tar -zxvf mysql-connector-j-8.0.32.tar.gz
cp mysql-connector-j-8.0.32.jar /opt/module/apache-hive-4.0.0-alpha-2-bin/lib
在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件
vim $HIVE_HOME/conf/hive-site.xml
# 在文件中添加以下内容,此处仅介绍配置含义,根据自己需求进行配置
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc 连接的 password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<!-- Hive 元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- Hive 默认在 HDFS 的工作目录 -->
<property>
启动hadoop,在hadoop中创建hive需要用到的目录并设置权限。
$ start-all.sh #启动hadoop
$ hadoop fs -mkdir /tmp
$ hadoop fs -mkdir -p /user/hive/warehouse
$ hadoop fs -chmod g+w /tmp
$ hadoop fs -chmod g+w /user/hive/warehouse
5. 初始化元数据库
在初次启动hive时,需要提前初始化元数据库
当使用 hive 自己的元数据库时,可以使用以下命令初始化元数据库
# 当前工作目录
pwd
/opt/module/apache-hive-4.0.0-alpha-2-bin
# 初始化元数据库
bin/schematool -dbType derby -initSchema
当把 hive 元数据配置到 Mysql 时,通过以下命令初始化元数据库,但注意,此时需要提前进行相关配置。
# 当前工作目录
pwd
/opt/module/apache-hive-4.0.0-alpha-2-bin
# 初始化元数据库
schematool -initSchema -dbType mysql - verbose
6. 启动hive
(1) 通过以下命令启动hive
# 启动hive
bin/hive
(2) 若使用元数据的方式访问hive,此时需要在hive-site.xml
文件中添加如下配置信息:
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
启动meta store
# 前启动元数据服务
hive --service metastore
# 然后启动hive
/bin/hive
(3) 使用JDBC方式访问hive,此时需要在hive-site.xml
中添加以下配置信息:
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
启动 hiveserver2
# 启动 hiveserver2
bin/hive --service hiveserver2
# 启动belline客户端
bin/beeline -u jdbc:hive2://hadoop102:10000 -n atguigu
此处具体配置方法可以参考课程:尚硅谷大数据Hive教程(基于hive3.x丨hive3.1.2)
三、 安装spark sql
1. 下载Spark
从官网(https://spark.apache.org/downloads.html)下载Spark
# 下载Spark
wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
# 解压到 /opt/module/ 目录下
tar -zxvf spark-3.3.2-bin-hadoop3.tgz -C /opt/module/
2. 配置环境变量
# 打开之前配置JAVA_HOME的文件
vim /etc/profile.d/my_env.sh
# 在文件中追加以下内容:
# SPARK_HOME
export SPARK_HOME=/opt/module/spark-3.3.2-bin-hadoop3
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
# 保存退出后,更新环境变量
source /etc/profile
3. 配置spark-env.sh
该文件中配置影响spark的运行性能,具体配置参数,可以参考相关文章。
# 当前工作目录
pwd
/opt/module/spark-3.3.2-bin-hadoop3/conf
# 拷贝spark-env.sh
cp spark-env.sh.template spark-env.sh
# 编辑spark-env.sh,启动java,hadoop等具体路径根据自己实际环境设置。
vim spark-env.sh
# 在spark-env.sh中添加以下内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SCALA_HOME=/usr/local/scala
export SPARK_HOME=/usr/local/spark
export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=3
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=5G
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HADOOP_HOME/lib/native
4. 配置works
根据自己的集群规划配置works,具体配置可以参考课程尚硅谷大数据Spark教程从入门到精通
# 当前工作目录
pwd
/opt/module/spark-3.3.2-bin-hadoop3/conf
# 拷贝workers模板
cp workers.template workers
# 打开文件
vim workers
# 根据需求配置集群,默认是localhost
localhost
5. 简略日志(可选)
# 当前工作目录
pwd
/opt/module/spark-3.3.2-bin-hadoop3/conf
# 拷贝模板文件,并编辑文件log4j.properties
cp log4j.properties.template log4j.properties
vim log4j.properties
# 在文件中修改以下内容
# Set everything to be logged to the console
rootLogger.level = warn # 将此处改为warn
rootLogger.appenderRef.stdout.ref = console
6. 配置历史服务器
# 当前工作目录
pwd
/opt/module/spark-3.3.2-bin-hadoop3/conf
# 拷贝模板文件,并编辑spark-defaults.conf
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
# 在spark-defaults.conf中添加以下内容
spark.eventLog.enabled true
spark.eventLog.dir hdfs://192.168.1.2:9000/spark/historyLog
spark.history.fs.logDirectory hdfs://192.168.1.2:9000/spark/historyLog
# spark.eventLog.compress true # 可以设置保存历史日志时进行压缩
7. Spark整合Hive的MetaStore
前提:已经根据文章前面的方法配置好Hive的元数据库(MeataStore)
SparkSQL 整合 Hive 的 MetaStore 主要思路就是要通过配置能够访问它, 并且能够使用 HDFS 保存 WareHouse, 这些配置信息一般存在于 Hadoop 和 HDFS 的配置文件中, 所以可以直接拷贝 Hadoop 和 Hive 的配置文件到 Spark 的配置目录
# 当前工作目录
pwd
/opt/module/hadoop-3.3.5/etc/hadoop
# 将当前工作目录下的文件hive-site.xml core-site.xml hdfs-site.xml拷贝到/opt/module/spark-3.3.2-bin-hadoop3/conf目录下。
cp hive-site.xml core-site.xml hdfs-site.xml /opt/module/spark-3.3.2-bin-hadoop3/conf
拷贝配置文件的目的
Spark 需要 hive-site.xml 的原因是, 要读取 Hive 的配置信息, 主要是元数据仓库的位置等信息
Spark 需要 core-site.xml 的原因是, 要读取安全有关的配置
Spark 需要 hdfs-site.xml 的原因是, 有可能需要在 HDFS 中放置表文件, 所以需要 HDFS 的配置
接着可以参考文章Spark SQL 快速入门系列(五)SparkSQL 访问 Hive验证配置是否正确。
8. 启动
(1) 启动Local环境
所谓的 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学,调试,演示等,之前在 IDEA 中运行代码的环境我们称之为开发环境,不太一样。
# 打开spark-shell
bin/spark-shell
# 退出spark-shell
:q
# 或
Ctrl+C
# 或
:quit
(2) Standalone模式
local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的集群中去执行,这里我们来看看只使用 Spark 自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark 的 Standalone 模式体现了经典的 master-slave 模式。
记得将spark的jar包上传到hdfs中。否则会报错Error: Could not find or load main class org.apache.spark.deploy.yarn.ApplicationMaster。
# 当前工作目录
pwd
/opt/module/spark-3.3.2-bin-hadoop3/sbin
# 启动spark master
./start-master.sh
# 停止spark master
./stop-master.sh
# 启动历史服务器
./start-history-server.sh
# 停止历史服务器
./stop-history-server.sh
9. Spark Web接口位置
Local模式,网文Web UI
- 在spark-shell启动成功后,在
http://虚拟机地址:4040
查看Standalone 模式
- 查看 Master 资源监控 Web UI 界面: http://linux1:8080
参考文章
-
mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法
-
[HIVE Illegal character entity: expansion character (code 0x8 at [row,col,system-id]: 3215,96,“file(https://blog.csdn.net/walykyy/article/details/112250390)
-
解决There are 0 datanode(s) running and no node(s) are excluded in this operation.