Hadoop学习——hive的安装与体验(全网综合)

前言:关于hive的安装教程网上一大堆,但真正可用的凤毛麟角,当然不可否认这可能跟作者所处的不同的安装阶段有所关系,可能某一个点他已经处理过,只是没有记录下而已,而你刚好踩坑。但是也有个别作者一通乱抄,为了写博客而写博客,那就真的*了狗了。

本场景:Windows本地安装hive

开始

1.1  下载地址

  • apache官网 (高版本安装包不包含可执行文件,无法在Windows下运行,这一点将在【必要检查】部分进行处理)
  • 百度网盘(本教程所使用,安装包已完整。提取码:tzph )

1.2  下载说明

1.3  安装说明

  • 免安装,解压即可(尽量避免路径中文、空格、特殊字符等情况) 
  • 由于包名太长建议重命名文件夹名,如:apache-hive-3.0.0

必要检查

  • 检查bin目录下是否有可执行文件(.cmd)存在,否则会导致hive无法启动,提示找不到相关命令。正常情况下应当包含如下内容:

错误示例:

  • 通常官网高版本hive都不包含可执行文件,需下载低版本(教程使用1.0.0)的src.tar.gz,解压后将bin文件夹替换高版本(3.0.0)的bin文件夹

配置环境变量

  • HIVE_HOME(必要):D:\Soft\ApacheHive\apache-hive-3.0.0
  • HIVE_CONF_DIR:D:\Soft\ApacheHive\apache-hive-3.0.0\conf
  • 添加到Path变量:%HIVE_HOME%\bin、%HIVE_CONF_DIR%

一些准备工作

  • 安装目录下新建文件夹备用:tmp
  • 从本地maven仓库(或者官网下载)复制mysql的驱动程序到安装目录/lib下面:mysql-connector-java-5.1.39.jar
  • 废弃与hadoop冲突的log4j jar包:将log4j-slf4j-impl-2.10.0.jar重命名为log4j-slf4j-impl-2.10.0.jar.template
  • Mysql新建一个数据库,自定义名称,我的:sys_hive (注意,编码格选择:latin1 -- cp1252 West European,排序规则选择:latin1_german1_ci)
  • 在hadoop上创建hdfs目录
hadoop fs  -mkdir       /tmp
hadoop fs  -mkdir       /user/
hadoop fs  -mkdir       /user/hive/
hadoop fs  -mkdir       /user/hive/warehouse 
hadoop fs  -chmod g+w   /tmp
hadoop fs  -chmod g+w   /user/hive/warehouse

http://localhost:9870/explorer.html#/ 

修改Hive配置文件

  • /conf目录下,把所有.template后缀结尾的文件去掉.template,并且把hive-default.xml 更名为——>hive-site.xml

  • 配置hive-site.xml(修改)
<!-- 1. 新增部分:定义变量并赋值(否则启动报错找不到变量,不明白为什么明明下文中有使用但却不定义!) -->
  <property>
    <name>system:user.name</name>
    <value>Zxl</value>
  </property>
  <property>
      <name>system:java.io.tmpdir</name>
      <value>D:/Soft/ApacheHive/apache-hive-3.0.0/tmp</value>
  </property>
  
<!-- 2. 修改部分 -->  

  <!-- Hive临时文件,用于存储每个查询的临时/中间数据集,通常在完成查询后由配置单元客户端清除 -->
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
  </property>
 
  <!-- hive添加资源时的临时目录 -->
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>
  </property>
 
  <!-- Hive运行时结构化日志文件的位置 -->
  <property>
    <name>hive.querylog.location</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
  </property>
 
 
  <!-- 用于验证metastore和hivejar包是否一致问题,默认为true。false:hive升级版本不一致只会警告 -->
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
 
  <!-- 使用MySQL作为hive的元数据Metastore数据库 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
  </property>
 
  <!-- MySQL JDBC驱动程序类 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.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>123456</value>
  </property>
 
  <!-- hive开启的thriftServer地址 -->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>localhost</value>
  </property>
 
  <!-- Thrift Metastore服务器的主机和端口 默认 <value/> -->
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://localhost:9083</value>
  </property>
 
  <!-- 如果启用了日志功能,则存储操作日志的顶级目录 -->
  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>
  </property>
  • 配置hive-env.sh(修改)
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=D:\Soft\Hadoop\hadoop-3.0.0
 
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=D:\Soft\apache-hive-3.0.0\conf
 
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=D:\Soft\apache-hive-3.0.0\lib

初始化MySQL

  1. 首先启动Hadoop,执行指令:stall-all.cmd
  2. 初始化MySQL数据库:hive --service schematool -initSchema -dbType mysql
  3. 初始化 hive 元数据到MySQL数据库:hive --service metastore

目前为止,数据库应当如下:

测试

  • 检测hive安装成功与否
#1. 启动metastore服务端
hive --service metastore

#2. hive进入测试(注意先进行上一步,否则报错!以下两个命令结果一致,并非打印版本号,而是直接进入hive,类似于进入mysql。)
hive version
hive
  • 进入hive并创建一个测试库和测试表(参考:这篇文章的测试部分)

异常自检

—————— 关于安装后启动报错》》》

	*** "Hive throws: WstxParsingException: Illegal character entity: expansion character (code 0x8)"
		*** (原因):含特殊字符 for&#8;
		*** (解决):for&#8;——> for;,参考:https://blog.csdn.net/zhangvalue/article/details/84313119
	
	*** ".NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>"	
		*** (原因):disruptor-x.x.x.jar版本不匹配
		*** (解决):
			*** hive-site.xml文件中搜索关键字“disruptor”或“hive.async.log.enabled”,把true改为false(理由:看报错消息应该与disruptor和log同步异步有关)
			*** https://blog.csdn.net/zhouzhiwengang/article/details/88189525(尝试无果)

	*** "Error applying authorization policy on hive configuration: Couldn't create directory ${system:java.io.tmpdir}\${hive.session.id}_resources"	
		*** (原因):https://blog.csdn.net/leimengyuanlian/article/details/48140937 ————> 所以hive-site.xml建议参照:https://blog.csdn.net/qq262593421/article/details/104961689
		*** (解决):https://stackoverflow.com/questions/42690210/error-applying-authorization-policy-on-hive-configuration-couldnt-create-direc	
		
—————— 初始化 hive 元数据到MySQL数据库报错》》》

	*** "Caused by: org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : "`DBS`" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable "datanucleus.schema.autoCreateTables""	
		*** (原因):
		*** (解决):将hive-site.xml文件中datanucleus.schema.autoCreateAll属性改为true。
		
	*** "javax.jdo.JDODataStoreException: Error executing SQL query "select "DB_ID" from "DBS""."
		*** (原因):缺少一步初始化
		*** (解决):
			*** 先初始化MySQL:hive --service schematool -initSchema -dbType mysql ————> 再执行hive --service metastore初始化 hive 元数据到MySQL
			*** (此方法应该针对Linux,至少在Windows下并没有卵用)https://blog.csdn.net/quiet_girl/article/details/75209070(附:schematool: 未找到命令的解决办法:https://blog.csdn.net/weixin_40521823/article/details/86657095)

值得参考的几篇文章

猜你喜欢

转载自blog.csdn.net/qq_28202661/article/details/108796914