當前位置:首頁 » 操作系統 » hdfs寫資料庫

hdfs寫資料庫

發布時間: 2022-05-03 04:42:28

❶ 怎麼通過sqoop將hdfs上數據導入到mysql

sqoop是一個能把數據在關系型資料庫和HDFS之間互相傳輸的工具。在這里,我寫一下用java 程序來實現sqoop把數據從HDFS寫入到MYSQL。
在接觸sqoop之前,我自己寫了一個傳輸類來實現數據從HDFS到MYSQL。這里簡單說一下時間的思想:
1、在MYSQL中創建一個參數表A,用來記錄要傳輸的表的表名B和欄位。
2、HDFS上的數據的格式和MYSQL中參數表A中B表的欄位的數量一樣。
3、從MYSQL的參數表A中,讀取要傳輸的表B。把這些欄位拼湊成一個insert語句,例如
,拼湊為insert into b(column1,column2..) values(value1,value2...)
4、從HDFS相應的目錄逐行讀取數據,通過JDBC,把數據批量導入到MYSQL的B表中。
我現在用sqoop來代替原來傳輸的那個功能。先做一下准備工作:
1、hadoop的每個節點下lib文件夾中要有mysql的jar包和sqoop的jar包。
2、在HDFS的某個目錄上的數據格式和MYSQL相應的表中的欄位數量一致。
實現類如下:
package sqoop;
import java .util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.sqoop.Sqoop;
import org.apache.sqoop.tool.ExportTool;
/**
* 用SQOOP來把數據從HDFS導入到MYSQL。
* */
public class Test {
public static void main(String[] args) {
List<String> generatedJarsList = new ArrayList<String>();
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://master:9000");
conf.set("hadoop.job.ugi", "hadooper,hadoopgroup");
conf.set("mapred.job.tracker", "master:9001");
ArrayList<String> list = new ArrayList<String>(); //定義一個list
list.add("--table");
list.add("a_baat_client"); //mysql中的表。將來數據要導入到這個表中。
list.add("--export-dir");
list.add("/tmp/datathree/"); //hdfs上的目錄。這個目錄下的數據要導入到a_baat_client這個表中。
list.add("--connect");
list.add("jdbc:mysql://192.168.1.10:3306/report"); //mysql的鏈接
list.add("--username");
list.add("root"); //mysql的用戶名
list.add("--password");
list.add("root"); //mysql的密碼
list.add("--lines-terminated-by");
list.add("\\n"); //數據的換行符號
list.add("-m");
list.add("1");//定義maprece的數量。
String[] arg = new String[1];
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
sqoop.setConf(conf);
arg = list.toArray(new String[0]);
int result = Sqoop.runSqoop(sqoop, arg);
System.out.println("res:" + result); //列印執行結果。
}
}
這個導出類執行過程中,可以在瀏覽器中看一下http://master:50030頁面。會發現導出數據也是一個把任務轉換為maprece執行的過程。
當然,上面的java代碼,也可以用命令行來實現。命令如下:
bin/sqoop export --connect jdbc:mysql://192.168.1.10:3306/report \
--table a_baat_client --username root --password root \
--export-dir /tmp/datathree/ -m 1
關於sqoop把數據從HDFS導入到MYSQL就說這么多。把數據從HIVE導入到MYSQL,其實可以理解為把HIVE表所對應的HDFS路徑的數據導入到MYSQL,這里就不多說了。

❷ hadoop是做什麼的

提供海量數據存儲和計算的,需要java語言基礎。

Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。

特點

1、快照支持在一個特定時間存儲一個數據拷貝,快照可以將失效的集群回滾到之前一個正常的時間點上。HDFS已經支持元數據快照。

2、HDFS的設計是用於支持大文件的。運行在HDFS上的程序也是用於處理大數據集的。這些程序僅寫一次數據,一次或多次讀數據請求,並且這些讀操作要求滿足流式傳輸速度。

HDFS支持文件的一次寫多次讀操作。HDFS中典型的塊大小是64MB,一個HDFS文件可以被切分成多個64MB大小的塊,如果需要,每一個塊可以分布在不同的數據節點上。

3、階段狀態:一個客戶端創建一個文件的請求並不會立即轉發到名位元組點。實際上,一開始HDFS客戶端將文件數據緩存在本地的臨時文件中。

❸ hdfs的特點有哪些

hdfs的特點
一、hdfs的優點
1.支持海量數據的存儲:一般來說,HDFS存儲的文件可以支持TB和PB級別的數據。
2.檢測和快速應對硬體故障:在集群環境中,硬體故障是常見性問題。因為有上千台伺服器連在一起,故障率很高,因此故障檢測和自動恢復hdfs文件系統的一個設計目標。假設某一個datanode掛掉之後,因為數據是有備份的,還可以從其他節點里找到。namenode通過心跳機制來檢測datanode是否還存活。
3.流式數據訪問:(HDFS不能做到低延遲的數據訪問,但是HDFS的吞吐量大)=》Hadoop適用於處理離線數據,不適合處理實時數據。HDFS的數據處理規模比較大,應用一次需要大量的數據,同時這些應用一般都是批量處理,而不是用戶互動式處理。應用程序能以流的形式訪問資料庫。主要的是數據的吞吐量,而不是訪問速度。訪問速度最終是要受制於網路和磁碟的速度,機器節點再多,也不能突破物理的局限。
4.簡化的一致性模型:對於外部使用用戶,不需要了解hadoop底層細節,比如文件的切塊,文件的存儲,節點的管理。一個文件存儲在HDFS上後,適合一次寫入,多次讀取的場景。因為存儲在HDFS上的文件都是超大文件,當上傳完這個文件到hadoop集群後,會進行文件切塊,分發,復制等操作。如果文件被修改,會導致重新觸發這個過程,而這個過程耗時是最長的。所以在hadoop里,2.0版本允許數據的追加,單不允許數據的修改。
5.高容錯性:數據自動保存多個副本,副本丟失後自動恢復。可構建在廉價的機器上,實現線性擴展。當集群增加新節點之後,namenode也可以感知,將數據分發和備份到相應的節點上。
6.商用硬體:Hadoop並不需要運行在昂貴且高可靠的硬體上。它是設計運行在商用硬體(在各種零售店都能買到的普通硬體)的集群上的,因此至少對於龐大的集群來說,節點故障的幾率還是非常高的。HDFS遇到上述故障時,被設計成能夠繼續運行且不讓用戶察覺到明顯的中斷。
二、HDFS缺點(局限性)
1、不能做到低延遲數據訪問:由於hadoop針對高數據吞吐量做了優化,犧牲了獲取數據的延遲,所以對於低延遲數據訪問,不適合hadoop。對於低延遲的訪問需求,HBase是更好的選擇。
2、不適合大量的小文件存儲 :由於namenode將文件系統的元數據存儲在內存中,因此該文件系統所能存儲的文件總數受限於namenode的內存容量。根據經驗,每個文件、目錄和數據塊的存儲信息大約佔150位元組。因此,如果有一百萬個小文件,每個小文件都會佔一個數據塊,那至少需要300MB內存。如果是上億級別的,就會超出當前硬體的能力。
3、修改文件:對於上傳到HDFS上的文件,不支持修改文件。Hadoop2.0雖然支持了文件的追加功能,但是還是不建議對HDFS上的文件進行修改。因為效率低下。HDFS適合一次寫入,然後多次讀取的場景。
4、不支持用戶的並行寫:同一時間內,只能有一個用戶執行寫操作。

❹ hdfs和mysql有什麼區別大數據離線數據存儲在mysql還是hdfs比較好

這區別可大了,不是一個概念。mysql是傳統的關系型資料庫。hdfs是nosql hadoop的存儲方式。hdfs是分布式的自帶高可用存儲,文件格式跟mysql的存儲引擎不一樣。大數據離線存儲,當然是hdfs更合適

❺ HbBase可以隨機寫入為什麼還要依賴於HDFS

他們的關系是:hbase是一個內存資料庫,而hdfs是一個存儲空間;是物品和房子的關系。
hdfs只是一個存儲空間,他的完整名字是分布式文件系統。從名字可知他的作用了。hbase是一個內存資料庫,簡單點說hbase把表啊什麼的存在hdfs上。
所以即使HbBase可以隨機,它還是要依賴於HDFS。
希望可以幫到您,感謝您的採納!

❻ Hadoop MapRece中把分析數據寫入mysql中

你的job類並沒有設置outputformat,如需要輸出到資料庫,需要特定的輸出如下:

job.setJarByClass(TextCheckerJob.class);
job.setMapperClass(TextMapper.class);
job.setRecerClass(TextRece.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(MysqlDBOutputFormat.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setNumReceTasks(1);
MysqlDBOutputFormat.setOutput(job,"data_chck_result",newString[]{"tblName","colName","wrongValue","count"});

同時,job初始化之前,你需要把連接資料庫的信息寫入conf中,如下

conf.set("maprece.jdbc.driver.class",clazz);
conf.set("maprece.jdbc.username",username);
conf.set("maprece.jdbc.password",password);
conf.set("maprece.jdbc.url",url);

上面的MysqlDBOutputFormat類是我自己重寫了,你可以直接使用DBOutputFormat這個類

❼ 如何進行MySQL資料庫與HDFS的實時數據同步

您好,很高興為您解答。

通過Map/Rece進行批處理遞送到Apache Hadoop仍然是中樞環節。,但隨著要從「超思維速度「分析方面獲取競爭優勢的壓力遞增,因此Hadoop(分布式文件系統)自身經歷重大的發展。科技的發展允許實時查詢,如Apache Drill, Cloudera Impala和Stinger Initiative正脫穎而出,新一代的資源管理Apache YARN 支持這些。

為了支持這種日漸強調實時性操作,我們正發布一個新MySQL Applier for Hadoop(用於Hadoop的MySQL Applier)組件。它能夠把MySQL中變化的事務復制到Hadoop / Hive / HDFS。Applier 組件補充現有基於批處理Apache Sqoop的連接性。

這個組件的復制是通過連接MySQL主服務,一旦二進制日誌被提交,就讀取二進制日誌事務,並且把它們寫到HDFS.

這個組件使用libhdfs提供的API,一個C庫操作HDFS中的文件。這庫由Hadoop版本預編譯生成的。

它連接MySQL主服務讀二進制日誌,然後:
提取發生在主服務上的行插入事件
解碼事件,提取插入到行的每個欄位的數據,並使用滿意的處理程序得到被要求的格式數據。
把它追加到HDFS 中一個文本文件。

資料庫被映射為單獨的目錄,它們的表映射為子目錄,保存在數據倉庫目錄。每個表的數據被寫到Hive/ HDFS中文本文件(稱為datafile1.txt)。數據可以用逗號格式分隔;或其他格式,那可用命令行參數來配置的。

如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】

希望我的回答對您有所幫助,望採納!

~ O(∩_∩)O~

❽ 怎樣將hdfs中的數據導入到mysql中 命令

您好,很高興為您解答。
通過map/rece進行批處理遞送到apache
hadoop仍然是中樞環節。,但隨著要從「超思維速度「分析方面獲取競爭優勢的壓力遞增,因此hadoop(分布式文件系統)自身經歷重大的發展。科技的發展允許實時查詢,如apache
drill,cloudera
impala和stinger
initiative正脫穎而出,新一代的資源管理apache
yarn
支持這些。
為了支持這種日漸強調實時性操作,發布一個新mysql
applier
for
hadoop(用於hadoop的mysql
applier)組件。它能夠把mysql中變化的事務復制到hadoop
/
hive
/
hdfs。applier
組件補充現有基於批處理apache
sqoop的連接性。
這個組件(mysql
applier
for
hadoop)的復制是通過連接mysql主服務,一旦二進制日誌被提交,就讀取二進制日誌事務,並且把它們寫到hdfs.
這個組件使用libhdfs提供的api,一個c庫操作hdfs中的文件。這庫由hadoop版本預編譯生成的。
它連接mysql主服務讀二進制日誌,然後提取發生在主服務上的行插入事件,解碼事件,提取插入到行的每個欄位的數據,並使用滿意的處理程序得到被要求的格式數據。把它追加到hdfs
中一個文本文件。
資料庫被映射為單獨的目錄,它們的表映射為子目錄,保存在數據倉庫目錄。每個表的數據被寫到hive/
hdfs中文本文件(稱為datafile1.txt)。數據可以用逗號格式分隔;或其他格式,那可用命令行參數來配置的。
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~
o(∩_∩)o~

❾ 怎樣將資料庫數據寫入到hdfs中

如下面這個shell腳本
#Oracle的連接字元串,其中包含了Oracle的地址,SID,和埠號
CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1521:DWRAC2
#使用的用戶名
ORACLENAME=kkaa
#使用的密碼
ORACLEPASSWORD=kkaa123
#需要從Oracle中導入的表名
oralceTableName=tt
#需要從Oracle中導入的表中的欄位名
columns=AREA_ID,TEAM_NAME
#將Oracle中的數據導入到HDFS後的存放路徑
hdfsPath=apps/as/hive/$oralceTableName
#執行導入邏輯。將Oracle中的數據導入到HDFS中
sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath --num-mappers 1 --table $oralceTableName --columns $columns --fields-terminated-by '\001'
執行這個腳本之後,導入程序就完成了。

熱點內容
fpga編程語言 發布:2024-10-06 10:29:24 瀏覽:341
python按時間排序 發布:2024-10-06 10:02:50 瀏覽:214
安卓收款機下載什麼應用能收款 發布:2024-10-06 09:38:29 瀏覽:1000
java初級工程師面試題 發布:2024-10-06 09:37:49 瀏覽:217
知鳥在哪裡修改密碼 發布:2024-10-06 09:37:10 瀏覽:303
怎麼更改微信錢包密碼 發布:2024-10-06 09:28:08 瀏覽:549
控制中心不支持配置怎麼辦 發布:2024-10-06 09:16:39 瀏覽:811
地暖存儲罐 發布:2024-10-06 09:10:19 瀏覽:580
搭建模型伺服器 發布:2024-10-06 09:05:23 瀏覽:845
java使用類 發布:2024-10-06 09:05:22 瀏覽:931