<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hadoop 彙整 - 歐立威科技</title>
	<atom:link href="https://www.omniwaresoft.com.tw/tag/hadoop/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.omniwaresoft.com.tw/tag/hadoop/</link>
	<description>歐立威科技 Omniwaresoft｜全方位企業級開源軟體解決方案</description>
	<lastBuildDate>Mon, 15 Dec 2025 08:49:29 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.4</generator>

<image>
	<url>https://www.omniwaresoft.com.tw/wp-content/uploads/2022/12/android-icon-192x192-1.png</url>
	<title>Hadoop 彙整 - 歐立威科技</title>
	<link>https://www.omniwaresoft.com.tw/tag/hadoop/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">242464019</site>	<item>
		<title>大數據分析查詢引擎大車拼！Hadoop Hive VS. Impala 是競爭還是相輔相成？</title>
		<link>https://www.omniwaresoft.com.tw/uncategorized-zh/hive-vs-impala/</link>
		
		<dc:creator><![CDATA[Omni]]></dc:creator>
		<pubDate>Wed, 26 Oct 2022 06:01:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloudera]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[Hive]]></category>
		<category><![CDATA[Impala]]></category>
		<guid isPermaLink="false">http://www.omniwaresoft.com.tw/?p=18294</guid>

					<description><![CDATA[Impala 與 Hive 都是構建在 Hadoop 之上的資料查詢工具，但許多人卻不清楚它們各自的特色與使用情境。其實，從它們的名字就可以略知一二，Hive 是大資料倉儲工具，像蜂巢一樣貯藏了很多蜂蜜，但卻無法快速拿出來；Impala 可以讀寫 Hive 資料，速度和羚羊一樣飛快…本篇文章將從 Hive 與 Impala 的基本架構開始，說明它們各自的長處與限制。]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="18294" class="elementor elementor-18294" data-elementor-post-type="post">
						<section data-particle_enable="false" data-particle-mobile-disabled="false" class="elementor-section elementor-top-section elementor-element elementor-element-7f91cb87 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7f91cb87" data-element_type="section">
						<div class="elementor-container elementor-column-gap-thegem"><div class="elementor-row">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-509af30f" data-id="509af30f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1f74ef50 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor" data-id="1f74ef50" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
												<div class="elementor-text-editor elementor-clearfix">
						<h2 class="has-medium-font-size"><strong>是競爭還是相輔相成</strong>？</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Impala 與 Hive 都是構建在 Hadoop 之上的資料查詢工具，但許多人卻不清楚它們各自的特色與使用情境。其實，從它們的名字就可以略知一二，Hive 是大資料倉儲工具，像蜂巢一樣貯藏了很多蜂蜜，但卻無法快速拿出來；Impala 可以讀寫 Hive 資料，速度和羚羊一樣飛快 …</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>既然 Impala 效能更好，也可以讀寫 Hive 資料，所以可以直接取代 Hive 嗎？</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>事情當然沒這麼簡單，本篇文章將從 Hive 與 Impala 的基本架構開始，說明它們各自的長處與限制。 </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"fontSize":"medium"} --></p>
<h2 class="has-medium-font-size"><strong>Hive VS. Impala 簡介</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Hadoop 生態系立基於分散式檔案系統 HDFS，可以存放 TB 級，乃至於 PB 級的大資料。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Hive 提供類 SQL 的介面，省去開發分散式運算框架的 JAVA 程式的功夫，方便資料倉儲的施作。可以撰寫腳本配合排程進行 ETL，也能夠搭配 ETL 工具來完成資料倉儲的作業，像是 Trinity、Informatica 及 Pentaho 等。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>然而，Hive 緩慢的查詢速度令許使用者苦惱，Impala 應運而生。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Impala 提供 MPP（大規模平行處理）SQL Engine，讓使用者可以快速地取用儲存於 Hive 裡的資料。Impala 即時且低延遲的回應速度，可以作為互動式查詢的介面，適合用來進行即時資料分析，或者搭配 BI 工具使用。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"align":"center"} --></p>
<p><!-- /wp:image --></p>
<p><!-- wp:heading {"fontSize":"medium"} --></p>
<h2 class="has-medium-font-size"><strong>Hive &amp; Impala 比較</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:heading {"level":3,"style":{"typography":{"fontSize":18}}} --></p>
<h3 style="font-size: 18px;"><strong>架構</strong></h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>資料儲存部分，Hive 與 Impala 的資料都是落地在 HDFS 上，元資料則存放在 Hive Metastore 的外部資料庫中，因此，Hive 與 Impala 可以讀寫同一份資料。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"align":"center"} --></p>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p>運算部分，Hive 依賴分散式運算框架以及 YARN 的資源調度，運算過程中會啟動 Mapper 與 Reducer，複雜的運算會經過多輪的 MapReduce，每一輪的 Reducer 會將階段性的計算結果落地在 HDFS 暫存，提供下一輪的運算使用。</p>
<p>Impala 則是以 C++ 撰寫的 MPP SQL Engine，不依賴 MapReduce 與 YARN，以其自身的平行處理邏輯來讀寫資料，運算過程中省去啟動 Mapper 與 Reducer 的步驟，並且大量使用記憶體，減少硬碟 I/O，相對提升運算的效率。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3,"style":{"typography":{"fontSize":18}}} --></p>
<h3 style="font-size: 18px;"><strong>查詢、連線與使用</strong></h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Hive 與 Impala 均提供類 SQL 的語法對資料進行操作，只要熟悉 SQL 就能快速地上手。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Hive 與 Impala 除了原生的 CLI Shell 以外，也可以透過 JDBC 或 ODBC Driver 進行連線，因此可以串接 ETL 工具，如 Informatica、Pentaho 等，以及 BI 工具，如 Tableau 等。另外，兩者都有 Python 函式庫，分別是 PyHive 與 impyla，可以使用 Python 程式連線來讀寫資料，或者進一步串接到 Pandas，將取得的資料做更深入的分析。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Hive 得益於 MapReduce，運算時容錯度大，部分錯誤如 Mapper 執行失敗，並不會影響整個運算的作業，並且 Hive 可以使用 YARN 做資源調度，Scheduler 可以做到 user 級別的資源管理，一方面限制 user 資源的使用上限，一方面又確保 user 可以使用的最少資源，加上 Hive 提供資料匯出匯入 HDFS 與 Local 的語法，相較於 Impala 更適合批次處理的 ETL 作業；Impala 平行處理邏輯雖然容錯度小，單點運算失敗會導致整個運算失敗，但是查詢速度快，重新查詢成本低，更適合做互動式查詢。</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3,"style":{"typography":{"fontSize":18}}} --></p>
<h3 style="font-size: 18px;"><strong>Hive VS. Impala</strong> <strong>比較表</strong></h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:image {"id":34924,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img data-recalc-dims="1" class="wp-image-34924" src="https://i0.wp.com/www.omniwaresoft.com.tw/wp-content/uploads/2023/03/Hive-VS.-Impala-%E6%AF%94%E8%BC%83%E8%A1%A8.png?w=1170&#038;ssl=1" alt="Hive VS. Impala 比較表" /></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:heading {"fontSize":"medium"} --></p>
<h2 class="has-medium-font-size"><strong>使用注意事項</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>由於 Hive 與 Impala 架構上的不同，但是兩者都能操作同一份資料，因此使用時有一些細節需要注意：</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul>
<li style="list-style-type: none;">
<ul><!-- wp:list-item --></ul>
</li>
</ul>
<ul>
<li style="list-style-type: none;">
<ul>
<li>讀取表<br />Hive 內部表預設屬性 CRUD transactional，但是 Impala 無法讀取此類的表，若要確保該表兩者皆能讀取，透過 Hive 建內部表時，需要將表的改為 Insert-only transactional，或者改建外部表。</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>寫入表<br />Hive 內部表預設的儲存檔案格式為 ORC，但是 Impala 無法寫入此種檔案格式，若要確保該表兩者都能寫入，透過 Hive 建內部表時，需要改以 Parquet 或 Textfile 儲存資料。</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>HDFS 檔案權限<br />由於實際資料落地於 HDFS，Hive 與 Impala 於 HDFS 通常是不同 user，若要確保兩者能夠讀寫同一份資料，需要注意檔案的權限設定。</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>複雜型態資料<br />Impala 無法直接讀取複雜型態（如ARRAY、MAP、STRUCT）的資料，需要轉型成簡單型態（Scalar Type，即一個欄位一個值）才能讀取，並且不支援 UNION 這個複雜型態。</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
<p><!-- wp:heading {"fontSize":"medium"} --></p>
<h2 class="has-medium-font-size"><strong>結語</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Impala 的出現並不是要取代 Hive。<span style="text-transform: initial;">Hive 負責 ETL 作業做好資料倉儲，Impala 提供即時快速的查詢，也可以將整理過的資料另做資料市集。兩者分工合作在 Hadoop 生態系中相輔相成，完成大數據平台的各種任務。</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:separator {"opacity":"css","className":"is-style-wide"} --></p>
<hr class="wp-block-separator has-css-opacity is-style-wide" />
<p><!-- /wp:separator --></p>
<p><!-- wp:block {"ref":34920} /--></p>
<p><!-- wp:heading {"fontSize":"medium"} --></p>
<h2 class="has-medium-font-size"><strong>參考資料</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><a href="https://stackoverflow.com/questions/38218200/hive-data-to-pandas-data-frame" target="_blank" rel="noopener">https://stackoverflow.com/questions/38218200/hive-data-to-pandas-data-frame</a></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><a href="https://docs.cloudera.com/runtime/7.2.10/using-hiveql/topics/hive_hive_3_tables.html" target="_blank" rel="noopener">https://docs.cloudera.com/runtime/7.2.10/using-hiveql/topics/hive_hive_3_tables.html</a></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><a href="https://blog.cloudera.com/extending-hive-replication-transactional-tables-external-tables-and-statistics/" target="_blank" rel="noopener">https://blog.cloudera.com/extending-hive-replication-transactional-tables-external-tables-and-statistics/</a></p>
<p> </p>
<p>想了解更多資訊，<a href="https://www.omniwaresoft.com.tw/contact/" target="_blank" rel="noreferrer noopener">歡迎聯絡我們</a>，或是 <a href="https://page.line.me/870pcqyh?oat__id=4761625&amp;openQrModal=true" target="_blank" rel="noreferrer noopener">加入歐立威 Line 好友！</a></p>
<p><!-- /wp:paragraph --></p>							</div>
										</div>
				</div>
					</div>
		</div>
					</div></div>
		</section>
				</div>
		]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18294</post-id>	</item>
		<item>
		<title>一個便當吃不飽，可以吃兩個啊！淺談巨量資料庫 Hadoop</title>
		<link>https://www.omniwaresoft.com.tw/uncategorized-zh/what-is-hadoop/</link>
		
		<dc:creator><![CDATA[Omni]]></dc:creator>
		<pubDate>Thu, 31 Mar 2022 10:02:37 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloudera]]></category>
		<category><![CDATA[Hadoop]]></category>
		<guid isPermaLink="false">http://www.omniwaresoft.com.tw/?p=17292</guid>

					<description><![CDATA[Hadoop 目前是 Apache 的開源專案，能夠儲存並管理巨量資料，更可以儲存容量超大的檔案，並同時儲存、處理、分析這些檔案，因此許多組織採用它作為儲存巨量資料的雲端平台。Hadoop 完全免費、有活躍的社群，還有各式各樣的開源應用程式，儼然是個豐富的生態系。]]></description>
										<content:encoded><![CDATA[<p></p>
<h2 class="wp-block-heading" style="font-size: 24px;">Hadoop &#8211; 這隻黃色小象究竟是什麼？</h2>
<p></p>
<p></p>
<p>「一個便當吃不飽，可以吃兩個啊！還不夠的話，可以再吃好幾個！」</p>
<p></p>
<p></p>
<p>當企業儲存的資料越來越多，若只是要增加幾 TB 可以加裝硬碟進行擴容就好，但若要增加幾百 TB 的資料，顯然不是一台電腦主機就可以搞定的。</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>那麼要怎樣把資料放到多台主機，又能同時使用與管理裡的資料呢？</p>
<p></p>
<p></p>
<p>Hadoop 就此應運而生！既然一台電腦裝不下，那麼可以放到兩台，甚至更多台主機裡面！</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>Hadoop 目前是 Apache 的開源專案，能夠儲存並管理巨量資料，更可以儲存容量超大的檔案，並同時儲存、處理、分析這些檔案，因此許多組織採用它作為儲存巨量資料的雲端平台。</p>
<p>除此之外，Hadoop 完全免費、有活躍的社群，還有各式各樣的開源應用程式，儼然是個豐富的生態系。 </p>
<p></p>
<p></p>
<figure><img data-recalc-dims="1" src="https://i0.wp.com/www.omniwaresoft.com.tw/wp-content/uploads/2022/03/1200px-Hadoop_logo.svg.png?w=1170&#038;ssl=1" alt="hadoop" /></figure>
<p></p>
<p></p>
<h2 class="wp-block-heading" style="font-size: 24px;">Hadoop 可以做什麼？</h2>
<p></p>
<p></p>
<p>Hadoop File System，簡稱 HDFS，是一種分散式檔案系統，可以整合多台主機的儲存空間來存放資料。</p>
<p>HDFS 在存放檔案有自己獨特的邏輯，它會將一整個的檔案切成小塊（block）做上記號，然後製作副本（Data replication），散佈到不同的主機上。這麼做有幾個好處：</p>
<p></p>
<p></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul></ul>
</li>
</ul>
<ul>
<li style="list-style-type: none;">
<ul>
<li>當要讀取或寫入時，因為檔案被切分成小塊，壓力分散到多台主機，妥善運用資源，避免一台主機存放一個超大檔案，造成 I/O 擠在一台電腦上陷入瓶頸，其他主機卻閒得發慌。</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>每個小塊都有自己的副本，雖然會花費更多儲存空間，但是當中一個主機意外故障時，存在其他地方的副本，馬上可以提供資料，HDFS 也會自動把缺少的副本補齊。</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<p></p>
<p>Hadoop 藉由 YARN 監控與分配資源，YARN （Yet Another Resource Negotiator） 是一種分散式運算系統，用於資源管理。它可以統籌多台主機的運算資源來進行計算，傳統上使用 MapReduce 運算框架，可以處理存放在 HDFS 中的大量資料。</p>
<p></p>
<p></p>
<p>有了基礎的檔案與運算系統，開始有許多的應用依附著 Hadoop，常見的有：</p>
<p></p>
<p></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul></ul>
</li>
</ul>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Apache Hive 主要用於資料倉儲，適合巨量資料的批量處理</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Apache HBase 作為 No-SQL 的資料庫，提供更即時的搜尋</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Apache Kafka 流式資料訊息傳遞中介，為資料流解耦</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Apache Spark 資料分析工具，提供資料探勘與機器學習的 API</li>
</ul>
</li>
</ul>
<p></p>
<p></p>
<p></p>
<p>還有更多應用，族繁不及備載。</p>
<p></p>
<p></p>
<h2 class="wp-block-heading" style="font-size: 24px;">Hadoop 與資料庫有什麼不同？爲何 Hive 查資料那麼慢？</h2>
<p></p>
<p></p>
<p>Hadoop 是將資料存放在分散式檔案系統，所以可以存放各種檔案。</p>
<p>Apache Hive 則是提供類似傳統關連式資料庫的介面，讓使用者可以使用近似 SQL 的指令 HiveQL，將大量的結構化資料存入 HDFS 中進行「資料倉儲」。</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>由於使用 Hive 的主要目的是存放大量資料，必要時才使用 YARN 進行存取與運算，傳統上Hive 使用 MapReduce 運算框架，運算過程中大量使用硬碟 I/O，避開因為昂貴的記憶體而導致的 OOM 問題，因此更多時候是用於巨量資料的批次處理。因此，相較用在 OLTP 追求速度而大量使用記憶體的資料庫，速度會慢上許多！</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>若是要更即時的互動式查詢，可以使用 Apache Impala 來訪問 Hive 中的資料，Impala 繞過 YARN 與 MapReduce，有著更快的反應速度。</p>
<p><strong>推薦閲讀</strong>：<a href="https://www.omniwaresoft.com.tw/uncategorized-zh/hive-vs-impala/" target="_blank" rel="noopener">大數據分析查詢引擎大車拼！Hadoop Hive VS. Impala 是競爭還是相輔相成？</a></p>
<p></p>
<p></p>
<h2 class="wp-block-heading" style="font-size: 24px;">什麼是 CDP Private Cloud Base？</h2>
<p></p>
<p></p>
<p>Apache Hadoop 生態豐富，要合宜地將各個服務部署到叢集中，程序就變得相當複雜。不同的應用彼此相互依賴，其中各個參數互相影響，也需要第三方軟體來監視每個服務的狀態。</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>Cloudera 的 CDP Private Cloud Base 正是為解決上述挑戰而生，整合 Hadoop 生態系中常用的應用服務。</p>
<p>透過 Cloudera Manager 提供的 Web UI，管理者可輕鬆完成部署與集中管理，包括服務啟停、設定參數調校及安全策略套用。此一設計大幅降低手動操作與撰寫腳本的負擔，讓企業能更快速地展開資料分析，真正發揮大數據的商業價值！</p>
<p>想了解更多資訊，<a href="https://www.omniwaresoft.com.tw/contact/" target="_blank" rel="noreferrer noopener">歡迎聯絡我們</a>，或是 <a href="https://page.line.me/870pcqyh?oat__id=4761625&amp;openQrModal=true" target="_blank" rel="noreferrer noopener">加入歐立威 Line 好友！</a></p>
<p></p>
<p></p>
<p></p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17292</post-id>	</item>
		<item>
		<title>Hadoop-手動建立單節點的Hadoop叢集</title>
		<link>https://www.omniwaresoft.com.tw/techcolumn/hadoop-set-single-node-cluster/</link>
		
		<dc:creator><![CDATA[Omni]]></dc:creator>
		<pubDate>Thu, 28 Dec 2017 16:45:07 +0000</pubDate>
				<category><![CDATA[技術專欄]]></category>
		<category><![CDATA[Hadoop]]></category>
		<guid isPermaLink="false">https://goodpoint-studio.com/?p=12617</guid>

					<description><![CDATA[在學習Hadoop時，建議使用Hortonworks打包好的Sandbox，或Cloudera的QuickStart VM。內心深處，肯定有肢解它們的衝動。本專欄的目的，就是以描述如何手動架設Hadoop「偽分佈模式」（pseudo-distributed mode），來適度反向滿足心中的野獸。]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="12617" class="elementor elementor-12617" data-elementor-post-type="post">
						<section data-particle_enable="false" data-particle-mobile-disabled="false" class="elementor-section elementor-top-section elementor-element elementor-element-312a69c0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="312a69c0" data-element_type="section">
						<div class="elementor-container elementor-column-gap-thegem"><div class="elementor-row">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-23f909f0" data-id="23f909f0" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-438eaee0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor" data-id="438eaee0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
												<div class="elementor-text-editor elementor-clearfix">
						<h2>引言</h2>
<p>在學習Hadoop時，建議使用Hortonworks打包好的Sandbox，或Cloudera的QuickStart VM。內心深處，肯定有肢解它們的衝動。本專欄的目的，就是以描述如何手動架設Hadoop「偽分佈模式」（pseudo-distributed mode），來適度反向滿足心中的野獸。&nbsp;</p>
<h2>準備安裝環境</h2>
<p>以下Hadoop的安裝環境，是在VMware Worstation 11上運作的CentOS 7 Linux作業系統。倘若您偏好使用甲骨文的VirtualBox虛擬平台，也無不可。若您有使用純文字介面的癖好，在安裝CentOS時建議選擇Infrastructure Server以上（含）的級別，且務必勾選加裝Java Platform。若您無自虐傾向，則建議安裝至Gnome Desktop級別。<br>
在開工前，不妨將作業系統整體更新一次；以root身份，執行 # yum –y update</p>
<h2>下載及安裝Hadoop 程式包</h2>
<p>以root身份，執行<br>
# wget http://apache.stu.edu.tw/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz<br>
Hadoop-2.7.1是本專欄下筆時的最新版本。您可至<a href="http://hadoop.apache.org/releases.html">http://hadoop.apache.org/releases.html</a>檢視當下的最新版。記得點選binary而非source。<br>
下載完成後，解壓，再將資料夾移至 /usr/local 目錄底下：<br>
# tar xvf hadoop-2.7.1.tar.gz<br>
# mv hadoop-2.7.1 /usr/local<br>
Hadoop就此「安裝」完成！但談上陣還早，請往下看。</p>
<h2>設定環境變數</h2>
<p>首先，要編輯在 /usr/local/hadoop-2.7.1/etc/hadoop目錄下一個叫hadoop-env.sh的檔案，以設定重要環境變數。這些變數的意義，檔案裡有官方注釋，在此也就不贅述。</p>
<p>把#export JAVA_HOME=${JAVA_HOME}改成（務必删去井字符號）<br>
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre<br>
把 #export HADOOP_LOG_DIR=${HADOOP_LOG_DIR}/$USER改成<br>
export HADOOP_LOG_DIR=/var/log/hadoop/$USER<br>
緊接著這行，加入<br>
export HADOOP_MAPRED_LOG_DIR=/var/log/hadoop-mapreduce/$USER<br>
再來，編輯同目錄下的yarn-env.sh，在IFS=那行下面，加入<br>
export YARN_LOG_DIR=/var/log/hadoop-yarn/$USER<br>
最後，為往後操作上的便利，新增檔案/etc/profile.d/hadoop.sh，並編輯以下內容：<br>
export HADOOP_PREFIX=/usr/local/hadoop-2.7.1<br>
export PATH=$HADOOP_PREFIX/sbin:$HADOOP_PREFIX/bin:$PATH<br>
export MR_EXAMPLES=$HADOOP_PREFIX/share/hadoop/mapreduce<br>
階段性確認Hadoop生命跡象：<br>
# source /etc/profile.d/hadoop.sh<br>
# hadoop version<br>
Hadoop 2.7.1<br>
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a<br>
Compiled by jenkins on 2015-06-29T06:04Z<br>
Compiled with protoc 2.5.0<br>
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a<br>
This command was run using /usr/local/hadoop-2.7.1/share/hadoop/common/hadoop-common-2.7.1.jar</p>
<h2>建立標準帳戶</h2>
<p>建立方便Hadoop權限管理的群組和帳戶：<br>
# groupadd hadoop<br>
# groupadd hdfs<br>
# useradd -g hadoop yarn<br>
# useradd -g hadoop hdfs<br>
# useradd -g hadoop mapred</p>
<h2>建立存放日誌的目錄</h2>
<p>接著，建立之前我們在hadoop-env.sh和yarn-env.sh裡指定存放日誌的目錄：<br>
# mkdir /var/log/hadoop<br>
# chgrp hadoop /var/log/hadoop<br>
# chmod 775 /var/log/hadoop<br>
# mkdir /var/log/hadoop-mapreduce<br>
# chown yarn:hadoop /var/log/hadoop-mapreduce<br>
# mkdir /var/log/hadoop-yarn<br>
# chown yarn:hadoop /var/log/hadoop-yarn</p>
<h2>建立構成HDFS的目錄</h2>
<p>接下來要建的，是HDFS常駐程式（Namendoe、Secondary Namenode、Datanode）的專屬目錄。稍後，我們會把一些配置檔裡的設定指向它們。Hadoop就是靠這些設定得知HDFS的內容要在何處讀寫。由於本「叢集」僅有單一節點，我們只能委屈這些常駐程式，把它們的專屬「硬碟」全塞在一個子目錄底下：<br>
# mkdir –p /hadoop/hdfs<br>
# cd /hadoop/hdfs<br>
# mkdir nn snn dn<br>
# chown –R hdfs:hdfs .<br>
如果這是個企業級別的Hadoop叢集，這些常駐程式會在各自的伺服器上跑，並各自擁有一至多個專屬硬碟。</p>
<h2>配置HDFS和YARN</h2>
<p>接下來我們著手一連串的配置。這些配置的意義，可在Apache官網上查到。<br>
回到 $HADOOP_PREFIX/etc/hadoop目錄，先編輯檔案core-site.xml如下：<br>
&lt;!&#8211;core-site.xml&#8211;&gt;<br>
&lt;configuration&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;fs.defaultFS&lt;/name&gt;<br>
&lt;value&gt;hdfs://localhost&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;hadoop.http.staticuser.user&lt;/name&gt;<br>
&lt;value&gt;hdfs&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;/configuration&gt;<br>
這裡的重點是第一個設定，宣告本機就是Namenode，而且要Hadoop用HDFS檔案系統。<br>
編輯hdfs-site.xml如下：<br>
&lt;!&#8211;hdfs-site.xml&#8211;&gt;<br>
&lt;configuration&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;dfs.replication&lt;/name&gt;<br>
&lt;value&gt;1&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;dfs.namenode.name.dir&lt;/name&gt;<br>
&lt;value&gt;file:/hadoop/hdfs/nn&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;dfs.checkpoint.dir&lt;/name&gt;<br>
&lt;value&gt;file:/hadoop/hdfs/snn&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;dfs.checkpoint.edits.dir&lt;/name&gt;<br>
&lt;value&gt;file:/hadoop/hdfs/snn&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;dfs.datanode.data.dir&lt;/name&gt;<br>
&lt;value&gt;file:/hadoop/hdfs/dn&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;/configuration&gt;<br>
設定dfs.replication指定HDFS檔案複製數為1（預設值為3）。接下來的幾個設定指向上個章節建的資料夾。<br>
編輯mapred-site.xml如下：<br>
&lt;!&#8211;mapred-site.xml&#8211;&gt;<br>
&lt;configuration&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;mapreduce.framework.name&lt;/name&gt;<br>
&lt;value&gt;yarn&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;yarn.app.mapreduce.am.staging-dir&lt;/name&gt;<br>
&lt;value&gt;/user&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;mapreduce.jobhistory.done-dir&lt;/name&gt;<br>
&lt;value&gt;/mr-history/done&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;mapreduce.jobhistory.intermediate-done-dir&lt;/name&gt;<br>
&lt;value&gt;/mr-history/tmp&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;/configuration&gt;<br>
設定mapreduce.framework.name指明執行MapReduce時要透過YARN。後續設定宣告MapReduce的中繼和結果日誌要放的位置。稍後我們還要建相關的資料夾。<br>
最後，編輯yarn-site.xml，宣告YARN的ResourceManager在本機上跑:<br>
&lt;!&#8211;yarn-site.xml&#8211;&gt;<br>
&lt;configuration&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;yarn.resourcemanager.hostname&lt;/name&gt;<br>
&lt;value&gt;localhost&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;property&gt;<br>
&lt;name&gt;yarn.nodemanager.aux-services&lt;/name&gt;<br>
&lt;value&gt;mapreduce_shuffle&lt;/value&gt;<br>
&lt;/property&gt;<br>
&lt;/configuration&gt;<br>
若這是企業級的Hadoop叢集，ResourceManager會有專屬的伺服器，而不是跟Namenode擠同一個機台。</p>
<h2>修改Java的預設記憶堆大小</h2>
<p>正常情況下，架偽分佈模式是為了學習而非處理大量資料，因此我們會對Hadoop使用的電腦資源加碼限制，其中最重要的一環是記憶堆大小的控制。<br>
進$HADOOP_PREFIX/etc/hadoop目錄，對hadoop-env.sh做下列修改：</p>
<ul>
<li>將#export HADOOP_HEAPSIZE=改成export HADOOP_HEAPSIZE=&#8221;100&#8243;</li>
<li>將#export HADOOP_NAMENODE_INIT_HEAPSIZE=&#8221;1000&#8243;改成export HADOOP_NAMENODE_INIT_HEAPSIZE=&#8221;100&#8243;</li>
<li>進mapred-env.sh，把export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000改成export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=50。</li>
<li>進yarn-env.sh，把JAVA_HEAP_MAX=-Xmx1000m改為JAVA_HEAP_MAX=-Xmx100m，接著再加YARN_HEAPSIZE=100。</li>
</ul>
<h2>&nbsp;「格式化」Namenode</h2>
<p>在HDFS第一次使用前，需要先「格式化」Namenode，目的是把HDFS的初始狀態寫進Namenode的紀錄。為此，執行下列指令：<br>
# su – hdfs<br>
$ hdfs namenode –format<br>
若無差錯，在一長串訊息的尾端會看到類似下列的「成功」回報：<br>
15/08/23 22:17:46 INFO common.Storage: Storage directory /var/data/hadoop/hdfs/nn has been successfully formatted.<br>
15/08/23 22:17:47 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid &gt;= 0<br>
15/08/23 22:17:47 INFO util.ExitUtil: Exiting with status 0<br>
15/08/23 22:17:47 INFO namenode.NameNode: SHUTDOWN_MSG:<br>
/************************************************************<br>
SHUTDOWN_MSG: Shutting down NameNode at hadoop2.localdomain/192.168.204.142<br>
************************************************************/<br>
如果現在回頭去看/hadoop/hdfs/nn目錄，會看到一個叫current的子目錄，底下有幾個暗藏HDFS玄機的檔案:<br>
[hdfs@localhost ~]$ ls -l /hadoop/hdfs/nn/current<br>
total 16<br>
-rw-r&#8211;r&#8211;. 1 hdfs hadoop 351 Sep 19 14:54 fsimage_0000000000000000000<br>
-rw-r&#8211;r&#8211;. 1 hdfs hadoop&nbsp; 62 Sep 19 14:54 fsimage_0000000000000000000.md5<br>
-rw-r&#8211;r&#8211;. 1 hdfs hadoop&nbsp;&nbsp; 2 Sep 19 14:54 seen_txid<br>
-rw-r&#8211;r&#8211;. 1 hdfs hadoop 201 Sep 19 14:54 VERSION<br>
至於<em>/hadoop/hdfs/snn</em>和<em>/hadoop/hdfs/dn</em>，則依然是空無一物。<br>
一路走到這裡，差不多是收割勞動果實的時候了。HDFS已經就緒，就等著我們點火啟動。</p>
<h2>啟動HDFS</h2>
<p>欲啟動HDFS，須個別發動HDFS三大組件：<br>
# su – hdfs<br>
$ hadoop-daemon.sh start namenode<br>
starting namenode, logging to /var/log/hadoop/hadoop-hdfs-namenode-hadoop2.kosmos.out<br>
$ hadoop-daemon.sh start secondarynamenode<br>
starting secondarynamenode, logging to /var/log/hadoop/hadoop-hdfs-secondarynamenode-hadoop2.kosmos.out<br>
$ hadoop-daemon.sh start datanode<br>
starting datanode, logging to /var/log/hadoop/hadoop-hdfs-datanode-hadoop2.kosmos.out<br>
看起來是成功了，但可能還是要有其它方式確認會比較心安，畢竟常駐程式在啟動後不久默默掛點的事在報紙上常看到。為此，可使用指令hdfs dfsadmin -report：<br>
$ hdfs dfsadmin -report<br>
Configured Capacity: 18746441728 (17.46 GB)<br>
Present Capacity: 14292144128 (13.31 GB)<br>
DFS Remaining: 14292131840 (13.31 GB)<br>
DFS Used: 12288 (12 KB)<br>
DFS Used%: 0.00%<br>
Under replicated blocks: 0<br>
Blocks with corrupt replicas: 0<br>
Missing blocks: 0<br>
Missing blocks (with replication factor 1): 0<br>
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br>
Live datanodes (1):<br>
Name: 127.0.0.1:50010 (localhost)<br>
Hostname: hadoop2.localdomain<br>
Decommission Status : Normal<br>
Configured Capacity: 18746441728 (17.46 GB)<br>
DFS Used: 12288 (12 KB)<br>
Non DFS Used: 4454297600 (4.15 GB)<br>
DFS Remaining: 14292131840 (13.31 GB)<br>
DFS Used%: 0.00%<br>
DFS Remaining%: 76.24%<br>
Configured Cache Capacity: 0 (0 B)<br>
Cache Used: 0 (0 B)<br>
Cache Remaining: 0 (0 B)<br>
Cache Used%: 100.00%<br>
Cache Remaining%: 0.00%<br>
Xceivers: 1<br>
Last contact: Mon Aug 24 14:06:55 CST 2015<br>
另一個監控HDFS狀況的方式是透過Namenode的Web UI。網址是http://localhost:50070。</p>
<h2>建立基本HDFS目錄</h2>
<p>接下來，我們要在HDFS上建立一些Hadoop應用程式會使用的暫存目錄，和讓HDFS用戶存放個人資料用的目錄：<br>
# su – hdfs<br>
$ hdfs dfs –mkdir /tmp<br>
$ hdfs dfs –chown hdfs:hdfs /tmp<br>
$ hdfs dfs –chmod 777 /tmp<br>
$ hdfs dfs –mkdir /mr-history<br>
$ hdfs dfs –chown mapred:hadoop /mr-history<br>
$ hdfs dfs –chmod 777 /mr-history<br>
$ hdfs dfs –mkdir /user<br>
$ hdfs dfs –chown hdfs:hdfs /user<br>
我們假設有個叫noob的HDFS用戶，並為他在<em>/</em>user底下建一個個人目錄：<br>
$ hdfs dfs –mkdir /user/noob<br>
$ hdfs dfs –chown noob:hdfs /user/noob</p>
<h2>啟動YARN</h2>
<p>YARN可透過yarn-daemon.sh腳本啟動。先啟動ResourceManager：<br>
# su &#8211; yarn<br>
$ yarn-daemon.sh start resourcemanager<br>
starting resourcemanager, logging to /var/log/hadoop-yarn/yarn/yarn-yarn-resourcemanager-hadoop2.kosmos.out<br>
接著啟動NodeManager：<br>
$ yarn-daemon.sh start nodemanager<br>
starting nodemanager, logging to /var/log/hadoop-yarn/yarn/yarn-yarn-nodemanager-hadoop2.kosmos.out<br>
也順手啟動MapReduce的HistoryServer，因為馬上會用到：<br>
$ mr-jobhistory-daemon.sh start historyserver<br>
starting historyserver, logging to /var/log/hadoop-mapreduce/yarn/mapred-yarn-historyserver-hadoop2.kosmos.out<br>
ResourceManager本身也經營一個Web UI，網址是http://localhost:8088，我們可透過它監控YARN的狀態：</p>
<h2>試跑MapReduce</h2>
<p>以一般用戶noob的身份，試跑一個官方標配MapReduce「任務」– 以蒙地卡羅手法估算圓週率：<br>
# su – noob<br>
$ hadoop jar $MR_EXAMPLES/hadoop-mapreduce-examples-2.7.1.jar pi 1 10000<br>
如果沒什麼差錯，應該會看到類似下列，一貫落落長的訊息：<br>
Number of Maps&nbsp; = 1<br>
Samples per Map = 10000<br>
Wrote input for Map #0<br>
Starting Job<br>
15/09/15 11:16:00 INFO client.RMProxy: Connecting to ResourceManager at localhost/127.0.0.1:8032<br>
15/09/15 11:16:00 INFO input.FileInputFormat: Total input paths to process : 1<br>
15/09/15 11:16:01 INFO mapreduce.JobSubmitter: number of splits:1<br>
15/09/15 11:16:01 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1442285540714_0002<br>
15/09/15 11:16:02 INFO impl.YarnClientImpl: Submitted application application_1442285540714_0002<br>
15/09/15 11:16:02 INFO mapreduce.Job: The url to track the job: http://hadoop2.kosmos:8088/proxy/application_1442285540714_0002/<br>
15/09/15 11:16:02 INFO mapreduce.Job: Running job: job_1442285540714_0002<br>
15/09/15 11:16:13 INFO mapreduce.Job: Job job_1442285540714_0002 running in uber mode : false<br>
15/09/15 11:16:13 INFO mapreduce.Job:&nbsp; map 0% reduce 0%<br>
15/09/15 11:16:24 INFO mapreduce.Job:&nbsp; map 100% reduce 0%<br>
15/09/15 11:16:34 INFO mapreduce.Job:&nbsp; map 100% reduce 100%<br>
&#8230;..<br>
Job Finished in 34.31 seconds<br>
Estimated value of Pi is 3.14080000000000000000<br>
如果看到最後一行圓週率的回報，就代表任務圓滿結束，單節點叢集狀況OK，更代表您已成功躋身人生勝利組之列！</p>
<h2>結語</h2>
<p>偽分佈模式雖然成不了什麼大事，但親手架設一次，對了解Hadoop v2的基本架構，還是有極大助益的。希望您一起動手做後，認同這個說法。</p>							</div>
										</div>
				</div>
					</div>
		</div>
					</div></div>
		</section>
				</div>
		]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">12617</post-id>	</item>
	</channel>
</rss>
