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

news2024/11/30 13:42:53

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

一、下载安装

下载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任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机VPN的连接方法分享

1、首先在手机屏幕左右的滑动,找到手机的设置图标。 2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。 3、然后在打开的更多连接方式页面中点击VPN的菜单项。 4、在打开的VPN设置页面中点击“添加VPN”的按钮。 5、在打开的添加VPN的页面中输入VPN的信息后点击右…

Element-UI 实现动态增加多个不同类型的输入框并校验(双重v-for表单验证)

文章目录 前言定义表单格式表单渲染和验证扩展 前言 在做复杂的动态表单&#xff0c;实现业务动态变动&#xff0c;比如有一条需要动态添加的el-form-item中包含了多个输入框&#xff0c;并实现表单验证&#xff0c;但在element-ui组件库中给出的表单校验中没有这样的格式&…

简析三相电能预付费控制系统的设计与产品选型

摘要&#xff1a;介绍了一种电能预付费系统&#xff0c;主要用于三相动力用户。采用预付费控制器终端和电能表分离的方式&#xff0c;从原有电表读取相关数据用于比较&#xff0c;在尽量少改动原有接线的情况下安装预付费控制系统。采用安全性和稳定性高的RFID卡&#xff0c;数…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

Servlet 会话跟踪基础

文章目录 前言Cookie实例Cookie缺点Cookie案例代码 SessionSession的创建与销毁Session的创建Session的销毁 Session和Cookie的区别不同联系 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 在Web应用程序中&#xff0c;会话跟踪是一种技术&#xff0c;…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统&#xff08;适合新手&#xff09; 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统&#xff0c;具有很强的可扩展性&#xff0c;修改简单&#xff0c;只要有点前端基础就能看懂&#xff1b; 2…

汇编 -20230718

一. 练习&#xff1a; 1. 1-100的和 .text .globl _start_start:mov r0, #0 存放结果mov r1, #0 存放当前数mov r2, #100 结束条件的数addFun:add r1, r1, #1add r0, r0, r1cmp r1, r2bne addFunstop:b stop.end结果展示&#xff1a;

将DAST集成到CI/CD管道中的优势和实施步骤

在当今快速发展的网络环境中&#xff0c;维护Web应用程序的安全更加必要。由于漏洞的出现速度比以往任何时候都要快&#xff0c;将动态应用程序安全测试&#xff08;DAST&#xff09;集成到持续集成/持续部署&#xff08;CI/CD&#xff09;管道中成为改变游戏规则的因素&#x…

uni-app:单位像素rpx

rpx:响应式单位&#xff0c;长宽可以随着屏幕大小改变&#xff0c;其尺寸根据iPhone 6的标准来参考&#xff08;750rpx为占满屏幕宽&#xff0c;1334rpx为占满屏幕长。7501334rpx&#xff09; 例子&#xff1a; 现在展示型号为iPhone 12 pro的型号&#xff0c;这里750px和750…

利用大模型进行法律判决预测

概述 本文研究背景是法律专业人员常用的演绎推理方法&#xff0c;即法律演绎&#xff0c;用于案例分析。 过去的方法主要是通过学习、微调或示例来教授大型语言模型&#xff08;LLM&#xff09;进行法律判决预测。这些方法存在的问题是学习样本有限&#xff0c;解释性差。因此…

02 - 如何制定性能调优策略?

1、性能测试攻略 性能测试是提前发现性能瓶颈&#xff0c;保障系统性能稳定的必要措施。下面我先给你介绍两种常用的测试方法&#xff0c;帮助你从点到面地测试系统性能。 1.1、微基准性能测试 微基准性能测试可以精准定位到某个模块或者某个方法的性能问题&#xff0c;特别…

数仓-零基础小白到入土-学习路线

数仓-零基础小白到入土-学习路线 铺垫一下下讲在前面涉及基础技术栈&#xff1a;中级&#xff1a;全部掌握之后&#x1f446;&#xff1a;去刷面试题&#xff1a; 初级中级高级博主独家面试题&#xff1a;数仓名词&#xff1a;催更我戳戳个人主页&#xff1a;[up自己的网站](ht…

Kafka - 分区中各种偏移量的说明

文章目录 引子名词解释分区中各种偏移量的说明 引子 名词解释 Kafka是一个高性能、高吞吐量的分布式消息系统&#xff0c;被广泛应用于大数据领域。在Kafka中&#xff0c;分区是一个重要的概念&#xff0c;它可以将数据分发到不同的节点上&#xff0c;以实现负载均衡和高可用性…

【PHP面试题73】TCP和UDP的特点和区别是什么?

文章目录 一、前言二、TCP&#xff08;Transmission Control Protocol&#xff09;三、UDP&#xff08;User Datagram Protocol&#xff09;四、TCP和UDP的区别五、总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题&a…

Go速成-常量

1.常量的定义 Go语言常量&#xff0c;定义的值是不能进修修改的&#xff0c;定义常量就是const&#xff0c;常量定义建议全部大写 const PI float32 3.1415946 //显式定义 const (x int 16ys "abc"z)fmt.Print(x,y,s,z) 在定义常量的时候如果没有声明值&#xff…

微信小程序的目录解析--【浅入深出系列001外篇】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录&#xff09;最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源 本系列校训 用免费公开视频&#xff0c;卷…

关于Qt编译android时候一个问题

问题提示为 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring root project android-build. > Could not resolve all artifacts for configuration :classpath.> Could not resolve com.android.tools.build:gradle:3.2.0.…

3天学会Ascend C编程 | Day1 Ascend C基本概念及常用接口

本文分享自《【2023 CANN训练营第一季】——Ascend C算子开发入门——第一次课》&#xff0c;作者&#xff1a;weixin_54022960 。 Ascend C是华为昇腾面向算子开发场景的编程语言&#xff0c;使用C/C作为前端语言的算子开发工具&#xff0c;通过四层接口抽象、并行编程范式、…

【笔记】SpringBoot 2.7.x Feign超时时间配置问题

【笔记】SpringBoot 2.7.x Feign超时时间配置问题 前言使用的技术Feign超时配置处理过程 前言 从 SpringBoot 2.3升级至SpringBoot 2.7.x后&#xff0c;Feign的配置也发生了变化。本文主要记录Feign调用超时时间配置问题。 在解决问题前&#xff0c;也查阅过相关资料&#xff0…

iOS APP外包开发的语言比较

iOS APP是Apple公司运行在iPhone手机上的APP&#xff0c;开发这样的APP有两种开发语言可以选择&#xff0c;都是由Apple公司提供的语言。其中Objective-C使用时间相对较长&#xff0c;有历史兼容考虑&#xff0c;而Swift是新的开发语言&#xff0c;更符合近些年开发语言的发展理…