这篇文章上次修改于 867 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

主要记录下折腾环境的一些问题吧,现在中文搜索的结果实在无力吐槽,只会复制粘贴。

注意下载的 Hadoop 和 Hive 的版本要对应,否则无法启动,具体版本支持可以在 Hive 下载 的界面看到。

连接 MySQL 的驱动建议直接前往官网下载对应数据库版本的驱动,不需要从别处下载。

  • start-dfs.sh 提示 Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

解决:添加环境变量

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"
  • NameNode 启动失败

此问题较为复杂,一般建议检查 $HADOOP_HOME/logs 目录下对应的日志,哪个服务没起来就看哪个,尤其注意端口冲突问题,无法解决可以尝试删除 hadoop tmp 目录下的内容然后重新格式化 namenode。

  • Hive 启动提示 `Exception in thread "main" java.lang.NoSuchMethodError:
    com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)`

解决:删除 $HIVE_HOME/lib 下自带的 guava-xxxx.jar,然后把 $HADOOP_HOME/share/hadoop/hdfs/lib/guava-xxx-jre.jar 复制过来。

  • Hive 连接 MySQL8.0 时驱动名称要改为 com.mysql.cj.jdbc.Driver
  • MySQL8.0 建立用户

    create user 'hive' @'%' identified by 'App@123456';
    grant all on . to 'hive'@'%';
    flush privileges;

  • 如果 Hadoop 执行 hdfs namenode -format 重新格式化后建议进入数据库删除 Hive 对应的数据库,然后重新执行
    schematool -dbType mysql -initSchema 防止未知错误。
  • Hive 启动提示 `Hive-on-MR is deprecated in Hive 2 and may not be available
    in the future versions. Consider using a different execution engine
    (i.e. spark, tez) or using Hive 1.X releases.`

解决:编辑 $HIVE_HOME/config/hive-site.xml 查找 hive.execution.engine 项,修改默认的存储 mr 为其他值。