报错1:Error: Error while compiling statement: FAILED: ParseException line 2:0 missing EOF at 'select' near ')' (state=42000,code=40000)
解决办法:把单引号换成双引号
报错2:0: jdbc:hive2://localhost:10000 (closed)>
解决办法:start-all.sh (hdfs没起来),或者mysql连接不上服务器(连接本地(修改hive-site.xml文件localhost换成本地IP地址)或者使用docker),netstat -ntlp | grep 3306,查看3306端口占用情况。
1.内部连接:
select
a.name as aname,
a.num as anum,
b.name as bname,
b.nick as bnick
from t_a a
inner join t_b b
on a.name=b.name
复制代码
2.注意:多个字段必须用逗号隔开,一般语句不用逗号。
一、为什么使用Hive
-
直接使用hadoop所面临的问题 人员学习成本太高 项目周期要求太短 MapReduce实现复杂查询逻辑开发难度太大
-
为什么要使用Hive 操作接口采用类SQL语法,提供快速开发的能力。 避免了去写MapReduce,减少开发人员的学习成本。 功能扩展很方便。、
二、Hive的特点
1.可扩展 Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
2.延展性 Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
3.容错 良好的容错性,节点出现问题SQL仍可完成执行
三、hive安装
1.最简安装:用内嵌derby作为元数据库
准备工作:安装hive的机器上应该有HADOOP环境(安装目录,HADOOP_HOME环境变量)
安装:直接解压一个hive安装包即可
此时,安装的这个hive实例使用其内嵌的derby数据库作为记录元数据的数据库,此模式不便于让团队成员之间共享协作
2.标准安装:将mysql作为元数据库。
3.mysql安装
1.上传mysql安装包
2.解压:
[root@mylove ~]# tar -xvf MySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar
3.安装mysql的server包
[root@mylove ~]# rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
依赖报错:
缺perl
yum install perl
安装完perl后 ,继续重新安装mysql-server
(可以配置一个本地yum源进行安装:
1、先在vmware中给这台虚拟机连接一个光盘镜像
2、挂在光驱到一个指定目录:mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
3、将yum的配置文件中baseURL指向/mnt/cdrom
[root@mylove ~]# rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
又出错:包冲突conflict with
移除老版本的冲突包:mysql-libs-5.1.73-3.el6_5.x86_64
[root@mylove ~]# rpm -e mysql-libs-5.1.73-3.el6_5.x86_64 --nodeps
继续重新安装mysql-server
[root@mylove ~]# rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
成功后,注意提示:里面有初始密码及如何改密码的信息
初始密码:/root/.mysql_secret
改密码脚本:/usr/bin/mysql_secure_installation
4.安装mysql的客户端包:
[root@mylove ~]# rpm -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
5.启动mysql的服务端:
[root@mylove ~]# service mysql start
Starting MySQL. SUCCESS!
6.修改root的初始密码:
[root@mylove ~]# /usr/bin/mysql_secure_installation 按提示
7.测试:
用mysql命令行客户端登陆mysql服务器看能否成功
[root@mylove ~]# mysql -uroot -proot
mysql> show databases;
8.给root用户授予从任何机器上登陆mysql服务器的权限:
mysql> grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
注意点:要让mysql可以远程登录访问
最直接测试方法:从windows上用Navicat去连接,能连,则可以,不能连,则要去mysql的机器上用命令行客户端进行授权:
在mysql的机器上,启动命令行客户端:
mysql -uroot -proot
mysql>grant all privileges on *.* to 'root'@'%' identified by 'root的密码' with grant option;
mysql>flush privileges;
3.2.2.hive的元数据库配置
vi conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist&