RedHat_Hadoop_單機|偽分佈配置

来源:http://www.cnblogs.com/ericyz/archive/2017/04/21/6742874.html
-Advertisement-
Play Games

title: hadoopRedHatLab2 date: 2017 04 20 10:41:02 tags: hadoop, RedHat, wordcount 本文中所有x xxx均為未知 鬚根據你得具體版本號來決定 創建用戶 groupadd hadoop_user useradd g had ...



title: hadoopRedHatLab2
date: 2017-04-20 10:41:02
tags: hadoop, RedHat, wordcount
---

本文中所有x xxx均為未知 鬚根據你得具體版本號來決定

創建用戶

groupadd hadoop_user
useradd -g hadoop_user -d /home/hadoop hadoop
passwd hadoop 

配置YUM源

Redhat 的更新包只對註冊的用戶生效,所以我們需要自己手動更改成CentOS的更新包,CentOS幾乎和redhat是一樣的,所以無需擔心軟體包是否可安裝,安裝之後是否有問題。

1、 首先刪除redhat原有的yum ,因為redhat 原本的yum 沒有註冊為redhat用戶是用不了的。

rpm -aq|grep yum|xargs rpm -e --nodeps
rpm -aq|grep python-iniparse|xargs rpm -e --nodeps

2、下載163的yum 安裝包

wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-3.4.3-150.el7.centos.noarch.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
python-iniparse-0.4-9.el7.noarch.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-plugin-fastestmirror-1.1.31-40.el7.noarch.rpm

3、安裝下載的rpm包

rpm -ivh *.rpm

4、創建文件/etc/yum.repos.d/rhel-debuginfo.repo並寫入

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/7.3.1611/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7


#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.163.com/centos/7.3.1611/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7


[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.163.com/centos/7.3.1611/extras//$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.163.com/centos/7.3.1611/centosplus//$basearch/
gpgcheck=1
enabled=0

6、執行命令

yum clean all

7、測試:

yum update

8、 安裝 epel 源:

yum install epel-release    

添加sudoer

當用戶不在sudoers文件中……

處理這個問題很簡單,但應該先理解其原理再操作

首先要明白root的密碼一般用戶是不應改知道的,但一般用戶有時可能要用到root的一些許可權。

這裡就有了一個 /etc/sudoers文件,用來保存一些用戶,使這些用戶可以通過sudo命令來暫時獲取root的許可權。這些用戶使用sudo時輸入的密碼是當前用戶密碼,而不是root密碼。還可一在sudoers文件里限制一般用戶的許可權,這樣就有了安全保證。

現在要讓hadoop用戶獲得sudo使用權

1.切換到超級用戶root

$su root

2.查看/etc/sudoers許可權,可以看到當前許可權為440

 $ ls -all /etc/sudoers
    -r--r----- 1 root root744  6月  8 10:29/etc/sudoers

3.更改許可權為777

$chmod 777/etc/sudoers

4.編輯/etc/sudoers

 $vi /etc/sudoers

5.在root ALL=(ALL:ALL) ALL 下麵添加一行

hadoop   ALL=(ALL)ALL

保存退出。
第一個ALL是指網路中的主機,我們後面把它改成了主機名,它指明jack可以在此主機上執行後 面的命令。

第二個括弧里的ALL是指目標用戶,也就是以誰的身份去執行命令。
最後一個ALL當然就是指命令名了。
具體這裡不作說明

6.把/etc/sudoers許可權改回440

$chmod 440 /etc/sudoers

7.操作完成,切換到hadoop用戶測試一下

ssh免密碼

cd ~/.ssh/
ssh-keygen -t rsa  

這邊一路回車就好

cat ./id_rsa.pub >> ./authorized_keys

test:

ssh localhost 

測試一下是否免密碼了

jdk環境配置

Java SE Development Kit 8 Downloads

按照實驗手冊的要求我們將它解壓到 root/usr/java這個目錄下

那麼jdk用戶目錄是 /usr/java/java-xxx (這邊視具體情況自己補全吧,下麵同

設置環境變數

vim ~/.bashrc

在文件最後面加入單獨一行

export JAVA_HOME=/usr/java/java-xxx

使得環境生效

source ~/.bashrc

檢驗配置是否正確:

echo $JAVA_HOME    # 檢驗變數值
java -version
$JAVA_HOME/bin/java -version   

如果與直接執行 java -version 一樣則成功

hadoop單機配置

記得下載binary版本的

Hadoop

下載完一般沒問題,如果出現了奇怪的問題強烈建議check下md5碼

mkdir ~/hadoop_installs

將下載下來的安裝包丟到該目錄解壓

tar -zxvf hadoop-2.7.x.tar.gz

測試文件是否完整,因為是編譯好的,解壓完就能用

cd /home/hadoop_installs/hadoop-2.7.x
./bin/hadoop version

若顯示版本號 那就正常了

配置環境變數

編輯~/.bashrc

gedit ~/.bashrc

添加如下內容:

export HADOOP_HOME=/home/hadoop_installs/hadoop-2.7.x 
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

保存後不要忘了執行以下命令使配置生效

source ~/.bashrc

hadoop單機運行

現在我們可以執行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此選擇運行 grep 例子,將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 文件夾中。

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 將配置文件作為輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-
examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看運行結果

此處提示“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,該 WARN 提示可以忽略,不會影響 Hadoop 正常運行(可通過編譯 Hadoop 源碼解決,解決方法請自行搜索)。 源頭是binary是在一個32位的機器上編譯的。

若出現提示 “INFO metrics.MetricsUtil: Unable to obtain hostName java.net.UnknowHostException”,這需要執行如下命令修改 hosts 文件,為你的主機名增加IP映射:

sudo vim /etc/hosts

在最後面增加一行 “127.0.0.1 dblab”

保存文件後重新運行 hadoop 實例,若執行成功的話會輸出很多作業的相關信息,最後的輸出信息如下圖所示。作業的結果會輸出在指定的 output 文件夾中,通過命令 cat ./output/* 查看結果,符合正則的單詞 dfsadmin 出現了1次

註意,Hadoop 預設不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將 ./output 刪除。
rm -r ./output

這邊如果遇上運行後不知道java位置的情況,可以將更改配置文件hadoop-env.sh其中直接寫詳細的java位置即可 不過這不是根本解決方法 還是檢查下自己之前的配置

hadoop偽分佈配置

在設置 Hadoop 偽分散式配置前,我們還需要設置 HADOOP 環境變數,執行上面的環境配置即可

Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,偽分散式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。

gedit ./etc/hadoop/core-site.xml

改為:

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>
</configuration>

同樣的修改 hdfs-site.xml

gedit ./etc/hadoop/hdfs-site.xml

改為

<configuration>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>

配置完成後,執行 NameNode 的格式化:

./bin/hdfs namenode -format
其實這裡如果之前配置生效可以直接hdfs namenode -format了

成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若為 “Exitting with status 1” 則是出錯。

接著開啟 NaneNode 和 DataNode 守護進程:

./sbin/start-dfs.sh

若出現如下 SSH 的提示 “Are you sure you want to continue connecting”,輸入 yes 即可。

啟動完成後,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下進程: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 沒有啟動,請運行 sbin/stop-dfs.sh 關閉進程,然後再次嘗試啟動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啟動日誌排查原因。(具體請參考ref鏈接)

成功啟動後,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以線上查看 HDFS 中的文件。

運行Hadoop偽分散式實例

上面的單機模式,grep 例子讀取的是本地數據,偽分散式讀取的則是 HDFS 上的數據。要使用 HDFS,首先需要在 HDFS 中創建用戶目錄:

./bin/hdfs dfs -mkdir -p /user/hadoop

接著將 ./etc/hadoop 中的 xml 文件作為輸入文件複製到分散式文件系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分散式文件系統中的 /user/hadoop/input 中。我們使用的是 hadoop 用戶,並且已創建相應的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:
wordcount測試:

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

複製完成後,可以通過如下命令查看 HDFS 中的文件列表:

./bin/hdfs dfs -ls input

偽分散式運行 MapReduce 作業的方式跟單機模式相同,區別在於偽分散式讀取的是HDFS中的文件(可以將單機步驟中創建的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce- 
examples-*.jar grep input output 'dfs[a-z.]+'

查看運行結果的命令(查看的是位於 HDFS 中的輸出結果):

./bin/hdfs dfs -cat output/*

我們也可以將運行結果取回到本地:

rm -r ./output    # 先刪除本地的 output 文件夾(如果存在)

./bin/hdfs dfs -get output ./output     # 將 HDFS 上的 output 文件夾  拷貝到本機
cat ./output/*

Hadoop 運行程式時,輸出目錄不能存在,否則會提示錯誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次執行,需要執行如下命令刪除 output 文件夾:

./bin/hdfs dfs -rm -r output    # 刪除 output 文件夾

若要關閉Hadoop,則運行:

./sbin/stop-dfs.sh

下次啟動 hadoop 時,無需進行 NameNode 的初始化,只需要運行 ./sbin/start-dfs.sh 就可以!

若要運行wordcount 直接 (前提你建好文件夾用上述方法傳文件進去 同樣 output運行前不能存在

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output    

啟動YARN

偽分散式不啟動 YARN 也可以,一般不會影響程式執行)
YARN 是從 MapReduce 中分離出來的,負責資源管理與任務調度。YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性,YARN 的更多介紹在此不展開,有興趣的可查閱相關資料。

上述通過 ./sbin/start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務調度。

首先修改配置文件 mapred-site.xml,這邊需要先進行重命名

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

將其配置修改為:

<configuration>
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
</configuration>

接著修改配置文件 yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

然後就可以開啟yarn了:

./sbin/start-yarn.sh      $ 啟動YARN
./sbin/mr-jobhistory-daemon.sh start historyserver  # 開啟歷史伺服器,才能在Web中查看任務運行情況

開啟後通過 jps 查看,可以看到多了 NodeManager 和 ResourceManager 兩個後臺進程。

啟動 YARN 之後,運行實例的方法還是一樣的,僅僅是資源管理方式、任務調度不同。觀察日誌信息可以發現,不啟用 YARN 時,是 “mapred.LocalJobRunner” 在跑任務,啟用 YARN 之後,是 “mapred.YARNRunner” 在跑任務。啟動 YARN 有個好處是可以通過 Web 界面查看任務的運行情況:http://localhost:8088/cluster

但 YARN 主要是為集群提供更好的資源管理與任務調度,然而這在單機上體現不出價值,反而會使程式跑得稍慢些。因此在單機上是否開啟 YARN 就看實際情況了。

不啟動 YARN 需重命名 mapred-site.xml
如果不想啟動 YARN,務必把配置文件 mapred-site.xml 重命名,改成mapred-site.xml.template,需要用時改回來就行。否則在該配置文件存在,而未開啟 YARN 的情況下,運行程式會提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的錯誤,這也是為何該配置文件初始文件名為 mapred-site.xml.template。

同樣的,關閉 YARN 的腳本如下:

./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver

Referene:

Hadoop安裝教程_單機/偽分散式配置_CentOS6.4/Hadoop2.6.0
Yarn簡單介紹及記憶體配置
Hadoop: Setting up a Single Node Cluster.
How to Setup Hadoop 2.8 on CentOS, Ubuntu and LinuxMint


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://dev.mysql.com/downloads/mysql/ ...
  • 索引 1.主鍵索引 作用:唯一約束和提高查詢速度 2.普通索引 作用:提高查詢速度 3.唯一索引 作用:唯一約束和提高查詢速度 4.主鍵和唯一索引的區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。主鍵創建後一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。唯一性索引列允許空值,而主 ...
  • 本文出處: http://www.cnblogs.com/wy123/p/6743515.html T-SQL編程與應用程式一樣,都有異常處理機制,比如異常的捕獲與異常的拋出,本文簡單介紹異常捕獲與異常拋出在T-SQL編程中的實際使用 。 異常處理簡單說明 異常捕獲在應用程式編程中非常常見,提供了處 ...
  • 概要 計數 原意:查詢有多少記錄,就隨便選了個欄位 本來應該是14條記錄,但是只查到了13條,原因是當選定欄位進行聚合計算的時候該欄位受到一些規則的限制, 具體發生了什麼,下麵具體舉例說明 count函數調用方法是: count([distinct|all] columnnameOrNumber) ...
  • DQL中常用的流程函數if_case 流程函數在一個SQL語句中實現條件選擇 模擬對職員薪水進行分類: 1、IF(expr1,expr2,expr3) 判斷第一個參數expr1為TRUE (expr1 <> 0 and expr1 <> NULL): 成功,返回第二個參數expr2 失敗,返回第三個 ...
  • 一 環境腳本簡單配置 #!/bin/bashmv /etc/yum.repos.d/* /tmpmv iso.repo /etc/yum.repos.d/tar zxvf a.tar.gzmv 7Server /root/sed -i '3 s/^#//' /etc/yum.repos.d/iso. ...
  • Oracle內連接、左外連接、右外連接、全外連接以及(+)號用法 1、數據準備階段 創建資料庫表,並插入數據,用於學習和測試. 先進行簡單的單表查詢. 2、內連接(join/inner join) 左表和右表都要做限制,僅顯示滿足on後麵條件的數據。 3、左外連接(left outer join/ ...
  • 想把數據表某一欄位值,全串連起來,你可以使用一個方法。COALESCE: DECLARE @list NVARCHAR(MAX) SELECT @list = COALESCE(@list + ',','') + [Transportation_CN] FROM [dbo].[Transportat ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...