Hive总结(一)Hive 2.1.0本地模式搭建教程

来源:互联网 发布:地图数据采集gis 编辑:程序博客网 时间:2024/06/08 17:29

零.前言

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

二.安装mysql

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
这里写图片描述

三.安装并配置Hive

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   /tmphadoop 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/hadoopexport HIVE_CONF_DIR=/usr/local/hive-2.1.0/confexport 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.ConnectionURL</name>    <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>    <description>JDBC connect string for a JDBC metastore</description></property><property>    <name>javax.jdo.option.ConnectionDriverName</name>    <value>com.mysql.jdbc.Driver</value>    <description>Driver class name for a JDBC metastore</description></property><property>    <name>javax.jdo.option.ConnectionUserName</name>    <value>数据库用户名</value>     //hive    <description>Username to use against metastore database</description></property><property>    <name>javax.jdo.option.ConnectionPassword</name>    <value>数据库密码</value>       //123    <description>password to use against metastore database</description></property><property><name>hive.exec.local.scratchdir</name>   #指定HDFS中Hive数据临时文件存放目录,启动hive,HDFS自动创建。    <value>/tmp</value>          默认位置    <description>Local scratch space for Hive jobs</description>  </property><property>#指定HDFS中Hive数据文件存放目录,启动hive,HDFS自动创建。    <name>hive.metastore.warehouse.dir</name>    <value>/usr/hive/warehouse</value>            <description>location of default database for the warehouse</description>  </property><property><name>hive.downloaded.resources.dir</name>    <value>/tmp/resources</value>           默认位置    <description>Temporary local directory for added resources in the remote file system.</description></property><property>    <name>hive.metastore.local</name>    <value>true</value></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文件夹中。

四.job测试Hive集群

1.本地建立测试文件

santiago@hdp:~/data$ mkdir hivesantiago@hdp:~/data/hive$ vim hive_text.txtsanti,you are a zhazha.santiago@hdp:~/data/hive$ cat hive_text.txtsanti,you are a zhazha.

2.

hive> show databases;OKdefaultTime 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;  

//表名在hdfs上就形成文件夹
这里写图片描述
这里写图片描述

3观察HDFS上文件

#hadoop fs -ls /usr/hive/warehouseFound 1 itemsdrwxrwxr-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_testFound 1 items-rwxrwxr-x   1 santiago supergroup         24 2017-01-14 21:13 /usr/hive/warehouse/guo_test/hive_test.txt  

并在该文件夹中找到了所写入hive数据仓库的文件。
这里写图片描述

附录一:错误分析

错误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

0 0
原创粉丝点击