這篇文章主要介紹“Hadoop如何安裝配置”,在日常操作中,相信很多人在Hadoop如何安裝配置問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hadoop如何安裝配置”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括望奎網(wǎng)站建設(shè)、望奎網(wǎng)站制作、望奎網(wǎng)頁制作以及望奎網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,望奎網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到望奎省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1)在/home/atguigu/bin目錄下創(chuàng)建腳本xcall.sh
vim xcall.sh
2)在腳本中編寫如下內(nèi)容
#! /bin/bash #1、判斷是否輸入?yún)?shù) if [ $# -lt 1 ] then echo "必須輸入至少一個參數(shù)..." exit fi #2、執(zhí)行命令 for host in hadoop102 hadoop103 hadoop104 do echo "===================$host==================" ssh $host "$*" done #xcall.sh mkdir -p /xx/xx
3)修改腳本執(zhí)行權(quán)限
chmod +x xcall.sh
4)啟動腳本
xcall.sh jps
安裝Hadoop
1)生產(chǎn)環(huán)境服務(wù)器磁盤情況
2)在hdfs-site.xml文件中配置多目錄,注意新掛載磁盤的訪問權(quán)限問題。
HDFS的DataNode節(jié)點保存數(shù)據(jù)的路徑由dfs.datanode.data.dir參數(shù)決定,其默認值為file://${hadoop.tmp.dir}/dfs/data,若服務(wù)器有多個磁盤,必須對該參數(shù)進行修改。如服務(wù)器磁盤如上圖所示,則該參數(shù)應修改為如下的值。
<property> <name>dfs.datanode.data.dir</name> <value>file:///dfs/data1,file:///hd2/dfs/data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value> </property>
注意:每臺服務(wù)器掛載的磁盤不一樣,所以每個節(jié)點的多目錄配置可以不一致。單獨配置即可。
總結(jié): 1、HDFS存儲多目錄 1、好處: 1、增大存儲容量 2、提高IO、并發(fā) 2、如何實現(xiàn)存儲多目錄: 需要在hdfs-site.xml中配置 <property> <name>dfs.datanode.data.dir</name> <value>file://磁盤掛載點1/存儲路徑,file://磁盤掛載點2/存儲路徑</value> </property> 在真實的生產(chǎn)環(huán)境中,每天服務(wù)器磁盤數(shù)以及掛載點可能都不太一樣,所以該配置需要在每臺服務(wù)器上單獨配置
數(shù)據(jù)可能累積在某個或者某個datanode節(jié)點上,或者服務(wù)器有多塊磁盤的時候,數(shù)據(jù)累積在某一塊磁盤上,所以此時可能會造成某些 節(jié)點或者磁盤負載壓力會比較大,所以需要在節(jié)點以及磁盤上進行數(shù)據(jù)均衡 1、節(jié)點數(shù)據(jù)均衡 1、開啟節(jié)點數(shù)據(jù)均衡: start-balancer --threshould N N代表節(jié)點之間磁盤的利用率不能超過N% 2、停止節(jié)點數(shù)據(jù)均衡: stop-balancer 2、磁盤的數(shù)據(jù)均衡 1、生成執(zhí)行計劃: hdfs diskbalancer -plan 主機名 <代表指定主機需要執(zhí)行磁盤的數(shù)據(jù)均衡> 2、開啟均衡: hdfs diskbalancer -execute 主機.plan.json 3、查看均衡進度: hdfs diskbalancer -query 主機名 4、停止均衡: hdfs diskbalancer -cancel 主機.plan.json 不管是節(jié)點數(shù)據(jù)均衡還是磁盤數(shù)據(jù)均衡都需要選擇集群空閑的時候進行,因為均衡 的時候需要消耗大量的磁盤IO以及網(wǎng)絡(luò)IO。
hadoop本身并不支持lzo壓縮,如果想要支持lzo壓縮,需要額外操作配置。
1)將編譯好后的hadoop-lzo-0.4.20.jar 放入hadoop-3.1.3/share/hadoop/common/
[atguigu@hadoop102 common]$ pwd /opt/module/hadoop-3.1.3/share/hadoop/common [atguigu@hadoop102 common]$ ls hadoop-lzo-0.4.20.jar
2)同步hadoop-lzo-0.4.20.jar到hadoop103、hadoop104
[atguigu@hadoop102 common]$ xsync hadoop-lzo-0.4.20.jar
3)core-site.xml增加配置支持LZO壓縮
<property> <name>io.compression.codecs</name> <value> org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.SnappyCodec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec </value> </property> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property>
com.hadoop.compression.lzo.LzoCodec: 后續(xù)MR讀取lzo壓縮文件的時候不會切片 com.hadoop.compression.lzo.LzopCodec: 后續(xù)MR讀取lzo壓縮文件的時候會切片<前提是生成索引文件>
4)同步core-site.xml到hadoop103、hadoop104
[atguigu@hadoop102 hadoop]$ xsync core-site.xml
5)啟動及查看集群
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
1)創(chuàng)建LZO文件的索引,LZO壓縮文件的可切片特性依賴于其索引,故我們需要手動為LZO壓縮文件創(chuàng)建索引。若無索引,則LZO文件的切片只有一個。
hadoop jar /opt/module/hadoop/share/hadoop/common/hadoop-lzo-4.1.x.jar com.hadoop.compression.lzo.DistributedLzoIndexer 需要建索引的lzo文件名
1、HDFS吞吐量測試 ①、寫吞吐量: hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles N -size 128MB //-nrFiles個數(shù)應該設(shè)置為集群所有CPU個數(shù)-1 ②、讀吞吐量: hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles N -size 128MB 測試結(jié)果: 2020-04-16 13:41:24,724 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write 2020-04-16 13:41:24,724 INFO fs.TestDFSIO: Date & time: Thu Apr 16 13:41:24 CST 2020 2020-04-16 13:41:24,724 INFO fs.TestDFSIO: Number of files: 10 2020-04-16 13:41:24,725 INFO fs.TestDFSIO: Total MBytes processed: 1280 2020-04-16 13:41:24,725 INFO fs.TestDFSIO: Throughput mb/sec: 8.88 <單個maptask寫的速率> 2020-04-16 13:41:24,725 INFO fs.TestDFSIO: Average IO rate mb/sec: 8.96 2020-04-16 13:41:24,725 INFO fs.TestDFSIO: IO rate std deviation: 0.87 2020-04-16 13:41:24,725 INFO fs.TestDFSIO: Test exec time sec: 67.61 HDFS讀/寫的吞吐量 = 單個maptask寫的速率 * nrFiles ③、刪除測試生成數(shù)據(jù) hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean
2、MR計算性能測試:<使用Sort程序評測MapReduce> (1)使用RandomWriter來產(chǎn)生隨機數(shù),每個節(jié)點運行10個Map任務(wù),每個Map產(chǎn)生大約1G大小的二進制隨機數(shù) hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar randomwriter random-data (2)執(zhí)行Sort程序 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar sort random-data sorted-data (3)驗證數(shù)據(jù)是否真正排好序了 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data
1、namenode線程池的線程數(shù)調(diào)整: 原因:namenode中有一個線程池,線程池中的線程主要用于datanode與namenode心跳以及客戶端獲取/寫入元數(shù)據(jù)的請求,所以如 果并發(fā)比較大或者datanode比較多,就可能導致線程池中線程不夠用。通常需要增大參數(shù)dfs.namenode.handler.count的默認值10 如何調(diào)整: 在hdfs-site.xml中配置: <property> <name>dfs.namenode.handler.count</name> <value>10</value> </property> 調(diào)整為多少: 20 * log(集群機器臺數(shù)) <以e為底> 2、調(diào)整nodemanager能夠使用的資源數(shù) 原因: 服務(wù)器的資源不會全部給nodemanager使用,默認提供給nodemanager使用的內(nèi)存8G,在真實生產(chǎn)中該默認值不夠用需要進 行調(diào)整 如何調(diào)整: 在yarn-site.xml中配置: <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> 一般設(shè)置為服務(wù)器總內(nèi)存的70%-80%
安裝Zookeeper
#! /bin/bash #1、判斷參數(shù)是否傳入 if [ $# -lt 1 ] then echo "必須傳入?yún)?shù)..." exit fi #2、根據(jù)參數(shù)執(zhí)行對應的邏輯 case $1 in "start") for host in hadoop102 hadoop103 hadoop104 do echo "=======================start $host zookeeper===============" ssh $host "/opt/module/zookeeper/bin/zkServer.sh start" done ;; "stop") for host in hadoop102 hadoop103 hadoop104 do echo "=======================stop $host zookeeper===============" ssh $host "/opt/module/zookeeper/bin/zkServer.sh stop" done ;; "status") for host in hadoop102 hadoop103 hadoop104 do echo "=======================status $host zookeeper===============" ssh $host "/opt/module/zookeeper/bin/zkServer.sh status" done ;; *) echo "參數(shù)輸入錯誤..." ;; esac
zookeeper常用指令 1、創(chuàng)建節(jié)點: create 節(jié)點路徑 2、保存數(shù)據(jù): set 路徑 數(shù)據(jù) 3、獲取數(shù)據(jù): get 路徑 4、查看節(jié)點: ls 路徑 5、刪除節(jié)點: 1、刪除非空節(jié)點: deleteall 路徑 2、刪除空節(jié)點: delete 路徑
安裝Kafka
#! /bin/bash #1、判斷參數(shù)是否傳入 if [ $# -lt 1 ] then echo "必須傳入?yún)?shù)..." exit fi #2、根據(jù)參數(shù)匹配邏輯 case $1 in "start") for host in hadoop102 hadoop103 hadoop104 do echo "=================start $host kafka==============" ssh $host "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties" done ;; "stop") for host in hadoop102 hadoop103 hadoop104 do echo "=================stop $host kafka==============" ssh $host "/opt/module/kafka/bin/kafka-server-stop.sh" done ;; "status") for host in hadoop102 hadoop103 hadoop104 do echo "=================status $host kafka==============" pid=$(ssh $host "ps -ef | grep server.properties | grep -v grep") [ "$pid" ] && echo "kafka進程正常" || echo "kafka進程不存在" done ;; *) echo "參數(shù)輸入錯誤...." ;; esac
1、shell常用命令 1、topic相關(guān) 1、創(chuàng)建topic: bin/kafka-topics.sh --create --topic topic名稱 --bootstrap-server hadoop102:9092,hadoop103:9092 --partitions 分區(qū)數(shù) --replication-factor 副本數(shù) 2、查看集群所有topic: bin/kafka-topics.sh --list --bootstrap-server hadoop102:9092 3、查看topic詳細信息: bin/kafka-topics.sh --describe --topic topic名稱 --bootstrap-server hadoop102:9092 4、修改topic<只能修改分區(qū),而且只能增加分區(qū)>: bin/kafka-topics.sh --alter --topic topic名稱 --bootstrap-server hadoop102:9092 --partitions 分區(qū)數(shù) 5、刪除topic: bin/kafka-topics.sh --delete --topic topic名稱 --bootstrap-server hadoop102:9092 2、生產(chǎn)者相關(guān): bin/kafka-console-producer.sh --topic topic名稱 --broker-list hadoop102:9092 3、消費者相關(guān): 1、消費數(shù)據(jù):bin/kafka-console-consumer.sh --topic topic名稱 --bootstrap-server hadoop102:9092 [--group 消費者id] [--from-beginning] 2、查看消費者組消費topic的進度: bin/kafka-consumer-group.sh --all-groups --all-topics --describe --bootstrap-server hadoop102:9092 4、數(shù)據(jù)相關(guān): bin/kafka-dump-log.sh --files 待查看文件路徑 --print-data-log
1、kafka吞吐量測試: 1、讀吞吐量: bin/kafka-consumer-perf-test.sh --broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092 --topic topic名稱 --messages 總共拉取多少條數(shù)據(jù) 測試結(jié)果: start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec 2019-02-19 20:29:07:566, 2019-02-19 20:29:12:170, 9.5368, 2.0714, 100010, 21722.4153 開始測試時間,測試結(jié)束數(shù)據(jù),共消費數(shù)據(jù)9.5368MB,吞吐量2.0714MB/s,共消費100010條,平均每秒消費21722.4153條。 MB.sec就是吞吐量測試結(jié)果 2、寫吞吐量: bin/kafka-producer-perf-test.sh --record-size 指定每條數(shù)據(jù)大小 --topic topic名稱 --num-records 寫入topic數(shù)據(jù)條數(shù) --producer-props bootstrap.servers=hadoop102:9092 --throughput 寫入的速率[-1代表不限制] 100000 records sent, 95877.277085 records/sec (9.14 MB/sec), 187.68 ms avg latency, 424.00 ms max latency, 155 ms 50th, 411 ms 95th, 423 ms 99th, 424 ms 99.9th. 9.14 MB/sec就是吞吐量測試結(jié)果
Kafka機器數(shù)量(經(jīng)驗公式)=2*(峰值生產(chǎn)速度*副本數(shù)/100)+1 先拿到峰值生產(chǎn)速度,再根據(jù)設(shè)定的副本數(shù),就能預估出需要部署Kafka的數(shù)量。 比如我們的峰值生產(chǎn)速度是50M/s。副本數(shù)為2。 Kafka機器數(shù)量=2*(50*2/100)+ 1=3臺
1)創(chuàng)建一個只有1個分區(qū)的topic 2)測試這個topic的producer吞吐量和consumer吞吐量。 3)假設(shè)他們的值分別是Tp和Tc,單位可以是MB/s。 4)然后假設(shè)總的目標吞吐量是Tt,那么分區(qū)數(shù)=Tt / min(Tp,Tc) 例如:producer吞吐量=20m/s;consumer吞吐量=50m/s,期望吞吐量100m/s; 分區(qū)數(shù)=100 / 20 =5分區(qū) https://blog.csdn.net/weixin_42641909/article/details/89294698 分區(qū)數(shù)一般設(shè)置為:3-10個
安裝三臺Flume(日志采集:102、103,消費kafka:104)
tailDirSource,kafkaChannel
(1)在/opt/module/flume/conf目錄下創(chuàng)建file-flume-kafka.conf文件
[atguigu@hadoop102 conf]$ vim file-flume-kafka.conf
在文件配置如下內(nèi)容
#1、定義agent、source、channel名稱 a1.sources = r1 a1.channels = c1 #2、描述source<taildir> a1.sources.r1.type = TAILDIR #指定文件組的名稱 a1.sources.r1.filegroups = f1 #指定組監(jiān)控的目錄 a1.sources.r1.filegroups.f1 = /opt/module/applog/log/app.* #指定斷點續(xù)傳文件 a1.sources.r1.positionFile = /opt/module/flume/position.json #指定一個批次采集多少數(shù)據(jù) a1.sources.r1.batchSize = 100 #3、描述lan截器 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = com.atguigu.interceptor.ETLInterceptor$Builder #4、描述channel a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel #指定kafka集群地址 a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092 #指定數(shù)據(jù)寫入的topic名稱 a1.channels.c1.kafka.topic = applog #數(shù)據(jù)寫入kafka的時候是否以event格式寫入: true=是 false: 不是,只寫body數(shù)據(jù) a1.channels.c1.parseAsFlumeEvent = false #5、關(guān)聯(lián)source->channel a1.sources.r1.channels = c1
@Override public Event intercept(Event event) { byte[] body = event.getBody(); String log = new String(body, StandardCharsets.UTF_8); if (JSONUtils.isJSONValidate(log)) { return event; } else { return null; } } @Override public List<Event> intercept(List<Event> list) { Iterator<Event> iterator = list.iterator(); while (iterator.hasNext()){ Event next = iterator.next(); if(intercept(next)==null){ iterator.remove(); } } return list; }
#! /bin/bash #1、判斷參數(shù)是否傳入 if [ $# -lt 1 ] then echo "必須傳入?yún)?shù)...." fi #2、根據(jù)參數(shù)匹配邏輯 case $1 in "start") for host in hadoop102 hadoop103 do echo "===============開啟$host服務(wù)器采集===============" ssh $host "nohup /opt/module/flume-1.9.0/bin/flume-ng agent -n a1 -c /opt/module/flume-1.9.0/conf/ -f /opt/module/flume-1.9.0/jobs/file_to_kafka.conf -Dflume.root.logger=INFO,LOGFILE >/opt/module/flume-1.9.0/logs 2>&1 &" done ;; "stop") for host in hadoop102 hadoop103 do echo "===============停止$host服務(wù)器采集===============" ssh $host "ps -ef |grep file_to_kafka.conf | grep -v grep | awk '{print \$2}'| xargs kill -9" done ;; *) echo "參數(shù)輸入錯誤..." ;; esac
kafkaSource、fileChannel/memoryChannel、hdfsSink
@Override public Event intercept(Event event) { Map<String, String> headers = event.getHeaders(); String log = new String(event.getBody(), StandardCharsets.UTF_8); JSONObject jsonObject = JSONObject.parseObject(log); String ts = jsonObject.getString("ts"); headers.put("timestamp", ts); return event; } @Override public List<Event> intercept(List<Event> list) { events.clear(); for (Event event : list) { events.add(intercept(event)); } return events; }
#1、定義agent、channel、source、sink名稱 a1.sources = r1 a1.channels = c1 a1.sinks = k1 #2、描述source a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource #指定kafka集群地址 a1.sources.r1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092 #指定從哪個topic讀取數(shù)據(jù) a1.sources.r1.kafka.topics = applog #指定消費者組的id a1.sources.r1.kafka.consumer.group.id = g1 #指定source從kafka一個批次拉取多少條消息: batchSize<=事務(wù)容量<=channel容量 a1.sources.r1.batchSize = 100 #指定消費者組第一個消費topic的數(shù)據(jù)的時候從哪里開始消費 a1.sources.r1.kafka.consumer.auto.offset.reset = earliest #3、描述lan截器 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = com.atguigu.interceptor.MyTimestampInterceptor$Builder #4、描述channel a1.channels.c1.type = file #指定數(shù)據(jù)保存在本地磁盤哪個目錄 a1.channels.c1.dataDirs = /opt/module/flume/datas #指定channel內(nèi)存中event的指針數(shù)據(jù) a1.channels.c1.checkpointDir = /opt/module/flume/checkpoint #指定checkpoint的持久化的間隔時間 a1.channels.c1.checkpointInterval = 5000 #指定channel容量 a1.channels.c1.capacity = 1000000 #5、描述sink a1.sinks.k1.type = hdfs #指定數(shù)據(jù)存儲目錄 a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/applog/%Y%m%d #指定文件的前綴 a1.sinks.k1.hdfs.filePrefix = log- #指定滾動生成文件的時間間隔 a1.sinks.k1.hdfs.rollInterval = 30 #指定滾動生成文件的大小 a1.sinks.k1.hdfs.rollSize = 132120576 #指定寫入多少個event之后滾動生成新文件<一般禁用> a1.sinks.k1.hdfs.rollCount = 0 #指定sink每個批次從channel拉取多少數(shù)據(jù) a1.sinks.k1.hdfs.batchSize = 100 #指定寫入hdfs的時候壓縮格式 #a1.sinks.k1.hdfs.codeC = lzop #指定文件寫入的是格式 SequenceFile-序列化文件, DataStream-文本文件, CompressedStream-壓縮文件 #a1.sinks.k1.hdfs.fileType = CompressedStream a1.sinks.k1.hdfs.fileType = DataStream #6、關(guān)聯(lián)source->channel->sink a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
1)在/home/atguigu/bin目錄下創(chuàng)建腳本f2.sh
[atguigu@hadoop102 bin]$ vim f2.sh
在腳本中填寫如下內(nèi)容
#! /bin/bash case $1 in "start"){ for i in hadoop104 do echo " --------啟動 $i 消費flume-------" ssh $i "nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt/module/flume/conf/kafka-flume-hdfs.conf --name a1 -Dflume.root.logger=INFO,LOGFILE >/opt/module/flume/log2.txt 2>&1 &" done };; "stop"){ for i in hadoop104 do echo " --------停止 $i 消費flume-------" ssh $i "ps -ef | grep kafka-flume-hdfs | grep -v grep |awk '{print \$2}' | xargs -n1 kill" done };; esac
2)增加腳本執(zhí)行權(quán)限
[atguigu@hadoop102 bin]$ chmod u+x f2.sh
3)f2集群啟動腳本
[atguigu@hadoop102 module]$ f2.sh start
4)f2集群停止腳本
[atguigu@hadoop102 module]$ f2.sh stop
flume默認的內(nèi)存最大是2000M,一般在項目中需要設(shè)置為4G左右 Xms: 啟動內(nèi)存大小 Xmx: 運行時最大內(nèi)存大小 Xms與Xmx在設(shè)置的時候最好設(shè)置的一樣。因為設(shè)置的不一樣,啟動時Xms內(nèi)存比較小,導致很快內(nèi)存不夠用,需要進行內(nèi)存的擴容<在擴容 之前會進行GC>,GC會影響性能。兩者設(shè)置為一樣就不會出現(xiàn)內(nèi)存擴容,減少GC次數(shù)
到此,關(guān)于“Hadoop如何安裝配置”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞名稱:Hadoop如何安裝配置
新聞來源:http://jinyejixie.com/article12/iieodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、建站公司、網(wǎng)站建設(shè)、軟件開發(fā)、云服務(wù)器、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)