安装hive 3.1.2版本
前提:hadoop 3.2.2
jdk 1.8.0
mysql: 5.7
下载
wget https://mirrors.tuna./apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz --no-check-certificate
解压
tar -xzvf apache-hive-3.1.2-bin.tar.gz -C ../app
软连接
ln -s apache-hive-3.1.2-bin/ hive
配置环境变量
cdvim .bashrcexport HIVE_HOME=/home/hadoop/app/hiveexport PATH=${HIVE_HOME}/bin:${HIVE_HOME}/sbin:$PATHsource .bashrc
mysql jar包
hive 默认是derby数据库,不支持远程,也不支持多用户,所以改为mysql连接方式
先把mysql驱动包丢到lib目录下
cp mysql-connector-java-5.1.47.jar $HIVE_HOME/lib
mysql 新增用户及数据库
# 创建数据库 maggiecncreate database maggiecn;# 将所有权限赋予给该数据库,并以suju用户名登录,登录密码newpassword# % 代表 任意的客户端的IP地址 都被允许使用suju用户来远程访问grant all privileges on maggiecn.* to suju@'%' identified by 'newpassword';# 更新权限flush privileges;
修改配置文件 hive-env.sh
cd $HIVE_HOME/confmv hive-env.sh.template hive-env.shvim hive-env.sh HADOOP_HOME=/home/hadoop/app/hadoopexport HIVE_CONF_DIR=/home/hadoop/app/hive/confexport HIVE_AUX_JARS_PATH=/home/hadoop/app/hive/lib
修改配置文件 hive-site.xml
mysql 默认配的是derby数据库,derby是单用户连接的,不方便使用,改为mysql数据库存储元数据
cp hive-default.xml.template hive-site.xml
<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://主机:3306/数据库?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>password</value></property><property><name>hive.cli.print.header</name><value>true</value></property><property><name>hive.cli.print.current.db</name><value>true</value></property><property><name>hive.metastore.uris</name><value>thrift://ip:9083</value></property><property><name>hive.metastore.warehouse.dir</name><value>/usr/hive/warehouse</value></property><property><name>hive.server2.thrift.bind.host</name><value>ip</value></property><!-- 指定 hiveserver2 连接的端口号 默认10000 --><property><name>hive.server2.thrift.port</name><value>10000</value><description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description></property></configuration>
初始化数据库
schematool -dbType mysql -initSchema
hadoop 3.2.2 lib jar 包跟hive的冲突
log4j-slf4j-impl-2.10.0.jar重复
cd $HIVE_HOME/librm log4j-slf4j-impl-2.10.0.jar ## 或者cp到其他位置,备份防止删错
guava.jar 版本冲突
hadoop版本guava是27的,hive的是19,所以删除hive目录下,把hadoop目录下的粘贴过来。
备注:删除低版本,复制高版本。
cd $HIVE_HOME/librm guava-19.0.jarcp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
修改hdfs 上tmp 权限
不修改的话,hive metastore 会报错
hdfs dfs -chmod -R 777 /tmp
启动
nohup hive --service metastore >> ./nohup.out 2>&1 &nohup hive --service hiveserver2 >> ./nohup.out 2>&1 &
在linux上操作可以以下操作,进入,创建数据库或者创建数据等
cd $HIVE_HOME/bin./hive
dbeaver 连接hive
linux 有的时候敲sql还是不方便,所以还是得有个windows操作的工具。
dbeaver 这款个人认为比navicat更强大,可以连接的数据库类型更多。下载免费的版本就行,然后新建一个连接hive数据库。
点击编辑驱动
1. 原始的驱动删除,sz 下载linux以下两个文件
hadoop-common-3.2.2.jar
hive-jdbc-3.1.2-standalone.jar
sz $HADOOP_HOME/share/hadoop/common/hadoop-common-3.2.2.jarsz $HIVE_HOME/jdbc/hive-jdbc-3.1.2-standalone.jar
用户名密码不设置也可以连接
2. 配置core-site.xml 重启hadoop,hive
将“xxx”替换成自己的用户名。
<property><name>hadoop.proxyuser.xxx.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.xxx.groups</name><value>*</value></property>
重启hadoop,先stop-all.sh,再start-all.sh
Hive 报错问题
1. SLF4J: Class path contains multiple SLF4J bindings.
与hadoop中的log4j重复,log4j-slf4j-impl-2.10.0.jar重复
cd $HIVE_HOME/librm log4j-slf4j-impl-2.10.0.jar
2. Exception in thread “main” java.lang.NoSuchMethodError: mon.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fHvhcZ8-1637110689766)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-1116140121888.png)]
原因:
hadoop和hive的两个guava.jar版本不一致
两个位置分别位于下面两个目录:
/usr/local/hive/lib//usr/local/hadoop/share/hadoop/common/lib/
解决办法:
删除低版本的那个,将高版本的复制到低版本目录下
cd $HADOOP_HOME/share/hadoop/common/libfind guava*##显示guava-27.0-jre.jarcd $HIVE_HOME/libfind guava*##显示guava-19.0.jar, 所以删hive路径下的,复制hadoop路径下的,hadoop路径下的软连接也可以rm guava-19.0.jarcp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
3. Exception in thread “main” [com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ‘<’ (code 60) (expected a name start character)
hive-site.xml 文件中有非法字符,后面提示我是20行
看了一下是我mysql 密码中有&# 字符,重新设置了mysql密码
alter user '用户名'@'%' identified by 'newpassword';flush privileges;
4. 错误:FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
hive (default)> create database hive1;
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
解决办法:
(1) 初始化数据库
[hadoop@hadoop001 ~]$ schematool -dbType mysql -initSchema