本机安装hive的过程记录在这里,参考文章:https://blog.csdn.net/Alen_Liu_SZ/article/details/80752273
1 安装Hadoop
具体安装过程参考:Hadoop 2.7.6安装_伪分布式集群
2 安装MySQL
具体安装过程参考:MySQL基于二进制文件安装
3 下载Hive以及MySQL-jdbc
HIve下载地址:http://mirror.bit.edu.cn/apache/hive/stable-2/
MySQL Connector下载地址:https://dev.mysql.com/downloads/connector/j/
1 解压hive
cd /root/software
tar -zxvf apache-hive-2.3.3-bin.tar.gz -C /root/hive
更改文件权限
chown -R hadoop:hadoop apache-hive-2.3.3-bin
在虚拟机上创建目录,hive-log4j.properties文件要用到
//存放hive的日志文件
mkdir /home/hadoop/hive-2.3.3/data/logs
//存放临时文件
mkdir /home/hadoop/hive-2.3.3/data/temp
在HDFS上创建目录,hive-site.xml文件要用到
Hive配置文件里要用到HDFS的一些路径,需要手动创建如下路径:
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -mkdir -p /hive/logs
hadoop fs -mkdir -p /hive/temp
更改权限,否则下面会报错:
Exception in thread "main" java.lang.RuntimeException: The root scratch dir: /hive/temp on HDFS should be writable. Current permissions are: rwxr-xr-x
hadoop fs -chmod 733 /hive/*
hive进行运算时,会将中间结果和日志写入上述路径:
2 配置hive-site.xml
生成hive-site.xml文件:cp -r hive-default.xml.template hive-site.xml,注意复制一份,不要新建一个同名文件。
//注意:hive-site.xml上的路径一部分是HDFS上的路径,一部分是本地路径,指定连接连接 URL编码为:UTF-8
[root@hdp-01 conf]# cat hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://hdp-01:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123***
//这是HDFS上的路径,HDFS创建的元数据目录
hive.metastore.warehouse.dir
/user/hive/warehouse
//HDFS创建的临时目录路径
hive.exec.scratchdir
/user/hive/temp
日志地址
hive.querylog.location
/root/hive/apache-hive-1.2.2-bin/data/logs
Location of Hive run time structured log file
hive.server2.logging.operation.log.location
/root/hive/apache-hive-1.2.2-bin/data/logs
Top level directory where operation logs are stored if logging functionality is enabled
//其它临时文件地址
hive.exec.local.scratchdir
/root/hive/apache-hive-1.2.2-bin/data/temp
Local scratch space for Hive jobs
hive.downloaded.resources.dir
/user/hive/temp
Temporary local directory for added resources in the remote file system.
3 配置hive-env.sh
末尾追加:
HADOOP_HOME=/root/apps/hadoop-2.8.5
export HIVE_CONF_DIR=/root/hive/apache-hive-1.2.2-bin/conf
.hiverc文件应该放在这里:
Putting the global hiverc in $HIVE_HOME/bin/.hiverc is deprecated. Please use $HIVE_CONF_DIR/.hiverc instead.
4 拷贝mysql-connector-java-5.1.39.jar放入hive 的lib目录下
5 配置hive环境变量
vi /etc/profile
export HIVE_HOME=/usr/local/apache-hive-2.3.3-bin
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
7 在/conf目录下配置log4j
// 这个路径是虚拟机上的
创建配置文件:
cp hive-exec-log4j.properties.template hive-exec-log4j.properties
cp hive-log4j.properties.template hive-log4j.properties
修改上面的两个配置文件:
把 property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name}
改为 property.hive.log.dir =/home/hadoop/hive-2.3.3/datas/logs
8 初始化mysql数据库
schematool --dbType mysql –initSchema
mysql> select user,password,host from user;先查看用户信息
为了支持mysql远程访问首先设置当前mysql用于允许master远程机访问,并修改root用户的密码为123456:
mysql> grant all privileges on *.* to root@'master' identified by '123456' with grant option;
mysql> flush privileges;
*.*代表全部数据库的全部表授权,也可以指定数据库授权,如test_db.*;
all privileges代表全部权限,也可以insert,update,delete,create,drop等;
允许root用户在spark(Linux系统的主机名,IP映射)进行远程登陆,并设置root用户的密码为root。
flush privileges告诉服务器重新加载授权表。
hive执行初始化命令时
MySQL的驱动包放置到$HIVE_HOME/lib目录下
执行schematool -dbType mysql -initSchema进行初始化;
Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
以下异常说明mysql已经启动。 应先关掉先前启动的mysql.再执行初始化schema操作。
接下来就是用sql来修改root的密码
mysql> use mysql;
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit
9、输入:hive,启动hive
10、配置 .hiverc 文件,路径:在${HIVE_HOME}/bin目录下新建 .hiverc 文件:
vi /root/hive/apache-hive-1.2.2-bin/bin
set hive.cli.print.header=true;
set hive.cli.print.current.db=true;
网上有有些资料说是在${HIVE_HOME}目录下,实际不生效。
放在bin目录下,会生效,但启动会警告:
.hiverc文件应该放在这里:
Putting the global hiverc in $HIVE_HOME/bin/.hiverc is deprecated. Please use $HIVE_CONF_DIR/.hiverc instead.
cp /root/hive/apache-hive-1.2.2-bin/bin/.hiverc /root/hive/apache-hive-1.2.2-bin/conf
1、MariaDB中文乱码字符集处理:
(0)cd /etc/my.cnf.d
ls -l
(1)vi client.cnf
增加:default-character-set=utf8
(2)vi server.cnf
增加:[mysqld_safe] 这个要加上去
[mysqld]
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character_set_server = utf8
collation_server = utf8_general_ci
[mysqld_safe]
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character_set_server = utf8
collation_server = utf8_general_ci
(3)重启:
systemctl restart mariadb.service
(4)查看修改:
MariaDB [(none)]> SHOW VARIABLES LIKE 'character%';
2、修改hive对应的库:
metastore 支持数据库级别,表级别的字符集是 latin1,那么我们只需要把相应注释的地方的字符集由 latin1 改成 utf-8,就可以了。用到注释的就三个地方,表、分区、视图。如下修改分为两个步骤:
use hive;
(1)、进入数据库 Metastore 中执行以下 5 条 SQL 语句
①修改表字段注解和表注解
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8
② 修改分区字段注解:
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
③修改索引注解:
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
(2)、/conf/hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://hdp-01:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8
& 就是分号(;)的意思,不要单独用分号,否则会报错。