1. 程式人生 > >Hadoop學習二(java api呼叫操作HDFS)

Hadoop學習二(java api呼叫操作HDFS)

上一篇文章記錄了在Ubuntu虛擬機器上啟動了hadoop

這篇文章在windows機器上通過java api方式呼叫操作hdfs,在使用過程中也遇到了一些問題,這裡簡單介紹一下。

工具:.IntellJ IDEA

首先建立了一個maven專案,pom.xml檔案中引入了 hadoop-common 包

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
  <groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId> <version>2.7.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.1</version> </dependency>

我測試了下從hdfs上下載檔案,過程如下:

在linux的hadoop伺服器上面建立了一個檔案,檔名是newrt (就是把jdk下面的rt.jar上傳到了hdfs)

在windows本地建立一個class--->HDFSTest,程式碼如下
importorg.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; /** * Created by lixintang on 2017/4/17. */ public class HDFSTest { public static void main(String[] args) throws Exception{ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create("hdfs://192.168.56.101:9000"), conf); InputStream in = fs.open(new Path("/newrt")); OutputStream out = new FileOutputStream("D:/hadoop/hdfs/rt.jar"); IOUtils.copyBytes(in, out, 4096, true); } }

執行報出如下問題:

1    [main] DEBUG org.apache.hadoop.util.Shell  - Failed to detect a valid hadoop home directory

java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:303)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:328)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2807)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2802)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2668)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at com.xintangli.bigdata.hadooptest.hdfs.HDFSTest.main(HDFSTest.java:21)
6    [main] ERROR org.apache.hadoop.util.Shell  - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:356)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:371)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:364)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2807)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2802)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2668)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at com.xintangli.bigdata.hadooptest.hdfs.HDFSTest.main(HDFSTest.java:21)

看錯誤資訊是HADOOP_HOME沒有配置

可以在呼叫之前設定 hadoop.home.dir(這裡是設定本地的hadoop目錄)

System.setProperty("hadoop.home.dir", "D:\\soft\\dev_soft\\database\\hadoop\\hadoop-2.7.1");
public class HDFSTest {

    public static void main(String[] args) throws Exception{
        System.setProperty("hadoop.home.dir", "D:\\soft\\dev_soft\\database\\hadoop\\hadoop-2.7.1");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://192.168.56.101:9000"), conf);
InputStream in = fs.open(new Path("/newrt"));
OutputStream out = new FileOutputStream("D:/hadoop/hdfs/rt.jar");
IOUtils.copyBytes(in, out, 4096, true);
}
}

之後執行報錯:

No FileSystem for scheme: hdfs

經過查資料發現是沒有引入hadoop-hdfs包導致的,pom檔案內容如下

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-hdfs</artifactId>
  <version>2.7.1</version>
</dependency>

設定好後,可正常執行,並下載了newrt檔案儲存到本地為rt.jar

相關推薦

Hadoop學習(java api呼叫操作HDFS)

上一篇文章記錄了在Ubuntu虛擬機器上啟動了hadoop 這篇文章在windows機器上通過java api方式呼叫操作hdfs,在使用過程中也遇到了一些問題,這裡簡單介紹一下。 工具:.IntellJ IDEA 首先建立了一個maven專案,pom.xml檔案中引入了

JAVA API簡單操作Hadoop

一:環境準備。      1.開發環境的JDK的版本最好是和Linux上一致,這裡是JDK8。      2.搭建工程匯入需要的jar包。         2.1 hadoop-2.8

機器學習weka,java api呼叫隨機森林及儲存模型

工作需要,瞭解了一下weka的java api,主要是隨機森林這一塊,剛開始學習,記錄下。 瞭解不多,直接上demo,裡面有一些註釋說明: package weka; import java.io.File; import weka.classifiers.Classifier; i

hadoop學習筆記(三):hdfs體系結構和讀寫流程(轉)

sim 百萬 服務器 發表 繼續 什麽 lose 基於 一次 原文:https://www.cnblogs.com/codeOfLife/p/5375120.html 目錄 HDFS 是做什麽的 HDFS 從何而來 為什麽選擇 HDFS 存儲數據 HDFS

Java api 呼叫Sqoop2進行MySQL-->Hive的資料同步

1.相關jar包 2.一些需要的引數定義在message.properties中 jdbcHiveUrl=jdbc:hive2://10.1.9.91:10000 //hive地址 jdbcHiveDriver=org.apache.hive.jdbc.Hi

Apollo學習(): Java客戶端使用

說明 本文主要是以springboot專案為基礎,學習從Apollo配置中心獲取值得使用方法。 正文 通過上篇《Apollo學習(一):在本地Windows系統下搭建Apollo配置中心》的學習,已經在本地快速搭建了一個Apollo配置中心,本篇通過構建springboot專

[Hadoop 2] 常用 Java API 及應用例項

1 開啟 Eclipse,開始建立專案,選擇頂部選單 File->New->Java Project,建立名為 HadoopTest 專案,如下圖: 2 為專案載入所需要的 jar 包。 如何獲取 jar 包: Java API 所在的 jar 包都在已經

elasticsearch的java api基本操作

1.新增依賴 預設elasticsearch的配置已經沒有問題了,本文使用elasticsearch版本為6.4.2,依賴如下: <dependency> <groupId>org.elasticsearch</g

HBase Java API 基本操作

學完hbase shell API的基本操作之後,可以通過Java API 對hbase基本操作實現一把。 基本概念 java類 對應資料模型 HBaseConfiguration HBase配置類 HBaseAdmin HBase管理A

mongoDB學習()——mongoDB的基礎操作

     在MongoDB資料庫裡面是存在有資料庫的概念,但是沒有模式(所有的資訊都是按照文件儲存的),儲存資料的結構就是JSON結構,只不過在進行一些資料處理的時候才會使用到MongoDB自己的一些操作符。 1、 使用mldn資料庫: 實際上這個時候並

資料結構學習()——單鏈表的操作之頭插法和尾插法建立連結串列

連結串列也是線性表的一種,與順序表不同的是,它在記憶體中不是連續存放的。在C語言中,連結串列是通過指標相關實現的。而單鏈表是連結串列的其中一種,關於單鏈表就是其節點中有資料域和只有一個指向下個節點的指標域。建立單鏈表的方法有兩種,分別是頭插法和尾插法。 所謂頭插法,就是按節

使用Elasticsearch的java api操作elasticsearch

本應用使用的maven,java8。 依賴的jar包: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>

Hadoop學習第六課(初識HDFS原理)

        當然,上面舉得例子只是為了方便大家理解,比較專業的說法是:客戶端Client通過使用RPC向NameNode傳送寫檔案的請求,NameNode會檢視哪個DataNode空閒,比如下圖中第二個DataNode,NameNode把空閒的DataNode資訊返回給Client,Client接收到返回

hadoop學習筆記-hive安裝及操作

軟體下載: Mysql: Hive: 安裝環境: OS:Oracle redhad 5.6 x86 64bit Hadoop: hadoop-0.20.2 Mysql:mysql-5.5.24 Hive:hive-0.8.1 1.       安裝mysql -

ballerina 學習十九 資料庫操作

dockerfile: mysql 資料庫的dockerfile,包含資料的初始化 FROM mysql/mysql-server:5.7 COPY inid.sql /docker-entrypoint-initdb.d docker-compose.yaml: docker-compose 執

Zookeeper Java API呼叫

public class ZooKeeperTest implements Watcher{ //public final static String zkServerPath = "12.45.67.80:2181"; //叢集,使用逗號分隔 public final

ElasticSearch2.3.4之Java Api呼叫例子

ElasticSearch2.3.4 序號 覆蓋功能例子 1 客戶端連結初始化 2 filte無評分查詢用法 3 query有評分查詢用法 4 單欄位分組用法 5 多欄位分組用法 6 讀取有索引無儲存資料的用法 7 設定指定欄位返回 程式碼如下: package com.

Hadoop學習筆記一(通過Java API 操作HDFS,檔案上傳、下載)

package demo.hdfs; import java.util.Arrays; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; impor

hadoop學習筆記(七):Java HDFS API

on() apr name pin package 目錄 except 讀取 play 一、使用HDFS FileSystem詳解 HDFS依賴的第三方包:   hadoop 1.x版本:   commons-configuration-1.6.jar   comm

Java操作HDFS(Linux) 學習篇(

java操作Linux系統上的HDFS檔案系統 一、首先:在Linux上搭建HDFS偽分散式環境,啟動命令 ------>sh   start-all.sh,顯示啟動成功介面如下:   二 、win 上Java開發環境使用的是IDEA ,Java遠端操作H