怎样给hdfs中的spark 写文件到hdfs设置写

&&&& ... 3
&&&& ... 3
&&&& ... 3
&&&& ... 3
&&&& ... 4
&&& ... 10
1运行环境说明
1.1硬软件环境
l主机操作系统:Windows 64 bit,双核4线程,主频2.2G,6G内存
l虚拟软件:VMware& Workstation 9.0.0 build-812388
l虚拟机操作系统:CentOS 64位,单核,1G内存
lJDK:1.7.0_55 64 bit
lHadoop:1.1.2
1.2机器网络环境
该开发机器处于能连接互联网的局域网中,具体信息为:
10.88.147.220
NN、SNNTaskTracer、DN、JobTracer
2书面作业1:编译并运行《权威指南》中的例3.2
2.1书面作业1内容
在Hadoop集群中编译并运行《权威指南》中的例3.2
2.2运行代码
import java.io.InputS
import java.net.URI;
import org.apache.hadoop.conf.C
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOU
publicclass FileSystemCat {
&&& publicstaticvoid main(String[] args) throws Exception {
&&&&&&& String uri = args[0];
&&&&&&& Configuration conf = new Configuration();
&&& FileSystem fs = FileSystem. get(URI.create (uri), conf);
&&& InputStream in = null;
&&& &&&& in = fs.open( new Path(uri));
&&& &&&& IOUtils.copyBytes(in, System.out, 4096, false);
&&&&&&& } finally {
&&& &&&& IOUtils.closeStream(in);
2.3实现过程
在Hadoop集群中编译并运行《权威指南》中的例3.2
2.3.1创建代码目录
启动Hadoop,在/usr/local/hadoop-1.1.2目录下使用如下命令建立myclass和input目录:
mkdir myclass
mkdir input
2.3.2建立例子文件上传到hdfs中
进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立quangle.txt文件,内容为:
使用如下命令在hdfs中建立/usr/hadoop/文件夹
hadoop fs -mkdir /usr/hadoop/
hadoop fs -ls /usr/
把例子文件上传到hdfs的/usr/hadoop/文件夹中
hadoop fs -copyFromLocal ../input/quangle.txt /usr/hadoop/quangle.txt
hadoop fs -ls /usr/hadoop
2.3.3配置本地环境
对/usr/local/hadoop-1.1.2/conf目录中的hadoop-env.sh进行配置,如下如所示:
vi hadoop-env.sh
加入对HADOOP_CLASPATH变量值,值为/usr/local/hadoop-1.1.2/myclass
2.3.4编写代码
进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立FileSystemCat.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi FileSystemCat.java
输入代码内容:
2.3.5编译代码
在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar FileSystemCat.java
2.3.6使用编译代码读取文件
使用如下命令读取quangle.txt内容:
hadoop FileSystemCat /usr/hadoop/quangle.txt
3书面作业2:写入HDFS成为一个新文件
3.1书面作业2内容
自行在本地文件系统生成一个大约100字节的文本文件,写一段程序(可以利用Java API或C API),读入这个文件,并将其第101-120字节的内容写入HDFS成为一个新文件,提供代码和执行结果演示抓图
3.2运行代码
注意:在编译前请先删除中文注释!
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.OutputS
import java.net.URI;
import org.apache.hadoop.conf.C
import org.apache.hadoop.fs.FSDataInputS
import org.apache.hadoop.fs.FileS
import org.apache.hadoop.fs.P
import org.apache.hadoop.io.IOU
import org.apache.hadoop.util.P
publicclass LocalFile2Hdfs {
&&& publicstaticvoid 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
&&&&&&&&&&&&&&& publicvoid progress() {
&&&&&&&&&&&&&&&&&&& System.out.println("*");
&&&&&&&&&&&&&&& }
&&&&&&&&&&& });
&&&&&&&&&&& // 跳过前100个字符
&&&&&&&&&&& in.skip(100);
&&&&&&&&&&& byte[] buffer = newbyte[20];
&&&&&&&&&&&&&&&
&&&&&&&&&&& // 从101的位置读取20个字符到buffer中
&&&&&&&&&&& int bytesRead = in.read(buffer);
&&&&&&&&&&& if (bytesRead &= 0) {
&&&&&&&&&&&&&&& out.write(buffer, 0, bytesRead);
&&&&&&&&&&& }
&&&&&&& } finally {
&&&&&&&&&&& IOUtils.closeStream(in);
&&&&&&&&&&& IOUtils.closeStream(out);
&&&&&&& }&&&&&&
3.3实现过程
3.3.1编写代码
进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立LocalFile2Hdfs.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi LocalFile2Hdfs.java
输入代码内容:
3.3.2编译代码
在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar LocalFile2Hdfs.java
3.3.3建立测试文件
进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立local2hdfs.txt文件,内容为:
cd /usr/local/hadoop-1.1.2/input/
vi local2hdfs.txt
3.3.4使用编译代码上传文件内容到hdfs
使用如下命令读取local2hdfs第101-120字节的内容写入HDFS成为一个新文件:
cd /usr/local/hadoop-1.1.2/bin/
hadoop LocalFile2Hdfs ../input/local2hdfs.txt /usr/hadoop/local2hdfs_part.txt
3.3.5验证是否成功
使用如下命令读取local2hdfs_part.txt内容:
hadoop fs -cat /usr/hadoop/local2hdfs_part.txt
4书面作业3:作业2反向操作
4.1书面作业2内容
2的反向操作,在HDFS中生成一个大约100字节的文本文件,写一段程序(可以利用Java API或C API),读入这个文件,并将其第101-120字节的内容写入本地文件系统成为一个新文件,提供代码和执行结果演示抓图
4.2程序代码
4.3实现过程
4.3.1编写代码
进入/usr/local/hadoop-1.1.2/myclass目录,在该目录中建立Hdfs2LocalFile.java代码文件,命令如下:
cd /usr/local/hadoop-1.1.2/myclass/
vi Hdfs2LocalFile.java
输入代码内容:
4.3.2编译代码
在/usr/local/hadoop-1.1.2/myclass目录中,使用如下命令编译代码:
javac -classpath ../hadoop-core-1.1.2.jar Hdfs2LocalFile.java
4.3.3建立测试文件
进入/usr/local/hadoop-1.1.2/input目录,在该目录中建立hdfs2local.txt文件,内容为:
cd /usr/local/hadoop-1.1.2/input/
vi hdfs2local.txt
把该文件上传到hdfs的/usr/hadoop/文件夹中
cd /usr/local/hadoop-1.1.2/bin/
hadoop fs -copyFromLocal ../input/hdfs2local.txt /usr/hadoop/hdfs2local.txt
hadoop fs -ls /usr/hadoop
4.3.4使用编译代码把文件内容从hdfs输出到文件系统中
使用如下命令读取hdfs2local.txt第101-120字节的内容写入本地文件系统成为一个新文件:
hadoop Hdfs2LocalFile /usr/hadoop/hdfs2local.txt ../input/hdfs2local_part.txt
ls ../input
4.3.5验证是否成功
使用如下命令读取hdfs2local_part.txt内容:
cat ../input/hdfs2local_part.txt
阅读(...) 评论()博客分类:
Hadoop 提供一类api可以通过java工程操作hdfs中的文件,包括:文件打开,读写,删除等、
目录的创建,删除,读取目录中所有文件等。
2 需要处理hadoop的文件程序需要引入下面jar包,可以hadoop-1.2.1\lib找到。
hadoop-core和common-log,commons-configuration-1.6.jar,commons-lang-2.4.jar。
3 想要运行写好的程序操作hdfs中文件两种方法:1 安装elipse的hadoop插件(之前有介绍)
2、将写好成程序打成jar包,在服务器上用hadoop命令运行
程序处理步骤: 1) 得到Configuration对象2)得到FileSystem对象 3)进行文件操作。
5 以下是操作文件的事例程序,版本 hadoop-1.2.1
package org.tony.
import java.io.IOE
import org.apache.hadoop.conf.C
import org.apache.hadoop.fs.FSDataInputS
import org.apache.hadoop.fs.FSDataOutputS
import org.apache.hadoop.fs.FileS
import org.apache.hadoop.fs.FileS
import org.apache.hadoop.fs.P
public class HDFSTest {
public static void main(String[] args) throws Exception
//uploadLocalFile2HDFS("E:/1.txt","/tmp/1.txt");//E盘下文件传到hdfs上
//createNewHDFSFile("/tmp/create2", "hello");
//String str = new String(readHDFSFile("/tmp/create2"));
//System.out.println(str);
//mkdir("/tmp/testdir");
//deleteDir("/tmp/testdir");
//listAll("/tmp/");
getDateNodeHost();
//获取HDFS集群上所有节点名称信息
public static void getDateNodeHost() throws IOException{
Configuration conf = getConf();
FileSystem fs=FileSystem.get(conf);
DistributedFileSystem hdfs = (DistributedFileSystem)
DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
for(int i=0;i&dataNodeStats.i++){
System.out.println("DataNode_"+i+"_Name:"+dataNodeStats[i].getHostName());
* upload the local file to the hds
* 路径是全路径
public static void uploadLocalFile2HDFS(String s, String d)
throws IOException
Configuration conf = getConf();
FileSystem hdfs = FileSystem.get(conf);
Path src = new Path(s);
Path dst = new Path(d);
hdfs.copyFromLocalFile(src, dst);
hdfs.close();
* create a new file in the hdfs.
* notice that the toCreateFilePath is the full path
* and write the content to the hdfs file.
public static void createNewHDFSFile(String toCreateFilePath, String content) throws IOException
Configuration conf = getConf();
FileSystem hdfs = FileSystem.get(conf);
FSDataOutputStream os = hdfs.create(new Path(toCreateFilePath));
os.write(content.getBytes("UTF-8"));
os.close();
hdfs.close();
* delete the hdfs file
* notice that the dst is the full path name
public static boolean deleteHDFSFile(String dst) throws IOException
Configuration conf = getConf();
FileSystem hdfs = FileSystem.get(conf);
Path path = new Path(dst);
boolean isDeleted = hdfs.delete(path);
hdfs.close();
return isD
* read the hdfs file content
* notice that the dst is the full path name
public static byte[] readHDFSFile(String dst) throws Exception
Configuration conf = getConf();
FileSystem fs = FileSystem.get(conf);
// check if the file exists
Path path = new Path(dst);
if ( fs.exists(path) )
FSDataInputStream is = fs.open(path);
// get the file info to create the buffer
FileStatus stat = fs.getFileStatus(path);
// create the buffer
byte[] buffer = new byte[Integer.parseInt(String.valueOf(stat.getLen()))];
is.readFully(0, buffer);
is.close();
fs.close();
throw new Exception("the file is not found .");
* make a new dir in the hdfs
* the dir may like '/tmp/testdir'
public static void mkdir(String dir) throws IOException
Configuration conf = getConf();
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(new Path(dir));
fs.close();
* delete a dir in the hdfs
* dir may like '/tmp/testdir'
public static void deleteDir(String dir) throws IOException
Configuration conf = getConf();
FileSystem fs = FileSystem.get(conf);
fs.delete(new Path(dir));
fs.close();
//文件系统连接到 hdfs的配置信息
private static Configuration getConf(){
Configuration conf = new Configuration();
// 这句话很关键,这些信息就是hadoop配置文件中的信息
conf.set("mapred.job.tracker", "192.168.102.136:9001");
conf.set("fs.default.name", "hdfs://192.168.102.136:9000");
* @Title: listAll
* @Description: 列出目录下所有文件
* @return void
public static void listAll(String dir) throws IOException
Configuration conf = getConf();
FileSystem fs = FileSystem.get(conf);
FileStatus[] stats = fs.listStatus(new Path(dir));
for(int i = 0; i & stats. ++i)
if (!stats[i].isDir())
// regular file
System.out.println(stats[i].getPath().toString());
System.out.println(stats[i].getPath().toString());
else if(stats[i].())
// is s symlink in linux
System.out.println(stats[i].getPath().toString());
fs.close();
注意:因为hadoop读写文件时候需要权限,如果你window用户名为admin而hadoop集群中目录权限是hadoop用户,读写会失败
1 修改window系统用户为hadoop
2 elipse运行的jvm参数中设置 -DHADOOP_USER_NAME=hadoop ,运行的用户为hadoop
3 部署一个linux环境,在linux环境中开发是比较容易的(用户问题容易设置)。
4 运行的时候指定用户 ,如下:
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(new URI("hdfs://192.168.142.133:9000"),conf,"hadoop");
浏览 17833
浏览: 340454 次
来自: 黑龙江
lizhenlzlz 写道HttpHost proxy = n ...
HttpHost proxy = new HttpHost(& ...
methodGet()方法里
HttpPost httpGet ...
import org.apache.http.impl.cli ...
import org.apache.h没啊。这个包
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'HDFS――如何将文件从HDFS复制到本地
HDFS――如何将文件从HDFS复制到本地
  下面两个命令是把文件从HDFS上下载到本地的命令。
  使用方法:Hadoop fs -get [-ignorecrc] [-crc]
  复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
  示例:
  hadoop fs -get /user/hadoop/file localfile
  hadoop fs -get hdfs://host:port/user/hadoop/file localfile
  返回值:
  成功返回0,失败返回-1。
  copyToLocal
  使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI
  除了限定目标路径是一个本地文件外,和get命令类似。
  也可以用如下的程序可实现将HDFS上的文件下载到本地。
  import .URI;import java.io.OutputSimport java.io.BufferedInputSimport java.io.FileInputSimport java.io.FileOutputSimport ornf.Cimport org.apache.hadoop.fs.FileSimport org.apache.hadoop.fs.FSDataInputSimport org.apache.hadoop.fs.Pimport org.apache.hadoop.io.IOUpublic class FileCopy2Local{&public static void main(String[] args) throws Exception&{& String dest = "hdfs://localhost:9000/user/laozhao0/cite2.txt";& String local = "/home/laozhao0/cite2.txt";& Configuration conf = new Configuration();& FileSystem fs = FileSystem.get(URI.create(dest),conf);& FSDataInputStream fsdi = fs.open(new Path(dest));& OutputStream output = new FileOutputStream(local);& pyBytes(fsdi,output,4096,true);&}}
  相关阅读:
  将本地文件拷到HDFS中
  从HDFS下载文件到本地
  将本地文件上传至HDFS
  HDFS基本文件常用命令
  Hadoop中HDFS和MapReduce节点基本简介
  《Hadoop实战》中文版+英文文字版+源码【PDF】
  Hadoop: The Definitive Guide【PDF版】
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 java写hdfs文件 的文章

 

随机推荐