使用HttpFS網關從防火牆後面訪問HDFS

          使用HttpFS網關從防火牆後面訪問HDFS
html

                                   做者:尹正傑python

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。web

 

 

一.HttpFS概述apache

1>.什麼是HttpFSjson

  HttpFS是在Apache Tomcat上運行的Java應用程序,其容許經過WebHDFS REST API遠程訪問HDFS文件系統。
 
  HttpFS是一臺提供REST HTTP網關的服務器,該網關支持全部HDFS文件系統操做(讀取和寫入),而且能夠與webhdfs REST HTTP API 互操做。
 
  HttpFS可用於在運行不一樣版本Hadoop的羣集之間傳輸數據(克服RPC版本問題),例如使用Hadoop DistCP。
 
  HttpFS可用於訪問防火牆後面的羣集上的HDFS中的數據(HttpFS服務器充當網關,而且是惟一容許將防火牆穿過羣集進入羣集的系統)。
 
  HttpFS可用於使用HTTP實用程序(例如curl和wget)和來自Java之外的其餘語言的HTTP庫Perl來訪問HDFS中的數據。

  舒適提示:
    HttpFS具備內置的安全性,支持Hadoop僞身份驗證和HTTP SPNEGO Kerberos以及其餘可插入身份驗證機制。它還提供了Hadoop代理用戶支持。

2>.HttpFS的應用場景vim

  能夠設置HttpFS服務器以提供支持HDFS文件系統操做的REST HTTP網關。因爲HttpFS是一個代理,它不須要客戶端訪問集羣中的每一臺機器,不像WebHDFS。

  HttpFS在由防火牆的限制難以訪問HDFS數據的環境中很是有用。在這種狀況下,能夠將HttpFS服務器設置爲容許經過防火牆訪問集羣的惟一系統。

3>.注意事項瀏覽器

  要使用HttFS,必須首先安裝和配置HttpFS服務器,而後必須爲HttpFS用戶啓用代理來訪問HDFS,所以運行HttpFS服務器的用戶能夠表明其它用戶訪問HDFS。客戶端只須要訪問HttpFS,由於它是訪問HDFS的HttpFS服務器。
 
  Hue包含了一個HDFS瀏覽器,它在HA NameNode設置中使用HttpFS來訪問HDFS文件系統。
    
  在HDFS HA設置中,不能使用WebHDFS經過Hue的文件瀏覽器訪問HDFS(若是你非要這樣作也只能指定Active NameNode節點)。但在非HA設置中,可使用WebHDFS或HttpFS訪問HDFS。

  WebHDFS和HttpFS之間的區別:
    WebHDFS和HttpFS之間的一個關鍵區別是,使用HttpFS,單個節點將沖淡網關,並將數據的主傳輸管道發送到發出HttpFS命令的客戶機節點。
    另外一方面,WebHDFS須要訪問集羣的全部節點,而且從該節點讀取的數據直接從該節點發送。
    綜上所述,若是要傳輸很是打的文件,能夠證實HttpFS是一個檢查點。最好在環境中測試,選擇最合適的工具。

 

二.配置HttpFS安全

1>.下載HttpFS二進制文件服務器

  以下圖所示,咱們下載的Apache Hadoop版本中自帶有HttpFS功能,但須要單獨啓動守護進程,從目錄結構中不難看出,HttpFS是在Tomcat上運行的Java程序。

  關於Hadoop的部署我這裏就不羅嗦了,相對來講比較簡單,感興趣的同窗可自行查看我以前的筆記喲~

  下載地址:     https:
//hadoop.apache.org/releases.html   博主推薦閱讀:     https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html

2>.修改Hadoop的核心配置文件curl

[root@hadoop101.yinzhengjie.com ~]# vim ${HADOOP_HOME}/etc/hadoop/core-site.xml
......
    <!-- 如下參數用於配置httpfs -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>hadoop101.yinzhengjie.com</value>
     <description>此處我指定本機的root是啓動httpfs的用戶名,主機名稱我指定的本機名稱</description>
    </property>

    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
      <description>此處我指定本機的root是啓動httpfs的用戶組名,組名我未指定,即代之本機的全部用戶組</description>
    </property>
......
[root@hadoop101.yinzhengjie.com ~]#
[root@hadoop101.yinzhengjie.com ~]# manage-hdfs.sh restart          #以下圖所示,當咱們修改配置文件後,須要重啓HDFS服務喲~(目的是激活配置的代理用戶)

3>.啓動HttpFS

[root@hadoop101.yinzhengjie.com ~]# jps
32013 Jps
30831 NameNode
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# httpfs.sh start        #啓動HttpFS服務,以下圖所示,啓動成功後會多出來一個Boostrap進程,與此同時還會監聽14000端口和14001端口喲~
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# jps
32054 Bootstrap
32072 Jps
30831 NameNode
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# httpfs.sh start        #啓動HttpFS服務,以下圖所示,啓動成功後會多出來一個Boostrap進程,與此同時還會監聽14000端口和14001端口喲~

 

三.使用HttpFS

1>.檢查HDFS目錄的狀態

[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 1 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie?op=liststatus&user.name=root"       #檢查"/yinzhengjie"目錄的狀態
{"FileStatuses":{"FileStatus":[{"pathSuffix":"hosts","type":"FILE","length":371,"owner":"root","group":"admingroup","permission":"644","accessTime":1598868446973,"modificationTime":15988684
47282,"blockSize":536870912,"replication":3}]}}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie?op=liststatus&user.name=root" | python -m json.tool  #使用python工具將JSON可讀性加強
{
    "FileStatuses": {
        "FileStatus": [
            {
                "accessTime": 1598868446973,
                "blockSize": 536870912,
                "group": "admingroup",
                "length": 371,
                "modificationTime": 1598868447282,
                "owner": "root",
                "pathSuffix": "hosts",
                "permission": "644",
                "replication": 3,
                "type": "FILE"
            }
        ]
    }
}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie?op=liststatus&user.name=root" | python -m json.tool  #使用python工具將JSON可讀性加強

2>.建立目錄

[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 1 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?user.name=root&op=MKDIRS" | python -m json.tool
{
    "boolean": true
}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 2 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
drwxr-xr-x   - root admingroup          0 2020-09-01 07:16 /yinzhengjie/httpFS
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?user.name=root&op=MKDIRS" | python -m json.tool

3>.重命名目錄

[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 2 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
drwxr-xr-x   - root admingroup          0 2020-09-01 07:23 /yinzhengjie/httpFS
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?op=RENAME&user.name=root&destination=/yinzhengjie/myHttpFS" | python -m json.tool
{
    "boolean": true
}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 2 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
drwxr-xr-x   - root admingroup          0 2020-09-01 07:23 /yinzhengjie/myHttpFS
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X PUT "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/httpFS?op=RENAME&user.name=root&destination=/yinzhengjie/myHttpFS" | python -m json.tool

4>.刪除目錄或文件

[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 3 items
-rw-r--r--   3 root admingroup        490 2020-09-01 07:48 /yinzhengjie/fstab
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
drwxr-xr-x   - root admingroup          0 2020-09-01 07:49 /yinzhengjie/myHttpFS
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/myHttpFS?op=DELETE&user.name=root" | python -m json.tool
{
    "boolean": true
}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 2 items
-rw-r--r--   3 root admingroup        490 2020-09-01 07:48 /yinzhengjie/fstab
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/myHttpFS?op=DELETE&user.name=root" | python -m json.tool  #刪除目錄
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 2 items
-rw-r--r--   3 root admingroup        490 2020-09-01 07:48 /yinzhengjie/fstab
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/fstab?op=DELETE&user.name=root" | python -m json.tool
{
    "boolean": true
}
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# hdfs dfs -ls /yinzhengjie/
Found 1 items
-rw-r--r--   3 root admingroup        371 2020-08-31 18:07 /yinzhengjie/hosts
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# 
[root@hadoop105.yinzhengjie.com ~]# curl -s -X DELETE "http://hadoop101.yinzhengjie.com:14000/webhdfs/v1/yinzhengjie/fstab?op=DELETE&user.name=root" | python -m json.tool    #刪除文件

5>.其它操做

  通過上面的幾個案例後,您是否發現其操做是那麼的似曾相識呢?沒錯,這就是基於REST API風格。和咱們以前操做的webHDFS的方式基本上雷同,事實上就是如此。

  綜上所述,我就不一一舉例用法了,感興趣的能夠參考我下面給的連接。

  博主推薦閱讀:
    https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
    https://www.cnblogs.com/yinzhengjie2020/p/13352498.html
相關文章
相關標籤/搜索