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&amp;useSSL=false&amp;useUnicode=true&amp;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

启动方式有三种

  1. 直接启动Metastore服务:

    hive --service metastore

    这个命令会在前台启动Hive Metastore服务。这意味着服务会占用终端窗口,并且如果你关闭了终端或者按下Ctrl+C,服务会停止运行。

  2. 使用nohup在后台启动Metastore服务:

    nohup hive --service metastore &

    在这个命令中,nohup用于在后台运行Hive Metastore服务,即使你退出了终端会话,服务也会继续运行。&将命令放到后台执行。不过,这个命令不会重定向错误日志,所以标准错误输出仍会显示在终端上,或者写入到nohup.out文件中。

  3. 使用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

  1. 使用ps命令查找进程: 你可以使用ps命令结合grep来查找Hive Metastore服务的PID。运行以下命令:

    ps -ef | grep 'hive.*metastore'

    这将列出所有与Hive Metastore相关的进程。输出会包含进程的详细信息,PID是每行输出的第二列。

  2. 确定正确的PID: 在输出中找到对应于Hive Metastore服务的进程。确保这个PID对应的是你想要停止的服务实例。

停止服务

  1. 使用kill命令: 一旦你知道了PID,就可以使用kill命令来停止进程。替换<PID>为你从上一步得到的进程ID:

    kill <PID>

    image-20240401180647231

    如果进程没有响应,你可以使用更强制的方式来停止它:

    kill -9 <PID>

    使用kill -9会立即停止进程,但应谨慎使用,因为它不给进程清理自身的机会。

注意事项

  • 在使用kill命令之前,确保你选择的PID是正确的。杀错进程可能会影响到系统的其他部分。
  • 如果你在启动服务时重定向了输出到日志文件,检查这些日志文件可能会对确认服务是否已经停止提供帮助。
  • 有些情况下,Hive Metastore服务可能会由于各种原因(如配置问题、资源限制等)自动重启。如果你发现服务似乎无法停止,检查服务的配置以及任何相关的管理脚本或系统服务配置。

启动hive

  1. 启动Hadoop环境:Hive是建立在Hadoop之上的,所以在启动Hive之前,需要先确保Hadoop环境是运行的。可以通过以下命令启动Hadoop:

    • 启动HDFS(Hadoop分布式文件系统): start-dfs.sh
    • 启动YARN(用于集群资源管理和作业调度): start-yarn.sh
  2. 检查Hadoop环境是否正常:通过jps命令可以检查Hadoop的各个组件是否已经启动,正常情况下,应该能看到NameNode、DataNode、ResourceManager等进程。

    1. 这一步,应该有如下内容:
    [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

      如果在启动过程中,产生了问题,可以查看日志,来确定问题在哪里

  3. 启动Hive:通过命令行界面使用Hive,那么只需在命令行中输入hive即可启动Hive的命令行界面。

[hadoop@hadoop202 hive]$ hive

标题: fig: - 说明 image-20240216203143975

启动HiveServer2

退出hive交互模式

exit;

启动hiveserver2

nohup hive --service hiveserver2 2>/tmp/hive_server2_error.log   &

使用jps -m 查看是否启动正常

3de32194b6c9c7e41ba0ad3d7741c7d

分别存在 HiveServer2和HiveMetaStore是否存在

beeline连接hive

\# 通过beeline访问hadoop202上的hiveserver2服务,用户为操作hdfs系统用户

beeline -u jdbc:hive2://hadoop21:10000 -n root

img

如果报错:

[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服务器时遇到了“拒绝连接”的错误。这个问题通常发生于以下几种情况中的一种:

  1. 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都在运行,如果这两个没有运行,按照上一步的步骤继续操作,检查是少了哪一项。

  2. 网络问题:可能是因为网络设置问题(如防火墙设置)导致无法建立连接。确保服务器hadoop202的10000端口没有被防火墙或者网络安全组规则阻止。
  3. HiveServer2配置问题:HiveServer2的配置问题也可能导致连接失败。这可能是因为HiveServer2没有正确监听在预期的接口或端口上,或者有与网络相关的其他配置问题。检查Hive的配置文件(如hive-site.xml),确保配置了正确的监听地址和端口。
  4. 日志文件中的错误信息:您已经切换到了Hadoop的日志目录。建议检查HiveServer2相关的日志文件(如hadoop-hive-server-hadoop202.log或其他类似的Hive日志文件,这里未列出具体的HiveServer2日志,但您可以寻找包含hiveserver的日志文件),以查找可能导致连接失败的更具体的错误信息。

查看数据库

启动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了
最后修改:2024 年 05 月 04 日
咱们谁跟谁,用不着~