https://www.cnblogs.com/liugp/p/16244600.html 备注。因为beeline一直报错,最有一怒之下把hive的lib下所有jar都拷贝到hadoop的share\hadoop\common\lib
各软件的相关命令最好到各自安装目录或者bin目录下执行,防止初始化目录的时候位置不对
百度安全验证
环境:jdk8 、win10 、hadoop-3.3.4
jdk8的安装这里不说了。
网站上下载hadoop并解压
我是在官网下的:https://hadoop.apache.org/release/3.3.4.html
Index of /apache/hadoop/common
1、打开D:\hadoop-2.8.5\etc\hadoop\core-site.xml将以下部分复制到configuration中:
fs.defaultFS hdfs://localhost:9000
2、打开D:\hadoop-2.8.5\etc\hadoop\mapred-site.xml将以下部分复制到configuration中:
mapreduce.framework.name yarn
3、打开D:\hadoop-2.8.5\etc\hadoop\yarn-site.xml将以下部分复制到configuration中:
yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hahoop.mapred.ShuffleHandler
4、打开D:\hadoop-2.8.5\etc\hadoop\hdfs-site.xml 将以下部分复制到configuration中:
这里的 value 文件路径建议规划好,用以下配置会在安装的盘符根目录建立想目录。我本地如下:
我的hadoop安装路径:D:\hadoop-3.3.4
dfs.replication 1 dfs.namenode.name.dir file:/hadoop/data/dfs/namenode dfs.datanode.data.dir file:/hadoop/data/dfs/datanode
实际上异常应该在执行相关命令后出现,这里就先列出来
1、JAVA_HOME配置问题
Error: JAVA_HOME is incorrectly set.
JAVA_HOME路径不对或者含有空格、空格的处理方式:
修改D:\hadoop-3.3.4\etc\hadoop\hadoop-env.cmd 如下:
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_172
2、缺少 winutils.exe 和 hadoop.dll文件
java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate Hadoop executable: D:\hadoop-3.3.4\bin\winutils.exe -see https://wiki.apache.org/hadoop/WindowsProblems
理论上 winutils和hadoop版本要一致,这里winutils只能下到3.2的版本
解决:https://gitee.com/shockingblue/winutils 3.2 中的hadoop.dll 和 winutils.exe copy到 HADOOP_HOME\bin
格式化HDFS
D:\hadoop-3.3.4\bin>hadoop namenode -format
开启四个进程
D:\hadoop-3.3.4\sbin>start-all.cmd
在浏览器中输入:http://localhost:8088/cluster 可以看到YARN界面
访问hadoop文件管理页面 http://localhost:9870/dfshealth.html#tab-overview
先在Hadoop上创建HDFS目录'可以自己定义'例如
命令如下(记得先启动Hadoop): 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
hdfs dfs -chmod -R 777 /
hdfs dfs -put E:\1.txt /user/hive/warehouse/1.txt
hdfs dfs -cat /user/hive/warehouse/1.txt
本地先新增一个文件内容为 “select 1 from” 之前有测试中文乱码,仅仅为了测试命令改为英文
Index of /dist/hive
MySQL :: Begin Your Download
我用的是最新的hive-3.1.3 下载bin不是src
在windows 环境少 Hive的执行文件、运行程序
用apache-hive-1.0.0-src\bin (下载src不是bin) 替换安装的bin
安装配置参考:
【傻瓜式教程】Windows下安装Hive MySQL版【附安装Hadoop教程】全网最详细的图文教程_windows安装hive_报告,今天也有好好学习的博客-CSDN博客
Hive Window安装 (Hadoop)_51CTO博客_安装hadoop
变量名:HIVE_HOME
变量值:E:\apache-hive-2.1.1-bin
Path 新增 变量值: %HIVE_HOME%\bin
命令如下(记得先启动Hadoop): 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
创建以下几个空目录:
E:\apache-hive-2.1.1-bin\my_hive
E:\apache-hive-2.1.1-bin\my_hive\operation_logs_dir
E:\apache-hive-2.1.1-bin\my_hive\querylog_dir
E:\apache-hive-2.1.1-bin\my_hive\resources_dir
E:\apache-hive-2.1.1-bin\my_hive\scratch_dir
create database if not exists hive default character set latin1;
或者用Navicat工具也行
如图,找到E:\apache-hive-2.1.1-bin\conf目录下的4个文件
按照如下方式进行重命名更改:
hive-default.xml.template -> hive-site.xml hive-env.sh.template -> hive-env.sh hive-exec-log4j2.properties.template -> hive-exec-log4j2.properties hive-log4j2.properties.template -> hive-log4j2.properties
1、修改 hive-env.sh
HADOOP_HOME 网上有两种 带export和不带
这里都写上吧,后面有去掉第一个了
# Set HADOOP_HOME to point to a specific hadoop install directory # HADOOP_HOME=${bin}/../../hadoop # HADOOP_HOME=D:\hadoop-3.3.4 export HADOOP_HOME=D:\hadoop-3.3.4 # Hive Configuration Directory can be controlled by: # export HIVE_CONF_DIR= export HIVE_CONF_DIR=D:\apache-hive-3.1.3-bin\conf # Folder containing extra libraries required for hive compilation/execution can be controlled by: # export HIVE_AUX_JARS_PATH= export HIVE_AUX_JARS_PATH=D:\apache-hive-3.1.3-bin\lib
2、修改hive-site.xml
hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse hive.exec.scratchdir /tmp/hive HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}. hive.exec.local.scratchdir D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/scratch_dir Local scratch space for Hive jobs hive.downloaded.resources.dir D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/resources_dir/${hive.session.id}_resources Temporary local directory for added resources in the remote file system. hive.querylog.location D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/querylog_dir Location of Hive run time structured log file hive.server2.logging.operation.log.location D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/operation_logs_dir Top level directory where operation logs are stored if logging functionality is enabled javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true JDBC connect string for a JDBC metastore. To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL. For example, jdbc:postgresql://myhost/db?ssl=true for postgres database. javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName root Username to use against metastore database javax.jdo.option.ConnectionPassword root password to use against metastore database hive.metastore.schema.verification false Enforce metastore schema version consistency. True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures proper metastore schema migration. (Default) False: Warn if the version information stored in metastore doesn't match with one from in Hive jars. datanucleus.schema.autoCreateAll true Auto creates necessary schema on a startup if one doesn't exist. Set this to false, after creating it once.To enable auto create also set hive.metastore.schema.verification=false. Auto creation is not recommended for production use cases, run schematool command instead.
1、hive-site.xml文件有特殊字符
hive --service metastore 命令遇到一个错误网上没有 提示是hive-site.xml文件有特殊字符,大概是3千多行
在一个描述类description标签, 直接上了
2、hive --service metastore提示数据库类的异常
猜想是网上说的初始化mysql库表导致,最终手动执行以下文件(copy sql到navicat执行, 用整个文件也异常。。。)
D:\apache-hive-3.1.3-bin\scripts\metastore\upgrade\mysql\hive-schema-3.1.0.mysql.sql
3、hive --service metastore 报一个hadoop_home路径异常
这个应该是安装hadoop配置环境变量的时候HADOOP_HOME的时候多加了\bin --个人原因
切换到E:\Hadoop\hadoop-2.7.7\sbin命令下,输入命令start-dfs.cmd
以管理员身份打开CMD,输入命令hive --service metastore
补充:只有第一次打开需要输入hive --service metastore。
这里经历了很多异常,最终还是手动执行脚本的
D:\apache-hive-3.1.3-bin\scripts\metastore\upgrade\mysql\hive-schema-3.1.0.mysql.sql
打开CMD,输入命令hive.cmd 或者 hive
个时候就可以输入HQL语句啦。
我们输入一个
create table stu(id int, name string);
然后再浏览器地址栏输入:
http://localhost:9870/explorer.html#/user/hive/warehouse
1、添加beeline配置
【温馨提示】hive命令会慢慢不再使用了,以后就用beeline,如果对hive不了解的,可以看我之前的文章:大数据Hadoop之——数据仓库Hive
在Hive服务安装目录的%HIVE_HOME%\conf\hive-site.xml配置文件中添加以下配置:
hive.server2.thrift.bind.host localhost Bind host on which to run the HiveServer2 Thrift service. hive.server2.thrift.port 10001
在Hadoop服务安装目录的%HADOOP_HOME%\etc\hadoop\core-site.xml配置文件中添加以下配置:
hadoop.proxyuser.29209.hosts * hadoop.proxyuser.29209.groups *
【注意】hadoop.proxyuser.29209.hosts和hadoop.proxyuser.29209.hosts,其中29209是连接beeline的用户,将29209替换成自己的用户名即可,其实这里的用户就是我本机的用户,也是上面创建文件夹的用户,这个用户是什么不重要,它就是个超级代理。我的是Administrator
2、启动hiveserver2
启动hiveserver2 之前必须重启hive服务
$ hive --service metastore $ hive --service hiveserver2
【问题】java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning
【解决】在hive 配置文件hive-site.xml添加如下配置:
重启hiveserver2
$ hive --service metastore $ hive --service hiveserver2
HiveServer2 web:http://localhost:10002/
3、beeline客户端登录
$ beeline
【问题一】Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/jdbc/JdbcUriParseException
【解决】Hadoop缺少hive-jdbc-***.jar,将Hive安装目录下的lib文件夹中的hive-jdbc-3.1.2.jar包复制到Hadoop安装目录\share\hadoop\common\lib下
因为发生了很多NoClassDefFoundError 所以我是把Hive的所有jar都复制过去了
【问题二】Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf
【解决】Hive安装目录下,将hive-common-3.1.2.jar复制到Hadoop安装目录的\share\hadoop\common\lib下
$ beeline !connect jdbc:hive2://localhost:10001 29209 # 下面这句跟上面等价,都可以登录 $ %HIVE_HOME%\bin\beeline.cmd -u jdbc:hive2://localhost:10001 -n 29209
【问题三】Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/service/cli/HiveSQLException。
【解决】把Hive安装目录下,将hive-service-3.1.2.jar复制到Hadoop安装目录的\share\hadoop\common\lib下。
再重启登录
$ hive --service metastore $ hive --service hiveserver2 $ %HIVE_HOME%\bin\beeline.cmd -u jdbc:hive2://localhost:10001 -n 29209
正常登录,一切OK,更多关于大数据的知识,请耐心等待~
本地:beeline -u jdbc:hive2://localhost:10001