大数据技术暑期实习四

mac2022-06-30  87

一、入门概念

  1.1.什么是Hive

   Hive是有Facebook开源,用于解决海量数据结构化日志的数据统计,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。其本质是将HQL转化成为MR程序。

    1)Hive处理的数据存储在HDFS上

    2)Hive分析数据的底层实现是MR

    3)执行程序在Yarn上

  1.2.Hive优缺点

   1.2.1优点:

    1)操作接口采用类SQL语法,提供快速开发能力,容易上手

    2)避免写MR程序,减少开发成本

    3)由于执行延时较高,所以适合做大规模历史数据的分析处理

    4)支持用户自定义函数,用户可以根据需求实现自己的函数

  1.2.2缺点:

    1)SQL表达能力有限,迭代式算法无法实现,数据挖掘能力欠缺

    2)执行效率低,Hive自动生成的MR作业 通常不够智能化

    3)Hive调优比较困难,粒度较粗

  1.3.架构原理

   

  1.4.索引

  Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。

二、Hive安装部署

  2.1.安装地址

   2.1.1.Hive官网地址

   http://hive.apache.org/

   2.1.2.文档查看地址

   https://cwiki.apache.org/confluence/display/Hive/GettingStarted

   2.1.3.下载地址

   http://archive.apache.org/dist/hive/

   2.1.4.github地址

   https://github.com/apache/hive

  2.2.Hive安装部署

   2.2.1.Hive安装及配置

  (1)把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下

  (2)解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面

[atguigu@hadoop102 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/

 

  (3)修改apache-hive-1.2.1-bin.tar.gz的名称为hive

[atguigu@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive

 

  (4)修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh    

[atguigu@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh

 

       (5)配置hive-env.sh文件

         (a)配置HADOOP_HOME路径

export HADOOP_HOME=/opt/module/hadoop-2.7.2

 

         (b)配置HIVE_CONF_DIR路径

export HIVE_CONF_DIR=/opt/module/hive/conf

 

   2.2.2.Hadoop集群配置

  (1)必须启动hdfs和yarn

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

 

  (2)在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir /tmp [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir -p /user/hive/warehouse [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /tmp [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /user/hive/warehouse

   2.2.3.Hive基本操作

  (1)启动hive     [atguigu@hadoop102 hive]$ bin/hive   (2)查看数据库     hive> show databases;   (3)打开默认数据库     hive> use default;   (4)显示default数据库中的表     hive> show tables;   (5)创建一张表     hive> create table student(id int, name string);   (6)显示数据库中有几张表     hive> show tables;   (7)查看表的结构     hive> desc student;   (8)向表中插入数据     hive> insert into student values(1000,"ss");   (9)查询表中数据     hive> select * from student;   (10)退出hive     hive> quit;

 

三、 将本地文件导入Hive案例

需求

将本地/opt/module/datas/student.txt这个目录下的数据导入到hive的student(id int, name string)表中。

  3.1.数据准备

   在/opt/module/datas这个目录下准备数据

   (1)在/opt/module/目录下创建datas

[atguigu@hadoop102 module]$ mkdir datas

 

   (2)在/opt/module/datas/目录下创建student.txt文件并添加数据

[atguigu@hadoop102 datas]$ touch student.txt [atguigu@hadoop102 datas]$ vi student.txt 1001 zhangshan 1002 lishi 1003 zhaoliu 注意以tab键间隔。 回到hive,将数据导入,语句如下。 load data local inpath "/data/app/datas/student.txt" into table student;

  3.2.Hive实际操作

  (1)启动hive     [atguigu@hadoop102 hive]$ bin/hive   (2)显示数据库     hive> show databases;   (3)使用default数据库     hive> use default;   (4)显示default数据库中的表     hive> show tables;   (5)删除已创建的student表     hive> drop table student;   (6)创建student表, 并声明文件分隔符’\t’     hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';   (7)加载/opt/module/datas/student.txt 文件到student数据库表中。     hive> load data local inpath '/opt/module/datas/student.txt' into table student;   (8)Hive查询结果     hive> select * from student;     OK     (1001), (zhangshan)     1002 lishi     1003 zhaoliu     Time taken: 0.266 seconds, Fetched: 3 row(s)

  3.3.遇到的问题

  再打开一个客户端窗口启动hive,会产生java.sql.SQLException异常。

 Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException:    Unable to instantiate    org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)   Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:86)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104)    at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005)    at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024)    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503)     ... 8 more

 

   原因是,Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore;

四、Mysql安装(参考我同学的博客)

  Ubuntu下安装mysql和可视化工具超级简单教程

五、Hive元数据配置到Mysql

  5.5.1 驱动拷贝

    1.在/opt/software/mysql-libs目录下解压mysql-connector-java-5.1.27.tar.gz驱动包

[root@hadoop102 mysql-libs]# tar -zxvf mysql-connector-java-5.1.27.tar.gz

 

    2.拷贝/opt/software/mysql-libs/mysql-connector-java-5.1.27目录下的mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/

[root@hadoop102 mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

  5.5.2 配置Metastore到MySql

    1.在/opt/module/hive/conf目录下创建一个hive-site.xml

[atguigu@hadoop102 conf]$ touch hive-site.xml [atguigu@hadoop102 conf]$ vi hive-site.xml

    2.根据官方文档配置参数,拷贝数据到hive-site.xml文件中

      https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>000000</value> <description>password to use against metastore database</description> </property> </configuration>

 

      3.配置完毕后,如果启动hive异常,可以重新启动虚拟机。(重启后,别忘了启动hadoop集群)

  5.5.3 多窗口启动Hive测试

      1.先启动MySQL

[atguigu@hadoop102 mysql-libs]$ mysql -uroot -p000000

 

查看有几个数据库

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+

      2.再次打开多个窗口,分别启动hive

        

[atguigu@hadoop102 hive]$ bin/hive

 

      3.启动hive后,回到MySQL窗口查看数据库,显示增加了metastore数据库

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | metastore | | mysql | | performance_schema | | test | +--------------------+

六、HiveJDBC访问

  6.1 启动hiveserver2服务

[atguigu@hadoop102 hive]$ bin/hiveserver2

  6.2 启动beeline

 

[atguigu@hadoop102 hive]$ bin/beeline Beeline version 1.2.1 by Apache Hive beeline>

 

  6.3 连接hiveserver2

beeline> !connect jdbc:hive2://hadoop102:10000(回车) Connecting to jdbc:hive2://hadoop102:10000 Enter username for jdbc:hive2://hadoop102:10000: atguigu(回车) Enter password for jdbc:hive2://hadoop102:10000: (直接回车) Connected to: Apache Hive (version 1.2.1) Driver: Hive JDBC (version 1.2.1) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://hadoop102:10000> show databases; +----------------+--+ | database_name | +----------------+--+ | default | | hive_db2 | +----------------+--+

七、ive常用交互命令

[atguigu@hadoop102 hive]$ bin/hive -help usage: hive -d,--define <key=value> Variable subsitution to apply to hive commands. e.g. -d A=B or --define A=B --database <databasename> Specify the database to use -e <quoted-query-string> SQL from command line -f <filename> SQL from files -H,--help Print help information --hiveconf <property=value> Use value for given property --hivevar <key=value> Variable subsitution to apply to hive commands. e.g. --hivevar A=B -i <filename> Initialization SQL file -S,--silent Silent mode in interactive shell -v,--verbose Verbose mode (echo executed SQL to the console)

  1.“-e”不进入hive的交互窗口执行sql语句

[atguigu@hadoop102 hive]$ bin/hive -e "select id from student;"

  2.“-f”执行脚本中sql语句

        (1)在/opt/module/datas目录下创建hivef.sql文件

[atguigu@hadoop102 datas]$ touch hivef.sql 文件中写入正确的sql语句 select *from student;

        (2)执行文件中的sql语句

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql

   (3)执行文件中的sql语句并将结果写入文件中

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql > /opt/module/datas/hive_result.txt

八、Hive其他命令操作

  1.退出hive窗口:

hive(default)>exit; hive(default)>quit; 在新版的hive中没区别了,在以前的版本是有的: exit:先隐性提交数据,再退出; quit:不提交数据,退出;

  2.在hive cli命令窗口中如何查看hdfs文件系统

hive(default)>dfs -ls /;

  3.在hive cli命令窗口中如何查看本地文件系统

hive(default)>! ls /opt/module/datas;

  4.查看在hive中输入的所有历史命令

1)进入到当前用户的根目录/root或/home/atguigu (2)查看. hivehistory文件     [atguigu@hadoop102 ~]$ cat .hivehistory

九、压缩和存储

  1. 资源准备

    1.1  虚拟机能连接外网;

    1.2  Jar包准备(Hadoop源码,jdk8,maven,protobuf);

    (1)hadoop-2.7.2-src.tar.gz

    (2)jdk-8u144-linux-x64.tar.gz

    (3)snappy-1.1.3.tar.gz

    (4)apache-maven-3.0.5-bin.tar.gz

    (5)protobuf-2.5.0.tar.gz

     需要的可以私聊我Q:770958391

  2. jar包安装(所有操作均要在root用户下完成)

    2.1 jdk安装(不再赘述)

    2.2 Maven解压,配置MAVEN_HOME 和 PATH

[root@hadoop101 software]# tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/ [root@hadoop101 apache-maven-3.0.5]# vi /etc/profile #MAVEN_HOME export MAVEN_HOME=/opt/module/apache-maven-3.0.5 export PATH=$PATH:$MAVEN_HOME/bin [root@hadoop101 software]#source /etc/profile 验证命令:mvn -version

   3.  编译源码

    3.1.准备编译环境

[root@hadoop101 software]# yum install svn [root@hadoop101 software]# yum install autoconf automake libtool cmake [root@hadoop101 software]# yum install ncurses-devel [root@hadoop101 software]# yum install openssl-devel [root@hadoop101 software]# yum install gcc*

    3.2.编译安装snappy

[root@hadoop101 software]# tar -zxvf snappy-1.1.3.tar.gz -C /opt/module/ [root@hadoop101 module]# cd snappy-1.1.3/ [root@hadoop101 snappy-1.1.3]# ./configure [root@hadoop101 snappy-1.1.3]# make [root@hadoop101 snappy-1.1.3]# make install

  # 查看snappy库文件

 [root@hadoop101 snappy-1.1.3]# ls -lh /usr/local/lib |grep snappy

    3.3.编译安装protobuf

[root@hadoop101 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/ [root@hadoop101 module]# cd protobuf-2.5.0/ [root@hadoop101 protobuf-2.5.0]# ./configure [root@hadoop101 protobuf-2.5.0]# make [root@hadoop101 protobuf-2.5.0]# make install# 查看protobuf版本以测试是否安装成功 [root@hadoop101 protobuf-2.5.0]# protoc --versio

    3.4.编译hadoop native

[root@hadoop101 software]# tar -zxvf hadoop-2.7.2-src.tar.gz [root@hadoop101 software]# cd hadoop-2.7.2-src/ [root@hadoop101 software]# mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

执行成功后,/opt/software/hadoop-2.7.2-src/hadoop-dist/target/hadoop-2.7.2.tar.gz即为新生成的支持snappy压缩的二进制安装包。

十、Hadoop压缩配置

   1. 开启Map输出阶段压缩

    开启map输出阶段压缩可以减少job中map和Reduce task间数据传输量。具体配置如下:

  案例实操:

    1.1.开启hive中间传输数据压缩功能

      hive (default)>set hive.exec.compress.intermediate=true;

    1.2.开启mapreduce中map输出压缩功能

      hive (default)>set mapreduce.map.output.compress=true;

    1.3.设置mapreduce中map输出数据的压缩方式

      hive (default)>set mapreduce.map.output.compress.codec=

       org.apache.hadoop.io.compress.SnappyCodec;

    1.4.执行查询语句

        hive (default)> select count(ename) name from emp;

  2. 开启Reduce输出阶段压缩

    当Hive将输出写入到表中时,输出内容同样可以进行压缩。属性hive.exec.compress.output控制着这个功能。用户可能需要保持默认设置文件中的默认值false,这样默认的输出就是非压缩的纯文本文件了。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能。

  案例实操:

    2.1.开启hive最终输出数据压缩功能

hive (default)>set hive.exec.compress.output=true;

    2.2.开启mapreduce最终输出数据压缩      

hive (default)>set mapreduce.output.fileoutputformat.compress=true;

    2.3.设置mapreduce最终数据输出压缩方式

hive (default)> set mapreduce.output.fileoutputformat.compress.codec =        org.apache.hadoop.io.compress.SnappyCodec;

    2.4.设置mapreduce最终数据输出压缩为块压缩

hive (default)> set mapreduce.output.fileoutputformat.compress.type=BLOCK;

    2.5.测试一下输出结果是否是压缩文件

hive (default)> insert overwrite local directory        '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

转载于:https://www.cnblogs.com/wjwjs/p/11474567.html

最新回复(0)