mysql 导入tsv文件_HBase数据迁移(2)- 使用bulk load 工具从TSV文件中导入数据
英文原文摘自:《HBase Administration Cookbook》??编译:ImportNew?-?陈晨 本篇文章是对数据合并的系列文章之二(共三篇),针对的情景模式就是将现有的各种类型的数据库或数据文件中的数据转入至 HBase 中。 上一篇 ???《HBase数据迁移(1)- 通过单个客
英文原文摘自:《HBase Administration Cookbook》??编译:ImportNew?-?陈晨
本篇文章是对数据合并的系列文章之二(共三篇),针对的情景模式就是将现有的各种类型的数据库或数据文件中的数据转入至HBase中。
上一篇 ???《HBase数据迁移(1)- 通过单个客户端导入MySQL数据》
HBase提供importtsv工具支持从TSV文件中将数据导入HBase。使用该工具将文本数据加载至HBase十分高效,因为它是通过MapReduce Job来实施导入的。哪怕是要从现有的关系型数据库中加载数据,也可以先将数据导入文本文件中,然后使用importtsv 工具导入HBase。在导入海量数据时,这个方式运行的很好,因为导出数据比在关系型数据库中执行SQL快很多。
importtsv 工具不仅支持将数据直接加载进HBase的表中,还支持直接生成HBase自有格式文件(HFile),所以你可以用HBase的bulk load工具将生成好的文件直接加载进运行中的HBase集群。这样就减少了在数据迁移过程中,数据传输与HBase加载时产生的网络流量。下文描述了importtsv 和bulk load工具的使用场景。我们首先展示使用importtsv 工具从TSV文件中将数据加载至HBase表中。当然也会包含如何直接生成HBase自有格式文件,以及如何直接将已经生成好的文件加载入HBase。
准备
我们在本文中将使用 “美国国家海洋和大气管理局 气候平均值”的公共数据集合。访问http://www1.ncdc.noaa.gov/pub/data/normals/1981-2010/下载。 我们使用在目录 products | hourly 下的小时温度数据(可以在上述链接页面中找到)。下载hly-temp-10pctl.txt文件。
下载后的数据因为格式不支持的原因,不能直接用importtsv工具加载。我们提供了脚本来帮助你将数据转换为TSV文件。除了原有数据,被加载的TSV文件中还必须包含一个栏位用于表示HBase表数据行的row key。本文附带的_tsv_hly.py脚本从NOAA的小时数据文件中读取数据,生成row key并将数据输出至本地文件系统的TSV文件:
$ python to_tsv_hly.py -f hly-temp-10pctl.txt -t hly-temp-10pctl.tsv
因为importtsv工具是通过运行MapReduce Job来实施导入动作,我们需要在集群上运行MapReduce。在主节点上执行下述命令以开启MapReduce守护进程:
hadoop$ $HADOOP_HOME/bin/start-mapred.sh
我们在客户端服务器上添加hac用户用于运行job;建议在生产环境如此实施。为了能够从客户端运行MapReduce Job,你需要将${hadoop.tmp.dir}目录的写权限开放给客户端的hac用户。我们假设${hadoop.tmp.dir}目录为/usr/local/hadoop/var:
root@client1# usermod -a -G hadoop hac
root@client1# chmod -R 775 /usr/local/hadoop/var
在HDFS中为hac用户建立主文件夹:
hadoop@client1$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hac
hadoop@client1$ $HADOOP_HOME/bin/hadoop fs -chown hac /user/hac
同时也确认hac用户在HDFS中的MapReduce的临时目录中也有写权限:
hadoop@client1$ $HADOOP_HOME/bin/hadoop fs -chmod -R 775 /usr/local/hadoop/var/mapred
如何实施
使用MapReduce将数据从TSV文件加载至HBase的table,按照如下步骤实施:
1.在HDFS中建立文件夹,并且将TSV文件从本地文件系统拷贝至HDFS中:
hac@client1$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hac/input/2-1
hac@client1$ $HADOOP_HOME/bin/hadoop fs -copyFromLocal hly-temp-10pctl.tsv /user/hac/input/2-1
2.在HBase中添加目标表。连接到HBase,添加hly_temp表:
hac@client1$ $HBASE_HOME/bin/hbase shell
hbase> create 'hly_temp', {NAME => 't', VERSIONS => 1}
3.若表已经存在(上一节中已经建好),则添加一个新列族:
hbase> disable 'hly_temp'
hbase> alter 'hly_temp', {NAME => 't', VERSIONS => 1}
hbase> enable 'hly_temp'
4.将hbase-site.xml文件放置在Hadoop的配置目录中就能够加入Hadoop的环境变量了:
hac@client1$ ln -s $HBASE_HOME/conf/hbase-site.xml $HADOOP_HOME/conf/hbase-site.xml
5.编辑客户端服务器的$HADOOP_HOME/conf 下的hadoop-env.sh文件,添加HBase的依赖库到Hadoop的环境变量中:
hadoop@client1$ vi $HADOOP_HOME/conf/hadoop-env.sh
export HADOOP_CLASSPATH=/usr/local/zookeeper/current/zookeeper-3.4.3.jar:/usr/local/hbase/current/lib/guava-r09.jar
6.使用hac用户运行importtsv工具,执行如下脚本:
hac@client1$ $HADOOP_HOME/bin/hadoop jar $HBASE_HOME/hbase-
0.92.1.jar importtsv \ -Dimporttsv.columns=HBASE_ROW_KEY,t:v01,t:v02,t:v03,t:v04,t:v05,t:v06,t:v07,t:v08,t:v09,t:v10,t:v11,t:v12,t:v13,t:v14,t:v15,t:v1
6,t:v17,t:v18,t:v19,t:v20,t:v21,t:v22,t:v23,t:v24 \
hly_temp \
/user/hac/input/2-1
7.通过MapReduce Job管理页面—http://master1:50030/jobtracker.jsp检查任务状态。
8. 验证HBase目标表中的导入数据。通过验证hly_temp表中的数据总量,并且还要检查表中的一些样本数据。表中的数据总量应该于文件中的行数相同。表中的row key应该与文件中的第一个字段相同。每行数据都有t:v01, t:v02, …, t:v24等单元格,每个单元格的值都应当与TSV文件中的栏位相同:
hbase> count 'hly_temp'
95630 row(s) in 12.2020 seconds
hbase> scan 'hly_temp', {COLUMNS => 't:', LIMIT => 10}
AQW000617050110 column=t:v23,
timestamp=1322959962261, value=781S
AQW000617050110 column=t:v24,
timestamp=1322959962261, value=774C
10 row(s) in 0.1850 seconds
运行原理
Importtsv工具只从HDFS中读取数据,所以一开始我们需要将TSV文件从本地文件系统拷贝到HDFS中,使用的是hadoop fs -copyFromLocal命令。在步骤2中,我们在HBase中建立了表(hly_temp) 以及列族 (t)。若表已经存在,我们可以修改表,加入列族。所有的数据都加载进新建的列族中,已经存在原有列族中的数据则不受影响。运行MapReduce Job,需要使用hadoop的jar命令来运行包含class编译文件的JAR文件。为了在命令行中能够使用HBase的配置信息,我们将hbase-site.xml放到$HADOOP_HOME/conf 目录下,从而产生关联;在该目录下的所有文件都会被hadoop命令行加入到Java进程的环境变量中。
步骤5中,设置hadoop-env.sh中的HADOOP_CLASSPATH以加入运行时依赖。除了ZooKeeper库之外,guava-r09.jar也是importtsv运行依赖库,它是用于转换TSV文件的库。
Importtsv本身是一个在HBase的JAR文件中的JAVA类。在步骤6中,我们通过hadoop的jar命令来运行该工具。这个命令会启动一个Java进程,并且自动添加所有的依赖。需要运行哪个JAR是通过指定hadoop jar命令的第一个参数,在这里是使用hbase-0.92.1.jar。
下列参数要被传递至hbase-0.92.1.jar的主类:
?TSV文件的字段索引与HBase表中列的对应信息是对 -Dimporttsv.columns参数进行设置,在本文中,TSV文件格式是(rowkey, value1, value2, …, value24)。我们将数据存入HBase的列族 t 中,使用v01 对应 value1, v02 对应value2等类似方式。HBASE_ROW_KEY 中存放的就是row key字段。
?在 -Dimporttsv.columns 参数之后,我们还需要为命令行指定表名参数(hly_temp)以及TSV文件路径 (/user/hac/input/2-1)参数
还有一些其他选项可以被指定。运行importtsv不带任何参数就会打印出使用信息摘要:
hac@client1$ $HADOOP_HOME/bin/hadoop jar $HBASE_HOME/hbase-0.92.1.jar
importtsv
用法: importtsv -Dimporttsv.columns=a,b,c
将指定路径的TSV数据导入指定的表中。
…
其他包含 -D的可指定的选项包括:
-Dimporttsv.skip.bad.lines=false – 若遇到无效行则失败
‘-Dimporttsv.separator=|’ – 文件中代替tabs的分隔符
-Dimporttsv.timestamp=currentTimeAsLong – 导入时使用指定的时间戳
-Dimporttsv.mapper.class=my.Mapper – 使用用户指定的Mapper类来代替默认的org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
这个工具启动了MapReduce Job。在job的map阶段,它从指定路径的TSV文件中读取并转换,然后根据栏位映射信息将数据写入HBase的table中。此处读和写的操作是在多台服务器上并行执行,所以相比从单台节点读取速度快很多。该job中默认是没有reduce阶段。我们能够在MapReduce的管理页面上查看job的进度,统计以及其他MapReduce信息。
需要查看表中插入的数据,可以使用HBase Shell中的scan命令。我们可以指定列为 ‘t’(COLUMNS => ‘t:’)来只对表中的t列族进行查询。
更多内容
Importtsv工具默认使用了HBase的Put API来将数据插入HBase表中,在map阶段使用的是TableOutputFormat 。但是当 -Dimporttsv.bulk.输入选项被指定时,会使用HFileOutputFormat来代替在HDFS中生成HBase的自有格式文件(HFile)。而后我们能够使用completebulkload 来加载生成的文件到一个运行的集群中。根据下列步骤可以使用bulk 输出以及加载工具:
1.在HDFS中建立文件夹用于存放生成的文件:
hac@client1$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hac/output
2.运行importtsv并加上bulk输出选项:
hac@client1$ $HADOOP_HOME/bin/hadoop jar $HBASE_HOME/hbase-
0.92.1.jar importtsv \
-Dimporttsv.bulk.output=/user/hac/output/2-1 \
-Dimporttsv.columns=HBASE_ROW_KEY,t:v01,t:v02,t:v03,t:v04,t:v05,t:v06,t:v07,t:v08,t:v09,t:v10,t:v11,t:v12,t:v13,t:v14,t:v15,t:v16,t:v17,t:v18,t:v19,t:v20,t:v21,t:v22,t:v23,t:v24 \
hly_temp \
/user/hac/input/2-1
3.完成bulk加载:
hac@client1$ $HADOOP_HOME/bin/hadoop jar $HBASE_HOME/hbase-0.92.1.jar completebulkload \
/user/hac/output/2-1 \
hly_temp
completebulkload 工具读取生成的文件,判断它们归属的族群,然后访问适当的族群服务器。族群服务器会将HFile文件转移进自身存储目录中,并且为客户端建立在线数据。
英文原文摘自:《HBase Administration Cookbook》??编译:ImportNew?-?陈晨
译文链接:http://www.importnew.com/3645.html
【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
mysql 导入tsv文件_HBase数据迁移(2)- 使用bulk load 工具从TSV文件中导入数据相关推荐
- flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
- azure 导入 bak_如何使用BULK INSERT在本地和Azure中导入数据
azure 导入 bak 介绍 (Introduction) BULK INSERT is a popular method to import data from a local file to S ...
- vb怎么样实时取mysql数据库数据_浅谈如何使用vb.net从数据库中提取数据
1.设置从Model中的Sub Main 启动 2.程序结构 3.Model1 Imports System.Windows.Forms.Application Module Module1 Sub ...
- python提取excel数据-代码详解:使用Python从不同表格中提取数据
常用的表格数据存储文件格式--CSV,Microsoft Excel,Google Excel . Python通常称为粘合语言.这个名称归因于人们逐渐开发出的大量接口库和特征,也得益于广泛的使用和良 ...
- 数据库面试题【十五、优化查询过程中的数据访问】
访问数据太多导致查询性能下降 确定应用程序是否在检索大量超过需要的数据,可能是太多行或列 确认MySQL服务器是否在分析大量不必要的数据行 避免犯如下SQL语句错误 查询不需要的数据.解决办法:使用l ...
- vue导入音乐_【vlog制作】不经电脑,如何在VUE中导入自定义音乐
VUE按不同风格.节气/节日.每月精选和流行曲集设置了多个音乐库,用户在剪辑视频的时候可以在库中挑选BGM,省掉了找音乐的麻烦,对于新手用户尤为贴心.然而对于频繁使用VUE剪辑视频的用户来说,原配音乐 ...
- 在python中数据的输出用哪个函数名_在Python中,数据的输出用哪个函数名
在Python中,数据的输出用哪个函数名 工业机器人按照坐标形式可以分为().A:圆柱坐标机器人B:球坐标机器人C:直角坐标机器人D:关节坐标机器人 生物膜上脂质主要是磷脂.A:对B:错 再结晶退火主 ...
- matlab程序模拟汽车理论中的数据特性图动力特性图,matlab程序模拟汽车理论中的数据特性图1.doc...
matlab程序模拟汽车理论中的数据特性图1.doc 车辆理论作业第三组第一大题确定一辆轻型货车的动力性能1.绘制发动机的使用外特性曲线N60014000NN/1000T1931329527N/100 ...
- ajax请求数据用于另一个ajax,在另一个AJAX请求中使用数据
我正在学习ruby,但是我正需要一些JS/JQuery来处理一个我正在和朋友一起工作的小项目.我们正在使用Last.fm API,并试图构建一个页面,我们将从两个不同的URL调用Json数据.在另一个 ...
最新文章
- ASP.NET MVC上传文件----uploadify的使用
- 20145209 2016-2017-2 《Java程序设计》第7周学习总结
- C# 操作Excel数据透视表
- http_load安装与测试参数分析
- java 实体类arraylist_如何实现Java的ArrayList经典实体类
- 56个民族sql语句
- multiprocessing python_Python教程:进程和线程amp;多进程
- Leetcode--96. 不同的二叉搜索树(java)
- 创建为ClickOnce清单签名的.pfx格式数字证书
- 10 行代码构建常见目标检测应用
- python做collatz猜想_R中的Collatz猜想
- php-fpm通道,Go语言通道(chan)——goroutine之间通信的管道
- 2018年度报告单_2018年度最佳在线IT课程
- UEdit初始化加载内容偶尔失败,解决
- Py6S模块安装过程(Win10环境,64位)
- 《机器视觉算法与应用》第3章 机器视觉算法之数据结构——学习笔记
- 汇编语言学习资料汇总
- bzoj4011落忆枫音
- mysql char archer_mysql - 常用sql
- 长治南垂驾校科目二经验总结
热门文章
- 使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
- Java调用有道翻译API包括APPID/密钥地址注册
- 如何使用winrar压缩工具实现:文件打包为自解压EXE类型
- ECharts 示例——双Y轴
- windows/ubuntn 快捷键和命令行使用
- Linux-Qt--2--调试运行终止弹窗问题-The inferior stopped because it received a signal from the Operating System
- Android通过蓝牙获取设备的通讯录、通话记录等
- 中兴换头;任正非表态中美差距还有 50 年;Google 回应隐私丑闻 | CSDN 极客头条...
- 干货|最全亚马逊账号关联知识都在这 10条
- 带通滤波器c5000汇编语言,基于SIW技术的高选择性带通滤波器的设计与实现