环境信息

-购买操作系统选择centos7(7的任何一个版本都可以),如果选错了可以在阿里云管理面板的-更多–云盘和镜像–更换操作系统。

image.png

在阿里云购买ecs-购买后机器网卡环境(2G内存不够,选择更大的内存机器):
公网IP-8.134.80.143、内网IP-172.30.40.95

设置阿里云端口映射:

开放3个端口
50070:hdfs管理端口
8088 : yarn 管理端口
3306: mysql连接端口
10000 : hive 客户端远程连接端口
10002 : hive web界面端口

配置入口–>安全组–>配置规则
点击手动添加,添加3306、8088、10000、50070、10002端口

开始安装

整个一套安装配置内容比较多,顺序是:安装zookeeper–安装hadoop—安装mysql—安装hive–sql测试

安装zookeeper ,zookeeper版本不要选最后一个版本,选上下兼容hadoop、hive的版本,这里选3.4.9就可以了。

安装java

yum -y install java-1.8.0-openjdk

配置java环境变量
执行:

export JAVA_HOME=/usr/lib/jvm/jre 
export JRE_HOME=/usr/lib/jvm/jre 
export CLASSPATH=.:{JAVA_HOME}/lib:{JRE_HOME}/lib  
export PATH={JAVA_HOME}/bin:PATH
source /etc/profile

下载zookeeper

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

解压

tar -xzvf zookeeper-3.4.9.tar.gz

配置环境变量

vim /etc/profile

添加:

export ZOOKEEPER_HOME=/root/zookeeper-3.4.9
export PATH=ZOOKEEPER_HOME/bin:PATH

刷新环境变量

source /etc/profile

复制配置文件

cp /root/zookeeper-3.4.9/conf/zoo_sample.cfg /root/zookeeper-3.4.9/conf/zoo.cfg

创建目录:

/root/zookeeper-3.4.9/run
/root/zookeeper-3.4.9/run/data
/root/zookeeper-3.4.9/run/log

修改配置文件

vim /root/zookeeper-3.4.9/conf/zoo.cfg

修改如下两处(没有就增加):
dataDir=/root/zookeeper-3.4.9/run/data
dataLogDir=/root/zookeeper-3.4.9/run/log

启动zookeeper

zkServer.sh start

zk安装完成。

安装hadoop

hadoop,包括hdfs(分布式文件)、yarn(资源调度)、mapreduce(运算)
hadoop和hbase 有依赖关系,
hadoop这里选3.1.4,hbase 选2.3.3 能够兼容

下载hadoop

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz

解压:

tar -zxvf hadoop-3.1.4.tar.gz

配置环境变量

vim /etc/profile

添加两行

export HADOOP_HOME=/root/hadoop-3.1.4
export  PATH={HADOOP_HOME}/bin:PATH
image.png

刷新环境变量

source /etc/profile

修改hadoop配置文件

vim /root/hadoop-3.1.4/etc/hadoop/hadoop-env.sh
设置java_home
修改JAVA_HOME=/usr/lib/jvm/jre

创建目录:

mkdir /root/hadoop-3.1.4/run
mkdir /root/hadoop-3.1.4/run/hadoop

修改hosts文件,

vi /etc/hosts

添加1行(172.30.40.95为服务器内网地址):
172.30.40.95 hadoop1 hadoop1

image.png

修改配置文件core-site.xml

vim /root/hadoop-3.1.4/etc/hadoop/core-site.xml

修改hdfs配置,内容(没有就添加):



        fs.defaultFS
        hdfs://hadoop1:8020
    
    
        
        hadoop.tmp.dir
        /root/hadoop-3.1.4/run/hadoop
    
    
    hadoop.native.lib
    false
    
  

    hadoop.proxyuser.root.hosts
    *


    hadoop.proxyuser.root.groups
    *



image.png

修改hdfs-site.xml文件

vim /root/hadoop-3.1.4/etc/hadoop/hdfs-site.xml

添加hdfs副本数配置,这里配置1 ,内容(172.30.40.95为服务器内网地址):



        dfs.replication
        1
    
   
        dfs.secondary.http.address
        172.30.40.95:50070
    


image.png

修改文件:mapred-site.xml

vim /root/hadoop-3.1.4/etc/hadoop/mapred-site.xml
内容:


    
        mapreduce.framework.name
        yarn
    

修改文件:yarn-site.xml

vim /root/hadoop-3.1.4/etc/hadoop/yarn-site.xml

内容:


    
        
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

主机访问设置
在root用户目录下执行,也就是/root目录下

ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

格式化hdfs

/root/hadoop-3.1.4/bin/hdfs namenode -format

image.png

修改hdfs启动脚本:

vim /root/hadoop-3.1.4/sbin/start-dfs.sh

顶部增加4行
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

image.png

修改hdfs停止脚本:

vim /root/hadoop-3.1.4/sbin/stop-dfs.sh

顶部增加4行
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

修改yarn启动脚本:

vim /root/hadoop-3.1.4/sbin/start-yarn.sh

顶部增加3行
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

修改yarn停止脚本:

vim /root/hadoop-3.1.4/sbin/stop-yarn.sh

顶部增加3行
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

启动hdfs

export JAVA_HOME=/usr/lib/jvm/jre
(停止脚本:/root/hadoop-3.1.4/sbin/stop-dfs.sh)
/root/hadoop-3.1.4/sbin/start-dfs.sh

浏览器访问验证
地址:http://8.134.80.143:50070/

image.png

启动yarn
(停止脚本:/root/hadoop-3.1.4/sbin/stop-yarn.sh)

/root/hadoop-3.1.4/sbin/start-yarn.sh

浏览器访问验证
地址:http://8.134.80.143:8088/

image.png

hadoop 安装完成。

安装mysql

hive 运行需要mysql
下载mysql源

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装mysql源
yum -y install mysql57-community-release-el7-10.noarch.rpm

安装MySQL

yum -y install mysql-server mysql

启动(停止/重启/查看状态) start(/stop/restart/status) MySQL 服务

systemctl start mysqld

修改mysql配置文件:

vim /etc/my.cnf
末尾增加:
skip-grant-tables
[mysql]
default-character-set =utf8

image.png

重启mysql

systemctl restart mysqld

登陆mysql,修改root密码,设置登陆ip。

mysql -u root -p
(密码因为还没设置,直接回车)

image.png

设置密码:

use mysql;
update user set host = ‘%’;
set password for ‘root’@’localhost’ =password(‘q1w2e3r4’);
flush privileges;

重新修改配置文件:

vim /etc/my.cnf
注释掉:#skip-grant-tables

重启mysql:

systemctl restart mysqld

用 本地navicat 连接mysql,测试mysql是否安装成功

image.png

再navicat里面创建名称为hive的数据库

image.png

mysql安装完成。

安装hive

hive 运行依赖hadoop、mysql,前面已经安装好了。
下载hive

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

解压:

tar -zxvf apache-hive-3.1.2-bin.tar.gz

修改环境变量

vim /etc/profile

添加:

export HIVE_HOME=/root/apache-hive-3.1.2-bin
export HIVE_CONF_DIR={HIVE_HOME}/conf
export CLASSPATH=.CLASSPATH:HIVE_HOME/lib
export PATH=PATH:$HIVE_HOME/bin

刷新环境变量:

source /etc/profile

hadoop下建立路径并授权

hadoop fs -mkdir -p /var/hive/warehouse
hadoop fs -mkdir -p /var/hive/tmp
hadoop fs -mkdir -p /tmp/hive
hadoop fs -chmod 777 /var/hive/warehouse
hadoop fs -chmod 777 /var/hive/tmp
hadoop fs -chmod 777 /tmp/hive

修改hive配置文件

复制文件

cp /root/apache-hive-3.1.2-bin/conf/hive-env.sh.template /root/apache-hive-3.1.2-bin/conf/hive-env.sh
cp /root/apache-hive-3.1.2-bin/conf/hive-default.xml.template /root/apache-hive-3.1.2-bin/conf/hive-site.xml

替换冲突jar

cp /root/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /root/apache-hive-3.1.2-bin/lib/guava-27.0-jre.jar
mv /root/apache-hive-3.1.2-bin/lib/guava-19.0.jar /root/apache-hive-3.1.2-bin/lib/guava-19.0.jar-old

下载、复制mysql 驱动jar
安装zip

yum -y install zip unzip

下载驱动

wget https://cdn.mysql.com//archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip

解压

unzip mysql-connector-java-5.1.46.zip

复制

cp /root/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /root/apache-hive-3.1.2-bin/lib/mysql-connector-java-5.1.46-bin.jar

vim /root/apache-hive-3.1.2-bin/conf/hive-env.sh

修改3处(没有就添加)

export HADOOP_HOME=/root/hadoop-3.1.4
export HIVE_CONF_DIR=/root/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/root/apache-hive-3.1.2-bin/lib

修改hive-site.xml文件-建议sftp下载到本地,用文本编辑器修改,需要修改的内容过多。
文件路径是:/root/apache-hive-3.1.2-bin/conf/hive-site.xml
涉及如下内容的节点都需要找到并修改:


    hive.metastore.warehouse.dir
    /var/hive/warehouse
    location of default database for the warehouse
  

    hive.exec.scratchdir
    /tmp/hive
    HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: {hive.exec.scratchdir}/ is created, with{hive.scratch.dir.permission}.
  

    hive.exec.local.scratchdir
    /var/hive/tmp/root
    Local scratch space for Hive jobs
  

    hive.exec.local.scratchdir
    /var/hive/tmp/root
    Local scratch space for Hive jobs
  

    javax.jdo.option.ConnectionURL
    jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
    
     
    
  

  
    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
    ******
    password to use against metastore database
  

  
    hive.metastore.schema.verification
    false
    
      Enforce metastore schema version consistency.
      True: Verify that version information stored in is compatible with one from Hive jars.  Also disable automatic
            schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
            proper metastore schema migration. (Default)
      False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
    
  

    hive.txn.xlock.iow
    true
    
      
    
  

注意
上面的节点,hive.txn.xlock.iow是要删除description内容,javax.jdo.option.ConnectionPassword填写mysql root用户的密码。
除了上面的节点,还需要全文查找${system:user.name}替换为root,全文查找${system:java.io.tmpdir}替换为/var/hive/tmp

修改完后记得上传到服务器覆盖文件。

初始化hive

schematool -initSchema -dbType mysql

启动hive
hive 启动一定需要机器有足够内存,内存不够会自动killed,hive启动直接进入sql界面。

/root/apache-hive-3.1.2-bin/bin/hive

进入hive后先设置本地运行:

set hive.exec.mode.local.auto=true;

创建表:

create table tb_1(t1 string);

插入数据:

insert into tb_1(t1) values(‘s23’);

查询数据:

select t1 from tb_1;

退出hive:

exit;

数据导出到文件:

/root/apache-hive-3.1.2-bin/bin/hive -e “select * from tb_1” >/root/tb_1.txt

hive还有一个远程服务和web管理界面
启动web界面(这个web界面没什么功能,就能看下服务是否启动),主要测试远程服务

/root/apache-hive-3.1.2-bin/bin/hive –service hiveserver2

浏览器访问:

image.png

启动服务后,10000端口可以进行远程连接,前面是hive直接写sql,现在启动远程连接后,可以beeline去连接,beeline展示信息会友好很多。
beeline 连接:

beeline -u jdbc:hive2://localhost:10000

beeline执行查询语句:

select * from tb_1;

image.png

测试成功,部署调用完成。

本来这篇已经结束了,有人咨询,是否有navicat,plsql 类似这样的客户端连接hive,这里说一下,

启动了远程连接服务后就能用客户端远程连接操作(/root/apache-hive-3.1.2-bin/bin/hive –service hiveserver2)
工具使用squirrel,就是一个可以双击运行的jar包,官网下最新的就可以了。
顺序和逻辑: 下载客户端—到安装hive的服务器下载驱动(有个jdbc目录,已经帮你把驱动包封装好了)–本地安装客户端–本地添加服务器下载的驱动,取名hive—新建连接–填写连接地址连接。

下载客户端
下载地址:https://nchc.dl.sourceforge.net/project/squirrel-sql/1-stable/4.1.0/squirrel-sql-4.1.0-standard.jar
如果嫌下载慢,可以从我港区地址下载(如果不能用了就从官网地址下载),我嫌弃慢,在我港区服务器上做了一层cdn:https://p9pan.cn/cdn/squirrel-sql-4.1.0-standard.jar

双击运行就可以安装,安装除了安装路径,其它所有选项默认就可以了,不用选什么msyql、oracle什么的。

我安装在D盘:D:Program Filessquirrelsquirrel-sql-4.1.0
进入目录,双击squirrel-sql.bat 运行squirrel,打开后是这样的。

image.png

左边有一个驱动,一个连接会话 两个tab,需要先添加驱动,再添加会话。

image.png

先去安装hive的服务器把驱动下载下来(不要从百度搜下载,网络下载hive版本有区别,容易产生未知问题)。
下载驱动
驱动文件官网已经整理好了,就一个jar包,文件在:
/root/apache-hive-3.1.2-bin/jdbc/hive-jdbc-3.1.2-standalone.jar

image.png

下载到本地后就配置驱动
点击drivers 点击加号进去配置

image.png

填写的信息:
名称:hive
地址(8.134.80.143是阿里云服务器公网地址):jdbc:hive2://8.134.80.143:10000
类名:org.apache.hive.jdbc.HiveDriver

image.png

配置顺利后,左侧驱动会显示 勾。

image.png

切换到连接会话tab,添加连接:
填写连接名称、选择hive、 地址(8.134.80.143是阿里云服务器公网地址):jdbc:hive2://8.134.80.143:10000

用户名和密码空着–点击连接。

*****************************注意*******************************
只做查询操作,不用用户名和密码,
但如果需要更新数据,就需要使用用户,用户可以用root,
密码是创建mysql用户时mysql的用户和密码。
和hive里面一样,更新操作会话
先执行set hive.exec.mode.local.auto=true;
然后再执行更新操作。
image.png
image.png

成功连接hive

image.png

写sql
切换到sql tab页,就可以写sql了,和navicat、plsql相仿,回到了sql96状态, 执行sql查询:select * from tb_1,点击黑色跑步一样的图标就是执行sql。

image.png

界面对照navicat 、plsql的功能找位置几分钟就上手,不细讲。

SpringBoot接入调用

添加springboot连接hive,操作演示jdbc查询数据。

引用

pom文件引入

 
        
            org.apache.hive
            hive-jdbc
            3.1.2
            
                
                    ch.qos.logback
                    logback-classic
                
                
                    org.apache.logging.log4j
                    log4j-slf4j-impl
                
                
                    org.slf4j
                    slf4j-log4j12
                
                
                    org.eclipse.jetty
                    *
                
                
                    org.eclipse.jetty.orbit
                    *
                
                
                    org.eclipse.jetty.aggregate
                    *
                
                
                    tomcat
                    *
                
                
                    javax.servlet
                    servlet-api
                
                
                    org.mortbay.jetty
                    *
                
            
        
        
            com.alibaba
            druid
            1.1.10
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        

注意:千万不要直接引用-org.apache.hive -hive-jdbc依赖,需要加上exclusions,因为hive自身的依赖jar会与springboot的tomcat冲突,导致启动报错。

配置文件application.yaml 的hive服务器参数

内容(8.134.80.143是阿里云公网IP):

hive:
  url: jdbc:hive2://8.134.80.143:10000
  driver-class-name: org.apache.hive.jdbc.HiveDriver
  type: com.alibaba.druid.pool.DruidDataSource
  user: root
  password: q1w2e3r4
  initialSize: 1
  minIdle: 3
  maxActive: 20
  maxWait: 60000
  timeBetweenEvictionRunsMillis: 60000
  minEvictableIdleTimeMillis: 30000
  validationQuery: select 1
  testWhileIdle: true
  testOnBorrow: false
  testOnReturn: false
  poolPreparedStatements: true
  maxPoolPreparedStatementPerConnectionSize: 20
  connectionErrorRetryAttempts: 0
  breakAfterAcquireFailure: true

image.png

创建hive操作和测试类

连接配置类-HiveDruidConfig:
内容:


import com.alibaba.druid.pool.DruidDataSource;
import lombok.Data;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;

@Data
@Configuration
@ConfigurationProperties(prefix = "hive")
public class HiveDruidConfig {

    private String url;
    private String user;
    private String password;
    private String driverClassName;
    private int initialSize;
    private int minIdle;
    private int maxActive;
    private int maxWait;
    private int timeBetweenEvictionRunsMillis;
    private int minEvictableIdleTimeMillis;
    private String validationQuery;
    private boolean testWhileIdle;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private boolean poolPreparedStatements;
    private int maxPoolPreparedStatementPerConnectionSize;
    private int connectionErrorRetryAttempts;
    private boolean breakAfterAcquireFailure;

    @Bean(name = "hiveDruidDataSource")
    @Qualifier("hiveDruidDataSource")
    public DataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(url);
        datasource.setUsername(user);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
        datasource.setConnectionErrorRetryAttempts(connectionErrorRetryAttempts);
        datasource.setBreakAfterAcquireFailure(breakAfterAcquireFailure);
        return datasource;
    }

    @Bean(name = "hiveDruidTemplate")
    public JdbcTemplate hiveDruidTemplate(@Qualifier("hiveDruidDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

}

业务实现类-HiveService:


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
public class HiveService {

    @Autowired
    @Qualifier("hiveDruidDataSource")
    private DataSource druidDataSource;

    private String tableName = "tb_1";


    public  Map queryHiveData() {
        String sqlString = "select * from "+tableName;
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        Map result = new HashMap();
        try {
            conn = druidDataSource.getConnection();
            statement = conn.createStatement();
            List list = new ArrayList();
            rs = statement.executeQuery(sqlString.toString());
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            while (rs.next()) {
                Map obj = new HashMap();
                // 遍历每一列
                for (int i = 1; i 

业务类查询,查询的是前面步骤hive后台创建的表 tb_1,自己写的时候根据自己创建的表修改表名。

hive的controller测试类-HiveController:


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@Slf4j
@RestController
public class HiveController {

    @Autowired
    private HiveService hiveService;


    @RequestMapping("hiveQuery")
    public Map query(){
        Map info = hiveService.queryHiveData();
        return info;
    }


}

目录结构:

image.png

测试

浏览器访问查询接口:http://localhost:8080/hiveQuery
查询tb_1 表的数据。

image.png

测试结束。

文章来源于互联网:阿里云-centos7-单机安装部署zookeeper+Hadoop+mysql+Hive以及服务端hive-sql测试+增加window客户端squirrel连接hive-执行sql操作内容、…

发表评论