Hadoop URL中读取数据出错:unknown protocol: hdfs

简介:

今天在学习如何从hadoop中读取数据时,写了一个简单的方法,测试时,却报以下错误:

154835_1JUC_1434710.png

以下是读取hadoop中文件并写入本地磁盘的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package  hdfs;
 
import  java.io.BufferedReader;
import  java.io.FileWriter;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.net.URL;
import  org.apache.hadoop.io.IOUtils;
 
public  class  HDFS {
         public  static  void  main(String[] args)  throws  Exception {
         InputStream inputStream =  null ;
         FileWriter writer =  null ;
         try  {
             URL url =  new  URL( "hdfs://localhost:9000/input.txt" );
             inputStream = url.openStream();
             writer =  new  FileWriter( "/home/wxl/桌面/tmp.txt" );
             InputStreamReader reader =  new  InputStreamReader(inputStream);
             BufferedReader bufferedReader =  new  BufferedReader(reader);
             String line =  null ;
             while ((line = bufferedReader.readLine()) !=  null ) {
                 writer.write(line);
             }
         finally  {
             IOUtils.closeStream(inputStream);
             if (writer !=  null ) {
                 writer.close();
             }
         }
     }
}

几经周折,在《Hadoop权威指南》中找到这样的结果:

    "There’s a little bit more work required to make Java recognize Hadoop’s hdfs URL scheme. This is achieved by calling the setURLStreamHandlerFactory method on URL with an instance of FsUrlStreamHandlerFactory . This method can be called only once per JVM, so it is typically executed in a static block."

    意即:“让Java程序能够识别Hadoop的hdfs URL方案还需要一些额外的工作,这里采用的方法是通过FsUrlStreamHandlerFactory实例调用URL中的setURLStreamHandlerFactory方法。由于Java虚拟机只能调用一次上述方法,因此通常在静态方法中调用上述方法。”

    于是,在类中加入静态执行块:

?
1
2
3
4
static  {
     // This method can be called at most once in a given JVM.
     URL.setURLStreamHandlerFactory( new  FsUrlStreamHandlerFactory());
}

    因此代码变成了下面这样:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package  hdfs;
 
import  java.io.BufferedReader;
import  java.io.FileWriter;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.net.URL;
 
import  org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import  org.apache.hadoop.io.IOUtils;
 
public  class  HDFS {
     
     static  {
         // This method can be called at most once in a given JVM.
         URL.setURLStreamHandlerFactory( new  FsUrlStreamHandlerFactory(););
     }
     
     public  static  void  main(String[] args)  throws  Exception {
         InputStream inputStream =  null ;
         FileWriter writer =  null ;
         try  {
             URL url =  new  URL( "hdfs://localhost:9000/input.txt" );
             inputStream = url.openStream();
             writer =  new  FileWriter( "/home/wxl/桌面/tmp.txt" );
             InputStreamReader reader =  new  InputStreamReader(inputStream);
             BufferedReader bufferedReader =  new  BufferedReader(reader);
             String line =  null ;
             while ((line = bufferedReader.readLine()) !=  null ) {
                 writer.write(line);
             }
         finally  {
             IOUtils.closeStream(inputStream);
             if (writer !=  null ) {
                 writer.close();
             }
         }
     }
}

    OK,不再报错,成功运行。

目录
相关文章
|
20天前
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
36 3
|
20天前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
70 2
|
4天前
|
存储 分布式计算 Hadoop
【专栏】Hadoop:驭服数据洪流的利器
【4月更文挑战第28天】Hadoop,开源大数据处理框架,由Hadoop Common、HDFS、YARN和MapReduce组成,提供大规模数据存储和并行处理。其优势在于可扩展性、容错性、高性能、灵活性及社区支持。然而,数据安全、处理速度、系统复杂性和技能短缺是挑战。通过加强安全措施、结合Spark、自动化工具和培训,Hadoop在应对大数据问题中保持关键地位。
|
6天前
|
新零售 分布式计算 数据可视化
数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析
数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析
17 0
|
18天前
|
分布式计算 Hadoop 测试技术
Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
【4月更文挑战第5天】Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
41 8
|
18天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
46 9
|
19天前
|
分布式计算 Hadoop Shell
Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第4天】Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
29 5
|
21天前
|
分布式计算 Hadoop
Hadoop【问题记录 01】【hadoop-3.1.3 单机版】【Attempting to operate on hdfs namenode as root】
【4月更文挑战第2天】Hadoop【问题记录 01】【hadoop-3.1.3 单机版】【Attempting to operate on hdfs namenode as root】
11 0
|
25天前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
15 0
|
25天前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
13 0

相关实验场景

更多