Данные неправильно читаются из hadoop с использованием API-интерфейса файловой системы - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь прочитать файл из hadoop с помощью API файловой системы, я могу подключить hadoop и прочитать файл, однако чтение файла содержит искаженные символы.

Ниже приведен код:

public class HdfsToInfaWriter{
    public static void main(String[] args)
    {
        //FileUtil futil;
        String hdfsuri=args[0];
        //String src=args[1];
        String localuri=args[1];
        String hdusername=args[2];
        byte[] buffer=new byte[30];
        char c;
        Configuration conf=new Configuration();
        conf.addResource(new Path("file:///etc/hadoop/conf/core-site.xml"));
        conf.addResource(new Path("file:///etc/hadoop/conf/hdfs-site.xml"));
        conf.set("hadoop.security.authentication", "kerberos");
        conf.set("fs.defaultFS",hdfsuri);
        conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
        conf.set("fs.file.impl",org.apache.hadoop.fs.LocalFileSystem.class.getName());
        //futil.copy(srcFS, src, dst, deleteSource, conf)
        try {
        UserGroupInformation.setConfiguration(conf);
        UserGroupInformation.loginUserFromKeytab("**************",
                "********************");
        }catch(IOException e){
            e.printStackTrace();
            }
        System.setProperty("HADOOP_USER_NAME",hdusername);
        System.setProperty("hadoop.home.dir","/");
        FSDataInputStream in1 = null;

        try{
                FileSystem fs = FileSystem.get(URI.create(hdfsuri),conf);


                Path hdfsreadpath=new Path(hdfsuri);
                CompressionCodecFactory factory = new CompressionCodecFactory(conf);
                System.out.println("the class for codec is " +factory.getCodec(hdfsreadpath));
                File src1=new File(localuri);
                System.out.println("before copy");
                FileUtil.copy(fs, hdfsreadpath, src1, false, conf);

                }}}

Когда я использую команду hdfs hdfs dfs -cat /bigdatahdfs/datamart/trial.txt, данные в файле представляют собой простой текстовый файл.

Но когда я использую команду cat /home/trial1.txt и копирую файл в локальную систему, вывод будет таким, как показано ниже:

▒▒▒1K▒; ▒▒ = ▒ <▒▒▒ & ▒▒▒ </p>

ПРИМЕЧАНИЕ. - Я также пытался использовать IOUtils API, выводто же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...