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

原创声明:近期发现在关键字搜索我的文章时,发现很多文章被其他网站直接一字不落的拿去。在这里我先谢谢大家对我写的内容的肯定,我也会继续努力。但是,很多网站连标明都未标明来源,这就让人很可气,毕竟每一篇文章都是我一个字一个字敲出来的。我也不是在抱怨什么,只是希望那些某些站长在“转载”他人文章时标明来源,注明作者。不要只是简单的一个来源互联网。万分感谢。

此外,本站文章如未标注文章来源,则均为作者原创,请转载附上原文链接,并声明作者。保护原创,从我做起,谢谢合作。

如果是我的项目的话,源码会全部上传到我的Github,大家有需要的可以拿去研究,也可以我们一起交流探讨。最后,祝愿每一个默默努力的人都可以取得理想的结果。

-----------吃土少年8

安装Hive

  1. 在线安装MariaDB
    • yum install mariadb-server
    • 会提示你如下内容,按y即可。
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第1张图片
    • 会提示你complete!
  2. 初始化MariaDB
    • 启动MariaDB:systemctl start mariadb
    • 没提示就证明启动了!
    • 设置开机启动:systemctl enable mariadb
    • 会提示你将MariaDB加入了开机任务
    • image-20200619150118167
    • MariaDB初始化配置:mysql_secure_installation
    • 让你输入之前的密码,我们没有就按回车
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第2张图片
    • 问你是否设置密码,y,然后输入新的密码(Linux默认不显示)回车,再次输入新的密码
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第3张图片
    • 不匹配会让你重新输入,然后会进行几项默认配置,我是默认全y
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第4张图片
    • 成功会有如下提示:云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第5张图片
    • 我们登录数据库检查一下mysql -uroot -pxxx
    • xxx是你刚才设置的密码!
    • 成功登录就代表你的MariaDB搞定了!
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第6张图片
    • 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:
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第7张图片
      • 保存,然后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
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第8张图片
    • 配置hive-site.xml文件,但是我们这里不用他的文件,因为需要改的太多了,我们直接利用vim新建一个文件,然后在里面添加内容vim hive-site.xml
      • 插入如下内容:
      •  
         
         
           
                javax.jdo.option.ConnectionURL
                jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true
           

           
                javax.jdo.option.ConnectionDriverName
                com.mysql.cj.jdbc.Driver
           

           
                javax.jdo.option.ConnectionUserName
                hadoop
           

           
                javax.jdo.option.ConnectionPassword
                hivepwd
           

           
                hive.metastore.warehouse.dir
                hdfs://master:8020/hive/warehouse
           

           
                hive.exec.local.scratchdir
                /opt/hive/exec
           

           
                hive.downloaded.resources.dir
                /hive/downloadedsource
           

           
                hive.querylog.location
                /hive/logs
           

         
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第9张图片
      • 保存!
    • 配置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
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第10张图片
    • 拷贝MySQL连接jar包放到lib文件目录下(直接利用FTP工具即可)
      • 这里为了方便,我们还是将连接jar包放到hive的lib文件下
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第11张图片
      • 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,如图就代表成功了!
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第12张图片
  7. 启动Hive并测试
    • 启动Hive:hive
    • 这个问题是因为我们在配置项里有关于HBase的配置,但是我们还没有HBase,所以会有这个错误。
    • image-20200619164739791
    • 这个连接失败原因是因为Hive启动时会直接访问HDFS
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第13张图片
    • 所以我们先启动一下HDFS和YARN
    • start-dfs.shstart-yarn.sh
    • 都启动起来就对了:
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第14张图片
    • 我们再启动Hive,还是会提示你没有HBase,下面还有一段是基于你当前的各组件之间的适配给你的建议,可以忽略!并且我们注意到命令行开头变成了hive>就对了!
    • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第15张图片
    • 查看所有数据库:``
    • 测试:
      • 创建数据库:create database testdb;
      • 使用它:use testdb;
      • 创建一个表:create table student(id int,name string);
      • 插入数据:insert into student values(1,'Tom');
      • 我们插入数据时,会发现竟然是这样???
      • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第16张图片
      • 原因是因为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;
        • 云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析_第17张图片
      • 在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年数据进行操作。

你可能感兴趣的:(云主机部署MariaDB(MySQL)然后安装Hive数据仓库+实例分析)