在一些情景下,需要用java讀取hadoop的文件的具體內容,而不是把文件複製到本地。
pom.xml
pom.xml如下:
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
具體代碼以及註釋
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 java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
public class test {
public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
// 下面的地址是hadoop的地址
FileSystem fs=FileSystem.get(
new URI("hdfs://192.168.153.129:9000"), new Configuration(), "root");
// 下面的地址是hadoop的地址,後面的路徑是你要讀取的文件
FSDataInputStream in = fs.open(new Path(
"hdfs://192.168.153.129:9000/user/hive/warehouse/test.db/t1/dt=3/t1"));
BufferedReader d = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = d.readLine()) != null) {
System.out.println(line)
}
d.close();
in.close();
fs.close();
}
}
這樣就可以讀取到hadoop文件中的具體內容,結合實際需求做相應處理即可。
這裏有一個和這個有關的項目的文章,建議一看
Java,Scala - 使用代碼統計hadoop中hdfs的文件大小以及文件夾大小