Hive
date: 2018-11-16 19:01:03
updated: 2018-11-16 19:01:03
一、简介
要访问HDFS上的数据可以通过shell命令和API
如果要处理HDFS上的数据可以通过MapReduce,但MR的操作门槛比较高,eg:需要不断的进行调试,如果无法在本地运行,需要不断地导出jar包放到linux下进行调试
Hive是通过一种叫做HQL的类SQL语句来处理HDFS上的数据,但是和SQL不一样的是,HQL语言会转换为MR程序执行(select * from table不需要,因为select * from table只是对全部文件数据进行读取,并没有对数据进行操作)
Hive元数据:指在Hive中创建的数据库、表、视图等信息。这些元数据存储在关系型数据库中,比如MySQL
二、安装
-
解压
tar -zxvf apache-hive-1.2.1-bin.tar.gz -
设置环境变量
需要用root权限,修改/etc/profile文件,退出root权限,输入source /etc/profile使环境变量生效HIVE_HOME=/home/hadoop/app/apache-hive-1.0.0-bin
export PATH=\(PATH:\)HIVE_HOME/bin -
修改hive-env.sh
进入conf目录,将hive-env.sh.template复制并改名为hive-env.shSet HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0
-
修改hive-site.xml
进入conf目录,将hive-site.xml放进去
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionPassword
root
password to use against metastore database
hive.hwi.listen.port
9999
This is the port the Hive Web Interface will listen on
datanucleus.autoCreateSchema
true
creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once
javax.jdo.option.ConnectionUserName
root
Username to use against metastore database
hive.exec.local.scratchdir
/home/oracle/appdata/hivetmp/iotmp
Local scratch space for Hive jobs
hive.downloaded.resources.dir
/home/oracle/appdata/hivetmp/iotmp
Temporary local directory for added resources in the remote file system.
hive.querylog.location
/home/oracle/appdata/hivetmp/iotmp
Location of Hive run time structured log file
-
拷贝mysql-connector-java-5.0.8-bin.jar到hive 的lib下面
-
在linux下安装mysql,需在root权限下进行操作 记得设置密码
- 安装mysql:yum install mysql-server mysql mysql-devel
- 开启mysql服务:service mysqld start
- 设置mysql密码:mysqladmin -u root password 'root'
- mysql服务开机启动:chkconfig mysqld on
-
把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错
cp hive/lib/jline-2.12.jar hadoop-2.6.0/share/hadoop/yarn/lib/
三、启动Hive
- MySql
先启动MySQL创建hive数据库 create database hive; - Hadoop
启动hadoop sbin/start-all.sh - Hive
输入hive进入到hive shell
Hive默认存储在hadoop下的/user/hive/warehouse下
四、Hive使用
-
Hive默认数据库是default,直接创建table会建在defaul数据库中,同时会在/user/hive/warehouse下创建对应表名的一个目录
-
如果创建了一个新的数据库,会在/user/hive/warehouse下新建一个对应库名的目录,以.db结尾,该新建数据库的所有table都会存在该目录下
-
内部表的三种插入数据方式:
- insert
- hive的load命令,加载数据
load data local inpath '/home/hadoop/student.txt' into table student; - 直接把数据文件复制到相应的HDFS目录中
-
外部表只有前两种插入数据方式
因为创建外部表的时候,不会在HDFS的数据库目录下创建该表的目录,在向表里添加数据时,也不在表目录中存储,删除外部表的时候,只会把表信息删除,不会删除表里的数据
五、使用Hive解析Json
-
把json-serde-1.3.6-SNAPSHOT-jar-with-dependencies.jar复制到hive的lib目录下,重新进入hive
-
建表:
create table user_movie(custid string, sno string, genreid string, movieid string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE;

浙公网安备 33010602011771号