Kavim

一点一滴积累


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Hive分区测试

发表于 2017-06-25 | 更新于 2018-08-08 | 分类于 Hive | 阅读次数:

对大量数据进行查询时,Hive在查询时,会转换成mapreduce任务运行,会显得比较慢。可以通过分区来进行速度上的优化。

阅读全文 »

单机mongo安装和权限问题解决

发表于 2017-05-19 | 更新于 2017-05-21 | 分类于 数据库 | 阅读次数:

本文记录了在centos7.3上安装mongodb3.4,配置优化,设置权限,并解决了修改数据目录后,由文件权限导致的mongo启动问题。

阅读全文 »

爬虫入门总结

发表于 2017-05-17 | 分类于 Python | 阅读次数:

自己毕设做的是关于租房房价方面的分析,使用简单的多元线性回归模型来拟合租房的价格,需要采集一些租房的数据来做分析。我也就简单的入门了爬虫,陆续采集了自如、蘑菇租房、我爱我家的租房数据。本文对我学习爬虫的过程以及相关方面做个总结。

阅读全文 »

2017年2-4月阶段总结

发表于 2017-04-29 | 更新于 2017-09-27 | 分类于 个人笔记 | 阅读次数:

2017年从2月到4月底已经过去了三个月,回首过去,总结经验,展望未来。本文将从以下几个方面对过去的三个月做个总结。

阅读全文 »

ganglia导致的centos异常记录

发表于 2017-04-29 | 分类于 ganglia | 阅读次数:

问题发现

查看ganglia的监控界面,出现所有的的图片都缺失,无法监控到每个机器的性能。

在使用tab键自动补全的时候出现了-bash: 无法为立即文档创建临时文件: 设备上没有空间的问题

阅读全文 »

python写入Hbase超时问题分析

发表于 2017-04-29 | 分类于 hbase | 阅读次数:

Hbase是一个高可靠、高性能、面向列、可伸缩的分布式数据库。其底层的LSM数据结构和RowKey有序排列等架构上的独特设计,使得hbase具有非常高的写入性能。但是在实际使用中,由于对hbase的写入方面的机制没有深入的了解,无法有效发挥出hbase的写入性能。本文主要记录了在刚开始使用hbase时,对hbase没有太多的了解的基础上,在写入方面遇到的一个问题和解决方法。

阅读全文 »

Hive基本使用

发表于 2017-04-25 | 更新于 2018-08-08 | 分类于 Hive | 阅读次数:

基本使用

1、将trans数据导入hdfs

1
2
hadoop fs -mkdir trans-201702
hadoop fs -put trans-201702.txt trans-201702

2、shell中使用hive

1
2
create database trans;
show databases;

库名不能用-符号

1
create table trans.trans201612 (line STRING);

表名不能用数字开头

加载数据进表

1
2
load data inpath 'trans-201702/trans-201702.txt' overwrite
into table trans.trans201612;

统计一下总共有多少行数据

1
select count(line) from trans.trans201612


然后用wc -l统计一下原始文件为472755103,发现少了一行,
wc -l是按\n作为行结束符统计行数,所以最后一行如果没有\n的话会统计丢失,一次少了一行

1
create table word_count as select word,count(1) as count from (select explode(split(line,’\s’)) as word from trans.trans201612) w group by word group by word;

导入Trans数据

要导入数据,首先需要在hive中建立一个表,用于存储数据的一些元信息,便于查询。
数据格式如下:

1
[Trans],600000.SH,20170203,101358480,977,272352,,,S,16.7300,400,540050,538028,

1、创建数据表trans.trans201702

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table trans.test201702(
type STRING,
code STRING,
trans_date STRING,
trans_time STRING,
seq STRING,
trans_number STRING,
func STRING,
trans_order STRING,
bs STRING,
price float,
volume STRING,
ask STRING,
bid STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

2、修改字段名:

1
alter table trans.trans201702 change column tyep type STRING;

3、导入数据到trans.test201702

1
load data inpath 'trans-201702/trans-201702.txt' overwrite into table trans.test201702;

4、删除表:

1
drop database.table_name

查询操作

Hive的sql语句与sql类似,只要熟悉sql语句,基本上就能使用Hive就能查询出想要的数据。
1、查询股票代码

1
select wcode from trans.trans201702 group by wcode;


2、将查询的数据导出

1
insert overwrite local file '/tmp/code_list.txt' select code from trans.trans201702 group by code;

生成的文件数 和redurcer的数目的一样的。

上面的文件需要进行合并才能看,不方便,可以通过直接导出查询结果到本地

1
bin/hive -e 'select code from trans.trans201702 group by code;' > ~/data/code_list

3、Python 异步实现方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/python
from pyhive import hive
from TCLIService.ttypes import TOperationState
cursor = hive.connect('localhost').cursor()
cursor.execute('select code from trans.trans201702 group by code', async=True)
status = cursor.poll().operationState
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
status = cursor.poll().operationState
# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()
# 获取数据
try:
rows = cursor.fetchall()
except:
print 'null'
else:
for row in rows:
print row

hive streaming

Hive streaming提供了类似unix管道的功能,将查询的数据,直接传给其它的脚本处理,并且支持多种语言如python,java
编辑streaming.py

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# hive streaming test
import sys
lines = []
for line in sys.stdin:
lines.append(line)
print lines

在hive中执行,加入自己定义的脚本

1
add file /home/wodehp/code/streaming.py;

然后执行:

1
select transform(bs) using 'python streaming.py' as bs from trans.trans201702 where trans_date='20170203' limit 10;

输出

Python使用hive

Hive基于thirft框架,提供一套外部调用的接口,支持java,python等程序调用。首先启动HiveServer2服务

1
nohup hiveserver2 &

可用的python包
pyhs2
PyHive
impyla

环境准备

需要安装的包为thrift_sasl,sasl,pythive,impyle
安装sasl

将下面的包全装上

PyHive使用

pyhive是dropbox开源的python连接hive的库,并且支持异步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/python
from pyhive import hive
from TCLIService.ttypes import TOperationState
]
# 连接
cursor = hive.connect(‘localhost’).cursor()
# 执行查询
cursor.execute(‘SELECT * FROM trans.trans201612 limit 10’, async=True)
status = cursor.poll().operationState
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
# 查询状态
logs = cursor.fetch_logs()
for message in logs:
print message
# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()
#print cursor.fetchall()
for row in cursor.fetchall():
print row

pyhs2使用

出现此问题时由于用户密码设置不对

HiveServer2默认权限没有开起
authMechanism设置为NOSASL

之后又爆出以下问题,暂时问题不明

pyhs2已经于2016年1月份停止更新,bug较多

impyla

cloudera的impyla,bug多,没有试成功
`

hive版本切换

由于安装的hive版本偏高,在使用的时候存在python连接的许多问题,现切换成hive1.2版,安装和hive2.1一样,配置也一样不需要更改。

Hive2虽然也是一个稳定的版本(2016年12发布),但是其刚出来不久,许多的配套的库并没有及时的更新用来支持,例如pyhs2在2016年1月停止更新,impyla也停止更新接近1年等,出现的问题很难找到答案。但是在版本的选择上还是需要尝试,知道存在的问题。后续将采用PyHive来作为Python连接Hive的包。

参考文章

Hive导入10G数据的测试

Hadoop集群检查

发表于 2017-04-04 | 分类于 hadoop | 阅读次数:

安装完hadoop集群后,需要对整个集群进行检测来评价安装是否成功,主要从以下几个方面来检测。

1、所有的进程是否都已经启动

使用jps命令查看相关的进程是否启动,主要的检测的是namenode,和resourcemanager上的进程是否启动

阅读全文 »

hadoop集群搭建过程问题汇总

发表于 2017-04-04 | 分类于 hadoop | 阅读次数:

通过hadoop集群的安装,主要存在的问题有有以下几点:

阅读全文 »

Hive介绍和安装

发表于 2017-03-25 | 更新于 2018-08-08 | 分类于 Hive | 阅读次数:

采用了hadoop的分布式存储系统来储存数据,解决了海量数据的存储,接下来就需要解决数据的查询问题。数据暂不涉及到修改,只是根据需求将数据查询出来做尽一步的处理,对查询也不需要实时性很高,可以在离线下进行数据的查询。传统的hadoop查询需要编写mapreduce程序,效率也慢,对熟悉sql语句但非开发人员极不友好。因此需要一款数据仓库工具来对数据进行管理。

阅读全文 »
1…3456

Kavim

生活不止眼前的苟且 还有诗和远方的田野
54 日志
24 分类
18 标签
GitHub
© 2019 Kavim
由 Hexo 强力驱动 v3.2.2
|
主题 – NexT.Pisces v7.1.0