部署好Hadoop HDFS环境之后,可以通过shell或JavaAPI等方式来操作hdfs中的内容。
Shell方式
shell方式操作在这里不做过多介绍,基本由以下两种操作方式。
1.hdfs dfs -xx
如:hdfs dfs -put /etc/profile /
2.hadoop fs -xx
如:hadoop fs -get /profile
Java API方式
1.拷贝core-site.xml配置文件到本地,也可不拷贝,在创建Configuration对象时用代码的方式设置参数也可行。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://xyes.com:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/bigdata/tmp</value>
</property>
</configuration>
2.如果core-site.xml中fs.defaultFS是以主机名配置的,并且在本地hosts文件中没有映射该主机名,就需要将主机名替换为IP地址。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.11:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/bigdata/tmp</value>
</property>
</configuration>
3.在Java代码中读取配置文件并获取到HDFS客户端
public static final String DEFAULT_FS = "fs.defaultFS";
public static final String USER_NAME = "xyes";//用户名
private FileSystem fs;
@Before
public void initConfig() throws IOException, URISyntaxException, InterruptedException {
Configuration configuration = new Configuration();//在这里会自动读取core-site.xml,若没有该文件,则需要手动设置fs.defaultFS配置,configuration.set("fs.defaultFS","hdfs://192.168.1.11:9000/");
URI targetUri = new URI(configuration.get(DEFAULT_FS));//HDFS NameNode地址
fs = FileSystem.get(targetUri, configuration, USER_NAME);//获取文件系统客户端
}
4.操作HDFS(剪切本地文件到HDFS)
@Test
public void test() throws IOException {
String fileName = "D:/一个人.mp3";//本地文件地址
Path target = new Path("/");//拷贝到HDFS的目标地址
fs.moveFromLocalFile(new Path(fileName), target);//执行操作
}
5.关闭HDFS客户端
@After
public void closeFileSystem() throws IOException {
if (null != fs) {
fs.close();
}
}