hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
具体示例
方式1
hadoop fs -put /root/zjhome/test.json hdfs://hacluster/zjhome/test.json
其中集群名可以通过下面的地址查看
http://hadoop02:50070/dfshealth.html#tab-overview
不要使用
hadoop fs -put /root/zjhome/test.json hdfs://hadoop02:9000/zjhome/test.json
其中端口是在hdfs-site.xml
中的dfs.namenode.rpc-address
配置的端口。
这种方式只会找对应的服务器上找,如上只会从hadoop02上找,如果hadoop02不是激活状态则无法上传。
方式2
hadoop fs -put /root/zjhome/test.json /zjhome/test.json
注意如果父级目录没有创建,需要先创建。
hadoop fs -ls /
hadoop fs -mkdir -p /zjhome/
这里的-p
选项会创建所有必要的父目录,如果它们不存在的话。
hadoop fs -cat /zjhome/test.json
hadoop fs -get /zjhome/test.json
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ReadHDFSFile {
public static String getHadoopConfigRootPath() {
String conf = System.getenv("HADOOP_CONF_DIR");
if (conf == null) {
String hh = System.getenv("HADOOP_HOME");
if (hh == null) {
throw new RuntimeException("找不到配置文件");
}
conf = hh + "/etc/hadoop";
}
return conf;
}
public static Configuration loadHDFS() throws RuntimeException {
String conf = getHadoopConfigRootPath();
Configuration config = new Configuration();
config.addResource(new Path(conf + "/core-site.xml"));
config.addResource(new Path(conf + "/hdfs-site.xml"));
return config;
}
public static String getStrByPath(String hdfsFilePath) {
try {
Configuration conf = loadHDFS();
FileSystem fs = FileSystem.get(conf);
Path filePath = new Path(hdfsFilePath);
if (fs.exists(filePath)) {
FSDataInputStream inputStream = fs.open(filePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
reader.close();
inputStream.close();
fs.close();
return content.toString();
} else {
System.out.println("文件不存在:" + hdfsFilePath);
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
String hdfsFilePath = "hdfs://hacluster/zjhome/test.json";
String fileContent = getStrByPath(hdfsFilePath);
System.out.println("文件内容:\n" + fileContent);
}
}
注意
要读取服务器上的Hadoop配置,否则无法找到文件。
依赖的Jar
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version> <!-- 使用与你的Hadoop集群版本匹配的版本 -->
</dependency>