无法使用文件系统API从hadoop正确读取数据

时间:2018-09-17 09:15:30

标签: api hadoop filesystems

我正在尝试使用文件系统API从hadoop读取文件,我能够连接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▒;▒▒   =▒<▒▒▒&▒▒▒

注意:-我也尝试使用IOUtils API,输出是相同的。

0 个答案:

没有答案