當前位置:首頁 » 雲伺服器 » 大數據伺服器如何進入hdfs

大數據伺服器如何進入hdfs

發布時間: 2022-08-18 08:28:17

Ⅰ 如何實現讓用戶在網頁中上傳下載文件到HDFS中

hadoop計算需要在hdfs文件系統上進行,文件上傳到hdfs上通常有三種方法:a hadoop自帶的dfs服務,put;b hadoop的API,Writer對象可以實現這一功能;c 調用OTL可執行程序,數據從資料庫直接進入hadoop

hadoop計算需要在hdfs文件系統上進行,因此每次計算之前必須把需要用到的文件(我們稱為原始文件)都上傳到hdfs上。文件上傳到hdfs上通常有三種方法:

a hadoop自帶的dfs服務,put;

b hadoop的API,Writer對象可以實現這一功能;

c 調用OTL可執行程序,數據從資料庫直接進入hadoop

由於存在ETL層,因此第三種方案不予考慮

將a、b方案進行對比,如下:

1 空間:方案a在hdfs上佔用空間同本地,因此假設只上傳日誌文件,則保存一個月日誌文件將消耗掉約10T空間,如果加上這期間的各種維表、事實表,將佔用大約25T空間

方案b經測試,壓縮比大約為3~4:1,因此假設hdfs空間為100T,原來只能保存約4個月的數據,現在可以保存約1年

2 上傳時間:方案a的上傳時間經測試,200G數據上傳約1小時

方案b的上傳時間,程序不做任何優化,大約是以上的4~6倍,但存在一定程度提升速度的餘地

3 運算時間:經過對200G數據,大約4億條記錄的測試,如果程序以IO操作為主,則壓縮數據的計算可以提高大約50%的速度,但如果程序以內存操作為主,則只能提高5%~10%的速度

4 其它:未壓縮的數據還有一個好處是可以直接在hdfs上查看原始數據。壓縮數據想看原始數據只能用程序把它導到本地,或者利用本地備份數據

壓縮格式:按照hadoop api的介紹,壓縮格式分兩種:BLOCK和RECORD,其中RECORD是只對value進行壓縮,一般採用BLOCK進行壓縮。

對壓縮文件進行計算,需要用SequenceFileInputFormat類來讀入壓縮文件,以下是計算程序的典型配置代碼:

JobConf conf = new JobConf(getConf(), log.class);
conf.setJobName(」log」);
conf.setOutputKeyClass(Text.class);//set the map output key type
conf.setOutputValueClass(Text.class);//set the map output value type

conf.setMapperClass(MapClass.class);
//conf.setCombinerClass(Rece.class);//set the combiner class ,if havenot, use Recuce class for default
conf.setRecerClass(Rece.class);
conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress

接下來的處理與非壓縮格式的處理一樣

Ⅱ 如何使用Java API讀寫HDFS

Java API讀寫HDFS

public class FSOptr {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
makeDir(conf);
rename(conf);
delete(conf);

}

// 創建文件目錄
private static void makeDir(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path dir = new Path("/user/hadoop/data/20140318");
boolean result = fs.mkdirs(dir);// 創建文件夾
System.out.println("make dir :" + result);

// 創建文件,並寫入內容
Path dst = new Path("/user/hadoop/data/20140318/tmp");
byte[] buff = "hello,hadoop!".getBytes();
FSDataOutputStream outputStream = fs.create(dst);
outputStream.write(buff, 0, buff.length);
outputStream.close();
FileStatus files[] = fs.listStatus(dst);
for (FileStatus file : files) {
System.out.println(file.getPath());
}
fs.close();
}

// 重命名文件
private static void rename(Configuration conf) throws Exception {

FileSystem fs = FileSystem.get(conf);
Path oldName = new Path("/user/hadoop/data/20140318/1.txt");
Path newName = new Path("/user/hadoop/data/20140318/2.txt");
fs.rename(oldName, newName);

FileStatus files[] = fs.listStatus(new Path(
"/user/hadoop/data/20140318"));
for (FileStatus file : files) {
System.out.println(file.getPath());
}
fs.close();
}

// 刪除文件
@SuppressWarnings("deprecation")
private static void delete(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/hadoop/data/20140318");
if (fs.isDirectory(path)) {
FileStatus files[] = fs.listStatus(path);
for (FileStatus file : files) {
fs.delete(file.getPath());
}
} else {
fs.delete(path);
}

// 或者
fs.delete(path, true);

fs.close();
}

/**
* 下載,將hdfs文件下載到本地磁碟
*
* @param localSrc1
* 本地的文件地址,即文件的路徑
* @param hdfsSrc1
* 存放在hdfs的文件地址
*/
public boolean sendFromHdfs(String hdfsSrc1, String localSrc1) {

Configuration conf = new Configuration();
FileSystem fs = null;
try {
fs = FileSystem.get(URI.create(hdfsSrc1), conf);
Path hdfs_path = new Path(hdfsSrc1);
Path local_path = new Path(localSrc1);

fs.ToLocalFile(hdfs_path, local_path);

return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}

/**
* 上傳,將本地文件到hdfs系統中
*
* @param localSrc
* 本地的文件地址,即文件的路徑
* @param hdfsSrc
* 存放在hdfs的文件地址
*/
public boolean sendToHdfs1(String localSrc, String hdfsSrc) {
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(localSrc));
Configuration conf = new Configuration();// 得到配置對象
FileSystem fs; // 文件系統
try {
fs = FileSystem.get(URI.create(hdfsSrc), conf);
// 輸出流,創建一個輸出流
OutputStream out = fs.create(new Path(hdfsSrc),
new Progressable() {
// 重寫progress方法
public void progress() {
// System.out.println("上傳完一個設定緩存區大小容量的文件!");
}
});
// 連接兩個流,形成通道,使輸入流向輸出流傳輸數據,
IOUtils.Bytes(in, out, 10240, true); // in為輸入流對象,out為輸出流對象,4096為緩沖區大小,true為上傳後關閉流
return true;
} catch (IOException e) {
e.printStackTrace();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}
return false;
}

/**
* 移動
*
* @param old_st原來存放的路徑
* @param new_st移動到的路徑
*/
public boolean moveFileName(String old_st, String new_st) {

try {

// 下載到伺服器本地
boolean down_flag = sendFromHdfs(old_st, "/home/hadoop/文檔/temp");
Configuration conf = new Configuration();
FileSystem fs = null;

// 刪除源文件
try {
fs = FileSystem.get(URI.create(old_st), conf);
Path hdfs_path = new Path(old_st);
fs.delete(hdfs_path);
} catch (IOException e) {
e.printStackTrace();
}

// 從伺服器本地傳到新路徑
new_st = new_st + old_st.substring(old_st.lastIndexOf("/"));
boolean uplod_flag = sendToHdfs1("/home/hadoop/文檔/temp", new_st);

if (down_flag && uplod_flag) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

// 本地文件到hdfs
private static void CopyFromLocalFile(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path src = new Path("/home/hadoop/word.txt");
Path dst = new Path("/user/hadoop/data/");
fs.FromLocalFile(src, dst);
fs.close();
}

// 獲取給定目錄下的所有子目錄以及子文件
private static void getAllChildFile(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/hadoop");
getFile(path, fs);
}

private static void getFile(Path path, FileSystem fs)throws Exception {
FileStatus[] fileStatus = fs.listStatus(path);
for (int i = 0; i < fileStatus.length; i++) {
if (fileStatus[i].isDir()) {
Path p = new Path(fileStatus[i].getPath().toString());
getFile(p, fs);
} else {
System.out.println(fileStatus[i].getPath().toString());
}
}
}

//判斷文件是否存在
private static boolean isExist(Configuration conf,String path)throws Exception{
FileSystem fileSystem = FileSystem.get(conf);
return fileSystem.exists(new Path(path));
}

//獲取hdfs集群所有主機結點數據
private static void getAllClusterNodeInfo(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
DistributedFileSystem hdfs = (DistributedFileSystem)fs;
DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
String[] names = new String[dataNodeStats.length];
System.out.println("list of all the nodes in HDFS cluster:"); //print info

for(int i=0; i < dataNodeStats.length; i++){
names[i] = dataNodeStats[i].getHostName();
System.out.println(names[i]); //print info

}
}

//get the locations of a file in HDFS
private static void getFileLocation(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
Path f = new Path("/user/cluster/dfs.txt");
FileStatus filestatus = fs.getFileStatus(f);
BlockLocation[] blkLocations = fs.getFileBlockLocations(filestatus,0,filestatus.getLen());
int blkCount = blkLocations.length;
for(int i=0; i < blkCount; i++){
String[] hosts = blkLocations[i].getHosts();
//Do sth with the block hosts

System.out.println(hosts);
}
}

//get HDFS file last modification time
private static void getModificationTime(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
Path f = new Path("/user/cluster/dfs.txt");
FileStatus filestatus = fs.getFileStatus(f);

long modificationTime = filestatus.getModificationTime(); // measured in milliseconds since the epoch

Date d = new Date(modificationTime);
System.out.println(d);
}

}

Ⅲ 如何為大數據處理構建高性能Hadoop集群

越來越多的企業開始使用Hadoop來對大數據進行處理分析,但Hadoop集群的整體性能卻取決於CPU、內存、網路以及存儲之間的性能平衡。而在這篇文章中,我們將探討如何為Hadoop集群構建高性能網路,這是對大數據進行處理分析的關鍵所在。

關於Hadoop

「大數據」是鬆散的數據集合,海量數據的不斷增長迫使企業需要通過一種新的方式去管理。大數據是結構化或非結構化的多種數據類型的大集合。而 Hadoop則是Apache發布的軟體架構,用以分析PB級的非結構化數據,並將其轉換成其他應用程序可管理處理的形式。Hadoop使得對大數據處理成為可能,並能夠幫助企業可從客戶數據之中發掘新的商機。如果能夠進行實時處理或者接近實時處理,那麼其將為許多行業的用戶提供強大的優勢。

Hadoop是基於谷歌的MapRece和分布式文件系統原理而專門設計的,其可在通用的網路和伺服器硬體上進行部署,並使之成為計算集群。

Hadoop模型

Hadoop的工作原理是將一個非常大的數據集切割成一個較小的單元,以能夠被查詢處理。同一個節點的計算資源用於並行查詢處理。當任務處理結束後,其處理結果將被匯總並向用戶報告,或者通過業務分析應用程序處理以進行進一步分析或儀表盤顯示。

為了最大限度地減少處理時間,在此並行架構中,Hadoop「moves jobs to data」,而非像傳統模式那樣「moving data to jobs」。這就意味著,一旦數據存儲在分布式系統之中,在實時搜索、查詢或數據挖掘等操作時,如訪問本地數據,在數據處理過程中,各節點之間將只有一個本地查詢結果,這樣可降低運營開支。

Hadoop的最大特點在於其內置的並行處理和線性擴展能力,提供對大型數據集查詢並生成結果。在結構上,Hadoop主要有兩個部分:

Hadoop分布式文件系統(HDFS)將數據文件切割成數據塊,並將其存儲在多個節點之內,以提供容錯性和高性能。除了大量的多個節點的聚合I/O,性能通常取決於數據塊的大小——如128MB。而傳統的Linux系統下的較為典型的數據塊大小可能是4KB。

MapRece引擎通過JobTracker節點接受來自客戶端的分析工作,採用「分而治之」的方式來將一個較大的任務分解成多個較小的任務,然後分配給各個TaskTrack節點,並採用主站/從站的分布方式(具體如下圖所示):

Hadoop系統有三個主要的功能節點:客戶機、主機和從機。客戶機將數據文件注入到系統之中,從系統中檢索結果,以及通過系統的主機節點提交分析工作等。主機節點有兩個基本作用:管理分布式文件系統中各節點以及從機節點的數據存儲,以及管理Map/Rece從機節點的任務跟蹤分配和任務處理。數據存儲和分析處理的實際性能取決於運行數據節點和任務跟蹤器的從機節點性能,而這些從機節點則由各自的主機節點負責溝通和控制。從節點通常有多個數據塊,並在作業期間被分配處理多個任務。

部署實施Hadoop

各個節點硬體的主要要求是市縣計算、內存、網路以及存儲等四個資源的平衡。目前常用的並被譽為「最佳」的解決方案是採用相對較低成本的舊有硬體,部署足夠多的伺服器以應對任何可能的故障,並部署一個完整機架的系統。

Hadoop模式要求伺服器與SAN或者NAS進行直接連接存儲(DAS)。採用DAS主要有三個原因,在標准化配置的集群中,節點的縮放數以千計,隨著存儲系統的成本、低延遲性以及存儲容量需求不斷提高,簡單配置和部署個主要的考慮因素。隨著極具成本效益的1TB磁碟的普及,可使大型集群的TB級數據存儲在DAS之上。這解決了傳統方法利用SAN進行部署極其昂貴的困境,如此多的存儲將使得Hadoop和數據存儲出現一個令人望而卻步的起始成本。有相當大一部分用戶的Hadoop部署構建都是採用大容量的DAS伺服器,其中數據節點大約1-2TB,名稱控制節點大約在1-5TB之間,具體如下圖所示:

來源:Brad Hedlund, DELL公司

對於大多數的Hadoop部署來說,基礎設施的其他影響因素可能還取決於配件,如伺服器內置的千兆乙太網卡或千兆乙太網交換機。上一代的CPU和內存等硬體的選擇,可根據符合成本模型的需求,採用匹配數據傳輸速率要求的千兆乙太網介面來構建低成本的解決方案。採用萬兆乙太網來部署Hadoop也是相當不錯的選擇。

萬兆乙太網對Hadoop集群的作用

千兆乙太網的性能是制約Hadoop系統整體性能的一個主要因素。使用較大的數據塊大小,例如,如果一個節點發生故障(甚至更糟,整個機架宕機),那麼整個集群就需要對TB級的數據進行恢復,這就有可能會超過千兆乙太網所能提供的網路帶寬,進而使得整個集群性能下降。在擁有成千上萬個節點的大型集群中,當運行某些需要數據節點之間需要進行中間結果再分配的工作負載時,在系統正常運行過程中,某個千兆乙太網設備可能會遭遇網路擁堵。

每一個Hadoop數據節點的目標都必須實現CPU、內存、存儲和網路資源的平衡。如果四者之中的任意一個性能相對較差的話,那麼系統的潛在處理能力都有可能遭遇瓶頸。添加更多的CPU和內存組建,將影響存儲和網路的平衡,如何使Hadoop集群節點在處理數據時更有效率,減少結果,並在Hadoop集群內添加更多的HDFS存儲節點。

幸運的是,影響CPU和內存發展的摩爾定律,同樣也正影響著存儲技術(TB級容量的磁碟)和乙太網技術(從千兆向萬兆甚至更高)的發展。預先升級系統組件(如多核處理器、每節點5-20TB容量的磁碟,64-128GB內存),萬兆乙太網卡和交換機等網路組件是重新平衡資源最合理的選擇。萬兆乙太網將在Hadoop集群證明其價值,高水平的網路利用率將帶來效益更高的帶寬。下圖展示了Hadoop集群與萬兆乙太網的連接:

許多企業級數據中心已經遷移到10GbE網路,以實現伺服器整合和伺服器虛擬化。隨著越來越多企業開始部署Hadoop,他們發現他們完全不必要大批量部署1U的機架伺服器,而是部署更少,但性能更高的伺服器,以方便擴展每個數據節點所能運行的任務數量。很多企業選擇部署2U或4U的伺服器(如戴爾 PowerEdge C2100),每個節點大約12-16個核心以及24TB存儲容量。在這種環境下的合理選擇是充分利用已經部署的10GbE設備和Hadoop集群中的 10GbE網卡。

在日常的IT環境中構建一個簡單的Hadoop集群。可以肯定的是,盡管有很多細節需要微調,但其基礎是非常簡單的。構建一個計算、存儲和網路資源平衡的系統,對項目的成功至關重要。對於擁有密集節點的Hadoop集群而言,萬兆乙太網能夠為計算和存儲資源擴展提供與之相匹配的能力,且不會導致系統整體性能下降。

Ⅳ 大數據開發工程師Hadoop(HDFS是如何保證數據可靠性的)

HDFS是如何保證數據可靠性的?

(1)安全模式

① HDFS剛啟動時,NameNode進入安全模式,處於安全模式的NameNode不能做任何的文件操作,甚至內部的副本創建也是不允許的,NameNode這時需要和各個DataNode進行通信,獲得DataNode存儲的數據塊信息,並對數據塊信息進行檢查,只有通過了NameNode的檢查,一個數據塊才被認為是安全的。當認為安全的數據塊所佔比例達到了某個閾值,NameNode才會開始啟動;

(2)SecondaryNamenode備份機制

① 在Hadoop中使用SecondaryNameNode來備份NameNode的元數據,以防止在NameNode宕機的時候,能從SecondaryNameNode中恢復出NameNode上的元數據;

② NameNode中保存了整個文件系統的元數據,而SecondaryNameNode的作用就是周期性保存NameNode的元數據。元數據中包括FSImage鏡像文件數據和EditLog編輯日誌。FSImage相當於HDFS的檢查點,NameNode啟動時候會讀取FSImage的內容到內存,並將其與EditLog日誌中的所有修改信息合並生成新的FSImage。在NameNode運行過程中,所有關於HDFS的修改都將寫入EditLog日誌文件中。這樣,如果NameNode宕機,可以通過SecondaryNameNode中保存的FSImage和EditLog數據恢復出NameNode最近的狀態,盡量減少數據的損失;

(3)心跳機制和副本重新創建

① 為了保證NameNode和各個DataNode的聯系,HDFS採用了心跳機制。NameNode周期性的向各個DataNode發送心跳包,而收到心跳包的DataNode要進行回復。因為心跳包是定時發送的,所以NameNode就把要執行的命令也通過心跳包發送給DataNode,而DataNode收到心跳包,一方面要回復NameNode,另一方面就要開始應用數據的傳輸;

② 如果檢測到DataNode失效,NameNode之前保存在這個DataNode上的數據就變成不可用數據。如果有的副本存儲在失效的DataNode上,那麼需要重新創建這個副本,放到另外可用的地方去;

(4)數據一致性

① 一般來講,DataNode與應用交互的大部分情況都是通過網路進行的,而網路數據傳輸帶來的一大問題就是數據是否原樣到達。為了保證數據的一致性,HDFS採用了數據校驗和(checkSum)機制。創建文件時,HDFS會為這個文件生成一個校驗和,校驗和文件和文件本身保存在同一空間中。傳輸數據時會將數據與校驗和數據一起傳輸,應用收到數據後可以進行校驗,如果兩個校驗的結果不同,則文件出錯了,這個數據塊就變成無效的。如果判定為無效,則需要從其他DataNode上讀取副本數據;


(每日1小題,進步1點點)

Ⅳ 如何架構大數據系統 hadoop

大數據數量龐大,格式多樣化。大量數據由家庭、製造工廠和辦公場所的各種設備、互聯網事務交易、社交網路的活動、自動化感測器、移動設備以及科研儀器等生成。它的爆炸式增長已超出了傳統IT基礎架構的處理能力,給企業和社會帶來嚴峻的數據管理問題。因此必須開發新的數據架構,圍繞「數據收集、數據管理、數據分析、知識形成、智慧行動」的全過程,開發使用這些數據,釋放出更多數據的隱藏價值。

一、大數據建設思路

1)數據的獲得

四、總結

基於分布式技術構建的大數據平台能夠有效降低數據存儲成本,提升數據分析處理效率,並具備海量數據、高並發場景的支撐能力,可大幅縮短數據查詢響應時間,滿足企業各上層應用的數據需求。

Ⅵ hadoop的hdfs是怎麼配置的

① 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。默認存3份。
② 運行在廉價的機器上。
③ 適合大數據的處理。多大?多小?HDFS默認會將文件分割成block,64M為1個block。然後將block按鍵值對存儲在HDFS上,並將鍵值對的映射存到內存中。如果小文件太多,那內存的負擔會很重。

Ⅶ Hadoop常見問題解答

Hadoop常見問題解答
(1)Hadoop適不適用於電子政務?為什麼?
電子政務是利用互聯網技術實現政府組織結構和工作流程的重組優化,建成一個精簡、高效、廉潔、公平的政府運作信息服務平台。因此電子政務肯定會產生相關的大量數據以及相應的計算需求,而這兩種需求涉及的數據和計算達到一定規模時傳統的系統架構將不能滿足,就需要藉助海量數據處理平台,例如Hadoop技術,因此可以利用Hadoop技術來構建電子政務雲平台。

總結一下,任何系統沒有絕對的適合和不適合,只有當需求出現時才可以決定,在一個非常小的電子政務系統上如果沒有打數據處理以及計算分析需求時就不需要hadoop這樣的技術,而實際上,商用的電子政務平台往往涉及到大規模的數據和大量的計算分析處理需求,因此就需要Hadoop這樣的技術來解決。(2)hadoop對於實時在線處理有優勢嗎?
直接使用hadoop進行實時處理時沒有優勢的,因為Hadoop主要解決的是海量批處理作業計算問題,但是可以使用基於Hadoop的分布式NOsql系統HBase系統以及相關實時處理系統:
1. 基於Hadoop的HBase可以做到實時處理以及相關需求的實時計算,主要解決海量<key,value>相關查詢計算等需求。
2. 可以考慮Spark計算,Spark是基於共現內存RDD的系統,比Hadoop更快,時候迭代式計算,例如數據挖掘,機器學習演算法等。
3. 還有Storm,Storm是一個免費開源、分布式、高容錯的實時計算系統,Storm經常用於在實時分析、在線機器學習、持續計算、分布式遠程調用和ETL等領域。
4. 考慮S4, S4是Yahoo!在2010年10月開源的一套通用、分布式、可擴展、部分容錯、具備可插拔功能的平台。這套平台主要是為了方便開發者開發處理流式數據(continuous unbounded streams of data)的應用。
你可以依據實際的需求來選擇合適的系統。
(3)Hadoop存儲海量數據沒有問題,但是如何能夠做到海量數據的實時檢索?
1,可以結合開源的搜索引擎Apache Lucene,Solr 或ElasticSearch
2,海量數據的實時檢索可以考慮HBase,建議可以使用hadoop將數據構建成以查詢key為鍵的數據集,然後將<key, value>集合寫入Hbase表中,Hbase會自動以key為鍵進行索引,在數十億甚至以上的級別下,查詢key的value響應時間也估計再10毫秒內。
如果檢索條件是多個組合的情況下,可以適當的設計多個hbase表格,這樣的檢索也是很快的,同時Hbase也是支持二級索引。在符合條件下查詢,Hbase也是支持MapRece的,如果對響應時間要求不高的情況下,可以考慮將hive和Hbase系統結合來使用。
如果數據量不是很大的情況下也可以考慮支持類似SQL的NOSLQ系統。
(4)能不能給點hadoop的學習方法以及學習規劃,hadoop系統有點龐大,感覺無從學起?
首先搞清楚什麼是hadoop以及hadoop可以用來做什麼?
然後,可以從最經典的詞頻統計程序開始,初步了解MapRece的基本思路和處理數據的方式。
接著,就可以正式學習hadoop的基本原理,包括HDFS和MapRece,先從整體,宏觀核心原理看,先別看源碼級別。
進一步,就可以深入HDFS和MapRece和模塊細節,這個時候可以結合源碼深入理解,以及實現機制。
最後就是需要實戰了,可以結合自己的項目或者相關需求來完成一些hadoop相關應用。
(5) 大的文件拆分成很多小的文件後,怎樣用Hadoop進行高效的處理這些小文件?以及怎樣讓各個節點盡可能的負載均衡?
1. 怎樣用Hadoop進行高效的處理這些小文件?
你這個問題提的很好,hadoop在處理大規模數據時是很高效的,但是處理大量的小文件時就會因為系統資源開銷過大而導致效率較低,針對這樣的問題,可以將小文件打包為大文件,例如使用SequcenFile文件格式,例如以文件簽名為key,文件內容本身為value寫成SequcenFile文件的一條記錄,這樣多個小文件就可以通過SequcenFile文件格式變為一個大文件,之前的每個小文件都會映射為SequcenFile文件的一條記錄。
2. 怎樣讓各個節點盡可能的負載均衡?
在hadoop集群中負載均衡是非常關鍵的,這種情況的導致往往是因為用戶的數據分布的並不均衡,而計算資源槽位數確實均衡分布在每個節點,這樣在作業運行時非本地任務會有大量的數據傳輸,從而導致集群負載不均衡,因此解決不均衡的要點就是將用戶的數據分布均衡,可以使用hadoop內置的balancer腳本命令。
對於因為資源調度導致的不均衡則需要考慮具體的調度演算法和作業分配機制。
(6)c/c++ 程序員如何入門Hadoop到深入了解,並在Linux伺服器上布置運用,有沒有方向性的指導?
針對C/C++用戶,Hadoop提供了hadoop streaming介面和pipes介面,hadoop streaming介面以標准輸入和標准輸出作為用戶程序和hadoop框架交互的中間件,pipes這是專門針對C/C++語言的介面,以socket作為同學中介。
從使用上建議從streaming入手,pipes相比streaming問題比較多,而且pipes調試不容易。
(7)現在企業中使用Hadoop版本主要是1.x還是2.x?
目前網路,騰訊,阿里為主的互聯網公司都是以hadoop 1.X為基準版本的,當然每個公司都會進行自定義的二次開發以滿足不同的集群需求。
2.X在網路內部還沒有正式使用,還是以1.X為主,不過網路針對1.X的問題開發了HCE系統(Hadoop C++ Expand系統)
補充,Hadoop2.x在其他公司應用的很多,比如京東
(8)以後想從事大數據方面工作,演算法要掌握到什麼程度,演算法佔主要部分嗎?
首先,如果要從事大數據相關領域的話,hadoop是作為工具來使用的,首先需要掌握使用方法。可以不用深入到hadoop源碼級別細節。
然後就是對演算法的理解,往往需要設計到數據挖掘演算法的分布式實現,而演算法本身你還是需要理解的,例如常用的k-means聚類等。
(9)現在spark,storm越來越火,谷歌也發布了Cloud Dataflow,是不是Hadoop以後主要應該學習hdfs和yarn,而且以後Hadoop程序員的主要做的就是把這些東西打包,只提供介面讓普通的程序員也能使用,就像Cloudera和Google一樣?
這位同學,你多慮了,hadoop和spark, strom是解決不同的問題,不存在哪個好那個壞,要學習Hadoop還是以主流的hadoop-1.X為版本,2.X最主要的就是多了yarn框架,很好理解的。
如果你是hadoop本身研發建議都看,如果你是hadoop應用相關研發,看主流的1.X就行,我的書《Hadoop核心技術》是以主流的1.X為版本講解的,有興趣可以看看。
(10)小白問一句,大數據處理都是伺服器上安裝相關軟體嗎,對程序有什麼影響呢,集群、大數據是屬於運維的工作內容還是攻城獅的呢?
傳統的程序只能運行在單機上,而大數據處理這往往使用分布式編程框架編寫,例如hadoop maprece,只能運行在hadoop集群平台上。
運維的責任:保證集群,機器的穩定性和可靠性
hadoop系統本身研發:提高Hadoop集群的性能,增加新功能。
大數據應用:把hadoop作為工具,去實現海量數據處理或者相關需求。
(11)學習hadoop該怎麼入手呢?應該做一些什麼樣的項目呢?
可以參考我上面的幾個回答,可以從最簡單詞頻統計程序入手,然後學習理解HDFS和MapRece的基本原理和核心機制,如果僅僅把Hadoop作為一個工具來使用的話這樣就可以了,最重要的就是實戰了,可以嘗試使用Hadoop處理一些數據,例如做日誌分析,數據統計,排序,倒排索引等典型應用。
(12)100個以上hadoop節點,一般怎麼開發,運維?任務很多的情況下任務資源怎麼分配,任務執行順序是定時腳本還是別的什麼方式控制?
1. 首先大數據的應用開發和hadoop集群的規模是沒有關系,你指的是集群的搭建和運維嗎,對於商用的hadoop系統來說涉及到很多東西,建議參考《hadoop核心技術》實戰篇 「第10章Hadoop集群搭建 」 章節。
2. 任務的分配是有hadoop的調度器的調度策略決定的,默認為FIFO調度,商業集群一般使用多隊列多用戶調度器,可以參考參考《hadoop核心技術》高級篇 「第9章Hadoop作業調度系統」 章節。
3. 任務的執行順序是有用戶控制的,你自然可以定時啟動,也可以手動啟動。
(13)基於Hadoop做開發,是否必須會使用Java,使用其他開發語言是否無法更好的融入整個Hadoop的開發體系?
基於Hadoop做開發可以使用任何語言,因為hadoop提高了streaming編程框架和pipes編程介面,streaming框架下用戶可以使用任何可以操作標准輸入輸出的計算機語言來開發hadoop應用。
(14)在rece階段老是卡在最後階段很長時間,在網上查的說是有可能是數據傾斜,我想問這個有啥解決方法嗎?
1,你這個就是數據傾斜啊 好多數據都集中在一個rece里 其他rece里分配的數據比較少 默認情況下決定哪些數據分配到哪個rece是由rece個數和partiiton分區決定的 默認是對key進行hash運算 一般情況下用mapreuce傾斜很少 除非你用的HIVE
2,rece分為3個子階段:shuffle、sort和rece,如果rece整個過程耗時較長,建議先看一下監控界面是卡在哪個階段,如果是卡在shuffle階段往往是網路阻塞問題,還有就是某rece數據量太大,也就是你所說的數據傾斜問題,這種問題往往因為某個key的value太多,解決方法是:第一,默認的partiiton可能不適合你的需求,你可以自定義partiiton;第二就是在map端截斷,盡量讓達到每個rece端的數據分布均勻。
(15)非大數據的項目能否用hadoop?
非大數據項目是否可以用Hadoop的關鍵問題在於是否有海量數據的存儲,計算,以及分析挖掘等需求,如果現有系統已經很好滿足當前需求那麼就沒有必要使用Hadoop,沒有必要使用並不意味這不能使用Hadoop,很多傳統系統能做的Hadoop也是可以做的,例如使用HDFS來代替LINUX NFS,使用MapRece來代替單伺服器的統計分析相關任務,使用Hbase代替Mysql等關系資料庫等,在數據量不大的情況下通常Hadoop集群肯定比傳統系統消耗更多的資源。
(16)hadoop maprece 和第三方資源管理調度系統如何集成?
Hadoop的調度器設計的一個原則就是可插拔式調度器框架,因此是很容易和第三方調度器集成的,例如公平調度器FairScheler和容量調度器CapacityScheler,並配置mapred-site.xml的maprece.jobtracker.taskscheler以及調度器本身的配置參數,例如公平調度器控制參數則需要編輯fair- scheler.xml進行配置,具體可以參考我的新書《Hadoop核心技術》實戰篇第十章節10.11的集群搭建實例中的10.10.9 配置第三方調度器,同時可以進一步深入學習第9章 Hadoop作業調度系統,在這一章中會詳細介紹各種第三方調度器以及使用配置方法。

Ⅷ 請教flume如何將數據寫入HDFS-Hadoop和大數據技術

Hadoop本身是分布式框架,如果在hadoop框架下,需要配合hbase,hive等工具來進行大數據計算。如果具體深入還要了解HDFS,Map/Rece,任務機制等等。如果要分析還要考慮其他分析展現工具。

大數據還有分析才有價值

用於分析大數據的工具主要有開源與商用兩個生態圈。開源大數據生態圈:1、Hadoop HDFS、HadoopMapRece, HBase、Hive 漸次誕生,早期Hadoop生態圈逐步形成。2、. Hypertable是另類。它存在於Hadoop生態圈之外,但也曾經有一些用戶。3、NoSQL,membase、MongoDb商用大數據生態圈:1、一體機資料庫/數據倉庫:IBM PureData(Netezza), OracleExadata, SAP Hana等等。2、數據倉庫:TeradataAsterData, EMC GreenPlum, HPVertica 等等。3、數據集市:QlikView、 Tableau 、 以及國內的Yonghong Data Mart 。

熱點內容
安卓手機安裝好圖標包如何使用 發布:2024-04-18 22:00:23 瀏覽:451
國際服刺激戰場怎麼在伺服器上 發布:2024-04-18 21:55:48 瀏覽:535
怎樣購買蘋果存儲空間 發布:2024-04-18 21:51:47 瀏覽:434
web伺服器怎麼搭建手機 發布:2024-04-18 21:46:19 瀏覽:800
伺服器與普通電腦裝系統區別 發布:2024-04-18 21:46:01 瀏覽:528
第一彈視頻緩存 發布:2024-04-18 21:24:08 瀏覽:732
飽和溶液的電極如何配置 發布:2024-04-18 21:15:39 瀏覽:202
ftp網站下載工具 發布:2024-04-18 21:02:45 瀏覽:48
我的世界手游友好的伺服器 發布:2024-04-18 20:57:20 瀏覽:474
php用什麼打開 發布:2024-04-18 20:09:36 瀏覽:732