【hive】单节点搭建hadoop和hive

news/2025/1/11 7:14:55/

一、背景

需要使用hive远程debug,尝试使用无hadoop部署hive方式一直失败,无果,还是使用有hadoop方式。最终查看linux内存占用6GB,还在后台运行docker的mysql(bitnami/mysql:8.0),基本满意。

版本选择:
(1)hive2 hadoop2 和hive3和hadoop3需要搭配使用,不能像chd的hive2和hadoop3搭配使用,容易出现问题。
本文选择版本,都是官网推荐的版本:
hadoop-3.3.6.tar.gz
apache-hive-3.1.3-bin.tar.gz

二、创建用户和组

# hadoop缩写hdp
useradd hdp
groupadd hadoop

后边启动hadoop不能用root用户。

三、配置集群(单节点)互信

su hdp && cd .ssh
ssh-keygen
# 一路回车
cat id_rsa.pub >> authorized_keys
vi /etc/hosts
# localhost 行后追加 hdp # 配置后测试下
ssh hdp 
ssh localhost

四、hadoop搭建

hadoop官网
下载安装包
本文hadoop安装路径:/opt/hadoop-3.3.6

# 解压
tar -xvf hadoop-3.3.6.tar.gz 
# 改名字
mv ... hadoop-3.3.6# 加个软连接
cd hadoop-3.3.6
ln -s etc/hadoop conf

修改hadoop-env.sh

export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"

修改core-site.xml,添加:

<configuration><property><name>fs.defaultFS</name><value>hdfs://hdp:9000</value><description>hdfs内部通讯访问地址</description></property><property><name>hadoop.tmp.dir</name><!--临时文件目录需要自己建立--><value>/var/hadoop/tmp</value></property><property><name>hadoop.proxyuser.hadoop.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value>
</property>
</configuration>

修改hdfs-site.xml,添加:

<configuration><property><name>dfs.namenode.name.dir</name><value>/var/hadoop/data/namenode</value><description> namenode 存放name table(fsimage)本地目录需要修改,如果没有需要自己创建文件目录)</description></property><property><name>dfs.datanode.data.dir</name><value>/var/hadoop/data/datanode</value><description>datanode存放block本地目录(需要修改,如果没有需要自己创建文件目录)</description></property><property><!--由于只有一台机器,hdfs的副本数就指定为1--><name>dfs.replication</name><value>1</value></property>
</configuration>

修改yarn-site.xml

<configuration>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property>
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>2048</value>
</property>
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>2048</value>
</property>
<property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>2.1</value>
</property>
<property><name>mapred.child.java.opts</name><value>-Xmx1024m</value>
</property>
<property><name>yarn.application.classpath</name><value>/opt/hadoop-3.3.6/conf:/opt/hadoop-3.3.6/share/hadoop/common/lib/*:/opt/hadoop-3.3.6/share/hadoop/common/*:/opt/hadoop-3.3.6/share/hadoop/hdfs:/opt/hadoop-3.3.6/share/hadoop/hdfs/lib/*:/opt/hadoop-3.3.6/share/hadoop/hdfs/*:/opt/hadoop-3.3.6/share/hadoop/mapreduce/*:/opt/hadoop-3.3.6/share/hadoop/yarn:/opt/hadoop-3.3.6/share/hadoop/yarn/lib/*:/opt/hadoop-3.3.6/share/hadoop/yarn/*</value>
</property>
</configuration>

yarn.application.classpath是使用hadoop classpath生成的,一定要有此配置。

修改mapred-site.xml,添加:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
touch init-env.sh

添加如下内容,本文使用的hadoop安装路径的是:/opt/hadoop-3.3.6

#!/bin/bash
# 移除老的环境变量
# 如果本机已经安装过hadoop一定要注意,将旧hadoop环境变量移除,可以使用printenv 或者env 查看已经有的环境变量
unset HADOOP_HDFS_HOME
unset HADOOP_YARN_HOME
unset HADOOP_CLASSPATH
unset HADOOP_MAPRED_HOME
unset HADOOP_HOME
unset HADOOP_CONF_DIR
# 添加新的环境变量
export HADOOP_HOME=/opt/hadoop-3.3.6
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HADOOP_LOG_DIR=/var/hadoop/log
export PATH=$HADOOP_HOME/bin:$PATH

加载环境变量

source init-env.sh
# 测试下:
env
echo $HADOOP_HOME
echo $HADOOP_CONF_DIR

初始化namenode

# 删除hdfs-site.xml中配置的namenode和datanode本地路径
rm -rf /var/hadoop/data/namenode/* /var/hadoop/data/datanode/*
hdfs namenode  -format

启动和停止hadoop

chown -R hdp:hadoop $HADOOP_HOME
# 必须使用非root账户登录
su hdp
$HADOOP_HOME/sbin/start-all.sh
# 使用jps查看下java进程情况:
NameNode
ResourceManager
NodeManager
SecondaryNameNode
DataNode# 停止
$HADOOP_HOME/sbin/stop-all.sh# 可以在console查看日志的脚本,即单独启动yarn或者hdfs:
start-dfs.sh
start-yarn.sh

hdfs web
yarn web
使用命令行确认下hdfs和yarn是否可用:

hdfs dfs -mkdir /tmp
hdfs dfs -ls /
yarn application -list

六、hive搭建

本文hive安装位置:/opt/hive-3.1.3/
hive官网

tar -xvf apache-hive-3.1.3-bin.tar.gz
mv apache-hive-3.1.3-bin hive-3.1.3
cd hive-3.1.3 && mkdir logs
cp hive-env.sh.template hive-env.sh
touch hive-site.xml
# 不手动添加的话,hive不打印日志!!!
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

修改hive-env.sh

HADOOP_HOME=/opt/hadoop-3.3.6

修改hive-site.xml,添加:
本文hive使用mysql作为metastore,提前在mysql中创建好数据库hive3_local

<configuration>
<!-- 数据库连接JDBC的URL地址,&amp; 是urlencode后的表达-->
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://mysql-ip:3306/hive3_local?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property><!-- 数据库连接driver,即MySQL驱动-->
<property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.cj.jdbc.Driver</value>
</property><!-- MySQL数据库用户名-->
<property><name>javax.jdo.option.ConnectionUserName</name><value>root</value>
</property><!-- MySQL数据库密码-->
<property><name>javax.jdo.option.ConnectionPassword</name><value>密码</value>
</property>
<property><!--hive表在hdfs的位置--><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value>
</property>
<property><name>hive.security.authorization.enabled</name><value>false</value>
</property>
<property><name>hive.security.authorization.createtable.owner.grants</name><value>ALL</value>
</property>
<property><name>hive.server2.enable.doAs</name><value>false</value>
</property>
</configuration>
touch init-env.sh

添加如下内容

#!/bin/bash
export HIVE_HOME=/opt/hive-3.1.3
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$HIVE_HOME/bin:$PATH

加载hive环境变量。

source init-env.sh

初始化metastore
把数据库jdbc驱动复制到lib目录下,本文是mysql-connector-j-8.0.31.jar

# 进入hive的bin目录
./schematool -dbType mysql -initSchema

配置hive启动脚本

touch start-all.sh

添加如下内容:

#!/bin/bash
nohup $HIVE_HOME/bin/hive --service metastore &
nohup $HIVE_HOME/bin/hive --service hiveserver2 &

启动hive,注:一定要确保hadoop已经成功启动,才能启动hive,否则连接hive beeline会卡死但是不报错!!!

chown -R hdp:hadoop $HIVE_HOME
su hdp
source /opt/hadoop-3.3.6/conf/init-env.sh
source /opt/hive-3.1.3/conf/init-env.sh
sh start-all.sh# 查看进程,可以看到两个RunJar。
jps
153216 RunJar
152044 RunJar

配置hive停止脚本

touch stop-all.sh

添加如下内容:

jps | grep RunJar | awk '{print $1}' | xargs kill -9

判断linux端口使用已经监听:

# hive的metastore端口号9083
netstat -ntulp |grep 9083
# 出现端口信息,说明metastore已经启动成功了。
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp6       0      0 :::9083                 :::*                    LISTEN      152044/java
# 使用如上获取的ip获取具体进程启动命令:
ps -ef | grep 152044
hdp      152044  36213  0 4月09 pts/1   00:01:01 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_metastore -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-metastore-3.1.3.jar org.apache.hadoop.hive.metastore.HiveMetaStore# hive的hiveserver2端口号10000
netstat -ntulp | grep 10000
# 出现端口信息,说明hiveserver已经启动成功了。
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp6       0      0 :::10000                :::*                    LISTEN      152045/java
# 使用如上获取的ip获取具体进程启动命令:
ps -ef | grep 152045
hdp      152045  36213  0 4月09 pts/1   00:04:30 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_hiveserver2 -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Djline.terminal=jline.UnsupportedTerminal -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-service-3.1.3.jar org.apache.hive.service.server.HiveServer2

beeline链接hive

beeline
# 输入`!verbose`,设置打印日志verbose
!verbose
# 使用hive用户登录,不输入密码(空密码),直接回车。
!connect jdbc:hive2://localhost:10000 hive

七、参考文档

hadoop和hive单机部署
Hive2 新版连接工具 beeline 详解
找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
DBeaver连接Hive错误总结
User: hadoop is not allowed to impersonate anonymous
return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive设置权限
hive 入门 修改hive日志路径
Hadoop常见端口号及配置文件


http://www.ppmy.cn/news/1420946.html

相关文章

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

ClickHouse--17--聚合函数总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 环境1.创建clickhouse表2.插入数据 函数(1)count&#xff1a;计算行数(2)min&#xff1a;计算最小值(3)max&#xff1a;计算最大值(4)sum&#xff1a;计算总和&…

代码随想录刷题day56|2个字符串的删除操作编辑距离

文章目录 day55学习内容一、2个字符串的删除操作1.1、动态规划五部曲1.1.1、 确定dp数组&#xff08;dp table&#xff09;以及下标的含义1.1.2、确定递推公式1.1.3、 dp数组如何初始化1.1.4、确定遍历顺序1.1.5、输出结果 1.2、代码 二、编辑距离2.1、动态规划五部曲2.1.1、 确…

若依前端分离版中使用二维码功能

一、安装 在前端项目工程目录&#xff0c;远端执行如下命令 // npm npm install vue-qr --save // yarn yarn add vue-qr 二、引入组件 在main.js文件中增加如下的内容 // vue2.x import VueQr from vue-qr //注册组件 Vue.component(VueQr, VueQr)// vue3.x import vueQr f…

uni-app中页面生命周期与vue生命周期的执行顺序对比

应用生命周期 uni-app 支持如下应用生命周期函数&#xff1a; 函数名说明平台兼容onLaunch当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;&#xff0c;参数为应用启动参数&#xff0c;同 uni.getLaunchOptionsSync 的返回值onShow当 uni-app 启动&#x…

C++笔记:类和对象

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量&#xff0c;类型就像是定义了数据的规则&#xff0c;而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型&#xff0c;而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

数据结构DAY4--哈希表

哈希表 概念&#xff1a;相当于字典&#xff0c;可以根据数据的关键字来寻找相关数据的查找表。 步骤&#xff1a;建立->插入->遍历->查找->销毁 建立 建立数据&#xff0c;形式随意&#xff0c;但一般为结构体&#xff08;储存的数据量大&#xff09;&#xff…

如何修复 Ubuntu 上的“E Unable to locate package package_name”错误

如何修复 Ubuntu 上的“E: Unable to locate package package_name”错误 一、前言 有时&#xff0c;使用下面提到的 apt 命令在中【Ubuntu】安装新软件包时&#xff0c;使用下面的命令 sudo apt-get install package_name产生错误输出&#xff1a; Reading package lists..…