HDFS是Hadoop的分布式文件系统。HDFS可以作为Blink Batch的源表和结果表。HDFS上可以存储各种文件类型,目前Blink支持对CSV/Parquet/ORC文件格式的解析。以CSV为例,说明hdfs source用法
DDL定义
-
create table hdfs_source(
-
name varchar,
-
age BIGINT,
-
birthday BIGINT
-
) with (
-
type='csv',
-
path='hdfs://root/stest/test.csv',
-
lineDelimiter='\n',
-
fieldDelimiter='|'
-
);
大部分情况下,HDFS上的文件都是以表的形式保存的,表下面还有分区,例如:
-
$hadoop fs -ls /user/hive/warehouse/xxx/table1/
-
Found 989 items
-
drwxrwxrwx - serving supergroup 0 2017-03-09 15:44 /user/hive/warehouse/xxx/table1/dt=20180814
-
drwxrwxrwx - serving supergroup 0 2017-03-09 15:44 /user/hive/warehouse/xxx/table1/dt=20180815
读表table1的某个分区数据的示例代码如下:
-
create table hdfs_source(
-
name varchar,
-
age BIGINT,
-
birthday BIGINT
-
) with (
-
type='csv',
-
path='hdfs://hdfs_name/user/hive/warehouse/xxx/table1/dt=20180814',
-
lineDelimiter='\n',
-
fieldDelimiter='|'
-
);
-
create table test_sink(
-
name varchar,
-
age bigint,
-
birthday bigint
-
) with (
-
type='print'
-
)
-
insert into test_sink
-
select
-
name,
-
age,
-
birthday
-
from hdfs_source
目前CSV文件暂不支持递归读取多级目录,只能读某个子目录下的所有文件
HDFS上文件可存储为压缩格式orc/parquet,读取这两类文件时,可递归读取某个目录下所有文件,例如,某个表在hdfs上的保存目录如下:
-
$hadoop fs -ls /user/hive/warehouse/xxx/table1/
-
Found 989 items
-
drwxrwxrwx - serving supergroup 0 2017-03-09 15:44 /user/hive/warehouse/xxx/table1/dt=20180814
-
drwxrwxrwx - serving supergroup 0 2017-03-09 15:44 /user/hive/warehouse/xxx/table1/dt=20180815
现要读取整个表table1的所有数据,示例代码如下:
-
create table hdfs_orc_source(
-
name varchar,
-
age BIGINT,
-
birthday BIGINT
-
) with (
-
type='orc',
-
path='hdfs://hdfs_name/user/hive/warehouse/xxx/table1/dt=20180814',
-
enumerateNestedFiles='true'
-
);
-
create table test_sink(
-
name varchar,
-
age bigint,
-
birthday bigint
-
) with (
-
type='print'
-
)
-
insert into test_sink
-
select
-
name,
-
age,
-
birthday
-
from hdfs_source
enumerateNestedFiles 参数可递归
目前只支持tuple模式的topic
参数 | 注释说明 | 备注 |
---|---|---|
type | hdfs上文件类型 | 目前blink支持对CSV/Parquet/ORC文件格式的解析 |
path | 文件在HDFS上路径 | |
lineDelimiter | 文件的行分隔符 | 默认’\n’ |
fileSplitMinSize | 文件切分大小,控制并发 | 默认33554432000L |
isContinuousStream | 默认true | |
fieldDelimiter | 文件的列分隔符 | 默认’,’ |
本文转自实时计算——
创建HDFS源表