我有一个纯文本文件,行用'\ n'分隔,列用'^ A'分隔,这是一个非打印字符。我需要将此文件加载到HBase,并且遇到了importtsv工具,它似乎可以满足我的需要。

我进行了一些研究并得出结论:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.columns=col1,col2,col3 \
-Dimporttsv.skip.bad.lines=true \
'-Dimporttsv.separator=|' \
-Dmapred.job.name=job_name \
user_action_log \
/data2/result


但是,我不知道如何将控件A传递给'-Dimporttsv.separator=|',我查看了此ImportTsv here的源代码。



我绝对不是Java的专家来解决这个问题,并且想知道是否有人了解Java可以帮助我将控件A从命令行传递给Java类?

谢谢,

最佳答案

使用bashkshzsh,可以使用$'\x01'传递Ctrl-A字符:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
  -Dimporttsv.columns=col1,col2,col3 \
  -Dimporttsv.skip.bad.lines=true \
  -Dimporttsv.separator=$'\x01' \
  -Dmapred.job.name=job_name \
  user_action_log \
  /data2/result


对于posix sh,可以改为使用$(printf "\x01")

07-24 22:12