1.实践
进入/app/hadoop-1.1.2 ,新建文件夹input,在文件夹下 vi daysn.txt
daysn wu is handsome very handsome wow so so handsome yes he is
然后保存。待会咋们把这个daysn.txt上传到hdfs中去。在hdfs中建立文件夹/upload
hadoop fs -mkdir /upload
hadoop fs -ls /
上传使用copyFromLocal命令
hadoop fs -copyFromLocal daysn.txt /upload/daysn.txt
hadoop fs -ls /
接下来我们试着用代码读取hdfs的文件。
再在app/hadoop-1.1.2下面建立文件夹classes。进入classes目录,vi Test.java,输入以下代码。
import java.io.InputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
public class Test{ public static void main(String[] args) throws Exception{
String uri = args[0];
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
InputStream in = null;
try{
in = fs.open(new Path(uri));
IOUtils.copyBytes(in, System.out, 4096, false);
}finally{
IOUtils.closeStream(in);
}
} }
然后
javac -classpath ../hadoop-core-1.1.2.jar Test.java 编译一下
然后使用命令一样用Test(讲真这个类名应该叫catFile之类,这样写命令才好一些)
然后试着修改文件,这里用实验楼的例子在本地文件系统生成一个大约 100 字节的文本文件,
写一段程序读入这个文件并将其第 101-120 字节的内容写入 HDFS 成为一个新文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; public class LocalFile2Hdfs { public static void main(String[] args) throws Exception { // 获取读取源文件和目标文件位置参数 String local = args[0]; String uri = args[1]; FileInputStream in = null; OutputStream out = null; Configuration conf = new Configuration(); try { // 获取读入文件数据 in = new FileInputStream(new File(local)); // 获取目标文件信息 FileSystem fs = FileSystem.get(URI.create(uri), conf); out = fs.create(new Path(uri), new Progressable() { @Override public void progress() { System.out.println("*"); } }); // 跳过前100个字符 in.skip(100); byte[] buffer = new byte[20]; // 从101的位置读取20个字符到buffer中 int bytesRead = in.read(buffer); if (bytesRead >= 0) { out.write(buffer, 0, bytesRead); } } finally { IOUtils.closeStream(in); IOUtils.closeStream(out); } } }
在classes目录下新增一个代码文件
LocalFile2Hdfs.java
,然后搞事情
javac -classpath ../hadoop-core-1.1.2.jar LocalFile2Hdfs.java
在input文件夹中新增一个new.txt,内容随便打。