大数据学习03-Hive分布式集群部署

系统环境:centos7
软件版本:jdk1.8、zookeeper3.4.8、hadoop2.8.5、hive1.1.0

一、安装

hive官网
在这里插入图片描述

下载hive安装包,上传到linux服务器上,
在这里插入图片描述
解压安装包

 tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /home/local/

重命名文件

mv apache-hive-1.1.0-bin/ hive

二、Hive部署

配置Hive环境

vi /etc/profile

添加如下配置

#hive
export HIVE_HOME=/home/local/hive
export PATH=$PATH:${HIVE_HOME}/bin

数据库设置

mysql -uroot -p
#创建数据库
create database metastore;
#关闭只读
set global read_only=0;
#设置密码安全策略
set global validate_password_policy=0;
#设置密码长度
set global validate_password_length=4;
#更改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
#数据库授权
grant all on metastore.* to hive@'%' identified by 'hive';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';

#刷新权限
flush privileges;
#退出mysql
exit

上传mysql-connector到Hive库目录

cp mysql-connector-java-5.1.49.jar /home/local/hive/lib/

修改hive配置文件

复制hive-env.sh

cp /home/local/hive/conf/hive-env.sh.template /home/local/hive/conf/hive-env.sh

修改hive-env.sh文件,参考如下内容:

vim /home/local/hive/conf/hive-env.sh
export JAVA_HOME=/home/local/java
export HADOOP_HOME=/home/local/hadoop
export HIVE_HOME=/home/local/hive
export HIVE_CONF_DIR=/home/local/hive/conf

复制hive-site.xml

cp /home/local/hive/conf/hive-default.xml.template /home/local/hive/conf/hive-site.xml

修改hive-site.xml

property>
    <name>hive.exec.scratchdir</name>
    <value>/user/hive/tmp</value>
</property>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
</property>
<property>
    <name>hive.querylog.location</name>
    <value>/user/hive/log</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;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>root</value>
  </property>

初始化hive元数据库

schematool -dbType mysql -initSchema root root

分发hive至每个节点服务器

for i in {1..2};do scp -r /home/local/hive/ root@slave${i}:/home/local/;done

三、Hive测试

启动Hive

启动mysql

systemctl start mysql
hive

hive创建数据库

create database testdb;

在这里插入图片描述
创建表

drop table id exists testdb.score;
create table testdb.score
(name string comment "名称",
 gender string comment "性别",
 score int comment "分数")
row format delimited fields terminated by '\t'
lines terminated by '\n'
stored as textfile;

删除表

drop table if exists table;

本地文件导入hive

load data local inpath ''  into table ''

hdfs文件导入hive

在/opt/hive/data/目录下新建stu_score.txt文件,添加如下内容

jone male 30
mike male 40
sunny female 50

文件上传到hdfs上

hdfs dfs -put /opt/hive/data/stu_score.txt /hive/warehouse

hdfs上传到hive表中

load data inpath '/hive/warehouse/stu_score.txt' into table score;

exit;

Java程序将hdfs文件上传到hive
导入依赖

  <!--hadoop-->
  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.8.5</version>
  </dependency>
  <!--hive-->
  <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>1.1.0</version>
  </dependency>

编写测试用例

public class HiveTest {

    public static void main(String[] args) throws SQLException {
        HdfsFileUploader("input/stu_score.txt", "/hive/warehouse");
        HdfsToHiveUploader("/hive/warehouse/stu_score.txt", "score");
    }

    /**
     * 使用sql查询数据库 统计时间 测试性能
     *
     * @param sql
     * @return
     */

    public static List getDataList(String sql) {
        long start = System.currentTimeMillis();
        List list = new ArrayList();
        Connection connection = getConnection();
        try {
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
            while (resultSet.next()) {
                Map map = new HashMap<>();
                for (int i = 1; i <= columnCount; i++) {
                    // 获取字段名称 metaData.getColumnName(i)
                    map.put(metaData.getColumnName(i), resultSet.getObject(i));
                }
                list.add(map);
                // Process the  result set
            }
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        long end = System.currentTimeMillis();
        System.out.println("本次查询耗时" + (end - start) / 1000 + "秒");
        return list;
    }

    /**
     * 获取数据库连接对象
     *
     * @return
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            // Load Hive JDBC driver
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            // Establish connection to Hive
            connection = DriverManager.getConnection("jdbc:hive2://192.168.245.200:10000/testdb", "root", "root");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 本地文件上传到hdfs
     */
    public static void HdfsFileUploader(String localFilePath, String hdfsFilePath) {
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://192.168.245.200:9000"); // 设置HDFS的URL

        try {
            FileSystem fileSystem = FileSystem.get(configuration);
            fileSystem.copyFromLocalFile(new Path(localFilePath), new Path(hdfsFilePath));
            System.out.println("File uploaded to HDFS successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * hdfs上传到hive
     */
    public static void HdfsToHiveUploader(String hdfsFilePath, String tableName) {

        try {
            Connection connection = getConnection();
            Statement statement = connection.createStatement();

            // Create temporary external table in Hive
            String createTableQuery = "CREATE EXTERNAL TABLE IF NOT EXISTS " + tableName + " (City STRING, City_Admaster STRING,City_EN STRING,Province STRING,Province_EN STRING,Region STRING,Tier STRING) " + "ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' " + "STORED AS TEXTFILE " + "LOCATION '/hive/warehouse/china_city_list'";
            statement.execute(createTableQuery);

            // Load data from HDFS to Hive table
            String loadDataQuery = "LOAD DATA INPATH '" + hdfsFilePath + "' OVERWRITE INTO TABLE " + tableName;
            statement.execute(loadDataQuery);

            System.out.println("File uploaded from HDFS to Hive successfully.");

            // Close connection and statement
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、总结

本次实验中,Hive采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。
Hive常用的HiveQL操作命令主要包括:数据定义、数据操作。
Hive实现最大的优势是,对于非程序员,不用学习编写Java MapReduce代码,也可以完成MapReduce任务。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Apache Hive是一个开源的数据仓库基础设施,可以通过使用SQL来查询和分析大规模的数据集。apache-hive-2.1.1-bin.tar.gz是Hive的2.1.1版本的二进制安装包。这个安装包包含了Hive运行所需的所有文件。 在安装Hive之前,我们需要确保已经安装了Java Development Kit (JDK),因为Hive是在Java环境下运行的。然后,我们可以通过以下步骤来安装apache-hive-2.1.1-bin.tar.gz: 1. 首先,我们需要下载apache-hive-2.1.1-bin.tar.gz文件。我们可以从Apache Hive官方网站下载这个文件。 2. 下载完成后,我们需要将下载的文件解压缩。可以使用以下命令进行解压缩:tar -zxvf apache-hive-2.1.1-bin.tar.gz 3. 解压缩完成后,我们需要配置Hive的环境变量。我们可以打开.bashrc或.bash_profile文件,并添加以下配置行: export HIVE_HOME=/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 请将上述配置行中的"/path/to/hive"替换为您解压缩Hive的路径。 4. 保存文件,然后加载这些配置。我们可以使用以下命令加载.bashrc文件:source ~/.bashrc 5. 现在,我们可以启动Hive了。使用以下命令启动:hive 这将启动Hive的命令行界面,我们可以在其中执行Hive的SQL查询和操作。 这就是安装apache-hive-2.1.1-bin.tar.gz的基本步骤。安装完成后,您可以开始使用Hive来查询和分析大规模的数据集。希望这个回答能对您有帮助! ### 回答2: Apache Hive是一个基于Hadoop的数据仓库解决方案,它可以提供结构化查询语言(SQL),以便从大规模分布式数据集中检索和分析数据。hive-2.1.1-bin.tar.gz是Hive的一个版本,其中的bin表示该文件包含了Hive的可执行脚本和二进制文件。 在解压和安装这个tar.gz文件之后,我们可以通过运行Hive的命令行界面来开始使用Hive。Hive提供了类似于SQL的查询语言,称为HiveQL,它允许用户使用SQL语句来查询和分析存储在Hadoop集群上的数据。 Hive可以处理各种类型的数据,包括结构化数据、半结构化数据和非结构化数据。它允许用户定义表结构,将数据导入表中,并执行类SQL查询来处理这些表。Hive使用Hadoop的MapReduce框架来执行查询,因此具有良好的可扩展性和容错性。 除了基本的查询功能外,Hive还支持用户自定义函数(UDFs),以便根据特定需求编写自定义的函数,并将其应用于查询中。此外,Hive还支持分区和分桶的概念,以改进查询性能。 通过使用Hive,用户可以利用Hadoop集群的强大计算能力和存储能力来处理大规模数据集。它提供了一种简化和抽象化的方式来处理和查询大数据,对于那些熟悉SQL语法的用户来说,学习和使用Hive相对容易。 总之,apache-hive-2.1.1-bin.tar.gz是Apache Hive的一个版本,它提供了一个基于Hadoop的数据仓库解决方案,可以通过HiveQL语言来查询和分析大规模分布式数据集。 ### 回答3: apache-hive-2.1.1-bin.tar.gz 是Apache Hive项目的二进制压缩文件。Apache Hive是一个基于Hadoop的数据仓库基础架构工具,用于提供数据的存储、查询和分析。通过Hive,用户可以使用类SQL语言在Hadoop集群中执行数据查询,并将查询结果转换为MapReduce任务进行处理。 Apache Hive提供了一个类似于关系型数据库的查询语言,称为HiveQL,它使用了SQL语法来查询和操作存储在Hadoop HDFS或Hive表中的数据。Hive将HiveQL查询转换为MapReduce任务或Tez DAG(有向无环图)任务,让用户可以轻松地利用Hadoop集群的并行处理能力进行大规模数据处理。 通过Apache Hive,用户可以在不需要掌握复杂的MapReduce编程技术的情况下,利用简单的SQL语法进行数据分析和挖掘。用户可以创建Hive表,将数据加载到表中,并使用HiveQL进行查询和处理。此外,Hive还提供了用户定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义转换函数(UDTF)的能力,让用户可以按照自己的需求扩展和定制Hive的功能。 apache-hive-2.1.1-bin.tar.gz是Hive 2.1.1版本的二进制分发文件。用户可以下载并解压此文件,即可在本地环境中部署和运行Apache Hive。Hive还有其他版本和分发文件可供选择,用户可以根据自己的需求选择适合的版本进行使用。对于想要在Hadoop集群中快速搭建和使用数据仓库工具的用户,Apache Hive提供了一个强大而灵活的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小火柴127

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值