Hive是Hadoop组态中的数据仓库,本质是将sql语句转换为MapReduce任务,所以Hive只是一个解析引擎,它的数据存储在hdfs上,元数据信息依托mysql数据库。在这里有一个小问题,为什么需要mysql关系数据库,因为hdfs存储的只是数据信息,而建表的时候是需要列名来查询的,因此要用mysql来建立表信息,当然也可以用其他的关系型数据库。在这里依托mysql数据库搭建Hive组件。
1. 安装MySQL服务器端和MySQL客户端;
•安装:
– yum install mysql
– yum install mysql-server
•启动:
– /etc/init.d/mysqld start
•设置用户名和密码:
– mysql admin -u root password ‘111111’
•测试登录是否成功:
– mysql -uroot -p111111
登录MySQL:(1)直接输入密码mysql -uroot -p111111 (2)用户和密码mysql -uroot –p,密码111111
退出MySQL:exit;或者quit;
2. 安装Hive
a.#Master
下载apache-hive-1.2.2-bin.tgz,并解压
wget http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
tar zxvf apache-hive-1.2.2-bin.tar.gz
b.修改Hive配置文件
#Master
cd apache-hive-1.2.2-bin/conf
创建hive-site.xml配置文件
vim hive-site.xml
<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>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>111111</value>
</property>
</configuration>
c.修改bashrc,配置环境变量
#Master、Slave1、Slave2
vim ~/.bashrc
export HIVE_HOME=/usr/local/src/apache-hive-1.2.2-bin
export PATH=$PATH:$HIVE_HOME/bin
#刷新环境变量
source ~/.bashrc
d. 安装MySQL连接工具
#Master
1)下载安装包
wge thttps://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.44.tar.gz
tar zxvf mysql-connector-java-5.1.44.tar.gz
2)复制连接库文件
cp mysql-connector-java-5.1.44-bin.jar /usr/local/src/apache-hive-1.2.2-bin/lib
e.更新jline.jar
在早期Hadoop版本中 jline.jar的版本是0.9+ 使用这个版本会报错,所以要替换成新版本的Jar包;
jline.jar包下载地址: http://maven.outofmemory.cn/jline/jline/2.12.1/
#Master
进入路径cd /usr/local/src/hadoop-2.6.1/share/hadoop/yarn/lib
删除jlin-0.9.94.jar rm -rf jline-0.9.94.jar
替换成新的版本cp jline-2.12.1.jar/usr/local/src/hadoop-2.6.1/share/hadoop/yarn/lib
f.拷贝安装包
#Master
scp-r /usr/local/src/apache-hive-1.2.2-binroot@slave1:/usr/local/src/apache-hive-1.2.2-bin
scp-r /usr/local/src/apache-hive-1.2.2-bin root@slave2:/usr/local/src/apache-hive-1.2.2-bin
h.启动Hive服务
#Master
hive
i.退出Hive服务
#Master
exit;
3.创建hive数据库并刷新权限
mysql>CREATE USER ‘hive’ IDENTIFIED BY ‘hive’;
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘hive’@’master’ WITH GRANT OPTION;
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘hive’@’master’ IDENTIFIED BY ‘111111’;
mysql>flush privileges;
mysql>create database hive;
flush privileges; --为其他客户端开启连接权限
4.解决mysql“Access denied for user'root'@'localhost'”
#/etc/init.d/mysql stop
#mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
#mysql -u root mysql
mysql>UPDATE user SET Password=PASSWORD('111111') where USER='root';
mysql>FLUSH PRIVILEGES;
mysql>quit;
#/etc/init.d/mysql restart
#mysql -uroot -p
Enterpassword: <输入新设的密码newpassword>
5.向Hive表中加载数据
load data inpath 'path' overwrite into table name; 加载hdfs路径下的文件,数据会从该目录下移动到目标位置。
load data local inpath 'path' overwrite into table name; 加载本地文件系统路径下的文件,数据会被拷贝到目标位置。
6.hive复制整段语句是出现 Display all 475possibilities? (y or n)错误的处理方法
在用hive时,复制一整片代码运行,发现好多提示: Display all 475possibilities? (y or n),导致复制失败,原因:是复制的代码中包含了Tab缩进,只要将原来复制的代码中的Tab空格全部去掉即可。
7.hive导入数据时最后几列始终为NULL的原因:
主要是分隔符的问题,创建表指定的分隔符为"\t",可数据是以空格分割的。比如你的文件内容里面是以空格分割的,by的后面就写‘’(里面有一个空格);如果文件内容是以逗号分割的,by后面就写‘,’。