XY个人笔记
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapReduce 任务)。Hive不存在主从架构,不需要安装在每台服务器上,只需要安装几台就行了。
1.首先将hive的安装包上传到我们的虚拟机上并解压到相应目录
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/modules/apache/
个人习惯把解压后的文件更名简洁一点
$ mv apache-hive-1.2.1-bin/ hive-1.2.1
2.重命名conf里面的hive-env.sh.template为hive-env.sh,并配置
$ mv hive-env.sh.template hive-env.sh
3.重命名或copy hive-default.xml.template 文件
$ cp hive-default.xml.template hive-site.xml
在hive-site.xml中增加如下配置
hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse
4.在HDFS上创建文件,增加权限
$ bin/hdfs dfs -mkdir /user/hive/warehouse
$ bin/hdfs dfs -chmod g+w /tmp
$ bin/hdfs dfs -chmod g+w /user/hive/warehouse
5.进入hive
$ bin/hive
6.成功进入hive 查看到我们的默认数据库default
7.默认的数据库在我们的HDFS里面是不会显示出来的
创建数据库
可以在HDFS中看到我们新创建的数据库test
8.Hive常用命令操作
a.使用数据库
hive>use test;
b.创建表
c.在/opt/datas下创建文件stu_info已制表符隔开
1 name
2 age
3 sex
d.加载数据,查看数据
d.查询数据为null,hive默认的分割符为^A(/001)
linux中为 Ctrl+V Ctrl+A 即为:^A
e.重新加载并显示数据
9.文件上传到HDFS上的根目录下
$ bin/hdfs dfs -put /opt/datas/hive_test /
10.load后再HDFS根目录的源文件消失(被剪切到表对应目录下),单数据插入成功。数据文件移动到了表对应的目录下面
11.如果数据的分隔符与表的数据分隔符不一致,插入数据查询的时候,发现数据都为null
Hive metastore三种配置方式
a、本地Derby:
Derby数据库是Hive的默认数据库,这也是配置最简单的一种方式,但是又一个弊端是只能有一个hive服务使用数据库
b、本地MySQL:
这种存储方式需要在本地运行一个mysql服务器,需要Hive和MySQL在同一台服务器
c、远端MySQL:
这种存储方式需要在远端服务器运行MySQL,并且在Hive的服务需要启动metastore服务
#启动metastore服务命令
$ bin/hive --service metastore &
1.当我们在次启动一个hive的时候发现报错,Derby只能开启一个客户端
因为我们的hive默认的数据库Derby不能再做映射,所以我们要修改元数据存储的数据库,以下是Hive支持的数据库
2.下面我们安装一个MySql
$ yum -y install mysql-server
3.开启mysql服务
4.设置登录密码,验证成功
5.设置mysql开机启动
6.设置授权
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> select User,Host,Password from user;
7.放着更改元数据出现问题,只留root % 即可,剩余的可全部删掉
删除用户信息
mysql> delete from user where user = 'root' and host = '127.0.0.1';
mysql> delete from user where user = 'root' and host = 'localhost';
8.刷新授权表,重启服务
mysql> flush privileges;
9.1.修改hive-site.xml(本地MySQL模式)
javax.jdo.option.ConnectionURL
jdbc:mysql://hadoop01.com/metastore_hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
9.2.修改hive-site.xml(远端MySQL模式)
javax.jdo.option.ConnectionURL
jdbc:mysql://hadoop01.com/metastore_hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
hbase.zookeeper.quorum
hadoop01.com
hive.metastore.uris
thrift://hadoop01.com:9083
hive.txn.manager
org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
hive.compactor.initiator.on
true
10.将mysql的驱动jar拷贝到hibe/lib目录下,完成后打开多个客户端进行测试
注:如果启动远端MySQL模式需要启动metastore服务,否则会报如下错误:
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)
at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.(RetryingMetaStoreClient.java:86)
at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)
at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104)
at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005)
at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503)
... 8 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521)
... 14 more
Caused by: MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: 拒绝连接
at org.apache.thrift.transport.TSocket.open(TSocket.java:187)
启动metastore服务命令:$ bin/hive --service metastore &
11.Hive的常用配置
修改log4j: cp hive-log4j.properties.template hive-log4j.properties
修改:hive.log.dir=/opt/modules/apache/hive-1.2.1/logs
12.显示数据和列名,添加到hive-site.xml
hive.cli.print.current.db
true
hive.cli.print.header
true
1.查看已安装的mysql
命令:rpm -qa | grep -i mysql
2.依次卸载mysql相关
命令:yum remove mysql-community-server-5.6.36-2.el7.x86_64
3.删除mysql文件目录
使用命令查看mysql相关的文件目录:find / -name mysql
hive> show tables; ##查看表
hive> desc formatted hive_table; ##描述表信息 desc hive_table
hive> alter table hive_table2 rename to test_rn; ##更改表名
hive> alter table test_rn add columns (age int); ##增加列
hive> alter table test_rn change id test_id int; #修改列名id为test_id
hive> alter table test_rn change test_id id double after age; ## test_id改名为id并放到age后面
hive> alter table test_rn replace columns (cc int,bb string,id int); ##替换列(修改和替换全表的列)
hive> truncate table stu_info; ##清除数据truncate 只清楚表的数据,不会删除元数据
hive> drop table stu_test; ##删除表以及表的元数据信息
hive> drop database hive_drop; #删除数据库
hive> drop database hive_test CASCADE; ##删除有表的数据库
hive> dese function when; ##查看函数用法
hive> dese function extended case; ##查看函数的详细用法
hive>
添加jar或者文件到hive运行环境当中
add jar /opt/datas/mr.jar;
add file /opt/datas/second.txt;
list jar显示所有添加的jar
delete jar /opt/datas/mr.jar;
常用shell
! -》 表示访问的Linux本地的文件系统 ! ls /opt/datas;
dfs -》 表示访问的HDFS文件系统 dfs -ls /;