Нежелательные символы в HDFS после копирования с удаленного сервера - PullRequest
0 голосов
/ 11 декабря 2018

Я успешно могу скопировать файл с удаленного сервера Windows на HDFS, используя Jsch jar.Мой исходный файл содержит какой-то специальный символ, такой как «í», который появляется как символ мусора в HDFS.Я попытался установить System.setProperty("file.encoding","UTF-8"), но это не сработало.Вот фрагмент кода: -

import org.apache.hadoop.io.IOUtils
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import scala.io.Codec
import org.apache.hadoop.fs._
import org.apache.hadoop.fs._
import java.net.URI
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.conf.Configuration
import scala.util.control.Breaks._
import java.io._
import java.util.Properties
var host:String="MY_Computer";
var port:Integer= 22 ;
val path="/hdfs/path"
val hdfsuri = "hdfs://namenode.com"
var user:String="userid";
var password:String="password";
var session:Session=_;
var channel:Channel=_;
var cis: BufferedInputStream =_;
var sftpChannel:ChannelSftp=_;
var FSoutputStream: FSDataOutputStream=_;
implicit val codec = Codec("UTF-8")
var jsch:JSch=_;
jsch = new JSch();
session = jsch.getSession(user, host,port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
sftpChannel = channel.asInstanceOf[ChannelSftp]
val fileName="C:/windows/hdfs/Test.txt"
val cdDir: String = fileName.substring(0, fileName.lastIndexOf("/") + 1);
sftpChannel.cd(cdDir);
val files :File = new File(fileName);
val conf: Configuration = new Configuration()
val hdfs: FileSystem = FileSystem.get(URI.create(hdfsuri), conf);
val newFolderPath: Path = new Path(path)
FSoutputStream =hdfs.create(newFolderPath);
val cis: BufferedInputStream =  new BufferedInputStream(sftpChannel.get(files.getName()))
IOUtils.copyBytes(cis, FSoutputStream, conf);

Ниже приведен контент файла в windows

íHello

И когда он попадает в HDFS, онвыглядит следующим образом: -

enter image description here

Мое наблюдение пока: - 1- Я вижу, что размер файла одинаков как в Windows, так и в HDFS.

Я не хочу использовать утилиту iconv, в основном я не хочу получать файл на локальную ФС и обрабатывать.Любой намек на spark / scala будет полезен.

...