Loading... # hive安装与配置 ## 安装VMware ## 导入提供的三个hadoop系统,分别为202,203,204 ## 连接xshell 用hadoop账户连接 账号:hadoop 密码:123456 在202里,登录Hadoop账户 ## 判断Hadoop是否安装 ```shell 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`文件: ```shell cd $HADOOP_HOME/etc/hadoop ls -l core-site.xml ``` 其中的内容如下: ```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`文件的命令: ```shell cd /opt/module/hive/conf ls -l hive-site.xml sta ``` 如果没有该文件,可以自行创建,比较快捷的方法是复制同目录下`hive-default.xml.template`,然后做内容修改 ```shell cp hive-default.xml.template hive-site.xml ``` **hive-site.xml** ```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 ### 启动方式有三种 1. **直接启动Metastore服务**: ```bash hive --service metastore ``` 这个命令会在前台启动Hive Metastore服务。这意味着服务会占用终端窗口,并且如果你关闭了终端或者按下`Ctrl+C`,服务会停止运行。 2. **使用`nohup`在后台启动Metastore服务**: ```bash nohup hive --service metastore & ``` 在这个命令中,`nohup`用于在后台运行Hive Metastore服务,即使你退出了终端会话,服务也会继续运行。`&`将命令放到后台执行。不过,这个命令不会重定向错误日志,所以标准错误输出仍会显示在终端上,或者写入到`nohup.out`文件中。 3. **使用`nohup`在后台启动Metastore服务,并重定向错误日志**: ```bash 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。运行以下命令: ```bash ps -ef | grep 'hive.*metastore' ``` 这将列出所有与Hive Metastore相关的进程。输出会包含进程的详细信息,PID是每行输出的第二列。 2. **确定正确的PID**: 在输出中找到对应于Hive Metastore服务的进程。确保这个PID对应的是你想要停止的服务实例。 #### 停止服务 1. **使用`kill`命令**: 一旦你知道了PID,就可以使用`kill`命令来停止进程。替换`<PID>`为你从上一步得到的进程ID: ```bash kill <PID> ```  如果进程没有响应,你可以使用更强制的方式来停止它: ```bash 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. 这一步,应该有如下内容: ```shell [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: ```shell hdfs --daemon start namenode ## 如果报错,检查其日志文件,详情查看下面resourcemanager日志文件 ``` * 启动DataNode(如果需要): ```shell hdfs --daemon start datanode ``` 查看日志 ```shell cd $HADOOP_HOME/logs tail -n 100 hadoop-hadoop-datanode-hadoop202.log ``` * 启动ResourceManager: ```shell yarn --daemon start resourcemanager ``` ```shell cd $HADOOP_HOME/logs tail -n 100 hadoop-hadoop-namenode-hadoop202.log ``` * 启动NodeManager(如果需要): ```shell yarn --daemon start nodemanager ``` 如果在启动过程中,产生了问题,可以查看日志,来确定问题在哪里 3. **启动Hive**:通过命令行界面使用Hive,那么只需在命令行中输入`hive`即可启动Hive的命令行界面。 [hadoop@hadoop202 hive]$ hive  ### 启动HiveServer2 **退出hive交互模式** ```shell exit; ``` **启动hiveserver2** ```shell nohup hive --service hiveserver2 2>/tmp/hive_server2_error.log & ``` **使用jps -m 查看是否启动正常**  分别存在 HiveServer2和HiveMetaStore是否存在 ### beeline连接hive \# 通过beeline访问hadoop202上的hiveserver2服务,用户为操作hdfs系统用户 ```shell beeline -u jdbc:hive2://hadoop21:10000 -n root ```  如果报错: ```shell [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服务未运行**: ```shell [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日志,但您可以寻找包含`hive`和`server`的日志文件),以查找可能导致连接失败的更具体的错误信息。 ### 查看数据库 启动hive后 ```shell 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 日 © 允许规范转载 打赏 赞赏作者 赞 1 咱们谁跟谁,用不着~