Ⅰ 簡述一下hdfs的數據壓縮演算法,工作中用的是哪種演算法,為什麼
1、在HDFS之上將數據壓縮好後,再存儲到HDFS
2、在HDFS內部支持數據壓縮,這里又可以分為幾種方法:
2.1、壓縮工作在DataNode上完成,這里又分兩種方法:
2.1.1、數據接收完後,再壓縮
這個方法對HDFS的改動最小,但效果最低,只需要在block文件close後,調用壓縮工具,將block文件壓縮一下,然後再打開block文件時解壓一下即可,幾行代碼就可以搞定
2.1.2、邊接收數據邊壓縮,使用第三方提供的壓縮庫
效率和復雜度折中方法,Hook住系統的write和read操作,在數據寫入磁碟之前,先壓縮一下,但write和read對外的介面行為不變,比如:原始大小為100KB的數據,壓縮後大小為10KB,當寫入100KB後,仍對調用者返回100KB,而不是10KB
2.2、壓縮工作交給DFSClient做,DataNode只接收和存儲
這個方法效果最高,壓縮分散地推給了HDFS客戶端,但DataNode需要知道什麼時候一個block塊接收完成了。
推薦最終實現採用2.2這個方法,該方法需要修改的HDFS代碼量也不大,但效果最高。
Ⅱ ftp提取文件到hdfs
實際場景中,我們經常需要通過ftp協議把不同數據源的文件統一匯入到hdfs數據中心,經過實踐,有以下的三種方法,分別列出其優缺點及適用場景。
1、 先把文件ftp到本地,然後用命令hdfsdfs –put [local_path] [hdfs_path]
優點:文件在本地可以進行本地化的一系列操作後,再放回hdfs中
缺點:文件傳輸經過兩層,並且從源伺服器到本地提取是單機串列,比較消耗時間。
適用於文件放入hfds前需要預處理的情景,如:.zip壓縮文件不被hadoop支持的,所以我們可以先在本地轉壓縮方式然後再放入hdfs中。
2、 hdfs dfs –cp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
優點:簡單,提取速度快
缺點:CLI執行不會顯示進度
適用場景:適用於小文件的ftp拷貝。
3、 hadoop distcp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
優點:簡單,能顯示拷貝進度,並且是分布式提取的,數據比較快。
缺點: 如果拷貝的文件是不斷有其他程序寫入,會報錯,因為該命令最後要對數據進行checksum導致兩邊不一致,當然,該命令是主要用於集群間拷貝的。
適用場景:大量文件或大文件的拷貝。
Ⅲ HDFS文件
Hadoop支持的文件系統由很多(見下圖),HDFS只是其中一種實現。java抽象類 org.apache.hadoop.fs.FileSystem 定義了Hadoop中一個文件系統的客戶端介面,並且該抽象類有幾個具體實現。Hadoop一般使用URI(下圖)方案來選取合適的文件系統實例進行交互。
特別的,HDFS文件系統的操作可以使用 FsSystem shell 、客戶端(http rest api、Java api、C api等)。
FsSystem shell 的用法基本同本地shell類似,命令可參考 FsSystem shell
Hadoop是用Java寫的,通過Java Api( FileSystem 類)可以調用大部分Hadoop文件系統的交互操作。更詳細的介紹可參考 hadoop Filesystem 。
非Java開發的應用可以使用由WebHDFS協議提供的HTTP REST API,但是HTTP比原生的Java客戶端要慢,所以不到萬不得已盡量不要使用HTTP傳輸特大數據。通過HTTP來訪問HDFS有兩種方法:
兩種如圖
在第一種情況中,namenode和datanode內嵌的web服務作為WebHDFS的端節點運行(是否啟用WebHDFS可通過dfs.webhdfs.enabled設置,默認為true)。文件元數據在namenode上,文件讀寫操作首先被發往namenode,有namenode發送一個HTTP重定向至某個客戶端,指示以流的方式傳輸文件數據的目的或源datanode。
第二種方法依靠一個或多個獨立代理伺服器通過HTTP訪問HDFS。所有集群的網路通信都需要通過代理,因此客戶端從來不直接訪問namenode或datanode。使用代理後可以使用更嚴格的防火牆策略和帶寬策略。
HttpFs代理提供和WebHDFS相同的HTTP介面,這樣客戶端能夠通過webhdfs URI訪問介面。HttpFS代理啟動獨立於namenode和datanode的守護進程,使用httpfs.sh 腳本,默認在一個不同的埠上監聽(14000)。
下圖描述了
讀文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。
對上圖的解釋如下:
在讀取過程中, 如果 FSDataInputStream 在和一個 datanode 進行交流時出現了一個錯誤,他就去試一試下一個最接近的塊,他當然也會記住剛才發生錯誤的 datanode 以至於之後不會再在這個 datanode 上進行沒必要的嘗試。 DFSInputStream 也會在 datanode 上傳輸出的數據上核查檢查數(checknums).如果損壞的塊被發現了, DFSInputStream 就試圖從另一個擁有備份的 datanode 中去讀取備份塊中的數據。
在這個設計中一個重要的方面就是客戶端直接從 datanode 上檢索數據,並通過 namenode 指導來得到每一個塊的最佳 datanode。這種設計允許 HDFS 擴展大量的並發客戶端,因為數據傳輸只是集群上的所有 datanode 展開的。期間,namenode 僅僅只需要服務於獲取塊位置的請求(塊位置信息是存放在內存中,所以效率很高)。如果不這樣設計,隨著客戶端數據量的增長,數據服務就會很快成為一個瓶頸。
我們知道,相對於客戶端(之後就是 maprece task 了),塊的位置有以下可能性:
我們認為他們對於客戶端的帶寬遞減,距離遞增(括弧中表示距離)。示意圖如下:
如果集群中的機器都在同一個機架上,我們無需其他配置,若集群比較復雜,由於hadoop無法自動發現網路拓撲,所以需要額外配置網路拓撲。
基本讀取程序,將文件內容輸出到console
FileSystemCat
隨機讀取
展開原碼
下圖描述了寫文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。
對上圖的解釋如下:
如果在任何一個 datanode 在寫入數據的時候失敗了,接下來所做的一切對客戶端都是透明的:首先, pipeline 被關閉,在確認隊列中的剩下的包會被添加進數據隊列的起始位置上,以至於在失敗的節點下游的任 何節點都不會丟失任何的包。然後與 namenode 聯系後,當前在一個好的 datanode 會聯系 namenode, 給失敗節點上還未寫完的塊生成一個新的標識ID, 以至於如果這個失敗的 datanode 不久後恢復了,這個不完整的塊將會被刪除。失敗節點會從 pipeline 中移除,然後剩下兩個好的 datanode 會組成一個的新的 pipeline ,剩下的 這些塊的包(也就是剛才放在數據隊列隊首的包)會繼續寫進 pipeline 中好的 datanode 中。最後,namenode 注意到塊備份數小於規定的備份數,他就安排在另一個節點上創建完成備份,直接從已有的塊中復制就可以。然後一直到滿足了備份數( dfs.replication )。如果有多個節點的寫入失敗了,如果滿足了最小備份數的設置( dfs.namenode.repliction.min ),寫入也將會成功,然後剩下的備份會被集群非同步的執行備份,直到滿足了備份數( dfs.replication )。
創建目錄
文件壓縮有兩大好處:
Hadoop 對於壓縮格式的是自動識別。如果我們壓縮的文件有相應壓縮格式的擴展名(比如 lzo,gz,bzip2 等)。Hadoop 會根據壓縮格式的擴展名自動選擇相對應的解碼器來解壓數據,此過程完全是 Hadoop 自動處理,我們只需要確保輸入的壓縮文件有擴展名。
Hadoop中有多種壓縮格式、演算法和工具,下圖列出了常用的壓縮方法。
表中的「是否可切分」表示對應的壓縮演算法是否支持切分,也就是說是否可以搜索數據流的任意位置並進一步往下讀取數據,可切分的壓縮格式尤其適合MapRece。
所有的壓縮演算法都需要權衡空間/時間:壓縮和解壓縮速度更快,其代價通常是只能節省少量的空間。不同的壓縮工具有不同的特性:
更詳細的比較如下
1.壓縮性能比較
2.優缺點
另外使用hadoop原生(native)類庫比其他java實現有更快的壓縮和解壓縮速度。特徵比較如下:
使用容器文件格式結合壓縮演算法也能更好的提高效率。順序文件、Arvo文件、ORCFiles、Parqurt文件同時支持壓縮和切分。
壓縮舉例(Java)
壓縮
解壓縮
六、文件序列化
序列化是指將結構化數據轉換為位元組流以便在網路上傳輸或寫到磁碟進行永久存儲。反序列化獅子將位元組流轉換回結構化對象的逆過程。
序列化用於分布式數據處理的兩大領域:進程間通信和永久存儲。
對序列化的要求時是格式緊湊(高效使用存儲空間)、快速(讀寫效率高)、可擴展(可以透明地讀取老格式數據)且可以互操作(可以使用不同的語言讀寫數據)。
Hadoop使用的是自己的序列化格式 Writable ,它絕對緊湊、速度快,但不太容易用java以外的語言進行擴展或使用。
當然,用戶也可以使用其他序列化框架或者自定義序列化方式,如 Avro 框架。
Hadoop內部還使用了 Apache Thrift 和 Protocal Buffers 來實現RPC和數據交換。
Ⅳ 搭建hadoop集群,常用配置文件是什麼,以及配置哪些屬性
一. 簡介
參考了網上許多教程,最終把hadoop在ubuntu14.04中安裝配置成功。下面就把詳細的安裝步驟敘述一下。我所使用的環境:兩台ubuntu 14.04 64位的台式機,hadoop選擇2.7.1版本。(前邊主要介紹單機版的配置,集群版是在單機版的基礎上,主要是配置文件有所不同,後邊會有詳細說明)
二. 准備工作
2.1 創建用戶
創建用戶,並為其添加root許可權,經過親自驗證下面這種方法比較好。
1 sudo adser hadoop2 sudo vim /etc/sudoers3 # 修改內容如下:4 root ALL = (ALL)ALL5 hadoop ALL = (ALL)ALL
給hadoop用戶創建目錄,並添加到sudo用戶組中,命令如下:
1 sudo chown hadoop /home/hadoop2 # 添加到sudo用戶組3 sudo adser hadoop sudo
最後注銷當前用戶,使用新創建的hadoop用戶登陸。
2.2安裝ssh服務
ubuntu中默認是沒有裝ssh server的(只有ssh client),所以先運行以下命令安裝openssh-server。安裝過程輕松加愉快~
sudo apt-get install ssh openssh-server
2.3 配置ssh無密碼登陸
直接上代碼:執行完下邊的代碼就可以直接登陸了(可以運行ssh localhost進行驗證)
1 cd ~/.ssh# 如果找不到這個文件夾,先執行一下 "ssh localhost"2 ssh-keygen -t rsa3 cp id_rsa.pub authorized_keys
注意:
這里實現的是無密登陸自己,只適用與hadoop單機環境。如果配置Hadoop集群設置Master與Slave的SSH無密登陸可
三. 安裝過程
3.1 下載hadoop安裝包
有兩種下載方式:
1. 直接去官網下載:
2. 使用wget命令下載:
3.2 配置hadoop
1. 解壓下載的hadoop安裝包,並修改配置文件。我的解壓目錄是(/home/hadoop/hadoop-2.7.1),即進入/home/hadoop/文件夾下執行下面的解壓縮命令。
tar -zxvf hadoop-2.7.1.tar.gz
2. 修改配置文件:(hadoop2.7.1/etc/hadoop/)目錄下,hadoop-env.sh,core-site.xml,mapred-site.xml.template,hdfs-site.xml。
(1). core-site.xml 配置:其中的hadoop.tmp.dir的路徑可以根據自己的習慣進行設置。
至此,wordcount demo 運行結束。
六. 總結
配置過程遇到了很多問題,最後都一一解決,收獲很多,特此把這次配置的經驗分享出來,方便想要配置hadoop環境的各位朋友~
(Hadoop集群安裝配置過程基本和單機版是一樣的,主要是在配置文件方面有所區別,以及ssh無密登陸要求master和slave能夠互相無密登陸。
Ⅳ 大數據:Hadoop入門
什麼是大數據:
(1.)大數據是指在一定時間內無法用常規軟體對其內容進行抓取,管理和處理的數據集合,簡而言之就是數據量非常大,大到無法用常規工具進行處理,如關系型資料庫,數據倉庫等。這里「大」是一個什麼量級呢?如在阿里巴巴每天處理數據達到20PB(即20971520GB).
2.大數據的特點:
(1.)體量巨大。按目前的發展趨勢來看,大數據的體量已經到達PB級甚至EB級。
(2.)大數據的數據類型多樣,以非結構化數據為主,如網路雜志,音頻,視屏,圖片,地理位置信息,交易數據,社交數據等。
(3.)價值密度低。有價值的數據僅佔到總數據的一小部分。比如一段視屏中,僅有幾秒的信息是有價值的。
(4.)產生和要求處理速度快。這是大數據區與傳統數據挖掘最顯著的特徵。
3.除此之外還有其他處理系統可以處理大數據。
Hadoop (開源)
Spark(開源)
Storm(開源)
MongoDB(開源)
IBM PureDate(商用)
Oracle Exadata(商用)
SAP Hana(商用)
Teradata AsterData(商用)
EMC GreenPlum(商用)
HP Vertica(商用)
註:這里我們只介紹Hadoop。
二:Hadoop體系結構
Hadoop來源:
Hadoop源於Google在2003到2004年公布的關於GFS(Google File System),MapRece和BigTable的三篇論文,創始人Doug Cutting。Hadoop現在是Apache基金會頂級項目,「
Hadoop」一個虛構的名字。由Doug Cutting的孩子為其黃色玩具大象所命名。
Hadoop的核心:
(1.)HDFS和MapRece是Hadoop的兩大核心。通過HDFS來實現對分布式儲存的底層支持,達到高速並行讀寫與大容量的儲存擴展。
(2.)通過MapRece實現對分布式任務進行處理程序支持,保證高速分區處理數據。
3.Hadoop子項目:
(1.)HDFS:分布式文件系統,整個Hadoop體系的基石。
(2.)MapRece/YARN:並行編程模型。YARN是第二代的MapRece框架,從Hadoop 0.23.01版本後,MapRece被重構,通常也稱為MapRece V2,老MapRece也稱為 MapRece V1。
(3.)Hive:建立在Hadoop上的數據倉庫,提供類似SQL語音的查詢方式,查詢Hadoop中的數據,
(5.)HBase:全稱Hadoop Database,Hadoop的分布式的,面向列的資料庫,來源於Google的關於BigTable的論文,主要用於隨機訪問,實時讀寫的大數據。
(6.)ZooKeeper:是一個為分布式應用所設計的協調服務,主要為用戶提供同步,配置管理,分組和命名等服務,減輕分布式應用程序所承擔的協調任務。
還有其它特別多其它項目這里不做一一解釋了。
三:安裝Hadoop運行環境
用戶創建:
(1.)創建Hadoop用戶組,輸入命令:
groupadd hadoop
(2.)創建hser用戶,輸入命令:
useradd –p hadoop hser
(3.)設置hser的密碼,輸入命令:
passwd hser
按提示輸入兩次密碼
(4.)為hser用戶添加許可權,輸入命令:
#修改許可權
chmod 777 /etc/sudoers
#編輯sudoers
Gedit /etc/sudoers
#還原默認許可權
chmod 440 /etc/sudoers
先修改sudoers 文件許可權,並在文本編輯窗口中查找到行「root ALL=(ALL)」,緊跟後面更新加行「hser ALL=(ALL) ALL」,將hser添加到sudoers。添加完成後切記還原默認許可權,否則系統將不允許使用sudo命令。
(5.)設置好後重啟虛擬機,輸入命令:
Sudo reboot
重啟後切換到hser用戶登錄
安裝JDK
(1.)下載jdk-7u67-linux-x64.rpm,並進入下載目錄。
(2.)運行安裝命令:
Sudo rpm –ivh jdk-7u67-linux-x64.rpm
完成後查看安裝路徑,輸入命令:
Rpm –qa jdk –l
記住該路徑,
(3.)配置環境變數,輸入命令:
Sudo gedit /etc/profile
打開profile文件在文件最下面加入如下內容
export JAVA_HOME=/usr/java/jdk.7.0.67
export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH
export PATH=$ JAVA_HOME/bin:$PATH
保存後關閉文件,然後輸入命令使環境變數生效:
Source /etc/profile
(4.)驗證JDK,輸入命令:
Java –version
若出現正確的版本則安裝成功。
配置本機SSH免密碼登錄:
(1.)使用ssh-keygen 生成私鑰與公鑰文件,輸入命令:
ssh-keygen –t rsa
(2.)私鑰留在本機,公鑰發給其它主機(現在是localhost)。輸入命令:
ssh--id localhost
(3.)使用公鑰來登錄輸入命令:
ssh localhost
配置其它主機SSH免密登錄
(1.)克隆兩次。在VMware左側欄中選中虛擬機右擊,在彈出的快捷鍵菜單中選中管理---克隆命令。在克隆類型時選中「創建完整克隆」,單擊「下一步」,按鈕直到完成。
(2.)分別啟動並進入三台虛擬機,使用ifconfig查詢個主機IP地址。
(3.)修改每台主機的hostname及hosts文件。
步驟1:修改hostname,分別在各主機中輸入命令。
Sudo gedit /etc/sysconfig/network
步驟2:修改hosts文件:
sudo gedit /etc/hosts
步驟3:修改三台虛擬機的IP
第一台對應node1虛擬機的IP:192.168.1.130
第二台對應node2虛擬機的IP:192.168.1.131
第三台對應node3虛擬機的IP:192.168.1.132
(4.)由於已經在node1上生成過密鑰對,所有現在只要在node1上輸入命令:
ssh--id node2
ssh--id node3
這樣就可以將node1的公鑰發布到node2,node3。
(5.)測試SSH,在node1上輸入命令:
ssh node2
#退出登錄
exit
ssh node3
exit
四:Hadoop完全分布式安裝
1. Hadoop有三種運行方式:
(1.)單機模式:無須配置,Hadoop被視為一個非分布式模式運行的獨立Java進程
(2.)偽分布式:只有一個節點的集群,這個節點即是Master(主節點,主伺服器)也是Slave(從節點,從伺服器),可在此單節點上以不同的java進程模擬分布式中的各類節點
(3.)完全分布式:對於Hadoop,不同的系統會有不同的節點劃分方式。
2.安裝Hadoop
(1.)獲取Hadoop壓縮包hadoop-2.6.0.tar.gz,下載後可以使用VMWare Tools通過共享文件夾,或者使用Xftp工具傳到node1。進入node1 將壓縮包解壓到/home/hser目錄下,輸入命令:
#進入HOME目錄即:「/home/hser」
cd ~
tar –zxvf hadoop-2.6.0.tar.gz
(2.)重命名hadoop輸入命令:
mv hadoop-2.6.0 hadoop
(3.)配置Hadoop環境變數,輸入命令:
Sudo gedit /etc/profile
將以下腳本加到profile內:
#hadoop
export HADOOP_HOME=/home/hser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
保存關閉,最後輸入命令使配置生效
source /etc/profile
註:node2,和node3都要按照以上配置進行配置。
3.配置Hadoop
(1.)hadoop-env.sh文件用於指定JDK路徑。輸入命令:
[hser@node1 ~]$ cd ~/hadoop/etc/hadoop
[hser@node1 hadoop]$ gedit hadoop-env.sh
然後增加如下內容指定jDK路徑。
export JAVA_HOME=/usr/java/jdk1.7.0_67
(2.)打開指定JDK路徑,輸入命令:
export JAVA_HOME=/usr/java/jdk1.7.0_67
(4.)core-site.xml:該文件是Hadoop全局配置,打開並在
Ⅵ spark、hive、impala、hdfs的常用命令
對spark、hive、impala、hdfs的常用命令作了如下總結,歡迎大家補充!
1. Spark的使用:
以通過SecureCRT訪問IP地址:10.10.234.198 為例進行說明:
先輸入:ll //查詢集群是否裝有spark
>su - mr
>/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p ""
>show databases; //顯示其中資料庫,例如
>use bigmax; //使用資料庫bigmax
>show tables; //查詢目錄中所有的表
>desc formatted TableName; //顯示表的詳細信息,包括分區、欄位、地址等信息
>desc TableName; //顯示表中的欄位和分區信息
>select count(*) from TableName; //顯示表中數據數量,可以用來判斷表是否為空
>drop table TableName; //刪除表的信息
>drop bigmax //刪除資料庫bigmax
>describe database zxvmax //查詢資料庫zxvmax信息
創建一個表
第一步:
>create external table if not exists lte_Amaze //創建一個叫lte_Amaze的表
( //括弧中每一行為表中的各個欄位的名稱和其所屬的數據類型,並用空格隔開
DateTime String,
MilliSec int,
Network int,
eNodeBID int,
CID int,
IMSI String,
DataType int,
AoA int,
ServerRsrp int,
ServerRsrq int,
TA int,
Cqi0 Tinyint,
Cqi1 Tinyint //注意,最後一個欄位結束後,沒有逗號
)
partitioned by (p_date string, p_hour INT) //以p_date和p_hour作為分區
row format delimited fields terminated by ',' /*/*表中行結構是以逗號作為分隔符,與上邊的表中欄位以逗號結尾相一致*/
stored as textfile; //以文本格式進行保存
第二步:添加分區,指定分區的位置
>alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0';
//添加lte_Amaze表中分區信息,進行賦值。
//並制定分區對應目錄/lte/nds/mr下表lte_nds_cdt_uedetail中對應分區信息
第三步:察看添加的結果
>show partitions lte_Amaze; //顯示表的分區信息
2. hdfs使用:
#su - hdfs //切換到hdfs用戶下 、
#hadoop fs –ls ///查看進程
# cd /hdfs/bin //進入hdfs安裝bin目錄
>hadoop fs -ls /umtsd/cdt/ //查詢/umtsd/cdt/文件目錄
>hadoop fs -mkdir /umtsd/test //在/umtsd目錄下創建test目錄
>hadoop fs -put /home/data/u1002.csv /impala/data/u5002 //將home/data/u1002.csv這個文件put到hdfs文件目錄上。put到hdfs上的數據文件以逗號「,」分隔符文件(csv),數據不論類型,直接是數據,沒有雙引號和單引號
>hadoop fs -rm /umtsd/test/test.txt //刪除umtsd/test目錄下的test.txt文件
>hadoop fs -cat /umtsd/test/test.txt //查看umtsd/test目錄下的test.txt文件內容
3hive操作使用:
#su - mr //切換到mr用戶下
#hive //進入hive查詢操作界面
hive>show tables; //查詢當前創建的所有表
hive>show databases; //查詢當前創建的資料庫
hive>describe table_name; {或者desc table_name}//查看錶的欄位的定義和分區信息,有明確區分(impala下該命令把分區信息以欄位的形式顯示出來,不怎麼好區分)
hive> show partitions table_name; //查看錶對應數據現有的分區信息,impala下沒有該命令
hive> quit;//退出hive操作界面
hive>desc formatted table_name; 查看錶結構,分隔符等信息
hive> alter table ceshi change id id int; 修改表的列數據類型 //將id數據類型修改為int 注意是兩個id
hive> SHOW TABLES '.*s'; 按正條件(正則表達式)顯示表,
[mr@aico ~]$ exit; 退出mr用戶操作界面,到[root@aico]界面
impala操作使用:
#su - mr //切換到mr用戶下
#cd impala/bin //進入impala安裝bin目錄
#/impala/bin> impala-shell.sh -i 10.10.234.166/localhost //進入impala查詢操作界面
[10.10.234.166:21000] >show databases; //查詢當前創建的資料庫
[10.10.234.166:21000] >use database_name; //選擇使用資料庫,默認情況下是使用default資料庫
[10.10.234.166:21000] > show tables; //查詢當前資料庫下創建的所有表
[10.10.234.166:21000] >describe table_name; //查看錶的欄位的定義,包括分區信息,沒有明確區分
[10.10.234.166:21000] > describe formatted table_name; //查看錶對應格式化信息,包括分區,所屬資料庫,創建用戶,創建時間等詳細信息。
[10.10.234.166:21000] >refresh table_name; //刷新一下,保證元數據是最新的
[10.10.234.166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/
MREMITABLE/20130927/rncid=487' //添加分區信息,具體的表和數據的對應關系
[10.10.234.166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //刪除現有的分區,數據與表的關聯
[10.10.234.166:21000] >quit; //退出impala操作界面
[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,進入impala 查詢操作界面
[aicod:21000] > 按兩次tab鍵,查看可以用的命令
alter describe help profile shell values
connect drop history quit show version
create exit insert select unset with
desc explain load set use
Ⅶ HDFS操作命令
HDFS命令基本格式:hadoop fs -cmd < args >
表格:
注意:以上表格中路徑包括hdfs中的路徑和linux中的路徑。對於容易產生歧義的地方,會特別指出「linux路徑」或者「hdfs路徑」。如果沒有明確指出,意味著是hdfs路徑。
HDFS有一個默認的工作目錄/user/$USER,其中$USER是用戶的登錄用戶名。不過目錄不會自動建立,需要mkdir建立它
命令格式:hadoop fs -mkdir
注意:支持級聯創建新目錄,Hadoop的mkdir命令會自動創建父目錄,類似於帶-p的linux命令
put命令從本地文件系統中 復制單個或多個 源路徑到目標文件系統,也支持從標准輸入設備中讀取輸入並寫入目標文件系統。分為本地上傳和上傳到HDFS中。
命令格式:hadoop fs -put filename
最後一個參數是句點,相當於放入了默認的工作目錄,等價於 hadoop fs -put example.txt /user/chen
上傳文件時,文件首先復制到DataNode上,只有所有的DataNode都成功接收完數據,文件上傳才是成功的。
命令格式:hadoop dfs put filename newfilename
從本地文件系統中復制單個或多個源路徑到目標文件系統。也支持從 標准輸入 中讀取輸入寫入目標文件系統。
採用-ls命令列出HDFS上的文件。在HDFS中未帶參數的-ls命令沒有返回任何值,它默認返回HDFS的home目錄下
的內容。在HDFS中,沒有當前工作目錄這樣一個概念,也沒有cmd這樣的命令。
命令格式:user@NameNode:hadoop$ bin/hadoop dfs -ls
如:
通過「-ls 文件夾名」 命令瀏覽HDFS下文件夾中的文件
命令格式:hadoop dfs -ls 文件夾名
通過該命令可以查看in文件夾中的所有文檔文件
通過「-cat 文件名」命令查看HDFS下文件夾中某個文件的內容
命令格式:hadoop$ bin/hadoop dfs -cat 文件名
通過這個命令可以查看in文件夾中所有文件的內容
通過「-get 文件按1 文件2」命令將HDFS中某目錄下的文件復制到本地系統的某文件中,並對該文件重新命名。
命令格式:hadoop dfs -get 文件名 新文件名
-get 命令與-put命令一樣,既可以操作目錄,也可以操作文件
通過「-rmr 文件」命令刪除HDFS下的文件
命令格式:hadoop$ bin/hadoop dfs -rmr 文件
-rmr 刪除文檔命令相當於delete的遞歸版本。
通過-format命令實現HDFS格式化
命令格式:user@NameNode:hadoop$ bin/hadoop NameNode -format
通過運行start-dfs.sh,就可以啟動HDFS了
命令格式:user@NameNode:hadoop$ bin/ start-dfs.sh
當需要退出HDFS時,通過stop-dfs.sh 就可以關閉HDFS
命令格式:user@NameNode:hadoop$ bin/ stop-dfs.sh
HDFS的命令遠不止這些,對於其他操作,可以通過-help commandName 命令列出清單。下面列舉一些命令進行說明。
(1)chgrp改變文件所屬的組命令
chgrp命令的用途是:更改文件或目錄的組所有權。
語法格式:hadoop fs -charg [-R] GROUP URL .....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者超級用戶。
(2)chmod改變文件的許可權
chmod用於改變文件或目錄的訪問許可權,這個Linux系統管理員最常用的命令之一。
使用方法:hadoop fs -chmod [-R] ...
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者是超級用戶
(3)chown改變文件的擁有者
chown命令改變文件的擁有者。
使用方法:hadoop fs -chown [-R]....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是超級用戶。
(4)FromLocal命令
除了限定 源路徑 是只能是一個 本地文件 外,其他方面和put命令相似。
使用方法:hadoop fs -FromLocal <localsrc> URI
(5)ToLocal命令
除了限定 目標路徑 是一個 本地文件 外,其他方面和get命令類似。
使用方法:hadoop fs -ToLocal {-ignorecrc} {-crc} URI <localdst>
(6)cp命令
cp命令是將文件從源路徑復制到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。
使用方法:hadoop fs -cp URI [URI....] <dest>
返回值:成功返回0 ,失敗返回-1
(7)命令
命令顯示目錄中 所有文件的大小 ,或者當只指定一個文件時,顯示此文件的大小
使用方法:hadoop fs - URI [URI........]
返回值
成功返回0,失敗返回-1
(8)s命令
s是顯示 文件大小 的命令。
使用方法:hadoop fs -s <args>
(9)expunge命令
expunge是清空回收站的命令
使用方法:hadoop fs -expunge
(10)get命令
get是復制文件到本地文件系統的命令
使用方法:hadoop fs -get [-ignorecrc] [-crc] <localdst>
可用-ignorecrc選項復制CRC校驗失敗的文件:使用-CRC選項復制文件以及CRC信息。
返回值
成功返回0,失敗返回-1
(11)getmerge命令
getmerge命令用於接受一個源目錄和一個目標文件作為輸入,並且將源目錄中所有的文件合並成本地目標文件。
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
參數說明:addl是可選的,用於指定在每個文件結尾添加一個換行符;
假設在你的hdfs集群上有一個/user/hadoop/output目錄
裡面有作業執行的結果(多個文件組成)part-000000,part-000001,part-000002
然後就可以在本地使用vi local_file查看內容了
(12)ls命令
ls命令查看當前目錄下的信息
使用方法:hadoop fs -ls <args>
如果是 文件 ,則按照如下格式返迴文件信息:
文件名 <副本數>文件大小 修改日期 修改時間 許可權 用戶ID 組ID
如果是 目錄 ,則返回它直接子文件的一個列表,就像在UNIX中一樣。目錄返回i額表的信息如下:
目錄名<dir>修改日期 修改時間 許可權 用戶ID 組ID
返回值
成功返回0,失敗返回-1
(13)lsr命令
lsr命令是-ls命令的遞歸版,類似於UNIX中的ls-r。
使用方法:hadoop fs -lsr <args>
(14)movefromLocal命令
復制一份本地文件到hdfs,當成功後,刪除本地文件
使用方法:dfs -moveFromLocal <src> <dst>
(14.5)moveToLocal命令
類似於-get,但是當復制完成後,會刪除hdfs上的文件
使用方法:moveToLocal <src> <localDest>
(15)mv命令
將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄
使用方法:hadoop fs -mv URI [URI.....] <dest>
備註:不允許在不同的文件系統間移動文件。
返回值
成功返回0,失敗返回-1
(16)put 命令
put命令從本地文件系統中復制單個或多個源路徑到目標文件系統,也支持從標准輸入中讀取輸入寫入目標文件系統
使用方法:hadoop fs -put <localsrc> .... <dst>
(17)rm命令
rm命令刪除指定的文件,只刪除非空目錄和文件。
使用方法:hadoop fs -rm URI [URI......]
請參考rmr命令了解遞歸刪除。
(18)rmr命令
rmr命令是delete命令的遞歸版本
使用方法:hadoop fs -rmr URI [URI.......]
返回值
成功返回0,失敗返回-1
(19)setrep命令
setrep命令可以改變一個文件的副本系數。
使用方法:hadoop fs -setrep [-R] <path>
參數說明:-R 選項用於遞歸改變目錄下所有文件的副本系數
返回值
成功返回0,失敗返回-1
(20)stat命令
stat命令用於返回指定路徑的統計信息
使用方法:hadoop fs -stat URI [URI......]
返回值
成功返回0,失敗返回-1
(21)tail命令
tail命令將文件尾部1KB的內容輸出到stdout。支持-f選項,行為和UNIX中一致
使用方法:hadoop fs -tail [-f] URI
返回值
成功返回0,失敗返回-1
(22)test命令
test命令是檢查命令,可以檢查文件是否存在、文件的大小等。
使用方法:hadoop fs -test -[ezd] URI
(23)text命令
text命令用於將源文件輸出問文本格式
使用方法:hadoop fs -text <src>
允許的格式是zip和TextRecordInputStream。
(24)touchz 命令
touchz命令用於創建一個0位元組的空文件。
使用方法: hadoop fs -touchz URI [URI....]
返回值
成功返回0,失敗返回-1
Ⅷ hadoop在Linux下的簡單配置
實際生產環境中,員工不會直接登陸伺服器,而是通過遠程連接工具,進行遠程登陸。那麼就需要知道伺服器的IP地址,一個用戶名和密碼。
1)安裝(略)
2)連接虛擬機(前提是物理機能ping通虛擬機)
當我們頻繁的在一台機器A上連接另外一台機器B時,不論是復制文件還是刪除文件,或者是進行其他操作。那麼都要使用機器B的用戶名和密碼。每次都需要輸入密碼,那麼效率降低了。這個時候,如果可以不輸入密碼,還有一定的安全性,可以防止黑客在中間截取信息。那麼就需要一種安全認證技術。
1)准備工作
2)測試
3)原理
[圖片上傳失敗...(image-3835b9-1576065751546)]
在搭建HDFS的完全分布式集群時,需要以下環境要求:
1)說明
2)配置域名映射
1)准備工作
2)解壓jdk到/opt/apps/
3)更名操作
4)配置環境變數
4.1)說明
4.2)配置
4.3)使當前窗口生效(或者reboot)
4.4)驗證
1)解壓縮
2)更名
3)配置
4)使當前窗口生效
5)驗證
1)守護進程布局
2)配置文件的說明
1)配置core-site.xml
2)hdfs-site.xml
3)mapred-site.xml
4)yarn-site.xml
5)slaves文件:配置所有datanode節點的主機名
6)hadoop-env.sh
7)yarn-env.sh
1)說明,使用完整克隆,克隆manager
2)克隆步驟
3)修改新克隆機器的主機名
4)修改新克隆機器的IP地址
5)重啟後,驗證免密登陸認證是否有效
1)目的
2)格式化的命令
注意:一定要選擇namenode所在的節點上進行格式化
1)開啟集群的命令
2)使用jps查看節點上的守護進程
3)使用http協議查看分布式文件系統
5)暴力解決節點不正常的方式
3.1 常用指令:
4.1.1 解壓hadoop-2.7.6.tar.gz到本地磁碟,如下圖:
4.1.2 配置環境變數
4.1.3 由於Hadoop是在32位系統上編譯的,並且對windows支持不好,所以需要把64的編譯本地庫文件(下圖的兩個文件),放入bin目錄中。
10.1.4 驗證環境變數是否生效:
10.1.5 如果報錯:Error: JAVA_HOME is incorrectly set
為了方便開發,我們可以將相關的jar提取出來。
Ⅸ HDFS常用命令
hdfs dfs -linux命令 操作是一樣
hadoop fs 等同於 hdfs dfs
如果壓縮是false,一般需要自己編譯 支持壓縮,如果是使用CDH系列的,不用擔心 。
自己編譯可參考: https://segmentfault.com/a/1190000038464476?utm_source=sf-similar-article
hadoop 3.2.2的版本dfs.disk.balancer.enabled默認為true,以前的老版本默認值是false,這個參數可以在hdfs-site.xml 中修改。
命令:
hdfs diskbalancer -plan hadoop001 #生成計劃
hdfs diskbalancer -execute hadoop001.plan.json #執行計劃
Ⅹ 熟悉常用的 Linux 操作和 Hadoop 操作
1.切換到當前目錄的上一級目錄
cd ..
2.切換到當前登錄 Linux 系統的用戶自己的主文件夾
cd ~
3.進入/tmp 目錄,創建目錄 a1/a2/a3/a4。
mkdir a1/a2/a3/a4 -p
4.刪除目錄
rmdir a
rmdir a1/a2/a3/a4 -p
5.cp 命令:復制文件或目錄
(1) 將當前用戶的主文件夾下的文件.bashrc 復制到目錄「/usr」下,並重命名為 bashrc1
sudo cp .bashrc /usr/bashrc1
(2) 在目錄「/tmp」下新建目錄 test,再把這個目錄復制到「/usr」目錄下
cd /tmp
mkdir test
sudo cp /tmp/test /usr -r
6.mv 命令:移動文件與目錄,或更名
(1) 將「/usr」目錄下的文件 bashrc1 移動到「/usr/test」目錄下
sudo mv /usr/bashrc1 /usr/test
(2) 將「/usr」目錄下的 test 目錄重命名為 test2
sudo mv /usr/test /usr/test2
7.rm 命令:移除文件或目錄
(1) 將「/usr/test2」目錄下的 bashrc1 文件刪除
sudo rm /usr/test2/bashrc1
(2) 將「/usr」目錄下的 test2 目錄刪除
sudo rm -rf /usr/test2
8.cat 命令:查看文件內容查看當前用戶主文件夾下的.bashrc 文件內容
cat .bashrc
9.tac 命令:反向查看文件內容反向查看當前用戶主文件夾下的.bashrc 文件的內容
tac .bashrc
10.more 命令:一頁一頁翻動查看翻頁查看當前用戶主文件夾下的.bashrc 文件的內容
more .bashrc
11.head 命令:取出前面幾行
(1) 查看當前用戶主文件夾下.bashrc 文件內容前 20 行
head -n20 .bashrc
(2)查看當前用戶主文件夾下.bashrc 文件內容,後面 50 行不顯示,只顯示前面幾行
head -n -50 .bashrc
12.tail 命令:取出後面幾行
(1)查看當前用戶主文件夾下.bashrc 文件內容最後 20 行
tail -n20 .bashrc
(2)查看當前用戶主文件夾下.bashrc 文件內容,並且只列出 50 行以後的數據
tail -n -50 .bashrc
13.touch 命令:修改文件時間或創建新文件
(1) 在「/tmp」目錄下創建一個空文件 hello,並查看文件時間
touch hello
stat hello
(2)修改 hello 文件,將文件時間整為 5 天前
touch -d "2019-3-26" hello
stat hello
14.chown 命令:修改文件所有者許可權將 hello 文件所有者改為 root 帳號,並查看屬性
sudo chown root hello
ls -l hello
15.find 命令:文件查找找出主文件夾下文件名為.bashrc 的文件
find .bashrc
16.tar 命令:壓縮命令
(1) 在根目錄「/」下新建文件夾 test,然後在根目錄「/」下打包成 test.tar.gz
tar -zcvf test.tar.gz test/
(2) 把上面的 test.tar.gz 壓縮包,解壓縮到「/tmp」目錄
tar -zxvf test.tar.gz
17.grep 命令:查找字元串從「~/.bashrc」文件中查找字元串'examples'
grep -rn "examples" .bashrc
18.使用 hadoop 用戶登錄 Linux 系統,啟動 Hadoop(Hadoop 的安裝目錄為「/usr/local/hadoop」),為 hadoop 用戶在 HDFS 中創建用戶目錄「/user/hadoop」
./bin/hadoop fs -mkdir -p /usr/hadoop
19.接著在 HDFS 的目錄「/user/hadoop」下,創建 test 文件夾,並查看文件列表
./bin/hdfs dfs -mkdir test
./bin/hadoop fs -ls
20.將 Linux 系統本地的「~/.bashrc」文件上傳到 HDFS 的 test 文件夾中,並查看 test
./bin/hadoop fs -put ~/.bashrc test
./bin/hadoop fs -ls test
21.將 HDFS 文件夾 test 復制到 Linux 系統本地文件系統的「/usr/local/hadoop」目錄下
參考: 1