云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析

安装Hive

  1. 在线安装MariaDB
    • yum install mariadb-server
    • 会提示你如下内容,按y即可。
    • image-20200619145546583
    • 会提示你complete!
  2. 初始化MariaDB
    • 启动MariaDB:systemctl start mariadb
    • 没提示就证明启动了!
    • 设置开机启动:systemctl enable mariadb
    • 会提示你将MariaDB加入了开机任务
    • image-20200619150118167
    • MariaDB初始化配置:mysql_secure_installation
    • 让你输入之前的密码,我们没有就按回车
    • image-20200619150257493
    • 问你是否设置密码,y,然后输入新的密码(Linux默认不显示)回车,再次输入新的密码
    • image-20200619150523314
    • 不匹配会让你重新输入,然后会进行几项默认配置,我是默认全y
    • image-20200619150723883
    • 成功会有如下提示:image-20200619150842047
    • 我们登录数据库检查一下mysql -uroot -pxxx
    • xxx是你刚才设置的密码!
    • 成功登录就代表你的MariaDB搞定了!
    • image-20200619151041655
    • exit;退出MariaDB
  3. 安装Hive
    • 获取压缩包:
      • 为了方便,还是老规矩,我们将压缩包提前放到了云主机的opt目录下
    • 解压缩:
      • tar zxvf /opt/apache-hive-2.3.5-bin.tar.gz -C /opt
      • ls一下,检查是否成功:
      • image-20200619151752937
      • 名字有点长,我们利用mv改一下名字:mv /opt/apache-hive-2.3.5-bin /opt/hive-2.3.5
      • ls检查一下:
      • image-20200619152023861
    • 配置环境变量:
      • vim /etc/profile
      • 在末尾追加以下内容:
      • export HIVE_HOME=/opt/hive-2.3.5
        export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:
      • image-20200619152517914
      • 保存,然后source /etc/profile让本次配置生效
  4. 配置Hive
    • 因为路径有点长,我们这次先进到目标目录:cd /opt/hive-2.3.5/conf
    • 老套路,官方给的还是模板文件,我们复制生成对应的配置文件:cp hive-env.sh.template hive-env.sh
      • 编辑这个文件vim hive-env.sh
      • 末尾添加:
      • export HADOOP_HOME=/opt/hadoop-2.8.5
        export HIVE_HOME=/opt/hive-2.3.5
        export HIVE_CONF_DIR=/opt/hive-2.3.5/conf
        export JAVA_HOME=/opt/jdk1.8.0_161
        export HIVE_AUX_JARS_PATH=/opt/hive-2.3.5/lib
      • image-20200619155008475
    • 配置hive-site.xml文件,但是我们这里不用他的文件,因为需要改的太多了,我们直接利用vim新建一个文件,然后在里面添加内容vim hive-site.xml
      • 插入如下内容:
      • <?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
        <configuration>
        <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
        </property>
        <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
        </property>
        <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hadoop</value>
        </property>
        <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hivepwd</value>
        </property>
        <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>hdfs://master:8020/hive/warehouse</value>
        </property>
        <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/opt/hive/exec</value>
        </property>
        <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/hive/downloadedsource</value>
        </property>
        <property>
        <name>hive.querylog.location</name>
        <value>/hive/logs</value>
        </property>
        </configuration>
      • image-20200619155604411
      • 保存!
    • 配置Hive的日志目录:
      • 这里利用模板生成hive-log4j2.properties文件(一个日志持久化保存的插件):
      • cp hive-log4j2.properties.template hive-log4j2.properties
      • 编辑这个文件:vim hive-log4j2.properties
      • Hive中使用log4j2插件进行运行日志的记录,该插件默认将Hive日志保存在本地主机的${sys:java.io.tmpdir}/${sys:user.name}路径下,对初学者来说不容易查找。因此,我们配置修改该路径,将hive的日志保存在/opt/hive/log目录下。后续,hive运行中产生异常时,可以查看该目录下的日志信息,找到具体的异常信息。
      • 找到24行,修改属性为:property.hive.log.dir = /opt/hive/log
      • image-20200619161220733
    • 拷贝MySQL连接jar包放到lib文件目录下(直接利用FTP工具即可)
      • 这里为了方便,我们还是将连接jar包放到hive的lib文件下
      • image-20200619161504005
      • Hive基于JDBC访问MariaDB数据库,因此,需要将mysql连接jar包添加到hive安装目录下的lib目录中,可以直接使用xftp等工具实现这一操作。
    • 解决Apache版本的Hadoop遗留的组件之间的jar包冲突的问题:
      • rm /opt/hive-2.3.5/lib/log4j-slf4j-impl-2.6.2.jar
      • 会让你确认是否删除,y确定。
      • hive和hadoop都使用了SLF4J的jar包,但是版本不同,会造成冲突提示,可以直接删除hive中的SLF4J的jar包,这样他会自动去用Hadoop的jar包。
  5. 配置MariaDB(Hive元数据库配置):
    • 进入MariaDB:mysql -uroot -pxxxx
    • 建库:create database hive;
    • 新建一个完全操作hive数据库的用户hadoop,密码hivepwd:
    • grant all on hive.* to hadoop@'master' identified by 'hivepwd';
    • 使本次配置生效:flush privileges;
    • 退出MariaDB:exit;
  6. 首次启动前初始化Hive的元数据库:
    • schematool -dbType mysql -initSchema
    • 执行一次就行!!!类似于Hadoop的format,如图就代表成功了!
    • image-20200619164259675
  7. 启动Hive并测试
    • 启动Hive:hive
    • 这个问题是因为我们在配置项里有关于HBase的配置,但是我们还没有HBase,所以会有这个错误。
    • image-20200619164739791
    • 这个连接失败原因是因为Hive启动时会直接访问HDFS
    • image-20200619164901297
    • 所以我们先启动一下HDFS和YARN
    • start-dfs.shstart-yarn.sh
    • 都启动起来就对了:
    • image-20200619165112276
    • 我们再启动Hive,还是会提示你没有HBase,下面还有一段是基于你当前的各组件之间的适配给你的建议,可以忽略!并且我们注意到命令行开头变成了hive>就对了!
    • image-20200619165356617
    • 查看所有数据库:``
    • 测试:
      • 创建数据库:create database testdb;
      • 使用它:use testdb;
      • 创建一个表:create table student(id int,name string);
      • 插入数据:insert into student values(1,'Tom');
      • 我们插入数据时,会发现竟然是这样???
      • image-20200619170329278
      • 原因是因为Hive是数据仓库,是基于HDFS操作的,我们的插入操作实际上是Hive将HiveQL转变成了向HDFS上插入数据的MapReduce任务去执行。输出的这些也都是HDFS的日志内容。这和传统的关系型数据库向本地磁盘保存数据是截然不同的。
      • 查询数据:select * from student;
      • image-20200619171258085
      • 可以看到没有表结构,还是和关系型数据库不太一样。这是因为HDFS中的数据都是简单的数据文件(或者说文本文件),并没有数据库、表、字段等概念,只是单纯的数据。而Hive的作用就是给这些数据加上了对应的表信息(库名、表名、字段列表、字段类型),并保存在Hive中。
  8. 基于Hive分析共享单车数据
    • 统计给定数据的每日每小时不同性别用户的骑行数量:
      • 先将19年4月的数据上传到HDFS:
        • 注意!!!原始文件中包含表头行,且数据间有双引号。导入MySQL时可以利用SQL语句去忽略表头行和引号,但该命令在Hive中用不了。因此在将文件上传上HDFS之前,应该先去掉表头行和引号,我们利用vim命令实现这一操作。
        • vim /opt/201904-citibike-tripdata.csv
        • 将光标移动至第一行,按键盘d两下(dd命令),删除第一行(vim命令)
        • 如果不小心删多了,直接:q!(不保存操作,直接退出)
        • vim命令将所有双引号替换成空字符串::%s/"//gc
          • 由于数据量过大,有一百七十多万条,在Hadoop和Hive开启状态下会崩溃,我们先退出Hadoop和Hive。(说白了就是内存小!没办法,谁叫咱们是个学生呢)
          • 在Hive命令下输入:exit;退出Hive,回到linux命令行。
          • image-20200619201304291
          • stop-yarn.sh // 关闭YARN
            stop-dfs.sh // 关闭HDFS
          • 删除刚才的.swp文件
          • rm .201904-citibike-tripdata.csv.swp
          • 重新dd,然后将引号替换掉,替换时,会问你选项,y是替换一个,a是替换所有。我们只需要按一下a键,等着就行。因为数据量有点大。
          • image-20200619180723978
          • 成功后会在末尾提示你多少数据已经替换成功,:wq!保存退出!
          • image-20200619180804297
          • 利用tail 201904-citibike-tripdata.csv查看一下数据是否为我们想要的格式。
          • 重新启动HDFS和YARN
          • 上传到hdfs根路径:hdfs dfs -put /opt/201904-citibike-tripdata.csv /
          • 利用命令查看是否成功上传:hdfs dfs -ls /
      • 在Hive中创建nybikedb库和相关表:
        • 使用Hive命令启动Hive:hive
        • 创建数据库:create database nybikedb;
        • 使用数据库:use nybikedb;
        • 创建数据表:
        • create table tb_trip_1904(
          tripduration int,
          starttime string,
          stoptime string,
          start_station_id int,
          start_station_name string,
          start_station_latitude double,
          start_station_longitude double,
          end_station_id int,
          end_station_name string,
          end_station_latitude double,
          end_station_longitude double,
          bikeid int,
          usertype string,
          birth_year int,
          gender tinyint
          )ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
        • 注意:
          • Hive中的数据类型和MySQL中有相似的,也有不同的,比较典型的是字符串类型使用string表示。Hive中的数据类型可以从官网的介绍中详细了解:官方网站
          • Hive的建表语句末尾,需要显式声明ROW FORMAT DELIMITED FIELDS TERMINATED BY ',',指定实际的数据文件中,字段与字段之间使用的分隔符是逗号。
      • 将HDFS里的文件交给Hive管理:
        • load data inpath '/201904-citibike-tripdata.csv'
          into table tb_trip_1904;
        • 查看前两条数据检查一下:select * from tb_trip_1904 limit 2;
        • image-20200619195907611
      • 在Hive上创建用于保存结果的表:
        • create table tb_day_hour_count(
          trip_year int comment '数据的年份',
          trip_month int comment '数据的月份',
          trip_day int comment '数据的日期',
          trip_dayofweek int comment '星期几',
          trip_hour int comment '数据的小时',
          gender int comment '用户性别',
          trip_count int comment '日骑行总数'
          )ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
      • 在Hive上执行查询语句,将结果保存到保存结果的表:
        • insert into tb_day_hour_count
          select
          year(starttime) as trip_year,
          month(starttime) as trip_month,
          day(starttime) as trip_day,
          dayofweek(starttime) as trip_dayofweek,
          hour(starttime) as trip_hour,
          gender,
          count(*) as trip_count
          from
          tb_trip_1904
          group by
          year(starttime),
          month(starttime),
          day(starttime),
          dayofweek(starttime),
          hour(starttime),
          gender;
        • 保存完后我们可以检查一下tb_day_hour_count表,因为不多可以sellect *一下:select * from tb_day_hour_count;
        • 可以看到是2153条数据,存在我们之前在web项目中的那种数据缺失情况,暂时先不考虑补齐。
        • image-20200619200442327
        • 同理对20年数据进行操作。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值