❶ Hadoop集群以外的機器如何訪問Hadoop集群,進行提交文件,下載文件
集群以外的機器如何訪問Hadoop集群,並像集群中提交作業和傳送數據
(1)首先,在機器上安裝nutch或者hadoop
(2)配置兩個文件
hadoop-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://gc04vm12:9000</value>
<description> </description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>gc04vm12:9001</value>
<description> </description>
</property>
</configuration>
(3)這樣便能執行命令,查看集群狀態,向集群提交作業
(4)hdfs中的用戶
使用root登陸而hadoop中沒有創建root用戶時,使用如下命令時,查看到的就不是nutch用戶主目錄 /user/root了
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 執行此命令時,即是列出/user/root(root用戶主目錄)目錄下的文件或目錄
ls: Cannot access .: No such file or directory. 沒有此目錄
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls /
Found 3 items
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:55 /usr 這個是什麼?
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 主目錄(/user/root)中創建x目錄,提示以下信息
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="user":nutch:supergroup:rwxr-xr-x
這是因為root用戶對/user/目錄沒有寫許可權(drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user)
hdfs中的nutch用戶是啟動hadoop集群的這個用戶,當客戶機中也存在nutch用戶時,登陸後訪問hdfs時,進入的是home目錄(/user/nutch)。
hdfs中文件和目錄的許可權類似linux,可以修改其許可權,改變其所屬組
nutch用戶格式化namenode,啟動hadoop集群(會用到nutch用戶的公鑰信息,ssh配置)後,執行命令,
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 執行此命令時,即是列出/user/nutch(nutch用戶主目錄)目錄下的文件或目錄
ls: Cannot access .: No such file or directory.
因為沒有/user/nutch目錄,所以不能訪問,而此時若創建一個文件,如使用以下命令
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 則可以順利執行,此時它將創建/user/nutch/x目錄。
而使用root用戶不行,是因為 root用戶對/user/目錄沒有寫許可權。
那麼如何創建一個root用戶呢,可以這樣做
超級用戶nutch在hdfs中創建目錄/user/root,即 bin/hadoop dfs -mkdir /user/root
更改/user/root目錄所屬用戶和組, bin/hadoop dfs -chown -R root:root /user/root (若此處沒有指定組,則默認root屬於supergroup組, bin/hadoop dfs -chown -R root /user/root)
這樣就相當於在hdfs中創建了用戶root,組root;
用戶許可權和Linux類似,nutch是超級用戶。
例如nutch在root的home目錄下創建目錄s,則s的許可權如下,屬於nutch,組是root
drwxr-xr-x - nutch root 0 2010-05-21 04:41 /user/root/s
root用戶此時就不能寫s目錄了
[root@gc04vm14 nutch-1.0]# bin/hadoop dfs -mkdir s/x
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="s":nutch:root:rwxr-xr-x
root用戶屬於root組,並且執行作業,會提示錯誤,如下
[root@gc03vm12 nutch-1.0]# bin/nutch crawl /user/nutch/urls -dir data2 -depth 5 -topN 8
提示如下錯誤
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="tmp":nutch:supergroup:rwxr-xr-x
這是因為root用戶對/tmp目錄(hdfs目錄)沒有寫許可權,因為作業執行時,會在/tmp目錄下生成相應的job文件,
/tmp的許可權如下:
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
因此非超級用戶提交作業時,用戶問題是一個很麻煩的問題
註:
hadoop有些命令只能在namenode上執行
❷ 「HDFS 採用數據流方式來訪問文件,只支持單個客戶端向一個文件追加數據」是什麼意思啊
上半句話,訪問文件不外乎讀和寫,需要讀寫時調用函數FileSystem&open()和FileSystem&create(),返回的對象是FSDataInputStream和FSDataOutputStream。 data直譯成中文就是數據,stream直譯成中文就是流。 這兩個對象分別繼承於java.io.DataInputStream和java.io.DataOutputStream, 是java的常用的文件讀寫類。 需要讀時用DataInputStream的函數readInt(), readFloat()...,寫時也差不多。
下半句話,兩個關鍵詞, 」單個客戶「和」追加「。單個客戶指不能有兩個線程同時寫;追加指寫的形式只能是在文件後加內容(append),不能覆蓋(overwrite)。 這兩個限制都是設計上簡化考慮。 多個線程同時append時,由於hdfs是一份文件存於多個機器,保證在每台機器上兩個線程寫的順序一致(從而結果一致)是一個很難的問題(當然不是做不到), 出於簡單考慮, 就不這么做了。 多個線程同時overwrite就更麻煩。
❸ hadoop程序怎麼訪問hdfs路徑
先用hdfsGetPathInfo 得到一個hdfsFileInfo類型的結構體, get_real_path(dsh, s, real_path); hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);// 這個結構體中有個kind屬性,就是來區分是文件還是目錄 typedef struct
~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕
~~手機提問的朋友在客戶端右上角評價點【滿意】即可。
~你的採納是我前進的動力
~~O(∩_∩)O,記得好評和採納,互相幫助,謝謝。
❹ hdfs 流式數據怎麼理解那一般的數據訪問模式是怎樣的
收集到部分數據就開始處理,不是收集到全部數據再處理。每次分析都涉及數據集的大部分數據,收集全部數據延遲大,也會消耗大量內存。
❺ 無法通過URL訪問HDFS,SHELL可以弄,配置的是hdfs://hadoop(換成ip也不行):9000
看看50030
看看live node
在看看 iptables
❻ 能不能通過瀏覽器輸入一個URL來訪問hadoop下的圖片
應該不能,只能通過http請求獲取文件內容,然後自己進行處理轉成圖片格式顯示
❼ 用python的hdfs庫libpyhdfs訪問hdfs的時候怎麼設置用戶名和用戶組
用thrift的介面去實現
from hdfs import hadoopthrift_cli
用do_chown這個方法可以
❽ python訪問hdfs
將當前的python腳本名稱改為test_pyhdfs之類,總之不要和包的名字一樣。
import後,執行dir(pyhdfs),貼出結果看看。
❾ 如何遠程讀取CDH的hadoop上的HDFS數據
static Configuration conf=new Configuration();
static FileSystem fs=null;
static{
try {
//默認的hadoop的fs.defaultFS的埠號為8020,這里需要跟集群裡面的配置一致
conf.set("fs.defaultFS","hdfs://dnode1:8020/");
fs=FileSystem.get(conf);
} catch (IOException e) {
log.error("初始化FileSystem失敗!",e);
}
}
OK,只需要這簡單的一行,我們就可以讀取HDFS上的數據了,另外如要注意的是,需要把hadoop的對應的host也配置在win上的host文件里,避免訪問文件系統出錯,只要上面這一步打通,下面的對於HDFS系統上文件和目錄增刪改查,以及對文件內容的讀取和寫入,散仙在這里就不多寫了,這個很簡單,大家看看FileSystem這個類的Api就能很容易掌握的。
❿ hadoop怎麼訪問hdfs路徑
先用hdfsGetPathInfo 得到一個hdfsFileInfo類型的結構體,
get_real_path(dsh, s, real_path);
hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);//
這個結構體中有個kind屬性,就是來區分是文件還是目錄
typedef struct {
tObjectKind mKind; /* file or directory */
char *mName; /* the name of the file */
tTime mLastMod; /* the last modification time for the file in seconds */
tOffset mSize; /* the size of the file in bytes */
short mReplication; /* the count of replicas */
tOffset mBlockSize; /* the block size for the file */
char *mOwner; /* the owner of the file */
char *mGroup; /* the group associated with the file */
short mPermissions; /* the permissions associated with the file */
tTime mLastAccess; /* the last access time for the file in seconds */
} hdfsFileInfo;