背景:
接到需求,需要每天把大概一亿条的数据导入到Hbase里,对标同事的mongoDB(大概半个小时内导完)
环境配置:
Python:3.7.4
Hbase:2.2.3
数据格式:
一天一个压缩包(ZIP),然后里面都是很多个TXT文件,分隔符是 “|” ,每个TXT文件大概是9000条数据这样。

我尝试使用了两种方法:

尝试一:shell命令导入(也可以写成脚本)

我直接上命令好了,这个百度就有:

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator='|' -Dimporttsv.columns=HBASE_ROW_KEY,PLA_INFO,DATE_TIME,KKJ,KKW,SPEED,SPEED_EX,ALTITUDE,STATUS,COLOUR,MILEAGE,WAY testtable /home/data/demo_data1.txt

这里我拿了一点数据来测试,可以导入。速度没测,因为我马上就弃用了。
遇到问题:
我百度的时候看到这样写,ROW_KEY是有序的数字id,我这里变成了我第一个字段。。无语,而且ROWKEY也许需要自定义,shell怎么搞不是很想研究,写代码不香吗,所以弃用了(这个个人喜好吧,我觉得shell其实也挺方便的)。


尝试二:Python Happybase

嗯,这名字真有趣。
HappybasePython通过Thrift访问HBase的库,方便快捷。
因为Hbase是用Java写的,原生地提供了Java接口,对非Java程序员,如果用的是其他的语言,则需要开启连接原生地提供的thrift接口服务器。而happybase默认是使用9090端口,所以在确保zookeeperHbase已经开启了之后,需要先使用以下命令开启。

nohup hbase thrift start-port:9090 &

代码:

import happybase
import re
import time
import osconnection = happybase.Connection('192.168.0.111')
table = connection.table('test')def read_file():start = time.time()# path = 'F:\\20200302\\'path = 'F:\hbase\demo_data\\'pathDir = os.listdir(path)# print(pathDir)x = 0# 批量插入数据for filename in pathDir:print(filename)file = open(path+filename, "r", encoding='utf8')print(file)content = file.read()# print(content)if content:line_list = re.split("[\n]", content)# print(line_list)for line in line_list:value_list = re.split("[|]", line)# print(value_list)if len(value_list) > 1:insertData(value_list)x+=1print("插入了",x,"条数据")end = time.time()print("花了", end-start,"秒")def insertData(list):current_time = str(time.time())print(current_time)print(list)# b = table.batch(batch_size=1000)# 这里使用了batch的方法批量插入数据,如果把这个去掉直接put也行,详细代码百度一下就有with table.batch() as b:b.put(current_time,{'car_info: PLA_INFO':list[0],'car_info: DATE_TIME':list[1],'car_info: KKJ': list[2],'car_info: KKW': list[3],'car_info: SPEED': list[4],'car_info: SPEED_EX': list[5],'car_info: ALTITUDE': list[6],'car_info: STATUS': list[7],'car_info: COLOUR': list[8],'car_info: MILEAGE': list[9],'car_info: WAY': list[10]})# 查看表# for key,value in table.scan():#     print(key,value)def main():read_file()connection.close()if __name__ == '__main__':main()

可以写进去,使用的感觉就是不快。。。一亿条数据全写进去估计要花几个小时,比起mongodb来说太慢了,我自己感觉的原因有这几个:
1、最主要的原因还是读取ZIP包花了不少的时间(这个应该可以优化,但是我没想到办法)
2、然后插入的方法,batch插入的方法没写对(不清楚,有这个感觉),因为我使用batch的方法和直接put相比,速度是没变化的。
happybase在想优化的方法的时候,我在想不如试试用spark读取这些TXT文件(因为spark是可以快速读取的),所以我就开始试着用spark+hbase,然后开始遇到一堆问题。

由于内容太多,所以我分开文章发好了,本来写在一篇里的。

读取TXT文件写入数据到Hbase相关推荐

  1. python读取txt文件写入-Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python! hello world! ...

  2. python读取txt文件写入-python txt文件的写入和读取

    1.文件的打开 使用open () 函数 打开文件.他有两个参数,文件路径或文件名和文件的打开方式. "r" 只读模式,不能编辑和删除文件内容. "w" 写入模 ...

  3. python读取txt文件写入-python 读取、写入txt文件的示例

    写入文件 使用open()函数和write()函数 但是有两种写法,分别是'a'和'w' 'a' 表示写入文件 若无该文件会直接创建一个 如果存在这个文件,会接着已有的内容的后面写入 with ope ...

  4. C++ 读取txt文件中数据并存入数组中

    #include<iostream> #include<iomanip> #include<fstream> using namespace std; int ma ...

  5. python读取txt文件写入失败-Python write 函数写文件失败

    工作中涉及到了内容抓取的需求,用 Python 根据Url抓取对应的Html页面,并存储到本地文件,然后程序内继续将本地文件的路径作为参数,调用Node进行杂质过滤和内容提取.但怪的是在Python执 ...

  6. c# 读取 txt 文件中数据(int)

    今天在学图的算法做测试是,需要读取文本文件中的点坐标,本来很简单的事情,折腾了半天,记录一下找到的一种简单粗暴的解决方法,以便以后查看. 第一种方法 : StringReader string lin ...

  7. MATLAB读取txt文件的数据

    常用的主要有以下几种方法: 1.load Data = load("filename.txt"); 该函数只能加载仅含有数字的文本文件,如果文档中夹杂着字母或者文字,就会报错. 2 ...

  8. python读取txt文件为dataframe,python批量读取txt文件为DataFrame

    我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...

  9. matalb读取txt文件以及将数据写入txt文件

    matlab读取txt文件 三个文件a.txt,b.txt,d.txt 1.load load只能读取ascii文件,如果文件中有不同数据类型将出错. 2.importdata 3.textread ...

最新文章

  1. Github下载量10万次,最终被所有大厂封杀!
  2. [Spring 深度解析]第1章 Java基础
  3. vue脚手架项目技术集合
  4. oracle定时器定时删除30天前的数据_Redis的过期键删除策略
  5. c语言求成绩标准差,C程序计算标准偏差
  6. Linux中的15个‘echo’ 命令实例
  7. api商品分享源码_谈谈微服务中的 API 网关(API Gateway)
  8. 用户可以使用三种方式使用计算机,计算机操作系统期末复习笔记
  9. JDK中ThreadDump诊断Java代码中的线程死锁问题
  10. 博弈论(二)完全信息静态博弈
  11. 软件测试作业随笔之二:Homework 2
  12. 再说市场资金流向问题
  13. SpringBoot-引入jackson-dataformat-xml之后,本返回json的接口返回xml
  14. matlab 短时能量计算+源代码
  15. android模拟器 权限管理,Android模拟器上未授予权限
  16. SpringBoot版本升级
  17. linux wrf软件安装,wrf安装
  18. 如何在表格里做计算机统计表,如何运用Excel编制统计表并做一般数据分析?-excel统计怎么做,最简单的统计表格怎么做...
  19. 不重装系统改硬盘模式: RAID ON 改成 AHCI
  20. 计算机ms office 基础知识教程,计算机等级考试二级MS-Office基础知识教程.doc

热门文章

  1. linux c 判断文件是否存在,C语言中如何判断文件是否存在
  2. 解决连接开放WIFI时,WIFI标志报感叹号的问题!
  3. 利用js制造一个星座查询的效果
  4. Arrays类常用方法详解
  5. Java中Arrays类中的数组操作方法详解
  6. springboot自定义静态资源代理WebMvcConfigurerAdapter详解和过期后的替代方案WebMvcConfigurer
  7. 音视频学习-直播助手内存优化
  8. Sigrity PowerDC仿真
  9. 关于计算机科学家理想的作文,我的理想作文是科学家
  10. 关于网络行为管理系统的知识点介绍