2019.1.23 填坑,点我鸭.
2019.1.11 更新错误填坑,点我鸭.


1.下载

Hive下载具体参考官网;
MariaDB安装参考百度附链接;
centos 7 mariadb安装
在这里插入图片描述

2. 解压Hive1.2.2并重命名为hive1.2.2

3. 配置文件修改

1
cd hive-1.2.2/conf

(1)创建hive-site.xml

1
touch hive-site.xml

(2)编辑hive-site.xml(心情好的时候重新整理一下这一步)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>创建数据库时的用户名</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>创建数据库时的密码</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value> #会在hdfs生成相应路径
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/hive/tmp</value> #会在hdfs生成相应路径
</property>
<property>
<name>hive.querylog.location</name>
<value>/hive/log</value>
</property>
</configuration>

(3)编辑hive-env.sh

1
cp hive-env.sh.template hive-env.sh

(4)编辑内容

1
2
3
4
5
6
7
vim hive-env.sh

#添加相关目录
export JAVA_HOME=/usr/local/src/jdk1.8.0_191
export HADOOP_HOME=/usr/local/src/hadoop-2.7.7
export HIVE_HOME=/usr/local/src/hive-1.2.2
export HIVE_CONF_DIR=/usr/local/src/hive-1.2.2/conf

(5)复制日志配置

1
2
cp hive-exec-log4j.properties.template hive-exec-log4j.properties
cp hive-log4j.properties.template hive-log4j.properties

4.创建相关目录(暂时没发现有什么用,可能没用吧)

/usr/local/src/hive-1.2.2/warehouse
/usr/local/src/hive-1.2.2/tmp
/usr/local/src/hive-1.2.2/log

5.修改环境变量

1
vim ~/.bashrc

添加内容

1
2
3
# hive
export HIVE_HOME=/usr/local/src/hive-1.2.2
export PATH=$PATH:$HIVE_HOME/bin

生效

1
source ~/.bashrc

6.下载Mysql connector 的jar包

因为安装的MariaDB所以就想着用MariaDB的jar包,但是实测不好使,所以还是下载MySQL的

用wget 方式获取

1
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz

之后解压,复制jar包到hive的lib目录下

1
cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar hive-1.2.2/lib/

7.简单测试

输入 hive 命令
在这里插入图片描述
成功进入hive-cli界面
输入 show databases; 注意最后的分号
在这里插入图片描述


至此基本完成
安装参考
Hive1.x
基于Hadoop2.7.3集群数据仓库Hive1.2.2的部署及使用 (详细测试参考该链接的测试部分)


错误1

向 hive 数据库中写入数据时

load data local inpath "/home/ibean/student.txt" into table student;

报错信息

1
2
3
4
hive> load data local inpath "/home/ibean/student.txt" into table student;
Loading data to table testhive.student
Failed with exception Unable to move source file:/home/ibean/student.txt to destination hdfs://master:9000/usr/local/src/hive-1.2.2/warehouse/testhive.db/student/student.txt
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

查看hive日志:日志目录在本地文件系统 /tmp/当前用户名/hive.log

1
Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /usr/local/src/hive-1.2.2/warehouse/testhive.db/student/student.txt could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

关键点

1
There are 0 datanode(s) running and no node(s) are excluded in this operation

好吧。。。忘启动从节点。。。节点启动成功以后正常。

错误2

中文乱码
在这里插入图片描述

进入mariadb,use hive,下面的都执行一遍就好了

1
2
3
4
5
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;

执行完这些,删掉原来的表重新创建一次就可以了

参考博文:https://www.cnblogs.com/qingyunzong/p/8724155.html

关于录入数据的点点问题

在读取数据的时候有时候可能会遇到表头或者表尾
在这里插入图片描述
这样load的时候表头也会录入,所以在创建表的时候添加以下,跟在创建表后面,分号之前

1
2
3
4
tblproperties(
"skip.header.line.count"="1", --跳过文件行首1行
"skip.footer.line.count"="1" --跳过文件行尾1行
);

例如:

1
2
3
4
5
6
7
8
9
create external table if not exists ratings(
userId int comment '用户id',
movieId int comment '电影ID',
rating int comment '用户对电影的打分',
time string comment '时间'
)
row format delimited fields terminated by ','
stored as textfile
tblproperties ("skip.header.line.count"="1");