快学Big Data -- Hbase导数据的几种方式(十九)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xfg0218/article/details/82343587

Hbase导数据的几种方式

测试数据请到Blog中下载:http://blog.csdn.net/xfg0218/article/details/51712157

 

 

1-1)、hive-hbase-handler导数据

A)、反编译JAR包

http://www.apache.org/dyn/closer.cgi/hive/选择apache-hive-1.2.1-src.tar.gz点击下载之后使用MyEclipse进行反编译,或者使用作者反编译好的JAR  链接:http://pan.baidu.com/s/1hscaORi 密码:wv6p

放在/opt/hive-1.2/lib/下记得备份之前的JAR包

B)、修改配置文件

在hive的conf目录下修改一下文件

[root@skycloud1 conf]# vi hive-site.xml

在之前的基础上添加以下内容

<property>

<name>hive.aux.jars.path</name>

<value>file:///opt/hive-1.2/lib/hive-hbase-handler-1.2.1.jar,file:///opt/hive-1.2/lib/guava-14.0.1.jar,file:///opt/hbase-1.2.1/lib/hbase-common-1.2.1.jar,file:///opt/hbase-1.2.1/lib/hbase-client-1.2.1.jar,file:///opt/hive-1.2/lib/zookeeper-3.4.6.jar</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>skycloud1:2181,skycloud2:2181,skycloud3:2181</value>

</property>

 

C)、创建Hive的表结构

Hive > create table hive_hbase_test(id int,name string,age int);

D)、插入数据

hive> insert into hive_hbae_test(id,name,age) values(1,"xiaozhang","18");

hive> insert into hive_hbase_test(id,name,age) values(2,"xiaowang","19");

E)、查看Hive中的数据

hive> select * from hive_hbase_test;

OK

1       xiaozhang       18

2       xiaowang        19

Time taken: 0.081 seconds, Fetched: 2 row(s)

F)、映射Hbase的表

A)、常见内表

Hive > create table hive_hbase_pro(row_key string,id bigint,name string,age int)

STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES

("hbase.columns.mapping" = ":key,info:id,info:name,info:age")

TBLPROPERTIES ("hbase.table.name"="hive_hbase_pro");

B)、创建外表

Hive > create external  table hive_hbase_pro(row_key string,id bigint,name string,age int)

STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES

("hbase.columns.mapping" = ":key,info:id,info:name,info:age")

TBLPROPERTIES ("hbase.table.name"="hive_hbase_pro");

 

说明:org.apache.hadoop.hive.hbase.HBaseStorageHandler是Hbase的储存方式

Hbase.columns.mapping:是作为Hbase的映射rowkey与列族

hive_hbase_pro:映射给Hbase的表名字

external : 可创建外表,Hbase中已经存在的表映射到hive用词操作,区别请查看一下解释

G)、查看HBase中表结构

hbase(main):020:0> describe 'hive_hbase_pro'

Table hive_hbase_pro is ENABLED                                                                                                    

hive_hbase_pro                                                                                                                     

COLUMN FAMILIES DESCRIPTION                                                                                                        

{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING =>

 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOP

E => '0'}                                                                                                                          

1 row(s) in 0.0170 seconds

H)、插入到映射Hbase表中的数据

-- 关闭hbase的WAL,有点事提高了写入速度,缺点是如果出现错误无法查找日志

hive>  set hive.hbase.wal.enabled=false;

-- 开启大量导入配置

hive>  set hive.hbase.bulk=true;

-- 设置扫描的缓存

hive>  set hbase.client.scanner.caching=1000000;

 

 

hive> insert  overwrite table hive_hbase_pro select id as row_key,id,name,age from hive_hbase_test;

I)、查看映射表的数据

hive> select * from hive_hbase_pro;

OK

1       1       xiaozhang       18

2       2       xiaowang        19

Time taken: 0.121 seconds, Fetched: 2 row(s)

J)、查看Hbase表中的数据

hbase(main):021:0> scan 'hive_hbase_pro'

ROW                               COLUMN+CELL                                                                                      

 1                                column=info:age, timestamp=1510126017074, value=18                                               

 1                                column=info:id, timestamp=1510126017074, value=1                                                 

 1                                column=info:name, timestamp=1510126017074, value=xiaozhang                                       

 2                                column=info:age, timestamp=1510126016682, value=19                                               

 2                                column=info:id, timestamp=1510126016682, value=2                                                 

 2                                column=info:name, timestamp=1510126016682, value=xiaowang                                        

2 row(s) in 0.0420 seconds

 

K)、映射Hbase已经存在的表

Hive > create external  table hive_hbase_xiaoxu(row_key string,id bigint,name string,age int)

STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES

("hbase.columns.mapping" = ":key,info:id,info:name,info:age")

TBLPROPERTIES ("hbase.table.name"="hive_hbase_pro");

L)、查看Hive表中的结构

hive> desc hive_hbase_xiaoxu;

OK

row_key                 string                  from deserializer   

id                      bigint                  from deserializer   

name                    string                  from deserializer   

age                     int                     from deserializer   

Time taken: 0.357 seconds, Fetched: 4 row(s)

M)、查看数据

hive> select * from hive_hbase_xiaoxu;

OK

1       1       xiaozhang       18

2       2       xiaowang        19

N)、总结

使用hive-hbase-handler往hbase中插入数据是按照一条一条的的形式插入的,速度是比较慢的,如果数量级在百万千万级别机器比较好的情况下可以使用这种方式,执行的速度大概在每妙2-3W之间

O)、官网说明

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

P)、增量更新与增量更新的说明

增量更新,建立的是Hive外表;而全量覆盖建立的是Hive内部表;

增量更新,必须先创建HBase表;而全量覆盖不需要事先建立HBase表;

增量更新,是在原有的HBase表的基础上新增数据,不改变原有数据;而全量覆盖则会覆盖原有数据

Q)、Hive 读取Hbase数据的说明

  1. 优点

可以方便的使用SQL的形式查看Hbase中的数据,也可以利用MapReduce的优势针对HBase存储的大量内容进行离线的计算和分析

  1. 缺点

查询速度性能的损失,hive有这样的功能, 他支持通过类似sql语句的语法来操作hbase中的数据, 但是速度慢

1-2)、Bulkload方式导数据

优势:

1、BulkLoad 不会写 WAL,也不会产生 flush 以及 split

2、如果我们大量调用 PUT 接口插入数据,可能会导致大量的 GC 操作。如果没有对Hbase的表进行预分区,会导致单太机器的热点问题,

严重时甚至可能会对 HBase 节点的稳定性造成影响,采用 BulkLoad 无此顾虑。

  1. 过程中没有大量的接口调用消耗性能。

 

A)、按照需要的数据的字段把数据导出到HDFS中

hive> insert overwrite directory  "/tmp/sp_addr_bulktable" row format delimited FIELDS terminated by '\t' select sa.ID,sa.PLACE_CODE,sa.PLACE_NAME from xiaoxu.sp_address sa;

 

Query ID = root_20170403234442_c34e1570-f478-4c8b-bacf-83485f94b567

Total jobs = 3

Launching Job 1 out of 3

Number of reduce tasks is set to 0 since there's no reduce operator

Starting Job = job_1491287068852_0001, Tracking URL = http://hadoop1:8088/proxy/application_1491287068852_0001/

Kill Command = /opt/hadoop-2.6.4/bin/hadoop job  -kill job_1491287068852_0001

Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0

2017-04-03 23:45:28,478 Stage-1 map = 0%,  reduce = 0%

2017-04-03 23:46:01,357 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.46 sec

MapReduce Total cumulative CPU time: 1 seconds 460 msec

Ended Job = job_1491287068852_0001

Stage-3 is selected by condition resolver.

Stage-2 is filtered out by condition resolver.

Stage-4 is filtered out by condition resolver.

Moving data to: hdfs://mycluster/tmp/sp_addr_bulktable/.hive-staging_hive_2017-04-03_23-44-42_657_7591325811272483144-1/-ext-10000

Moving data to: /tmp/sp_addr_bulktable

MapReduce Jobs Launched:

Stage-Stage-1: Map: 1   Cumulative CPU: 1.46 sec   HDFS Read: 250195 HDFS Write: 166508 SUCCESS

Total MapReduce CPU Time Spent: 1 seconds 460 msec

OK

Time taken: 81.082 seconds

 

B)、利用importtsv命令生成Hfile文件

[root@skycloud1 conf]# HADOOP_CLASSPATH=`hbase classpath` hadoop jar /opt/hbase-1.2.1/lib/hbase-server-1.2.1.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,sp_address:ID,sp_address:PLACE_CODE,sp_address:PLACE_NAME -Dimporttsv.bulk.output="/tmpbulkdata/sp_addr_data" sp_address_bulkload "/tmp/sp_addr_bulktable"

 

 

详细的执行过程可以查看:http://blog.csdn.net/xfg0218/article/details/69063014

资料请查看:http://hbase.apache.org/book.html#importtsv

 

C)、查看Hbase中的表

hbase(main):011:0> list

TABLE                                                                                                                                                                                          

sp_address_bulkload                                                                                                                                                                                                                                                                                                                                                         

2 row(s) in 0.1430 seconds

 

=> ["sp_address_bulkload",]

D)、把Hfile文件导入到Hbase中

方式一:

[root@skycloud1 conf]# HADOOP_CLASSPATH=`hbase classpath` hadoop jar /opt/hbase-1.2.1/lib/hbase-server-1.2.1.jar completebulkload "/tmpbulkdata/sp_addr_data" sp_address_bulkload

 

详细的执行过程可以查看:http://blog.csdn.net/xfg0218/article/details/69063137

 

方式二:

[root@skycloud1 conf]# export  HADOOP_CLASSPATH=`hbase classpath`

[root@skycloud1 conf]# yarn jar /opt/hbase-1.2.1/lib/hbase-server-1.2.1.jar  completebulkload completebulkload "/tmpbulkdata/sp_addr_data"  sp_address_bulkload

 

E)、总结

   在这几种导数据的速度上这种方式是最快的,原理是按照Hfile进行的,一次性处理多条数据,建议使用这种方式。本次测试由于是自己的虚拟机所以会比较慢,在真是环境中会相当快的快,我们测试的是4亿多条的数据,20分钟搞定。

官网介绍:https://cwiki.apache.org/confluence/display/Hive/HBaseBulkLoad

 

1-3)、Phoneix导入Hbase数据

Phoenix 官网 :https://phoenix.apache.org/pig_integration.html 

 

在下载时注意版本的问题。

A)、安装Phoneix

[root@hadoop1 bin]# chmod a+x apache-phoenix-4.8.2-HBase-1.2-bin.tar.gz

[root@hadoop1 bin]# tar -zxvf apache-phoenix-4.8.2-HBase-1.2-bin.tar.gz

[root@hadoop1 bin]# mv apache-phoenix-4.9.0-HBase-1.1-bin phoenix-4.8.2-HBase-1.2

[root@hadoop1 bin]# cd phoenix-4.8.2-HBase-1.2/

移动phoenix的以下的JAR到Hbase集群中

[root@hadoop1 bin]# cp phoenix-core-4.8.2-HBase-1.2.jar phoenix-4.8.2-HBase-1.2-server.jar /opt/hbase-1.2.1/lib/

 

复制到其他的机器中:

[root@hadoop1 bin]# scp -r  phoenix-core-4.8.2-HBase-1.2.jar phoenix-4.8.2-HBase-1.2-server.jar  hadoop2:/opt/hbase-1.2.1/lib/

 

[root@hadoop1 bin]# scp -r  phoenix-core-4.8.2-HBase-1.2.jar phoenix-4.8.2-HBase-1.2-server.jar  hadoop3:/opt/hbase-1.2.1/lib/

 

复制Hbase的hbase-site.xml和Hadoop的core-site.xml和hdfs-site.xml到phoenix的bin目录下:

[root@hadoop1 bin]#  cd /opt/hbase-1.2.1/conf/

[root@hadoop1 bin]#  cp hbase-site.xml  /opt/phoenix-4.8.2-HBase-1.2/bin/

[root@hadoop1 bin]#  cd /opt/hadoop-2.6.4/etc/hadoop/

[root@hadoop1 bin]#  cp core-site.xml hdfs-site.xml /opt/phoenix-4.8.2-HBase-1.2/bin/

B)、启动Phoneix

[root@hadoop1 bin]#  cd /opt/phoenix-4.8.2-HBase-1.2/

[root@hadoop1 bin]#  chmod 777  psql.py  sqlline.py

 

重启Hbase集群使配置文件生效

[root@hadoop1 bin]# ./sqlline.py

Setting property: [incremental, false]

Setting property: [isolation, TRANSACTION_READ_COMMITTED]

issuing: !connect jdbc:phoenix: none none org.apache.phoenix.jdbc.PhoenixDriver

Connecting to jdbc:phoenix:

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/phoenix-4.9.0-HBase-1.1/phoenix-4.9.0-HBase-1.1-client.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/hadoop-2.6.4/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

17/04/07 00:25:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Connected to: Phoenix (version 4.8.2)

Driver: PhoenixEmbeddedDriver (version 4.9)

Autocommit status: true

Transaction isolation: TRANSACTION_READ_COMMITTED

Building list of tables and columns for tab-completion (set fastconnect to true to skip)...

87/87 (100%) Done

Done

sqlline version 1.2.0

0: jdbc:phoenix:>

 

也可以制定端口运行:

[root@hadoop1 bin]# sqlline.py hadoop1:2181

 

Hadoop1:主机的名字

2181:当前执行的端口

C)、修改超时时间

[root@hadoop1 bin]#  cd /opt/phoenix-4.9.0-HBase-1.1/bin

[root@hadoop1 bin]# vi hbase-site.xml

追加一下配置文件

 

 

<!-- 修改超时时间  -->

<property>

  <name>phoenix.query.timeoutMs</name>

  <value>3600000</value>

</property>

<property>

  <name>hbase.rpc.timeout</name>

  <value>3600000</value>

</property>

D)、Phoneix常用命令

1-1)、查看全部的表的信息

0: jdbc:phoenix:> !tables

 

可以看出有比较好的列的名字与分割线

 

1-2)、查看一个表的结构

0: jdbc:phoenix:> !describe "STATS"

 

 

 

1-3)、删除表

0: jdbc:phoenix:> DROP TABLE “STATS”

1-4)、查询语句

Phoneix支持常用的SQL语句,不过在查询时使用””与不适用””的区别。

1-5)、Phoenix支持的类型

INTEGER                整形

UNSIGNED_INT           无符号整形

BIGINT                 长整形

UNSIGNED_LONG          无符号长整形

TINYINT                短整形

UNSIGNED_TINYINT       无符号短整型

SMALLINT               小整形

UNSIGNED_SMALLINT      无符号短整型

FLOAT                  浮点型

UNSIGNED_FLOAT         无符号浮点型

DOUBLE                 双精度浮点型

UNSIGNED_DOUBLE        无符号双精度浮点型

DECIMAL                长精度双精度浮点型

BOOLEAN                布尔类型

TIME                   时间类型

DATE                   日期类型

TIMESTAMP              时间戳类型

UNSIGNED_TIME          无符号时间类型

UNSIGNED_DATE          无符号日期类型

UNSIGNED_TIMESTAMP     无符号时间戳类型

VARCHAR                字符串类型

CHAR                   字符类型

BINARY       二进制类型

VARBINARY              可变长二进制类型

ARRAY                  数组类型

1-6)、常用的函数

A)、聚合函数

AVG:求平均,如果没有返回NULL

SUM:求和函数

COUNT:求行数,如果指定某列,则返回该列非空个数,如果为*或1,则返回所有行,加上distinct则返回不相同的行数

MAX:求最大值

MIN:求最小值

PERCENTILE_CONT:指定

PERCENTILE_DISC:指定占比的列具体值是多少

PERCENT_RANK:指定值占的百分比,PERCENT_RANK( 39 ) WITHINGROUP (ORDER BY id ASC)

STDDEV_SAMP:样本标准差

STDDEV_POP:总体标准差

B)、支持的字符串函数

SUBSTR:取子串,默认是基于1的,如果想基于0,则指定0,如果指定为负数,则是从字符串结尾算起

TRIM:去除字符串头尾空格

LTRIM:去除字符串左侧空格

RTRIM:去除字符串右侧空格

LENGTH:返回字符串长度

REGEXP_SUBSTR:通过指定正则表达式获取子串

REGEXP_REPLACE:正则替换

UPPER:大写转换

LOWER:小写转换

REVERSE:字符串反转

TO_CHAR:将日期、时间、时间戳或数字格式化为一个字符串。默认日期格式为yyyy-MM-dd HH:mm:ss,数字格式为#,##0.###。

C)、支持的时间、日期函数

ROUND:四舍五入

TRUNC:截断

TO_DATE:转换为date类型

CURRENT_DATE:返回RS上当前日期

CURRENT_TIME:返回RS上当前时间

D)、支持的时间、日期函数

TO_NUMBER:转换日期、时间、时间戳为一个数字,可接受格式化串

COALESCE:指定默认值,如果相应值为null

E)、往Hbase中导入数据

1-1)、数据从hive中导出成phoenix支持的csv格式

hive> insert overwrite directory '/tmp/sp_address' row format delimited FIELDS TERMINATED BY ',' select * from sp_address;

 

1-2)、查看HDFS上的信息

[root@hadoop1 bin]# hadoop fs -du -h -s  /tmp/sp_address

234.0 K  /tmp/sp_address

1-3)、在phoenix中创建表

创建表在Hbase,必须制定主键

 

0: jdbc:phoenix:> create table sp_address(id integer primary key,place_type varchar,place_code varchar,place_name varchar,up_place_code varchar);

No rows affected (3.185 seconds)

1-4)、使用phoenix将数据导入hbase

[root@hadoop1 phoenix-4.9.0-HBase-1.1]# HADOOP_CLASSPATH=/opt/hbase-1.2.1/lib/hbase-protocol-1.2.1.jar:/etc/hbase/conf/  hadoop jar /opt/phoenix-4.8.2-HBase-1.2/phoenix-4.8.2-HBase-1.2-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool --table SP_ADDRESS --input /tmp/sp_address/*

 

***********************************

 

详细的运行日志请查看:http://blog.csdn.net/xfg0218/article/details/69669632

 

1-4)、Hbase导出数据

  1. 、导成制定格式的文件

[root@hadoop1 ~]# vi  exportHbase.sh

# get current path

# get current path

SCRIPT_DIR=`cd $(dirname $0) && pwd`

# export  data

echo "scan 'portrayal',{LIMIT=>10}" | hbase shell > $SCRIPT_DIR/ExportHbase.txt

 

查看数据

[root@hadoop1 ~]# tail -n 5 ExportHbase.txt

 00000075d9d93dc17e163d5c6dd335f8 column=tag:es_jcsx_rksx_xm, timestamp=1491033321055, value=***

 00000075d9d93dc17e163d5c6dd335f8 column=tag:es_jcsx_rksx_xz, timestamp=1491033321055, value=\xE7\x8B\xAE\xE5\xAD\x90

 00000075d9d93dc17e163d5c6dd335f8 column=tag:es_jcsx_rksx_zjlx, timestamp=1491033321055, value=1

10 row(s) in 0.4260 seconds

 

B)、Import/Export导出到序列化的文件

1-1)、构造数据

hbase(main):008:0> create 'xiaoxu','cf'

0 row(s) in 4.2890 seconds

 

=> Hbase::Table - xiaoxu

hbase(main):009:0> put 'xiaoxu','001','cf:name','xiaozhang'

0 row(s) in 0.1870 seconds

 

hbase(main):010:0> put 'xiaoxu','001','cf:age','18'

0 row(s) in 0.0340 seconds

 

hbase(main):011:0> scan 'xiaoxu'

ROW                                              COLUMN+CELL                                                                                                                                   

 001                                             column=cf:age, timestamp=1491364070907, value=18                                                                                              

 001                                             column=cf:name, timestamp=1491364050527, value=xiaozhang                                                                                      

1 row(s) in 0.0970 seconds

 

hbase(main):012:0>

1-2)、导出数据

[root@hadoop1 ~]#hbase org.apache.hadoop.hbase.mapreduce.Export xiaoxu /xiaoxu/test-output-001

 

***************************

 

详细的执行过程请查看:http://blog.csdn.net/xfg0218/article/details/69231258

 

1-3)、查看HDFS上的数据

[[email protected] ~/xiaoxu]$ hadoop fs -cat  test-output-001/part-m-00000

SEQ1org.apache.hadoop.hbase.io.ImmutableBytesWritable%org.apache.hadoop.hbase.client.ResultР5ƀ¹z,N001F

 

001cfage ᱫ(218

#

001cfname ࠬ桳+(2      xiaozhang

 

因为是序列化的数据所以会乱码

1-4)、清空表中的数据

hbase(main):014:0> truncate 'xiaoxu'

Truncating 'xiaoxu' table (it may take a while):

 - Disabling table...

 - Truncating table...

0 row(s) in 3.6910 seconds

 

hbase(main):015:0> scan 'xiaoxu'

ROW                                              COLUMN+CELL                                                                                                                                   

0 row(s) in 0.3180 seconds

1-5)、导入数据

[root@hadoop1 ~]#hbase org.apache.hadoop.hbase.mapreduce.Import xiaoxu /xiaoxu/test-output-001

 

***************************

 

详细的导入的过程请查看:http://blog.csdn.net/xfg0218/article/details/69231415

 

1-6)、查看Hbase导入后的数据

hbase(main):016:0> scan 'xiaoxu'

ROW                                              COLUMN+CELL                                                                                                                                   

 001                                             column=cf:age, timestamp=1491364070907, value=18                                                                                              

 001                                             column=cf:name, timestamp=1491364050527, value=xiaozhang                                                                                      

1 row(s) in 0.0110 seconds

 

C)、利用pig从HBase中导出csv格式文件

1-1)、安装pig

官网:http://mirror.bit.edu.cn/apache/pig/   

或者下载: 链接:http://pan.baidu.com/s/1bpmu0px 密码:gw05

 

 

[root@hadoop1 opt]# chmod a+x pig-0.16.0-src.tar.gz

[root@hadoop1 opt]# tar -zxvf pig-0.16.0-src.tar.gz

 

1-2)、修改配置文件

[root@hadoop1 opt]# vi /etc/profile

 

export  PIG_HOME=/opt/pig-0.16.0

export  PIG_CLASSPATH=$HADOOP_HOME

export  PATH=$PATH:$PIG_HOME/bin:$PIG_CLASSPATH

 

1-3)、查看Pig是否能使用

[root@hadoop1 opt]# pig -help

Cannot locate pig-core-h2.jar. do 'ant -Dhadoopversion=23 jar', and try again

 

1-4)、使用pig导出csv文件

[root@hadoop1 opt]# vi ExportHbase.pig

REGISTER /opt/hbase-1.2.1/lib/htrace-core-3.1.0-incubating.jar;

REGISTER /opt/pig-0.16.0/lib/piggybank.jar;

x=LOAD 'hbase://sp_address_src' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('

sp_address:place_code,

sp_address:place_type

','-loadKey true');

STORE x INTO 'sp_address.csv' USING PigStorage(',');

 

 

-loadKey true' : 是显示主键,以,为分割并把文件导出到HDFS的sp_address.csv中

1-5)、运行脚本

[root@hadoop1 opt]# pig -x mapreduce ExportHbase.pig

D)、使用Phoenix 导出csv文件

官网:http://pig.apache.org/

1-1)、准备脚本

脚本一:table查询方式

[root@hadoop1 testSh]# vi example1.pig

REGISTER /opt/phoenix-4.8.2-HBase-1.2/phoenix-4.8.2-HBase-1.2-client.jar;

rows = load 'hbase://table/sp_address_orc' USING org.apache.phoenix.pig.PhoenixHBaseLoader('hadoop1:2181,hadoop2:2181,hadoop3:2181');

STORE rows INTO 'sp_address_orc.csv' USING PigStorage(',');

 

脚本二:query查询方式

[root@hadoop1 testSh]# vi example2.pig

REGISTER /opt/phoenix-4.8.2-HBase-1.2/phoenix-4.8.2-HBase-1.2-client.jar;

rows = load 'hbase://query/SELECT * FROM SP_ADDRESS' USING org.apache.phoenix.pig.PhoenixHBaseLoader('hadoop1,hadoop2,hadoop3:2181');

STORE rows INTO 'SP_ADDRESS.csv' USING PigStorage(',');

 

 

运行脚本:

[root@hadoop1 testSh]# pig -x local example1.pig

 

 

详细运行日志请查看:http://blog.csdn.net/xfg0218/article/details/69675774

猜你喜欢

转载自blog.csdn.net/xfg0218/article/details/82343587