Hadoop 2.4 完全分佈式環境安裝與配置

依賴項


Java


1. http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下載tar.gz格式的,32位和64位機器對應下載,這裏下的是64位的

  wget http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.tar.gz

2. 解壓到/usr/local

  tar -jxvf jdk-7u51-linux-x64.tar.gz -C /usr/local

3. 配置符號鏈接:cd /usr/local; ln -snf jdk1.7.0_45/ jdk

4. 配置環境變量到~/.bashrc

export JAVA_HOME="/usr/local/jdk"
export PATH="$JAVA_HOME/bin:$PATH"

5. 命令行下使用javajavax命令判斷是否安裝成功。

6. 在其他機器上


Hosts

所有的節點都修改/etc/hosts,使彼此之間都能把主機名解析爲ip



SSH 無密碼登陸

首先要配置本機的SSH服務器,運行 ps -e | grep ssh,查看是否有sshd進程,如果沒有,說明server沒啓動,通過 /etc/init.d/ssh -start 啓動server進程,如果提示ssh不存在 那麼就是沒安裝serverUbuntu下通過 sudo apt-get install openssh-server命令安裝即可。

1)生成當前用戶的SSH公鑰。

$ ssh-keygen -t rsa -P ''

它在/home/[你當前登錄的用戶名下生成.ssh目錄(root用戶即是在/root目錄下),.ssh下有id_rsaid_rsa.pubid_rsa.pub即是本地SSH生成的公鑰文件。客戶端機器將id_rsa.pub文件添加到自己的~/.ssh/authorized_keys文件中即可免密碼登錄到本機。

(2)將~/.ssh/id_rsa.pub添加到目標機器的~/.ssh/authorized_keys文件中

  • 如果是本機的操作,則使用

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

將要登錄的機器的公鑰添加到本地的認證密鑰庫中。注意這裏必須要用>>操作符進行追加操作。

使用

ssh localhost

命令即可免密碼登錄到本地。

  • 如果是將自己的公鑰發送到別的機器上。

可以使用

scp ~/.ssh/id_rsa.pub [email protected]:.ssh/id_rsa.pub

這條scp命令進行文件上傳操作。


安裝Hadoop


下載Hadoop



最新版本hadoop-2.4.0安裝包爲 hadoop-2.4.0.tar.gz

下載官網地址 :http://www.apache.org/dyn/closer.cgi/hadoop/common/

下載到 /opt/hadoop/source 目錄下

wget http://ftp.riken.jp/net/apache/hadoop/common/hadoop-2.4.0/hadoop-2.4.0.tar.gz

 

解壓目錄

tar zxvf hadoop-2.4.0.tar.gz

最終是這樣子:




環境配置項


配置環境變量: 

vim /etc/profile

添加

export HADOOP_DEV_HOME=/opt/hadoop/source

export PATH=$PATH:$HADOOP_DEV_HOME/bin

export PATH=$PATH:$HADOOP_DEV_HOME/sbin

export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}

export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}

export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}

export YARN_HOME=${HADOOP_DEV_HOME}

export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop

export HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop

export YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop

 

文件配置

配置之前,需要在Cluster文件系統創建以下文件夾,用於存放命名空間以及數據信息。

~/dfs/name

~/dfs/data

~/temp

這裏要涉及到的配置文件有7個:

~/hadoop-2.4.0/etc/hadoop/hadoop-env.sh

~/hadoop-2.4.0/etc/hadoop/yarn-env.sh

~/hadoop-2.4.0/etc/hadoop/slaves

~/hadoop-2.4.0/etc/hadoop/core-site.xml

~/hadoop-2.4.0/etc/hadoop/hdfs-site.xml

~/hadoop-2.4.0/etc/hadoop/mapred-site.xml

~/hadoop-2.4.0/etc/hadoop/yarn-site.xml

以上個別文件默認不存在的,可以複製相應的template文件獲得。


~/ect/hadoop/hadoop-env.sh 與 yarn-env.sh


原文件中設置Java環境:export JAVA_HOME=${JAVA_HOME},如果你環境變量中未配置JAVA_HOME,那麼這裏JAVA_HOME設置指向你的JAVA配置路徑。

譬如:export JAVA_HOME="/usr/local/jdk"


~/etc/hadoop/slave


slaves (這個文件裏面保存所有slave節點)

寫入以下內容:

Slave1

Slave2

~/etc/hadoop/core-site.xml

configuration節點裏面添加屬性

<property>
  <name>hadoop.tmp.dir</name>
  <value>file:/opt/hadoop/hdfs/tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://Master:9000</value>
</property>

添加httpfs的選項

<property>
 <name>hadoop.proxyuser.root.hosts</name>
 <value>*</value>
</property>
<property>
 <name>hadoop.proxyuser.root.groups</name>
 <value>*</value>
</property>


~/etc/hadoop/hdfs-site.xml

<property> 
  <name>dfs.replication</name> 
  <value>3</value>
</property> 
<property> 
  <name>dfs.namenode.name.dir</name> 
  <value>file:/opt/hadoop/hdfs/name</value> 
  <final>true</final>
</property> 
<property> 
  <name>dfs.dataname.data.dir</name> 
  <value>file:/opt/hadoop/hdfs/data</value> 
  <final>true</final>
</property> 
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>Master:9001</value>
</property>
<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>


~/etc/hadoop/yarn-site.xml

<property>
  <name>yarn.resourcemanager.address</name>
  <value>Master:18040</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>Master:18030</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>Master:18088</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>Master:18025</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>Master:18141</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce.shuffle</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>


Hadoop 測試

HDFS

格式化NameNode

執行命令:hadoop namenode -format,可以格式化NameNode

l 可能錯誤:出現未知的主機名問題。

java.net.UnknownHostException: localhost.localdomain: localhost.localdomain  

        at java.net.InetAddress.getLocalHost(InetAddress.java:1353)  

        at org.apache.hadoop.metrics.MetricsUtil.getHostName(MetricsUtil.java:91)  

        at org.apache.hadoop.metrics.MetricsUtil.createRecord(MetricsUtil.java:80)  

        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.initialize(FSDirectory.java:73)  

        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.<init>(FSDirectory.java:68)  

        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:370)  

        at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:853)  

        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:947)  

        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:964)  

/************************************************************  

SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException: localhost.localdomain: localhost.localdomain  

************************************************************/  

使用hostname命令,可以發現當前的主機名爲hadoop_master(Ubuntu系統下在/etc/hostnameCentos系統在 /etc/sysconfig/network文件中設置),而hosts文件中信息如下:

127.0.0.1 localhost

127.0.1.1 ubuntu

192.168.198.133 Master

192.168.198.134 Slave1

即無法解析hadoop_master的信息,將hosts文件信息改爲如下:

127.0.0.1 hadoop_master

127.0.1.1 ubuntu

192.168.198.133 Master

192.168.198.134 Slave1



Hadoop集羣

啓動集羣

~/sbin/start-all.sh 啓動Hadoop集羣,最好使用~/sbin/start-dfs.sh~/sbin/start-yarn.sh來代替。

若正常啓動:

NameNode上使用jps查詢會顯示如下:

 

DataNode上使用jps查詢會顯示如下:

 

.1 64位平臺不兼容錯誤

Starting namenodes on [Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /opt/hadoop/source/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.

/etc/profile 或者 ~/.bash_profile中添加:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_DEV_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_DEV_HOME/lib"

 

Command Lines

Hadoop

* start-all.sh 啓動所有的Hadoop守護。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 啓動Map/Reduce守護。包括JobtrackerTasktrack

* stop-mapred.sh 停止Map/Reduce守護

* start-dfs.sh 啓動Hadoop DFS守護NamenodeDatanode

* stop-dfs.sh 停止DFS守護

HDFS

1. 查看文件列表

查看hdfs/user/admin/hdfs目錄下的文件。

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs -ls /user/admin/hdfs

查看hdfs/user/admin/hdfs目錄下的所有文件(包括子目錄下的文件)。

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs -lsr /user/admin/hdfs

2. 創建文件目錄

查看hdfs/user/admin/hdfs目錄下再新建一個叫做newDir的新目錄。

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs -mkdir /user/admin/hdfs/newDir

3. 刪除文件

刪除hdfs/user/admin/hdfs目錄下一個名叫needDelete的文件

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs -rm /user/admin/hdfs/needDelete

刪除hdfs/user/admin/hdfs目錄以及該目錄下的所有文件

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs -rmr /user/admin/hdfs

4. 上傳文件

上傳一個本機/home/admin/newFile的文件到hdfs/user/admin/hdfs目錄下

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fsput /home/admin/newFile /user/admin/hdfs/

5. 下載文件

下載hdfs/user/admin/hdfs目錄下的newFile文件到本機/home/admin/newFile

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fs get /user/admin/hdfs/newFile /home/admin/newFile

6. 查看文件內容

查看hdfs/user/admin/hdfs目錄下的newFile文件

a. 進入HADOOP_HOME目錄。

b. 執行sh bin/hadoop fscat /home/admin/newFile

 

配置文件詳解

Core

hadoop-env.sh

記錄腳本要用的環境變量,以運行hadoop

文件位於~/hadoop/etc/hadoop/core-site.xml目錄下。

設置JDK的位置

export JAVA_HOME=${JAVA_HOME}

如果你的環境變量中沒有設置JAVA_HOME,這裏即可設置爲:

exportJAVA_HOME=/home/java/jdk/jdk1.7.0_51  

另外,鑑於Hadoop默認的是32位系統,還需要加上64位支持:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_DEV_HOME}/lib/native  

export HADOOP_OPTS="-Djava.library.path=$HADOOP_DEV_HOME/lib" 

 

core-site.xml

該文件是 hadoop core的配置項,例如hdfsmapreduce常用的i/o設置等,位於~/hadoop/etc/hadoop/core-site.xml目錄下。

 屬性

值 

說明 

fs.default.name

hdfs://master:9000

定義master的URI和端口

fs.checkpoint.dir

${hadoop.tmp.dir}(默認)
/dfs/namesecondary

SNN的元數據以,號隔開,hdfs會把元數據冗餘複製到這些目錄,一般這些目錄是不同的塊設備,不存在的目錄會被忽略掉

fs.checkpoint.period

1800

定義ND的備份間隔時間,秒爲單位,只對SNN效,默認一小時

fs.checkpoint.size

33554432

以日誌大小間隔做備份間隔,只對SNN生效,默認64M

fs.checkpoint.edits.dir

${fs.checkpoint.dir}(默認)

SNN的事務文件存儲的目錄,以,號隔開,hdfs會把事務文件冗餘複製到這些目錄

fs.trash.interval

10800

HDFS垃圾箱設置,可以恢復誤刪除,分鐘數,0爲禁用,添加該項無需重啓hadoop

hadoop.tmp.dir

/tmp/hadoop

臨時文件夾,指定後需將使用到的所有子級文件夾都要手動創建出來,否則無法正常啓動服務。

hadoop.http.filter.initializers

org.apache.hadoop.security.
AuthenticationFilterInitializer
(排版調整,實際配置不要回車)

需要jobtracker,tasktracker
NN,DN等http訪問端口用戶驗證使用,需配置所有節點

hadoop.http.authentication.type

simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#

驗證方式,默認爲簡單,也可自己定義class,需配置所有節點

hadoop.http.authentication.token.validity

36000

驗證令牌的有效時間,需配置所有節點

hadoop.http.authentication.signature.secret

默認可不寫參數

默認不寫在hadoop啓動時自動生成私密簽名,需配置所有節點

hadoop.http.authentication.cookie.domain

domian.tld

http驗證所使用的cookie的域名,IP地址訪問則該項無效,必須給所有節點都配置域名纔可以。

hadoop.http.authentication. simple.anonymous.allowed

true | false

簡單驗證專用,默認允許匿名訪問,true

hadoop.http.authentication.kerberos.principal

HTTP/localhost@$LOCALHOST

Kerberos驗證專用,參加認證的實體機必須使用HTTP作爲K的Name

hadoop.http.authentication.kerberos.keytab

/home/xianglei/hadoop.keytab

Kerberos驗證專用,密鑰文件存放位置

hadoop.security.authorization

true|false

Hadoop服務層級驗證安全驗證,需配合hadoop-policy.xml使用,配置好以後用dfsadmin,mradmin -refreshServiceAcl刷新生效

hadoop.security.authentication

simple | kerberos

hadoop本身的權限驗證,非http訪問,simple或者kerberos

hadoop.logfile.size

1000000000

設置日誌文件大小,超過則滾動新日誌

hadoop.logfile.count

20

最大日誌數

io.bytes.per.checksum

1024

每校驗碼所校驗的字節數,不要大於io.file.buffer.size

io.skip.checksum.errors

true | false

處理序列化文件時跳過校驗碼錯誤,不拋異常。默認false

io.serializations

org.apache.hadoop.io.serializer.WritableSerialization

序列化的編解碼器

io.seqfile.compress.blocksize

1024000

塊壓縮的序列化文件的最小塊大小,字節

io.compression.codecs

org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,

org.apache.hadoop.io.compress.SnappyCodec
(排版調整,實際配置不要回車)

Hadoop所使用的編解碼器,gzip、bzip2爲自帶,lzo需安裝hadoopgpl或者kevinweil,逗號分隔。
snappy需要單獨安裝並修改hadoop-env.sh配置LD_LIBRARY_PATH=snappy類庫位置

io.compression.codec.lzo.class

com.hadoop.compression.lzo.LzoCodec

LZO所使用的壓縮編碼器 

io.file.buffer.size

131072

用作序列化文件處理時讀寫buffer的大小

webinterface.private.actions

true | false

設爲true,則JT和NN的tracker網頁會出現殺任務刪文件等操作連接,默認是false

topology.script.file.name

/hadoop/bin/RackAware.py

機架感知腳本位置 

topology.script.number.args

1000

機架感知腳本管理的主機數,

 

 

 

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://wsysisibeibei.blog.163.com/blog/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

    <property>

        <name>fs.default.name</name>

<!-- fs.default.name -這是一個描述集羣中NameNode結點的URI(包括協議、主機名稱、端口號),集羣裏面的每一臺機器都需要知道NameNode的地址。DataNode結點會先在NameNode上註冊,這樣它們的數據纔可以被使用。獨立的客戶端程序通過這個URIDataNode交互,以取得文件的塊列表。-->

        <value>hdfs://localhost:9100</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

<!--

hadoop.tmp.dir hadoop文件系統依賴的基礎配置,很多路徑都依賴它。如果hdfs-site.xml中不配 置namenodedatanode的存放位置,默認就放在這個路徑中Hadoop的默認臨時路徑,這個最好配置,然後在新增節點或者其他情況下莫名其妙的DataNode啓動不了,就刪除此文件中的tmp目錄即可。

不過如果刪除了NameNode機器的此目錄,那麼就需要重新執行NameNode格式化的命令了。

-->

        <value>/data/hdfs/tmp</value>

        <description>A base for other temporary directories.</description>

    </property>

</configuration>

這裏配置的是HDFS的地址和端口號。

Node

HDFS

hdfs-site.xml

hadoop守護進程的配置項,包括namenode、輔助namenodedatanode等。

該文件位於~/hadoop/etc/hadoop/目錄下。

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://wsysisibeibei.blog.163.com/blog/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

    <property>

        <name>dfs.replication</name>

<!--

dfs.replication -它決定着 系統裏面的文件塊的數據備份個數。

對於一個實際的應用,它應該被設爲3(這個 數字並沒有上限,但更多的備份可能並沒有作用,而且會佔用更多的空間)。

少於三個的備份,可能會影響到數據的 可靠性(系統故障時,也許會造成數據丟失)

-->

        <value>3</value>

</property>

<property>

<name>dfs.name.dir</name>

<!--

dfs.name.dir - 這是NameNode結點存儲hadoop文件系統信息的本地系統路徑。

這個值只對NameNode有效,DataNode並不需要使用到它。

上面對於/temp類型的警告,同樣也適用於這裏。在實際應用中,它最好被覆蓋掉。

-->

<value>/home/hdfs/name</value>

</property>

<property>

<name>dfs.data.dir</name>

<!-- dfs.data.dir - 

這是DataNode結點被指定要存儲數據的本地文件系統路徑。

DataNode結點上 的這個路徑沒有必要完全相同,因爲每臺機器的環境很可能是不一樣的。

但如果每臺機器上的這 個路徑都是統一配置的話,會使工作變得簡單一些。

默認的情況下,它的值hadoop.tmp.dir, 這 個路徑只能用於測試的目的,因爲,它很可能會丟失掉一些數據。所以,這個值最好還是被覆 蓋。

-->

<value>/home/hdfs/data</value>

</property>

<!--

解決:org.apache.hadoop.security.AccessControlException:Permission denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x。因爲Eclipse使用hadoop插件提交作業時,會默認以 DrWho身份去將作業寫入hdfs文件系統中,對應的也就是 HDFS 上的/user/hadoop , 由於 DrWho用戶對hadoop目錄並沒有寫入權限,所以導致異常的發生。解決方法爲:放開 hadoop 目錄的權限, 命令如下 :$ hadoop fs -chmod 777 /user/hadoop

-->

<property>

<name>dfs.permissions</name>

<value>false</value>

<description>

If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged. Switching from one parameter value to the other does not change the mode, owner or group of files or directories

</description>

</property>

</configuration>

HadoopHDFS的默認備份方式爲3,這裏將其改爲1

Map/Reduce 

mapred-site.xml

mapreduce守護進程的配置項,包括jobtrackertasktracker

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://wsysisibeibei.blog.163.com/blog/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

    <property>

        <name>mapred.job.tracker</name>

        <value>localhost:9101</value>

    </property>

</configuration>


發佈了56 篇原創文章 · 獲贊 13 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章