1. 安装hive:上传apache-hive-2.1.1-bin.tar.gz文件到/usr/local目录下,解压后更名为hive。

2. 配置hive环境变量,编辑/etc/profile文件(配置完后记得source /etc/profile使其生效)

3. 配置hive,进入到hive文件夹内,将hive-default.xml.template拷贝一份,命名为hive-site.xml,编辑它,将其中的hive.metastore.schema.verification属性设置为false(内容较多不方便,可是用查找命令,vim在非编辑状态下按/键,然后输入要搜索的内容,回车即可,按小写N键往后翻,按大写N键往前翻)

4. 创建/usr/local/hive/tmp目录,替换${system:java.io.tmpdir}为该目录(vim下使用替换命令,进入命令模式,输入%s#A#B#回车,即为将所有的A替换为B,按照此方式将所有的${system:java.io.tmpdir}替换为/usr/local/hive/tmp)

5. 同理,将所有${system:user.name}替换为登录用户,此处为root(共三处)

6. 进入/usr/local/hive目录下,执行schematool -initSchema -dbType derby命令。该命令会初始化derby数据库,该数据库中存放的是hive数据库的元数据,实际生产环境中可能用MySQL替换derby数据库,或者其他数据库,不过MySQL使用的较多。执行完该命令后,在hive目录下会多出一个metastore_db文件。(注意!!!下次执行hive时应该还在同一目录,derby默认会到当前目录下寻找metastore。如果遇到问题,把metastore_db删掉,重新执行命令)

7. 启动hive(此时hadoop和yarn也要启动起来),直接输入hive回车即可。

8. 此后的操作和MySQL的命令行差不多:

9. 使用hive创建一张表:

10. 可以直接在hive里执行hadoop语句,观察刚才创建的数据库,红框为刚才创建表时hive创建的目录,其中/user/hive/warehouse目录下有刚才的创建的表的信息。

11. 往表里装数据,在hive命令模式下,输入load data inpath '/input/' overwrite into table wordcount;

其中/input/目录下有一个txt文件,内容如下:

12. 上一步操作即为将/input/input.txt这个文件和wordcount这张表建立一个关联,查询这张表的时候,就会通过hdfs查询到该文件的内容。

13. 下面使用hive执行上一节中wordcount程序,直接在hive命令模式写输入:select word, count(*) num from (select explode(split(line, ' ')) as word from wordcount) w group by word;其中,split为分割,即将line字段按照空格进行分割,expode函数的作用是,将数组中每一个元素作为单独的一行进行输出。该sql语句的执行结果如下图:

可以看出,该sql语句实际上执行MapReduce成功,开启了一个job,和上一节中编写的java代码是一个效果。

14. 下面用hive分析一个实际当中的日志文件,将该文件上传至hadoop根目录(该文件为搜狗的搜索日志文件)

该文件的内容大致如下图,其格式为搜索时间+搜索ID+搜索内容+结果URL,期间都是用逗号隔开。

15. 创建一张表,用来装载sougou.dic的数据,然后对这张表进行操作。进入hive命令模式,输入命令:

create table sougou (qtime string, qid string, qword string, url string) row format delimited fields terminated by ',';

其中,row format delimited fields terminated by ','表示将每一行用逗号进行分割,分别作为一个字段。

16. 装载数据,将sougou.dic里的数据装载到刚才创建的表里(不是将里边的内容装载到了表里,而是在它们两者之间建立了一种联系)。输入命令:

load data inpath '/sougou.dic' into table sougou;

17. 下面就可以通过这个张表来操作这个日志文件了,先统计一下一共有多少条记录(由于这个日志文件有146M,而hadoop默认块大小为128M,因此操作这张表的时候一般会启动MapReduce程序),输入select count(*) from sougou;观察结果:

18. 下面来查询热搜榜,首先创建一张表,用来记录搜索的关键字和该关键字的搜索次数,按照由大到小排序,输入HQL语句:

create table sougou_results as select keyword, count(1) as count from (select qword as keyword from sougou) t group by keyword order by count desc;

19. 接下来查询热搜榜前十名的搜索记录,输入HQL语句,并观察执行结果:

select * from sougou_results limit 10;

Hadoop学习笔记(六):hive使用的更多相关文章

  1. Hadoop学习笔记—17.Hive框架学习

    一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...

  2. hadoop学习笔记-目录

    以下是hadoop学习笔记的顺序: hadoop学习笔记(一):概念和组成 hadoop学习笔记(二):centos7三节点安装hadoop2.7.0 hadoop学习笔记(三):hdfs体系结构和读 ...

  3. Hadoop学习笔记系列

    Hadoop学习笔记系列   一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼 ...

  4. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  5. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  6. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  7. Hadoop学习笔记(2)

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  8. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  9. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  10. Hadoop学习笔记(2) ——解读Hello World

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

随机推荐

  1. 移动端常见bug

    meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  2. Git和Eclipse的使用、上传、部署

    https://www.jianshu.com/p/812717c740a2 https://blog.csdn.net/lynn_Kun/article/details/73740400 https ...

  3. Linux学习---位运算符

    <<.>> ① << 左移  乘以2^n m << n m*(2^n) eg:4: 0 0 1 0 0 8: 0 1 0 0 0 [数据.数字]移位 左 ...

  4. golang中数组指针和指针数组的区别

    func test(){ x,y := 1, 2 var arr = [...]int{5:2} //数组指针 var pf *[6]int = &arr //指针数组 pfArr := [. ...

  5. php中的冒泡排序和选择排序d

    //冒泡算法 //定义一个数组  $arr=arr{2,5,1155,3,8}; $len=count($arr); for($i=0;$i<$len-1;$i++) //定义以下需要宣传的次数 ...

  6. IntelliJ IDEA的main方法,for循环,syso的快捷键

    原文链接:http://blog.csdn.net/tiantiandjava/article/details/42269173 今天偶然发现了IntelliJ中 创建main函数的快捷键,依次还有f ...

  7. vue组件通信新姿势

    在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...

  8. La protezione del puntatore laser

    Questo puntatore laser è sempre sufficientemente efficiente per eseguire il test più accurato su qua ...

  9. 彻底搞懂CSS文本、空白换行问题

    首先,我们来整理一下与换行有关的3个CSS属性: word-break 该属性决定文本内容超出容器时,浏览器是否自动插入换行符. 属性值: normal:默认换行规则——英文以词为单位换行,连续字符不 ...

  10. JavaScript工作体系中不可或缺的函数

    一.函数的概念 日常生活中,我们要完成一件事,总是习惯先有一个计划,后期按照计划,一步一步执行,则能够完成,并且达到一定效果实现一定的功能.在编程的世界里,“功能”可称呼为“函数”,因此“函数”即一段 ...