Hive

一Hive的介绍和下载安装

http://archive.apache.org/

1.1 Hive的三种模式


1.1.1嵌入模式

----- 元数据信息被存储在hive自带的Derby数据库中

----- 只允许创建一个连接

----- 多用于Demo




[endif]

Hive

[if !mso]

[endif][if !mso]

[endif]


Derby

[if !mso]

[endif]1.1.2本地模式

----- 元数据信息被存储在Mysql数据库中

----- MySQL数据库与Hive运行在同一台物理机器上

----- 多用于开发和测试





1.1.3远程模式(用于生产环境)

---- 元数据信息被存储在Mysql数据库中

----- MySQL数据库与Hive运行在不同一台物理机器上





[endif]





HIVE

[if !mso]

[endif][if !mso]

[endif]





Mysql

[if !mso]

[endif] [if !mso]

[endif]

元信息

[if !mso]

[endif][if !mso]

[endif]

运行在不同的操作系统当中

[if !mso]

[endif]1.2 安装环境

本机系统:win10 16GB内存

虚拟机系统:CentOS6.8 64位

虚拟机软件:VMWare14.1.1

JDK版本:JDK1.8.0.92

Hadoop版本:2.6.5

Zookeeper版本:3.4.10

MySQL版本:mysql-5.7.22-linux-glibc2.12-x86_64

Hive 版本:apache-hive-1.2.1-bin

1.3 Hive的安装

确保hadoop集群已经启动

tar -zxvf apache-hive-1.2.1-bin.tar.gz -C/home/hadoop/app/


mv hive-env.sh.template hive-env.sh


vi hive-env.sh

# Set HADOOP_HOME to point to a specifichadoop install directory

HADOOP_HOME=/home/hadoop/app/hadoop-2.6.5


# Hive Configuration Directory can becontrolled by:

exportHIVE_CONF_DIR=/home/hadoop/app/hive/conf



这样就配置完成了!(嵌入模式)




1.3 Hive的启动(嵌入模式)



1.3.1首先启动hdfs和yarn

start-dfs.sh

start-yarn.sh


1.3.2在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写


hadoopfs -chmod 777 /user/hive/warehouse

hadoopfs -chmod 777 /tmp


配置环境变量



source /etc/profile

1.3.3测试嵌入模式

如果执行hive 就自动执行了嵌入模式,自动创建了一个Derby数据库

cd/home/hadoop/app/hive/

metastore_db就是Derby



show databases; 显示所有数据库

use default;  使用默认的数据库

show tables;  显示所有的表

create table students(id int,name string) ;创建一个表名为student 有ID和name

desc students;    查看这张表的结构

insert into students values(001,'ouyang');  插入一条数据

select * from students;          查看表中的内容

quit;

exit; 退出命令

 

1.5将本地文件导入HIVE的案例

需求:将本地/home/hadoop/Documents/ 这个目录下的数据导入到hive的students(id

int,name string)表中。

[root@hadoop01 Documents]# pwd

/home/hadoop/Documents

[root@hadoop01 Documents]# mkdir datas

[root@hadoop01 Documents]# ll

total 4

drwxr-xr-x 2 root root 4096 Jul 11 03:50datas

[root@hadoop01 Documents]# cd datas/

[root@hadoop01 datas]# touch student.txt

[root@hadoop01 datas]# vi student.txt


1001   zhangshan

1002   lishi

1003   zhaoliu

中间为tab键

loaddata local inpath '/home/hadoop/Documents/datas/student.txt' into tabledefault.students;   加载本地数据到hive中的表上

出问题了,你会发现全部为空,这是为什么呢?

因为创建表时,没有设置分隔符

create table students2(id int,name string) rowformat delimited fields terminated by '\t';   创建一个表名为student 有ID和name 并且ID和name之间设置间隔符\t

desc students2;

这是我们在导入加载数据到这张表

load data local inpath'/home/hadoop/Documents/datas/student.txt' into table default.students2;

select * from students2;


如果在加一个命令行,连接hive,就会报错

因为嵌入模式,元数据信息被存储在Hive自带的Derdy数据库中,derdy在执行的目录中,只允许创建一个连接,当另一个命令在同一目录连接hive,该目录derdy就已被使用,所有报错。


二MySql安装(安装在另一台主机上)

详细安装请见文档《海工所_Linux下安装Mysql5.7_郑智》

linux下mysql启动命令

1,使用service 启动、关闭MySQL服务

service mysqld start

service mysqld stop

service mysqld restart

运行上面命令,其实是service命令去找/etc/init.d下的相关的mysql脚本去执行启动、关闭动作。

2,使用/etc/init.d/mysql启动、关闭MySQL服务,

[root@DB-Server bin]# /etc/init.d/mysqld start

Starting MySQL....[  OK  ]

[root@DB-Server bin]# /etc/init.d/mysqld stop

Shutting down MySQL..[  OK  ]

[root@DB-Server bin]#


【开机自启】Linux下设置MySql自动启动

1、将服务文件拷贝到init.d下,并重命名为mysql

cp /app/mysql-5.7.22/support-files/mysql.server

/etc/init.d/mysqld

2、赋予可执行权限

chmod +x

/etc/init.d/mysqld

3、添加服务

chkconfig --add

mysqld

4、显示服务列表

chkconfig

--list

如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则键入

chkconfig

--level 345 mysqld on

5、重启电脑

reboot

三 Mysql中user表中主机配置(让所有主机都可以访问mysql)


首先进入安装有mysql的另一台主机,登陆mysql


然后刷新一下


下面所有主机都可以访问mysql了

四Hive元数据配置到MySql (远程模式)

4.1 驱动拷贝


mysql-connector-java-5.1.28-bin.jar到/home/hadoop/app/hive/lib/

[root@hadoop102 mysql-connector-java-5.1.27]#cp mysql-connector-java-5.1.28-bin.jar /home/hadoop/app/hive/lib/

4.2 配置Metastore到MySql

1)在/home/hadoop/app/hive/conf目录下创建一个hive-site.xml


[root@hadoop102 conf]# touch hive-site.xml

在hive-site.xml文件中输入任意字符后保存(保证编码)

2)从hive-default.xml.template拷贝信息到hive-site.xml文件

[root@hadoop102 conf]# vi hive-site.xml

3)根据官方文档配置参数

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin



        


  javax.jdo.option.ConnectionURL

           jdbc:mysql://HA02:3306/metastore?createDatabaseIfNotExist=true

           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.ConnectionUserName

           root

           username to use against  metastore database



        


  javax.jdo.option.ConnectionPassword

           root123

           password to use against  metastore database


4)配置完毕后,如果启动hive异常,可以重新启动虚拟机(reboot)。(重启后,别忘了启动hadoop集群start-all.sh)

4.3 多窗口启动Hive测试

1)先启动MySQL

[root@ hadoop01 mysql-libs]$ mysql -uroot –proot123

         查看有几个数据库

mysql>show

databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql             |

| performance_schema |

| test               |

+--------------------+

2)再次打开多个窗口,分别启动hive

[root @hadoop01 hive]$

bin/hive

3)启动hive后,回到MySQL窗口查看数据库,显示增加了metastore数据库

         mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

|metastore          |

| mysql             |

| performance_schema |

| test               |

+--------------------+

现在我们就把元数据信息都存到了远程mysql的这张表里面了!~~

 

五Hive常用交互命令

[atguigu@hadoop102 hive]$ bin/hive -help

usage: hive

 -d,--define           Variable subsitution to apply to hive

                                 commands. e.g. -d A=B or --define A=B

    --database     Specify thedatabase to use

 -e         SQLfrom command line

 -f                     SQL from files

 -H,--help                        Print help information

    --hiveconf   Use value forgiven property

    --hivevar         Variablesubsitution to apply to hive

                                  commands. e.g. --hivevar A=B

 -i                   Initialization SQL file

 -S,--silent                      Silent mode ininteractive shell

 -v,--verbose                     Verbose mode (echoexecuted SQL to the console)

创建一个表

use default;

create table student(id int,name string);

insert into student values(100,'xmg');



比较慢~0~,说明hive处理小数据没有任何优势,hive适合处理的是大量数据。

1)“-e”不进入hive的交互窗口执行sql语句

 [hadoop@HA01 hive]$ bin/hive -e "select *from student;"

2)“-f”执行脚本中sql语句

         (1)在/opt/module/datas目录下创建hivef.sql文件

         [hadoop@HA01 hive]$ touch hsql.sql

[hadoop@HA01 hive]$ vi hsql.sql

                   文件中写入正确的sql语句

                   select * fromstudent;

         (2)执行文件中的sql语句

[hadoop@HA01 hive]$ bin/hive -f ./hsql.sql

(3)执行文件中的sql语句并将结果写入文件中

[atguigu@hadoop102 hive]$ bin/hive -f/opt/module/datas/hivef.sql  >/opt/module/datas/hive_result.txt

六 Hive其他命令操作

1)退出hive窗口:      

hive(default)>exit;

hive(default)>quit;

在新版的oracle中没区别了,在以前的版本是有的:

exit:先隐性提交数据,再退出;

quit:不提交数据,退出;

2)在hive cli命令窗口中如何查看hdfs文件系统

         hive(default)>dfs-ls /;

3)在hive cli命令窗口中如何查看hdfs本地系统

hive(default)>!ls /home/hadoop/app;

4)查看在hive中输入的所有历史命令

         (1)进入到当前用户的根目录/root或/home/atguigu

         (2)查看.

hivehistory文件

[hadoop@HA01 ~]$ cat .hivehistory

 

七 Hive常见属性配置

7.1 Hive数据仓库位置配置

         (1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下

         (2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。

         (3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)

hive.metastore.warehouse.dir

/user/hive/warehouse

location of default  database for the warehouse

配置同组用户有执行权限

bin/hdfs dfs -chmod g+w/user/hive/warehouse

7.2 Hive运行日志信息配置

1)Hive的log默认存放在/tmp/hadoop/hive.log目录下(当前用户名下)。

2)修改hive的log存放日志到/home/hadoop/app/hive/logs

         (1)修改/home/hadoop/app/hive/conf/hive-log4j.properties.template文件名称为

hive-log4j.properties

[hadoop@HA01 conf] $pwd

/opt/hadoop/hive/logs

                   [hadoop@HA01 conf] $ mvhive-log4j.properties.template hive-log4j.properties

                   vihive-log4j.properties

         (2)在hive-log4j.properties文件中修改log存放位置

hive.log.dir=/home/hadoop/app/hive/logs

7.3 显示当前数据库,以及查询表的头信息配置

1)在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。

[hadoop@HA01 conf]$ vi hive-site.xml

         hive.cli.print.header

         true


         hive.cli.print.current.db

         true



2)重新启动hive,对比配置前后差异

[hadoop@HA01conf]$ cd ..

[hadoop@HA01hive]$ bin/hive

(1)配置前

(2)配置后

7.4 参数配置方式

1)查看当前所有的配置信息

         hive>set;

2)参数的配置三种方式

         (1)配置文件方式

默认配置文件:hive-default.xml

用户自定义配置文件:hive-site.xml

         注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

(2)命令行参数方式

启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

例如:

[hadoop@HA01hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注意:仅对本次hive启动有效

查看参数设置:

hive(default)> set mapred.reduce.tasks;

(3)参数声明方式

可以在HQL中使用SET关键字设定参数

例如:

hive(default)> set mapred.reduce.tasks=100;

注意:仅对本次hive启动有效。

查看参数设置

hive(default)> set mapred.reduce.tasks;

上述三种设定方式的优先级依次递增。即参数声明覆盖命令行参数,命令行参数覆盖配置文件设定。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

 

五 遇到问题

5.1 Hive1.2.1安装报错解决方法

5.1.1报错为:Terminal initialization failed; falling back to unsupported具体错误为:

[ERROR] Terminalinitialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected

atjline.TerminalFactory.create(TerminalFactory.java:101)

atjline.TerminalFactory.get(TerminalFactory.java:158)

atjline.console.ConsoleReader.(ConsoleReader.java:229)

atjline.console.ConsoleReader.(ConsoleReader.java:221)

atjline.console.ConsoleReader.(ConsoleReader.java:209)

atorg.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)

atorg.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)

atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)

atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)

atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

atjava.lang.reflect.Method.invoke(Method.java:606)

atorg.apache.hadoop.util.RunJar.run(RunJar.java:221)

atorg.apache.hadoop.util.RunJar.main(RunJar.java:136)

Exception inthread "main" java.lang.IncompatibleClassChangeError: Found classjline.Terminal, but interface was expected

atjline.console.ConsoleReader.(ConsoleReader.java:230)

atjline.console.ConsoleReader.(ConsoleReader.java:221)

atjline.console.ConsoleReader.(ConsoleReader.java:209)

atorg.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)

atorg.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)

atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)

atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)

atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

atjava.lang.reflect.Method.invoke(Method.java:606)

atorg.apache.hadoop.util.RunJar.run(RunJar.java:221)

atorg.apache.hadoop.util.RunJar.main(RunJar.java:136)

解决方法:

删除位于$HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar 的 jline-0.9.94.jar 文件,重新启动hadooop,hive即可

2

5.1.2报错为:Relative path in absoluteURI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

具体报错为:

java.lang.IllegalArgumentException:java.net.URISyntaxException:Relative path in absoluteURI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)

atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)

atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)

atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

atjava.lang.reflect.Method.invoke(Method.java:606)

atorg.apache.hadoop.util.RunJar.main(RunJar.java:160)

Caused by:java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative pathin absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

atorg.apache.hadoop.fs.Path.initialize(Path.java:148)

atorg.apache.hadoop.fs.Path.(Path.java:126)

atorg.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:487)

atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430)

... 7more

Caused by:java.net.URISyntaxException:Relative path in absoluteURI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

atjava.net.URI.checkPath(URI.java:1804)

atjava.net.URI.(URI.java:752)

atorg.apache.hadoop.fs.Path.initialize(Path.java:145)

... 10more

解决方法:

解决方案如下:

1、新建文件夹:/home/hadoop/App/hive/temp;

2、.查看hive-site.xml配置,会看到配置值含有"system:java.io.tmpdir"的配置项,将含有"system:java.io.tmpdir"的配置项的值修改为如上地址,重新启动hive即可

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容