Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将tsv导入hbase时出错_Hbase_Tsv_Java_Hadoop - Fatal编程技术网

将tsv导入hbase时出错

将tsv导入hbase时出错,hbase,tsv,java,hadoop,Hbase,Tsv,Java,Hadoop,我使用以下方法创建了一个表: 现在,我想将我的数据从一个文件导入到它。我在tsv中的表格有两列:ProvinceID(作为主键),ProvinceName 我正在使用以下代码进行导入: bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv '-Dimporttsv.separator=,' -Dimporttsv.columns= HBASE_ROW_KEY, ProvinceINFO:ProvinceName Province /usr/d

我使用以下方法创建了一个表:

现在,我想将我的数据从一个文件导入到它。我在tsv中的表格有两列:
ProvinceID
(作为主键),
ProvinceName

我正在使用以下代码进行导入:

bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv '-Dimporttsv.separator=,'
-Dimporttsv.columns= HBASE_ROW_KEY, ProvinceINFO:ProvinceName Province /usr/data
/Province.csv
但它给了我一个错误:

ERROR: No columns specified. Please specify with -Dimporttsv.columns=...
Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>

Imports the given input directory of TSV data into the specified table.

 The column names of the TSV data must be specified using the -Dimporttsv.columns 
option. This option takes the form of comma-separated column names, where each
column name is either a simple column family, or a columnfamily:qualifier. The special
column name HBASE_ROW_KEY is used to designate that this column should be used
as the row key for each imported record. You must specify exactly one column
to be t he row key, and you must specify a column name for every column that exists in 
the
input data. Another special columnHBASE_TS_KEY designates that this column should be
used as timestamp for each record. Unlike HBASE_ROW_KEY, HBASE_TS_KEY is optional.
You must specify at most one column as timestamp key for each imported record.
Record with invalid timestamps (blank, non-numeric) will be treated as bad record.
Note: if you use this option, then 'importtsv.timestamp' option will be ignored.

By default importtsv will load data directly into HBase. To instead generate
HFiles of data to prepare for a bulk data load, pass the option:
  -Dimporttsv.bulk.output=/path/for/output
Note: if you do not use this option, then the target table must already exist in HBase

Other options that may be specified with -D include:
-Dimporttsv.skip.bad.lines=false - fail if encountering an invalid line
'-Dimporttsv.separator=|' - eg separate on pipes instead of tabs
-Dimporttsv.timestamp=currentTimeAsLong - use the specified timestamp for the import
-Dimporttsv.mapper.class=my.Mapper - A user-defined Mapper to use instead of 
org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
-Dmapred.job.name=jobName - use the specified mapreduce job name for the import
For performance consider the following options:
-Dmapred.map.tasks.speculative.execution=false
-Dmapred.reduce.tasks.speculative.execution=false
错误:未指定列。请使用-Dimporttsv.columns=。。。
用法:importtsv-Dimporttsv.columns=a、b、c
将TSV数据的给定输入目录导入指定表。
必须使用-DIMPORTSV.columns指定TSV数据的列名
选项此选项采用逗号分隔的列名形式,其中
列名可以是简单列族,也可以是columnfamily:限定符。特别的
列名HBASE_ROW_KEY用于指定应使用此列
作为每个导入记录的行键。必须只指定一列
要成为行键,必须为中存在的每一列指定列名
这个
输入数据。另一个特殊列base_TS_键指定此列应为
用作每个记录的时间戳。与HBASE_ROW_键不同,HBASE_TS_键是可选的。
必须为每个导入的记录指定最多一列作为时间戳键。
具有无效时间戳(空白、非数字)的记录将被视为坏记录。
注意:如果使用此选项,则“importtsv.timestamp”选项将被忽略。
默认情况下,importtsv将直接将数据加载到HBase中。生成
要准备批量数据加载的数据文件,请传递选项:
-Dimporttsv.bulk.output=/path/for/output
注意:如果不使用此选项,则目标表必须已存在于HBase中
可使用-D指定的其他选项包括:
-Dimporttsv.skip.bad.lines=false-遇到无效行时失败
“-dimportsv.separator=|”-例如在管道上分离,而不是在选项卡上分离
-Dimporttsv.timestamp=currentTimeAsLong-为导入使用指定的时间戳
-Dimporttsv.mapper.class=my.mapper-要使用而不是
org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
-Dmapred.job.name=jobName-使用指定的mapreduce作业名称进行导入
对于性能,考虑以下选项:
-Dmapred.map.tasks.prospective.execution=false
-Dmapred.reduce.tasks.prospective.execution=false

您应该尝试以下方法:

bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=','
-Dimporttsv.columns= HBASE_ROW_KEY, ProvinceINFO:ProvinceName Province /usr/data
/Province.csv

也可以尝试将列包装成字符串,即

bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=','
-Dimporttsv.columns="HBASE_ROW_KEY, ProvinceINFO:ProvinceName" Province /usr/data
/Province.csv

尝试删除
-dimportsv.columns=a、b、c
中的空格

您是否已尝试删除-Dimporttsv.columns选项中的=和逗号后的空格?这是重复的答案,但不可能仅为了添加两个“字符”而编辑该答案,因此我想这是可以的。
bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=','
-Dimporttsv.columns="HBASE_ROW_KEY, ProvinceINFO:ProvinceName" Province /usr/data
/Province.csv