hadoop - 无法使用 importtsv 将数据从 Hdfs 导入到 Hbase

标签 hadoop hbase bulk-load

我将制表符分隔的文件移动到 hdfs,现在正试图将它移动到 hbase。 下面是我的 importtsv 命令

  bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,cf:ok,cf:ek,cf:rk,cf:rsk,cf:pdk,cf:pmk,cf:omk,cf:sok,cf:sdk,cf:cdk,cf:q,cf:uc,cf:up,cf:usp,cf:gm,cf:st,cf:gp -Dimporttsv.skip.bad.lines=false 'sales_fact' hdfs://localhost:54310/my/file.txt

它正在尝试从不存在的位置读取一个 jar。

Exception in thread "main" java.io.FileNotFoundException: File does not exist: hdfs://localhost:54310/home/elijah/Downloads/hbase/lib/htrace-core-3.1.0-incubating.jar
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1072)
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1064)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1064)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:288)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:224)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestamps(ClientDistributedCacheManager.java:93)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestampsAndCacheVisibilities(ClientDistributedCacheManager.java:57)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:265)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:389)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303)
at org.apache.hadoop.hbase.mapreduce.ImportTsv.run(ImportTsv.java:738)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at org.apache.hadoop.hbase.mapreduce.ImportTsv.main(ImportTsv.java:747)

我不明白为什么它将 hdfs 和本地目录路径混为一谈。 hdfs://localhost:54310/home/elijah/Downloads/hbase/lib/htrace-core-3.1.0-incubating.jar

运行导入作业的用户对本地目录中的 hbase 库具有完全访问权限。

最佳答案

我可以看到缺少 -libjars 选项....您可以使用 -libjars 选项,下面是示例用法:

hadoop jar \
hbase-server-0.98.6-cdh5.2.1.jar \
importtsv \
-libjars /opt/cloudera/parcels/CDH-5.2.1-1.cdh5.2.1.p0.12/jars/high-scale-lib-1.1.1.jar \
-Dimporttsv.separator=, -Dimporttsv.bulk.output=output \
-Dimporttsv.columns=HBASE_ROW_KEY,f:count wordcount \
word_count.csv

你也可以这样做:-

# export HADOOP_CLASSPATH=`./hbase classpath`

缺少的 jar 之一,即 hbase/lib/htrace-core-3.1.0-incubating.jar 将是 hbase 类路径。并且应该在这种情况下工作。

关于hadoop - 无法使用 importtsv 将数据从 Hdfs 导入到 Hbase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706277/

相关文章:

hadoop - Hadoop MapReduce无法产生所需的输出

shell - 使用HBase Shell进行与列族TTL不同的Put

hadoop - hadoop中多个小文件存放在什么地方最好

java - Hbase 使用值列表过滤列

hadoop - 异常:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):权限被拒绝:user = hbase,access = EXECUTE

if-statement - FORALL Oracle 中的 IF ELSE 条件

java - 实现Hadoop计数器时主线程中的IllegalStateException

hadoop - 如何查询hbase json字符串值

Redis批量插入: protocol vs inline commands

hadoop - Apache Giraph - 无法在分离主/工作模式下运行,因为一次只有 1 个任务