先介绍一下本地模式和远程模式:
当使用本地模式时,Hive将其元数据存储在本地数据库(例如MySQL)中,使其成为一个独立的数据处理系统。在本地模式中,Hive的配置文件(hive-site.xml)中的连接URL指向本地数据库,而不是嵌入式模式中使用的Derby数据库。此模式适用于小规模的数据处理需求,通常在单个节点上运行。
在远程模式下,Hive被配置为通过Thrift服务与远程的Hive服务器进行通信。这允许将Hive设置为分布式系统,其中Hive客户端和Hive服务器可以分布在不同的节点上。在这种情况下,Hive客户端通过Thrift协议与Hive服务器通信,执行查询和操作。远程模式适用于需要处理大规模数据集的场景,可以充分利用分布式计算资源。
1.本地模式的安装与配置:
该模式需将hive-site.xml中的ConnectionURL指向mysql,并配置好驱动名、数据库连接账号,在slave1下
(1)、Hive的配置:
1.配置hive-site.xml:
vi ?hive-site.xml
<property>
? ? <name>hive.metastore.warehouse.dir</name> ?
? ? <value>/warehousedir/home</value> ?
</property>?
<property>
? ? ? ? ?<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.222.174:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
? ? <name>javax.jdo.option.ConnectionDriverName</name>
? ? <value>com.mysql.jdbc.Driver</value>
</property>
<property>
? ? <name>javax.jdo.option.ConnectionUserName</name>
? ? <value>root</value>
</property>
<property>
? ? <name>javax.jdo.option.ConnectionPassword</name>
? ? <value>123456</value>
</property>
<property>
? ? <name>hive.metastore.schema.verification</name>
? ? <value>false</value>
</property>
(前提:要启动hadoop:cd/usr/hadoop/hadoop-2.7.3 接着sbin/start-all.sh)
2.启动hive:
bin/hive ?--service?
3.远程模式的安装与配置:
(slave2安装mysql,hive做本地模式;slave1作为hive server;slave2作为客户端)
(1)slave2中安装mysql
1. (安装MySQL的引导包)
(1). yum install -y wget ??
(2). wget -I -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm ?
(3). ls查看,若没有则重新安装一次)?
2. 安装文件:rpm -ivh mysql57-community-release-el7-8.noarch.rpm
3. 安装MySQL服务器:yum -y install mysql-community-server
4. 安装补丁:rpm?--import?https://repo.mysql.com/RPM-GPG-KEY-mysql-2022)
5. 重载被MySQL安装修改了的文件:systemctl daemon-reload
6. 首次启动MySQL:systemctl start ?mysqld.service
查看MySQL的运行状态:systemctl status ?mysqld.service
7. 修改数据库密码及密码规则:
(1). 查密码:grep "password" /var/log/mysqld.log (查看的是临时密码)
(2). 登录MySQL:mysql -uroot –p ?(-p后面加临时密码,临时密码与
p之间没有间隔)
(3). 修改密码规则:set global validate_password_policy=0;
? ? ? ? ? ? ? ? set global validate_password_mixed_case_count=0;
? ? ? ? ? ? ? ? set global validate_password_number_count=3;
? ? ? ? ? ? ? ? set global validate_password_special_char_count=0;
? ? ? ? ? ? ? ? set global validate_password_length=1;
(4). 修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
(5). quit 或\q退出后重新登录;
8. 让别的服务器远程访问mysql:
(1).提高权限:create user ‘root'@‘%' identified by'123456';
? ? ? ? ? ? ? ? ? ? ?GRANT ALL PRIVILEGES ON *.* TO ‘root'@‘%'WITH GRANT OPTION;
(2).刷新权限:flush privileges;
(3).修改mysql数据库中的user表:update user set host = '%' where user?= 'root’; (若已经改好则会出错,用Ctrl+c退出即可)
(4).验证是否修改好:use mysql;
? ? ? ? ? ? ? ? ? ? ? ? ?select host, user from user;
(2)将hive2.1.1传到master:/opt/soft
mkdir ?/usr/hive
tar ?-zxvf ? /opt/soft/hive-2.1.1-bin.tar.gz ?-C ? /usr/hive
(4)配置环境变量:
vi /etc/profile:
#hive
export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
(5) 解决jar包依赖和版本冲突
(在master)cp /usr/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar /usr/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/
上传mysql-connector-java-5.1.7-bin.jar包至/usr/hive/apache-hive-2.1.1-bin/lib
(5)分发给其他三台
scp ?–r ?/usr/hive master:/usr
(6)配置hive-env.sh:
cd $HIVE_HOME/conf
cp ?hive-env.sh.template ? hive-env.sh
vi ?hive-env.sh
HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
(7)配置hive-site.xml:
vi ?hive-site.xml
(1).slave1 作为服务端(处理元数据):
hive-site.xml配置如下:<configuration> <property> ? ? <name>hive.metastore.warehouse.dir</name> ? ? <value>/warehousedir/home</value> </property> <property> ? <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> ? <name>javax.jdo.option.ConnectionDriverName</name> ? <value>com.mysql.jdbc.Driver</value> </property> <property> ? <name>javax.jdo.option.ConnectionUserName</name> ? <value>root</value> </property> <property> ? <name>javax.jdo.option.ConnectionPassword</name> ? <value>123456</value> </property> <property> ? <name>hive.metastore.schema.verification</name> ?<value>false</value> </property> <property> ? <name>datanucleus.schema.autoCreateAll</name> ? <value>true</value> </property> <property> ? ? <name>hive.exec.scratchdir</name> ? ? <value>/tmp/hive</value> </property> <property> ? ? <name>hive.exec.local.scratchdir</name> ? ? <value>/tmp/hive/local</value> </property> <property> ? ? <name>hive.downloaded.resources.dir</name> <value>/tmp/hive/resources</value> </property> </configuration>
(2)slave2 作为客户端配置hive ??
<configuration>
<property>
? ? <name>hive.metastore.warehouse.dir</name>?
? ? <value>/warehousedir/home</value>?
</property>
<property>
? ? <name>hive.metastore.local</name>?
? ? <value>false</value>?
</property>
<property>
? ? <name>hive.metastore.uris</name>?
? ? <value>thrift://slave1:9083</value>?
</property>
<property>
? ? <name>hive.exec.scratchdir</name>
? ? <value>/tmp/hive</value>
? </property>
? <property>
? ? <name>hive.exec.local.scratchdir</name>
? ? <value>/tmp/hive/local</value>
? </property>
? <property>
? ? <name>hive.downloaded.resources.dir</name>
? ? <value>/tmp/hive/resources</value>
? </property>
</configuration>
(8)初始化数据库(或不需要)
schematool -dbType mysql -initSchema
(9)启动hive
(slave1)bin/hive --service metastore
(slave2)bin/hive
在slave2中打开hive,此时通过slave1 远程调用mysql,slave1处于元数据服务挂起状态
至此,本地部署和远程部署已全部完成
xml文件也已全部打包好,放在文章顶部,需要者自取