hive安装与配置
安装VMware
导入提供的三个hadoop系统,分别为202,203,204
连接xshell
用hadoop账户连接
账号:hadoop
密码:123456
在202里,登录Hadoop账户
判断Hadoop是否安装
echo $HADOOP_HOME
echo $PATH
检查是否安装,并配置Hadoop,如果没有,则去重新安装hadoop
hadoop与hive整合-配置core-site.xml
Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据
需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行。
修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效。
尝试改变目录到$HADOOP_HOME/etc/hadoop
,然后查找core-site.xml
文件:
cd $HADOOP_HOME/etc/hadoop
ls -l core-site.xml
其中的内容如下:
<!-- 以下是代理的使用,主要在hive时使用 -->
<!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
如果有不一致,则vim编辑之。
远程模式部署-hive-site
查看Hive的配置目录,通常这个配置目录位于Hive安装目录下的conf
文件夹。以下是查找hive-site.xml
文件的命令:
cd /opt/module/hive/conf
ls -l hive-site.xml
sta
如果没有该文件,可以自行创建,比较快捷的方法是复制同目录下hive-default.xml.template
,然后做内容修改
cp hive-default.xml.template hive-site.xml
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://hadoop202:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</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>123456789</value>
</property>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</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>
<!-- 指定远程模式 存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop202:9083</value>
</property>
</configuration>
注意:最后指定了远程模式,部分同学可能在这里把远程模式跟本地模式搞混。
启动metastore
启动方式有三种
直接启动Metastore服务:
hive --service metastore
这个命令会在前台启动Hive Metastore服务。这意味着服务会占用终端窗口,并且如果你关闭了终端或者按下
Ctrl+C
,服务会停止运行。使用
nohup
在后台启动Metastore服务:nohup hive --service metastore &
在这个命令中,
nohup
用于在后台运行Hive Metastore服务,即使你退出了终端会话,服务也会继续运行。&
将命令放到后台执行。不过,这个命令不会重定向错误日志,所以标准错误输出仍会显示在终端上,或者写入到nohup.out
文件中。使用
nohup
在后台启动Metastore服务,并重定向错误日志:nohup hive --service metastore 2>/tmp/hive_metastore_error.log &
这个命令也是在后台运行Hive Metastore服务,并且使用
2>
将错误日志重定向到/tmp/hive_metastore_error.log
文件中。这样,任何错误信息都会被写入指定的日志文件,帮助你更好地管理和查看服务可能产生的错误信息。关闭服务
当使用nohup
在后台运行Hive Metastore服务时,由于进程在后台执行,不能直接使用Ctrl+C
来停止它。需要找到运行该服务的进程ID(PID),然后使用kill
命令来停止它。以下是步骤:
查找Hive Metastore服务的进程ID
使用
ps
命令查找进程: 你可以使用ps
命令结合grep
来查找Hive Metastore服务的PID。运行以下命令:ps -ef | grep 'hive.*metastore'
这将列出所有与Hive Metastore相关的进程。输出会包含进程的详细信息,PID是每行输出的第二列。
- 确定正确的PID: 在输出中找到对应于Hive Metastore服务的进程。确保这个PID对应的是你想要停止的服务实例。
停止服务
使用
kill
命令: 一旦你知道了PID,就可以使用kill
命令来停止进程。替换<PID>
为你从上一步得到的进程ID:kill <PID>
如果进程没有响应,你可以使用更强制的方式来停止它:
kill -9 <PID>
使用
kill -9
会立即停止进程,但应谨慎使用,因为它不给进程清理自身的机会。
注意事项
- 在使用
kill
命令之前,确保你选择的PID是正确的。杀错进程可能会影响到系统的其他部分。 - 如果你在启动服务时重定向了输出到日志文件,检查这些日志文件可能会对确认服务是否已经停止提供帮助。
- 有些情况下,Hive Metastore服务可能会由于各种原因(如配置问题、资源限制等)自动重启。如果你发现服务似乎无法停止,检查服务的配置以及任何相关的管理脚本或系统服务配置。
启动hive
启动Hadoop环境:Hive是建立在Hadoop之上的,所以在启动Hive之前,需要先确保Hadoop环境是运行的。可以通过以下命令启动Hadoop:
- 启动HDFS(Hadoop分布式文件系统):
start-dfs.sh
- 启动YARN(用于集群资源管理和作业调度):
start-yarn.sh
- 启动HDFS(Hadoop分布式文件系统):
检查Hadoop环境是否正常:通过
jps
命令可以检查Hadoop的各个组件是否已经启动,正常情况下,应该能看到NameNode、DataNode、ResourceManager等进程。- 这一步,应该有如下内容:
[hadoop@hadoop202 hadoop]$ jps -m 9569 RunJar 12164 NodeManager 12373 DataNode 12425 Jps 11163 NameNode
- NameNode:这是HDFS的主节点,负责文件系统的命名空间管理和客户端访问请求。
- DataNode:HDFS的工作节点,负责存储实际数据。从你的输出中我们可以看到这个进程已经启动。
- ResourceManager:YARN的全局资源管理器,负责整个系统的资源管理和分配。
- NodeManager:YARN的工作节点,负责容器的管理和监控。从你的输出中我们也可以看到这个进程已经启动。
- SecondaryNameNode:并不是HDFS的备份节点,而是帮助NameNode合并编辑日志和文件系统的图像,以避免NameNode重启时需要过长时间。
如果缺失了某一个,可以以以下命令手动启动:
启动NameNode:
hdfs --daemon start namenode ## 如果报错,检查其日志文件,详情查看下面resourcemanager日志文件
启动DataNode(如果需要):
hdfs --daemon start datanode
查看日志
cd $HADOOP_HOME/logs tail -n 100 hadoop-hadoop-datanode-hadoop202.log
启动ResourceManager:
yarn --daemon start resourcemanager
cd $HADOOP_HOME/logs tail -n 100 hadoop-hadoop-namenode-hadoop202.log
启动NodeManager(如果需要):
yarn --daemon start nodemanager
如果在启动过程中,产生了问题,可以查看日志,来确定问题在哪里
- 启动Hive:通过命令行界面使用Hive,那么只需在命令行中输入
hive
即可启动Hive的命令行界面。
[hadoop@hadoop202 hive]$ hive
启动HiveServer2
退出hive交互模式
exit;
启动hiveserver2
nohup hive --service hiveserver2 2>/tmp/hive_server2_error.log &
使用jps -m 查看是否启动正常
分别存在 HiveServer2和HiveMetaStore是否存在
beeline连接hive
\# 通过beeline访问hadoop202上的hiveserver2服务,用户为操作hdfs系统用户
beeline -u jdbc:hive2://hadoop21:10000 -n root
如果报错:
[hadoop@hadoop202 lib]$ beeline -u jdbc:hive2://hadoop202:10000 -n hadoop
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/xxx.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://hadoop202:10000
24/04/07 14:06:33 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop202:10000
Could not open connection to the HS2 server. Please check the server URI and if the URI is correct, then ask the administrator to check the server status.
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop202:10000: java.net.ConnectException: *拒绝连接* (Connection refused) (state=08S01,code=0)
Beeline version 3.1.2 by Apache Hive
使用Beeline连接到Hive服务器时遇到了“拒绝连接”的错误。这个问题通常发生于以下几种情况中的一种:
HiveServer2服务未运行:
[hadoop@hadoop202 lib]$ jps -m 9569 RunJar /opt/module/hive/lib/hive-metastore-3.1.2.jar org.apache.hadoop.hive.metastore.HiveMetaStore 13137 RunJar /opt/module/hive/lib/hive-service-3.1.2.jar org.apache.hive.service.server.HiveServer2 13251 Jps -m 11163 NameNode
如上,可以看到metastore和hiveserver2都在运行,如果这两个没有运行,按照上一步的步骤继续操作,检查是少了哪一项。
- 网络问题:可能是因为网络设置问题(如防火墙设置)导致无法建立连接。确保服务器
hadoop202
的10000端口没有被防火墙或者网络安全组规则阻止。 - HiveServer2配置问题:HiveServer2的配置问题也可能导致连接失败。这可能是因为HiveServer2没有正确监听在预期的接口或端口上,或者有与网络相关的其他配置问题。检查Hive的配置文件(如
hive-site.xml
),确保配置了正确的监听地址和端口。 - 日志文件中的错误信息:您已经切换到了Hadoop的日志目录。建议检查HiveServer2相关的日志文件(如
hadoop-hive-server-hadoop202.log
或其他类似的Hive日志文件,这里未列出具体的HiveServer2日志,但您可以寻找包含hive
和server
的日志文件),以查找可能导致连接失败的更具体的错误信息。
查看数据库
启动hive后
show databases;
create database test;
nohup hive --service metastore 2>/tmp/hive_metastore_error.log &
start-dfs.sh
start-yarn.sh
[hadoop@hadoop202 hadoop]$ jps -m ##如果能看到以下内容
9569 RunJar service2
9279 RunJar metastore
12164 NodeManager
12373 DataNode
12425 Jps
11163 NameNode
就可以去idea连接hive了