Hive 3.1.2安装(基于Centos7.x和Hadoop3.2.1)
背景
- Hadoop大数据套件被应用后,进行数据处理就必须编写mapreduce代码。而相当一部分大数据处理需求都是进行数据的查询操作(实际数据库的操作中,读写操作比例也有80%:20%的说法)
- Facebook的工程师也遇到这个问题。编写mapreduce对于程序员还是有一定门槛,但是会使用sql的人群更庞大。所以Facebook就发明了Hive,一个把sql语句转换为mapreduce代码的转换器。
- 不过Hive的使用场景,还是会有一些限制。既然是sql语句,则Hive转换的mapreduce所需要处理的数据就需要有结构跟数据库数据一样。同时Hive将sql转换为mapreduce代码是通过类似模板的操作
- 注意,Hive只是把Sql语句转换为mapreduce代码,也就是一个转换器。所以一般不需要安装集群,安装在一个节点即可。如果担心损坏,一般安装2台,切换者使用也可。
1. 安装环境
- Centos7.x 安装教程
- Hadoop 3.2.1
yarn安装教程
hdfs安装教程 - mysql5.7mysql安装教程
- hive 3.1.2
- mysql 驱动(mysql-connector-java-5.1.39.jar, 可以去maven或者其他仓库获取)
2. 安装步骤
- 正常启动HDFS和YARN
在hadoop安装目录的sbin下,有一个start-all.sh脚本,当hdfs和yarn的配置都设置好之后,可以一键启动hdfs和yarn
如果不想使用这个一键启动脚本,也可以分别调用start-dfs.sh和start-yarn.sh2个脚本
- 安装mysql
- 查看mysql是否运行
netstat -nltp | grep 3306
tcp 0 0 0.0.0.0:3306- systemctl start mysqld 启动mysql服务
- 配置mysql的开机自启服务 systemctl enable mysqld
- 开启远程连接权限
登录mysql:
mysql -uroot -proot
执行sql语句:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1; 这个两个设置以后 密码很简单不会报错
开启远程连接权限:
mysql > grant all privileges on . to ‘root’@’%’ identified by ‘123456’ with grant option;
mysql > flush privileges;- mysql启动正常 开启远程连接
可以使用windows安装的navicat连接linux上的mysql服务器验证以下
- 上传hive的安装包
使用rz软件,或者其他方式如secureCRT的alt+p切换到上传模式,将压缩包上传到第三方软件安装目录下。linux一般第三方软件安装在opt或者usr目录下。我的是安装到/opt/apps目录下
在软件包所在目录下,执行解压缩的shell指令
tar -zxf apache-hive-3.1.2-bin.tar.gz
- 修改配置信息
- 在Hive的安装目录下,找到conf目录,我的目录路径如下opt/apps/hive-3.1.2/conf。将原本的脚本重命名.
cp hive-env.sh.template hive-env.sh
- 编辑hive-env.sh脚本,添加内容。使用vi命令打开文件
vi hive-env.sh
- 文本中,添加内容如下。第一行是指定hadoop的安装路径,第二行是指定Hive安装目录下的conf目录的路径。
export HADOOP_HOME=/opt/apps/hadoop-3.2.1/
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf/
- 创建一个配置文件(在conf目录下)
- 执行如下shell命令
vi hive-site.xml
- 将以下内容拷贝到这个新创建的xml文件中,注意替换javax.jdo.option.ConnectionURL值的mysql所在主机域名,注意替换mysql的账号和用户名。
<configuration>
<!-- 记录HIve中的元数据信息 记录在mysql中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://doit01:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<!-- jdbc mysql驱动 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver