21.Windows下安装Hadoop; Hive MySQL版_hadoop hive windows安装_学无止境的大象的博客-CSDN博客
https://www.cnblogs.com/liugp/p/16244600.html 备注。因为beeline一直报错,最有一怒之下把hive的lib下所有jar都拷贝到hadoop的share\hadoop\common\lib
各软件的相关命令最好到各自安装目录或者bin目录下执行,防止初始化目录的时候位置不对
一、Windows10 hadoop
百度安全验证
环境:jdk8 、win10 、hadoop-3.3.4
1、下载解压
jdk8的安装这里不说了。
网站上下载hadoop并解压
我是在官网下的:https://hadoop.apache.org/release/3.3.4.html
Index of /apache/hadoop/common
2、修改配置文件
1、打开D:\hadoop-2.8.5\etc\hadoop\core-site.xml将以下部分复制到configuration中:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
2、打开D:\hadoop-2.8.5\etc\hadoop\mapred-site.xml将以下部分复制到configuration中:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
3、打开D:\hadoop-2.8.5\etc\hadoop\yarn-site.xml将以下部分复制到configuration中:
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hahoop.mapred.ShuffleHandler</value> </property> </configuration>
4、打开D:\hadoop-2.8.5\etc\hadoop\hdfs-site.xml 将以下部分复制到configuration中:
这里的 value 文件路径建议规划好,用以下配置会在安装的盘符根目录建立想目录。我本地如下:
我的hadoop安装路径:D:\hadoop-3.3.4
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/hadoop/data/dfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/hadoop/data/dfs/datanode</value> </property> </configuration>
3、异常处理
实际上异常应该在执行相关命令后出现,这里就先列出来
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
4、启动命令
格式化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
5、常用命令
先在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 /
1、上传
hdfs dfs -put E:\1.txt /user/hive/warehouse/1.txt
hdfs dfs -cat /user/hive/warehouse/1.txt
本地先新增一个文件内容为 “select 1 from” 之前有测试中文乱码,仅仅为了测试命令改为英文
二、安装Hive MySQL版本
1、下载解压
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
1、环境变量配置
变量名:HIVE_HOME
变量值:E:\apache-hive-2.1.1-bin
Path 新增 变量值: %HIVE_HOME%\bin
2、在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
3、创建my_hive目录
创建以下几个空目录:
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
4、mysql上创建hive库
create database if not exists hive default character set latin1;
或者用Navicat工具也行
2、修改配置
如图,找到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
<!-- 指定的位置在hdfs上的目录--> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property> <!-- 指定的位置在hdfs上的目录--> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> <description>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}.</description> </property> <!-- 本地scratch_dir目录 --> <property> <name>hive.exec.local.scratchdir</name> <value>D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/scratch_dir</value> <description>Local scratch space for Hive jobs</description> </property><!-- 本地resources_dir目录 --> <property> <name>hive.downloaded.resources.dir</name> <value>D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/resources_dir/${hive.session.id}_resources</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <!-- 本地querylog_dir目录 --> <property> <name>hive.querylog.location</name> <value>D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/querylog_dir</value> <description>Location of Hive run time structured log file</description> </property> <!-- 本地operation_logs_dir目录 --> <property> <name>hive.server2.logging.operation.log.location</name> <value>D:/temp/hadoop/apache-hive-2.1.1-bin/my_hive/operation_logs_dir</value> <description>Top level directory where operation logs are stored if logging functionality is enabled</description> </property> <!-- 数据库URL --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true</value> <description> 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. </description> </property> <!-- 数据库Driver --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <!-- 数据库用户 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property> <!-- Password数据库密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property> <!-- 解决 Caused by: MetaException(message:Version information not found in metastore. ) --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> <description> 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. </description> </property> <!-- hive Required table missing : "DBS" in Catalog""Schema" 错误 --> <property> <name>datanucleus.schema.autoCreateAll</name> <value>true</value> <description>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.</description> </property>
3、异常处理
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 --个人原因
4、启动命令 以管理员身份
1、先启动hadoop
切换到E:\Hadoop\hadoop-2.7.7\sbin命令下,输入命令start-dfs.cmd
2、启动Hive metastore服务
以管理员身份打开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
3、启动Hive
打开CMD,输入命令hive.cmd 或者 hive
4、验证
个时候就可以输入HQL语句啦。
我们输入一个
create table stu(id int, name string);
然后再浏览器地址栏输入:
http://localhost:9870/explorer.html#/user/hive/warehouse
5、配置beeline
1、添加beeline配置
【温馨提示】hive命令会慢慢不再使用了,以后就用beeline,如果对hive不了解的,可以看我之前的文章:大数据Hadoop之——数据仓库Hive
在Hive服务安装目录的%HIVE_HOME%\conf\hive-site.xml配置文件中添加以下配置:
<!-- host --> <property> <name>hive.server2.thrift.bind.host</name> <value>localhost</value> <description>Bind host on which to run the HiveServer2 Thrift service.</description> </property> <!-- hs2端口 默认是10000,为了区别,我这里不使用默认端口--> <property> <name>hive.server2.thrift.port</name> <value>10001</value> </property>
在Hadoop服务安装目录的%HADOOP_HOME%\etc\hadoop\core-site.xml配置文件中添加以下配置:
<property> <name>hadoop.proxyuser.29209.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.29209.groups</name> <value>*</value> </property>
【注意】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添加如下配置:
<property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> <description>Whether HiveServer2 Active/Passive High Availability be enabled when Hive Interactive sessions are enabled.This will also require hive.server2.support.dynamic.service.discovery to be enabled.</description> </property>
重启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