Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive有三种运行模式:
1.内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的Derby数据库每次只能访问一个数据文件,这也就意味着不支持多会话连接。这种情况应对本地测试可能都有所不足,仅供初学者熟悉应用Hive;
2.本地模式:这种模式是将元数据库保存在本地的独立数据库中(比如说MySQL),这样就能够支持多会话和多用户连接;
3.远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步,将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。
本文为测试使用,所以搭建的为本地安装模式。
hadoop 2.7
jdk 1.8.0
apache-hive-1.1.0-bin.tar.gz
sudo apt-get install mysql-server
安装过程设置root用户的密码
然后进入数据库增加用户hive,并且授权
注意先建数据库,再建立用户。
create database hive_metastore;
mysql> create user 'hive' identified by '123';
mysql> grant all on *.* TO 'hive'@'%' with grant option;
mysql> flush privileges;
测试登录mysql
开启 sudo service mysql start
关闭 sudo service mysql stop
重启 sudo service mysql restart
状态 sudo service mysql status
登录 mysql -u hive -p
1.解压缩安装包,并设置hive的使用权限
2.设置/etc/profile 环境变量,并刷新保存
source /etc/profile
3建立临时IO的tmp文件文件,并进行配置,安装在HDFS上
hadoop fs -mkdir /tmp/ 放hive临时数据
hadoop fs -mkdir /tmp/resources
hadoop fs -mkdir /usr/hive/warehouse 放hive数据
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /tmp/resources
hadoop fs -chmod g+w /user/hive/warehouse
4./conf下更改配置
(1)cp hive-env.sh.template hive-env.sh
增加以下配置
export HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive-2.1.0/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive-2.1.0/lib
(2)cp hive-default.xml.template hive-site.xml
[注]该配置中配置较多,需用/字符串进行查找
增加配置
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=truevalue>
<description>JDBC connect string for a JDBC metastoredescription>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
<description>Driver class name for a JDBC metastoredescription>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>数据库用户名value> //hive
<description>Username to use against metastore databasedescription>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>数据库密码value> //123
<description>password to use against metastore databasedescription>
property>
<property>
<name>hive.exec.local.scratchdirname>
#指定HDFS中Hive数据临时文件存放目录,启动hive,HDFS自动创建。
<value>/tmpvalue> 默认位置
<description>Local scratch space for Hive jobsdescription>
property>
<property>
#指定HDFS中Hive数据文件存放目录,启动hive,HDFS自动创建。
<name>hive.metastore.warehouse.dirname>
<value>/usr/hive/warehousevalue>
<description>location of default database for the warehousedescription>
property>
<property>
<name>hive.downloaded.resources.dirname>
<value>/tmp/resourcesvalue> 默认位置
<description>Temporary local directory for added resources in the remote file system.description>
property>
<property>
<name>hive.metastore.localname>
<value>truevalue>
property>
配置完毕
5.将JDBC复制到Hive库目录用于java程序与mysql的连接
下载地址
http://download.softagency.net/MySQL/Downloads/Connector-J/
解压后将Jar文件复制转发
cp mysql-connector-java-5.1.34.jar /usr/local/hive-2.1.0/lib
[注意]用的是5.1,测试用6.0.1时测试失败。
6.初始化数据库
schematool -initSchema -dbType mysql
初始化失败则去数据库删除database和用户,重新建立
mysql -u root -p
密码
Delete FROM user Where User=’test’ and Host=’localhost’;
flush privileges;
drop database testDB; //删除用户的数据库
删除账户及权限:
drop user 用户名@’%’;
drop user 用户名@ localhost;
7启动hadoop然后在bin下键入hive
验证部署成功
8.日志
hive默认错误日志不线索在console中,日志保存在/tmp/user.name>/hive.log文件夹中。
1.本地建立测试文件
santiago@hdp:~/data$ mkdir hive
santiago@hdp:~/data/hive$ vim hive_text.txt
santi,you are a zhazha.
santiago@hdp:~/data/hive$ cat hive_text.txt
santi,you are a zhazha.
2.
hive> show databases;
OK
default
Time taken: 1.706 seconds, Fetched: 1 row(s)
hive> create table guo_test(Name string,String string)
> row format delimited
> fields terminated by ','
> stored as textfile
> ;
是张空表
载入本地数据,并在hive中查该表。是否存入数据。
hive>load data local inpath '/home/santiago/data/hive/hive_test.txt' into table guo_test;
hive> select * from guo_test;
hive>dfs -ls /usr/hive/warehouse/guo_test;
3观察HDFS上文件
#hadoop fs -ls /usr/hive/warehouse
Found 1 items
drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13
/usr/hive/warehouse/guo_test
发现hive-site,xml设置的文件存储位置中多了guo_test这个文件夹(hive中的表)
#hadoop fs -ls /usr/hive/warehouse/guo_test
Found 1 items
-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13
/usr/hive/warehouse/guo_test/hive_test.txt
错误1
Caused by: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType …) to create the schema. If needed, don’t forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql))
解决方案
重启数据库 ./schematool -initSchema -dbType mysql
参考:http://blog.csdn.net/beidiqiuren/article/details/53056270
错误2
Caused by:
java.net.URISyntaxException:Relative path in absolute URI:
{system:java.io.tmpdir%7D/%7Bsystem:user.name%7D
解决方案
需要建立临时IO的tmp文件文件,并进行配置
mkdir -p tmp/resources
http://宋亚飞.中国/post/36
http://blog.csdn.net/cuihaolong/article/details/52038543
http://blog.csdn.net/jdplus/article/details/46493553
http://www.jianshu.com/p/34d89d6aa3d4
http://blog.itpub.net/28929558/viewspace-1192693/
http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
http://blog.csdn.net/gyunling/article/details/8658083
http://blog.csdn.net/eashion1994/article/details/52056300
http://blog.csdn.net/beidiqiuren/article/details/53056270
关于数据存储部分的参考文献
http://blog.csdn.net/gyunling/article/details/8658083
http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
http://blog.csdn.net/f328310543/article/details/42682685