淺析怎樣使用yum安裝CDH Hadoop集羣

使用yum安裝CDH Hadoop集羣 2013.04.06

Update:

  • 2014.07.21 添加 lzo 的安裝
  • 2014.05.20 修改cdh4爲cdh5進行安裝。
  • 2014.10.22 添加安裝 cdh5.2 注意事項。
    • 1、cdh5.2 發佈了,其中 YARN 的一些配置參數做了修改,需要特別注意。
    • 2、Hive 的元數據如果使用 PostgreSql9.X,需要設置 standard_conforming_strings 爲 off

環境

  • CentOS 6.4 x86_64
  • CDH 5.2.0
  • jdk1.6.0_31

集羣規劃爲3個節點,每個節點的ip、主機名和部署的組件分配如下:

 192.168.56.121        cdh1     NameNode、Hive、ResourceManager、HBase
    192.168.56.122        cdh2     DataNode、SSNameNode、NodeManager、HBase
    192.168.56.123        cdh3     DataNode、HBase、NodeManager 

1. 準備工作

安裝 Hadoop 集羣前先做好下面的準備工作,在修改配置文件的時候,建議在一個節點上修改,然後同步到其他節點,例如:對於 hdfs 和 yarn ,在 NameNode 節點上修改然後再同步,對於 HBase,選擇一個節點再同步。因爲要同步配置文件和在多個節點啓動服務,建議配置 ssh 無密碼登陸。

1.1 配置hosts

CDH 要求使用 IPv4,IPv6 不支持成都電腦維修

禁用IPv6方法:

$ vim /etc/sysctl.conf #disable ipv6 net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1 

使其生效:

$ sysctl -p 

最後確認是否已禁用:

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1 

1、設置hostname,以cdh1爲例

$ hostname cdh1 

2、確保/etc/hosts中包含ip和FQDN,如果你在使用DNS,保存這些信息到/etc/hosts不是必要的,卻是最佳實踐。

3、確保/etc/sysconfig/network中包含hostname=cdh1

4、檢查網絡,運行下面命令檢查是否配置了hostname以及其對應的ip是否正確。

運行uname -a查看hostname是否匹配hostname命令運行的結果:

$ uname -a
Linux cdh1 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux $ hostname
cdh1 

運行/sbin/ifconfig查看ip:

$ ifconfig
eth1      Link encap:Ethernet  HWaddr 08:00:27:75:E0:95  
          inet addr:192.168.56.121  Bcast:192.168.56.255  Mask:255.255.255.0
...... 

先安裝bind-utils,才能運行host命令:

$ yum install bind-utils -y 

運行下面命令查看hostname和ip是否匹配:

$ host -v -t A `hostname` Trying "cdh1" ... ;; ANSWER SECTION:
cdh1. 60 IN A   192.168.56.121 

5、hadoop的所有配置文件中配置節點名稱時,請使用hostname和不是ip

1.2 關閉防火牆

$ setenforce 0 $ vim /etc/sysconfig/selinux #修改SELINUX=disabled 

清空iptables

$ iptables -F 

1.3 時鐘同步

搭建時鐘同步服務器

這裏選擇 cdh1 節點爲時鐘同步服務器,其他節點爲客戶端同步時間到該節點。、

安裝ntp:

$ yum install ntp 

修改 cdh1 上的配置文件 /etc/ntp.conf :

restrict default ignore   //默認不允許修改或者查詢ntp,並且不接收特殊封包
restrict 127.0.0.1        //給於本機所有權限
restrict 192.168.56.0 mask 255.255.255.0 notrap nomodify  //給於局域網機的機器有同步時間的權限
server  192.168.56.121     # local clock
driftfile /var/lib/ntp/drift
fudge   127.127.1.0 stratum 10 

啓動 ntp:

$ service ntpd start 

設置開機啓動:

$ chkconfig ntpd on 

ntpq用來監視ntpd操作,使用標準的NTP模式6控制消息模式,並與NTP服務器通信。

ntpq -p 查詢網絡中的NTP服務器,同時顯示客戶端和每個服務器的關係。

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(1)        .LOCL.           5 l    6   64    1    0.000    0.000   0.000 
  • "* ":響應的NTP服務器和最精確的服務器。
  • "+":響應這個查詢請求的NTP服務器。
  • "blank(空格)":沒有響應的NTP服務器。
  • "remote" :響應這個請求的NTP服務器的名稱。
  • "refid ":NTP服務器使用的更高一級服務器的名稱。
  • "st":正在響應請求的NTP服務器的級別。
  • "when":上一次成功請求之後到現在的秒數。
  • "poll":當前的請求的時鐘間隔的秒數。
  • "offset":主機通過NTP時鐘同步與所同步時間源的時間偏移量,單位爲毫秒(ms)。

客戶端的配置

在cdh2和cdh3節點上執行下面操作:

$ ntpdate cdh1 

Ntpd啓動的時候通常需要一段時間大概5分鐘進行時間同步,所以在ntpd剛剛啓動的時候還不能正常提供時鐘服務,報錯"no server suitable for synchronization found"。啓動時候需要等待5分鐘。

如果想定時進行時間校準,可以使用crond服務來定時執行。

00 1 * * * root /usr/sbin/ntpdate 192.168.56.121 >> /root/ntpdate.log 2>&1 

這樣,每天 1:00 Linux 系統就會自動的進行網絡時間校準。

1.4 安裝jdk

以下是手動安裝jdk,你也可以通過yum方式安裝,見下文。

檢查jdk版本

$ java -version 

如果其版本低於v1.6 update 31,則將其卸載

$ rpm -qa | grep java $ yum remove {java-1.*} 

驗證默認的jdk是否被卸載

$ which java 

安裝jdk,使用yum安裝或者手動下載安裝jdk-6u31-linux-x64.bin,下載地址:這裏

$ yum install jdk -y 

創建符號連接

$ ln -s XXXXX/jdk1.6.0_31 /usr/java/latest $ ln -s /usr/java/latest/bin/java /usr/bin/java 

設置環境變量:

$ echo "export JAVA_HOME=/usr/java/latest" >>/root/.bashrc $ echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /root/.bashrc $ source /root/.bashrc 

驗證版本

$ java -version
    java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode) 

檢查環境變量中是否有設置JAVA_HOME

$ env | grep JAVA_HOME 

如果env中沒有JAVA_HOME變量,則修改/etc/sudoers文件

$ vi /etc/sudoers
    Defaults env_keep+=JAVA_HOME 

1.5 設置本地yum源

你可以從這裏下載 cdh4 的倉庫壓縮包,或者從這裏 下載 cdh5 的倉庫壓縮包。

因爲我是使用的centos操作系統,故這裏使用的cdh5的centos6倉庫,將其下載之後解壓配置cdh的yum源:

[hadoop]
name=hadoop
baseurl=ftp://cdh1/cdh/5/
enabled=1
gpgcheck=0 

這裏使用的是 ftp 搭建 yum 源,需要安裝 ftp 服務,並將解壓後的目錄拷貝到 ftp 存放文件的目錄下。

操作系統的yum源,建議你通過下載 centos 的 dvd 然後配置一個本地的 yum 源。

其實,在配置了CDH 的 yum 源之後,可以通過 yum 來安裝 jdk,然後,設置 JAVA HOME:

$ yum install jdk -y 

2. 安裝和配置HDFS

說明:

  • 根據文章開頭的節點規劃,cdh1 爲NameNode節點和SecondaryNameNode
  • 根據文章開頭的節點規劃,cdh2 和 cdh3 爲DataNode節點

在 NameNode 節點安裝 hadoop-hdfs-namenode

$ yum install hadoop hadoop-hdfs hadoop-client hadoop-doc hadoop-debuginfo hadoop-hdfs-namenode 

在 NameNode 節點中選擇一個節點作爲 secondarynamenode ,並安裝 hadoop-hdfs-secondarynamenode

$ yum install hadoop-hdfs-secondarynamenode -y 

在DataNode節點安裝 hadoop-hdfs-datanode

$ yum install hadoop hadoop-hdfs hadoop-client hadoop-doc hadoop-debuginfo hadoop-hdfs-datanode -y 

配置 NameNode HA 請參考Introduction to HDFS High Availability

2.1 修改hadoop配置文件

更多的配置信息說明,請參考 Apache Cluster Setup

  1. 在/etc/hadoop/conf/core-site.xml中設置fs.defaultFS屬性值,該屬性指定NameNode是哪一個節點以及使用的文件系統是file還是hdfs,格式:hdfs://:/,默認的文件系統是file:///
  2. 在/etc/hadoop/conf/hdfs-site.xml中設置dfs.permissions.superusergroup屬性,該屬性指定hdfs的超級用戶,默認爲hdfs,你可以修改爲hadoop

配置如下:

/etc/hadoop/conf/core-site.xml:

 fs.defaultFS hdfs://cdh1:8020  

/etc/hadoop/conf/hdfs-site.xml:

 dfs.permissions.superusergroup hadoop  

2.2 指定本地文件目錄

在hadoop中默認的文件路徑以及權限要求如下:

目錄                                  所有者       權限      默認路徑
hadoop.tmp.dir                      hdfs:hdfs   drwx------  /var/hadoop
dfs.namenode.name.dir               hdfs:hdfs   drwx------  file://${hadoop.tmp.dir}/dfs/name
dfs.datanode.data.dir               hdfs:hdfs   drwx------  file://${hadoop.tmp.dir}/dfs/data
dfs.namenode.checkpoint.dir         hdfs:hdfs   drwx------  file://${hadoop.tmp.dir}/dfs/namesecondary 

說明你可以在hdfs-site.xml中只配置 `hadoop.tmp.dir`,也可以分別配置上面的路徑。

這裏使用分別配置的方式,hdfs-site.xml中配置如下:

 dfs.namenode.name.dir file:///data/dfs/nn   dfs.datanode.data.dir file:///data/dfs/dn  

NameNode上手動創建 dfs.name.dir 或 dfs.namenode.name.dir 的本地目錄:

$ mkdir -p /data/dfs/nn 

DataNode上手動創建 dfs.data.dir 或 dfs.datanode.data.dir 的本地目錄:

$ mkdir -p /data/dfs/dn 

修改上面目錄所有者:

$ chown -R hdfs:hdfs /data/dfs/nn /data/dfs/dn 

hadoop的進程會自動設置 dfs.data.dir 或 dfs.datanode.data.dir,但是 dfs.name.dir 或 dfs.namenode.name.dir 的權限默認爲755,需要手動設置爲700。

故,修改上面目錄權限:

$ chmod 700 /data/dfs/nn 

或者:

$ chmod go-rx /data/dfs/nn 

說明:

DataNode的本地目錄可以設置多個,你可以設置 dfs.datanode.failed.volumes.tolerated 參數的值,表示能夠容忍不超過該個數的目錄失敗。

2.3 配置 SecondaryNameNode

在 /etc/hadoop/conf/hdfs-site.xml 中可以配置以下參數:

dfs.namenode.checkpoint.check.period
dfs.namenode.checkpoint.txns
dfs.namenode.checkpoint.dir
dfs.namenode.checkpoint.edits.dir
dfs.namenode.num.checkpoints.retained 

如果想配置SecondaryNameNode節點,請從NameNode中單獨選擇一臺機器,然後做以下設置:

  • 將運行SecondaryNameNode的機器名稱加入到masters
  • 在 /etc/hadoop/conf/hdfs-site.xml 中加入如下配置:
 dfs.secondary.http.address cdh1:50090  

設置多個secondarynamenode,請參考multi-host-secondarynamenode-configuration.

2.4 開啓回收站功能

回收站功能默認是關閉的,建議打開。

在 /etc/hadoop/conf/core-site.xml 中添加如下兩個參數:

  • fs.trash.interval,該參數值爲時間間隔,單位爲分鐘,默認爲0,表示回收站功能關閉。該值表示回收站中文件保存多長時間,如果服務端配置了該參數,則忽略客戶端的配置;如果服務端關閉了該參數,則檢查客戶端是否有配置該參數;
  • fs.trash.checkpoint.interval,該參數值爲時間間隔,單位爲分鐘,默認爲0。該值表示檢查回收站時間間隔,該值要小於fs.trash.interval,該值在服務端配置。如果該值設置爲0,則使用 fs.trash.interval 的值。

2.5 (可選)配置DataNode存儲的負載均衡

在 /etc/hadoop/conf/hdfs-site.xml 中配置以下三個參數(詳細說明,請參考 Optionally configure DataNode storage balancing):

  • dfs.datanode.fsdataset. volume.choosing.policy
  • dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
  • dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction

2.6 開啓WebHDFS

這裏只在一個NameNode節點( CDH1 )上安裝:

$ yum install hadoop-httpfs -y 

然後配置代理用戶,修改 /etc/hadoop/conf/core-site.xml,添加如下代碼:

 hadoop.proxyuser.httpfs.hosts *   hadoop.proxyuser.httpfs.groups *  

然後重啓 Hadoop 使配置生效。

接下來,啓動 HttpFS 服務:

$ service hadoop-httpfs start 

By default, HttpFS server runs on port 14000 and its URL is http://:14000/webhdfs/v1.

簡單測試,使用 curl 運行下面命令,並查看執行結果:

$ curl "http://localhost:14000/webhdfs/v1?op=gethomedirectory&user.name=hdfs"
{"Path":"\/user\/hdfs"} 

更多的 API,請參考 WebHDFS REST API

2.7 配置LZO

下載repo文件到 /etc/yum.repos.d/:

然後,安裝lzo:

$ yum install hadoop-lzo* impala-lzo  -y 

最後,在 /etc/hadoop/conf/core-site.xml 中添加如下配置:

 io.compression.codecs org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec   io.compression.codec.lzo.class com.hadoop.compression.lzo.LzoCodec  

更多關於LZO信息,請參考:Using LZO Compression

2.8 (可選)配置Snappy

cdh 的 rpm 源中默認已經包含了 snappy ,直接安裝即可。

在每個節點安裝Snappy:

$ yum install snappy snappy-devel  -y 

然後,在 core-site.xml 中修改io.compression.codecs的值,添加 org.apache.hadoop.io.compress.SnappyCodec :

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

使 snappy 對 hadoop 可用:

$ ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/ 

2.9 啓動HDFS

將配置文件同步到每一個節點:

$ scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/ $ scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/ 

格式化NameNode:

$ sudo -u hdfs hadoop namenode -format 

在每個節點運行下面命令啓動hdfs:

$ for x in `ls /etc/init.d/|grep  hadoop-hdfs` ; do service $x start ; done 

在 hdfs 運行之後,創建 /tmp 臨時目錄,並設置權限爲 1777:

$ sudo -u hdfs hadoop fs -mkdir /tmp $ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp 

2.10 訪問web

通過 http://cdh1:50070/ 可以訪問 NameNode 頁面。

3. 安裝和配置YARN

節點規劃

  • 根據文章開頭的節點規劃,cdh1 爲resourcemanager節點
  • 根據文章開頭的節點規劃,cdh2 和 cdh3 爲nodemanager節點
  • 爲了簡單,historyserver也裝在 cdh1 節點上

安裝服務

在 resourcemanager 節點安裝:

$ yum install hadoop-yarn hadoop-yarn-resourcemanager -y 

在 nodemanager 節點安裝:

$ yum install hadoop-yarn hadoop-yarn-nodemanager hadoop-mapreduce -y 

安裝 historyserver:

$ yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver -y 

修改配置參數

要想使用YARN,需要在 /etc/hadoop/conf/mapred-site.xml 中做如下配置:

 mapreduce.framework.name yarn  

配置resourcemanager的節點名稱以及一些服務的端口號,修改/etc/hadoop/conf/yarn-site.xml:

 yarn.resourcemanager.resource-tracker.address cdh1:8031   yarn.resourcemanager.address cdh1:8032   yarn.resourcemanager.scheduler.address cdh1:8030   yarn.resourcemanager.admin.address cdh1:8033   yarn.resourcemanager.webapp.address cdh1:8088  

配置YARN進程:

  • yarn.nodemanager.aux-services,在CDH4中該值設爲 mapreduce.shuffle,在CDH5中該值設爲 mapreduce_shuffle
  • yarn.nodemanager.aux-services.mapreduce.shuffle.class,該值設爲 org.apache.hadoop.mapred.ShuffleHandler
  • yarn.resourcemanager.hostname,該值設爲 cdh1
  • yarn.log.aggregation.enable,該值設爲 true
  • yarn.application.classpath,該值設爲:
$HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/*, $HADOOP_COMMON_HOME/lib/*, $HADOOP_HDFS_HOME/*, $HADOOP_HDFS_HOME/lib/*, $HADOOP_MAPRED_HOME/*, $HADOOP_MAPRED_HOME/lib/*, $HADOOP_YARN_HOME/*, $HADOOP_YARN_HOME/lib/* 

即,在 /etc/hadoop/conf/yarn-site.xml 中添加如下配置:

 yarn.nodemanager.aux-services mapreduce_shuffle   yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler   yarn.log-aggregation-enable true   yarn.application.classpath  $HADOOP_CONF_DIR,
    $HADOOP_COMMON_HOME/*,
    $HADOOP_COMMON_HOME/lib/*,
    $HADOOP_HDFS_HOME/*,
    $HADOOP_HDFS_HOME/lib/*,
    $HADOOP_MAPRED_HOME/*,
    $HADOOP_MAPRED_HOME/lib/*,
    $HADOOP_YARN_HOME/*,
    $HADOOP_YARN_HOME/lib/*    yarn.log.aggregation.enable true  

注意:

a. yarn.nodemanager.aux-services 的值在 cdh4 中應該爲 mapreduce.shuffle,並配置參數yarn.nodemanager.aux-services.mapreduce.shuffle.class值爲 org.apache.hadoop.mapred.ShuffleHandler ,在cdh5中爲mapreduce_shuffle,這時候請配置yarn.nodemanager.aux-services.mapreduce_shuffle.class參數

b. 這裏配置了 yarn.application.classpath ,需要設置一些喜歡環境變量:

export HADOOP_HOME=/usr/lib/hadoop export HIVE_HOME=/usr/lib/hive export HBASE_HOME=/usr/lib/hbase export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce export HADOOP_COMMON_HOME=${HADOOP_HOME} export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop 

配置文件路徑

在hadoop中默認的文件路徑以及權限要求如下:

目錄                                                     所有者         權限             默認路徑
yarn.nodemanager.local-dirs               yarn:yarn   drwxr-xr-x    ${hadoop.tmp.dir}/nm-local-dir
yarn.nodemanager.log-dirs                   yarn:yarn     drwxr-xr-x      ${yarn.log.dir}/userlogs
yarn.nodemanager.remote-app-log-dir                                         hdfs://cdh1:8020/var/log/hadoop-yarn/apps 

在 /etc/hadoop/conf/yarn-site.xml文件中添加如下配置:

 yarn.nodemanager.local-dirs file:///data/yarn/local   yarn.nodemanager.log-dirs file:///data/yarn/logs   yarn.nodemanager.remote-app-log-dir /yarn/apps  

創建本地目錄

創建 yarn.nodemanager.local-dirs 和 yarn.nodemanager.log-dirs 參數對應的目錄:

$ mkdir -p /data/yarn/{local,logs} $ chown -R yarn:yarn /data/yarn 

創建Log目錄

在 hdfs 上創建 yarn.nodemanager.remote-app-log-dir 對應的目錄:

$ sudo -u hdfs hadoop fs -mkdir -p /yarn/apps
$ sudo -u hdfs hadoop fs -chown yarn:mapred /yarn/apps
$ sudo -u hdfs hadoop fs -chmod 1777 /yarn/apps 

配置History Server:

在 /etc/hadoop/conf/mapred-site.xml 中添加如下:

 mapreduce.jobhistory.address cdh1:10020   mapreduce.jobhistory.webapp.address cdh1:19888  

此外,確保 mapred 用戶能夠使用代理,在 /etc/hadoop/conf/core-site.xml 中添加如下參數:

 hadoop.proxyuser.mapred.groups *   hadoop.proxyuser.mapred.hosts *  

配置 Staging 目錄:

在 /etc/hadoop/conf/mapred-site.xml 中配置參數 yarn.app.mapreduce.am.staging-dir(該值默認爲:/tmp/hadoop-yarn/staging,請參見 mapred-default.xml):

 yarn.app.mapreduce.am.staging-dir /user  

並在 hdfs 上創建相應的目錄:

$ sudo -u hdfs hadoop fs -mkdir -p /user $ sudo -u hdfs hadoop fs -chmod 777 /user 

創建 history 子目錄

可選的,你可以在 /etc/hadoop/conf/mapred-site.xml 設置以下兩個參數:

  • mapreduce.jobhistory.intermediate-done-dir,該目錄權限應該爲1777,默認值爲 ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
  • mapreduce.jobhistory.done-dir,該目錄權限應該爲750,默認值爲 ${yarn.app.mapreduce.am.staging-dir}/history/done

在 hdfs 上創建目錄並設置權限:

$ sudo -u hdfs hadoop fs -mkdir -p /user/history $ sudo -u hdfs hadoop fs -chmod -R 1777 /user/history $ sudo -u hdfs hadoop fs -chown mapred:hadoop /user/history 

驗證 HDFS 結構:

$ sudo -u hdfs hadoop fs -ls -R / 

你應該看到如下結構:

drwxrwxrwt   - hdfs hadoop 0 2014-04-19 14:21 /tmp
drwxrwxrwx   - hdfs hadoop 0 2014-04-19 14:26 /user
drwxrwxrwt   - mapred hadoop 0 2014-04-19 14:31 /user/history
drwxr-x---   - mapred hadoop 0 2014-04-19 14:38 /user/history/done
drwxrwxrwt   - mapred hadoop 0 2014-04-19 14:48 /user/history/done_intermediate
drwxr-xr-x   - hdfs   hadoop 0 2014-04-19 15:31 /yarn
drwxrwxrwt   - yarn   mapred 0 2014-04-19 15:31 /yarn/apps 

看到上面的目錄結構,你就將NameNode上的配置文件同步到其他節點了,並且啓動 yarn 的服務。

同步配置文件

同步配置文件到整個集羣:

$ scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/ $ scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/ 

啓動服務

在 cdh1 節點啓動 mapred-historyserver :

$ /etc/init.d/hadoop-mapreduce-historyserver start 

在每個節點啓動 YARN :

$ for x in `ls /etc/init.d/|grep hadoop-yarn` ; do service $x start ; done 

爲每個 MapReduce 用戶創建主目錄,比如說 hive 用戶或者當前用戶:

$ sudo -u hdfs hadoop fs -mkdir /user/$USER $ sudo -u hdfs hadoop fs -chown $USER /user/$USER 

設置 HADOOP_MAPRED_HOME ,或者把其加入到 hadoop 的配置文件中

$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce 

訪問 web

通過 http://cdh1:8088/ 可以訪問 Yarn 的管理頁面。

通過 http://cdh1:19888/ 可以訪問 JobHistory 的管理頁面。

查看在線的節點:http://cdh1:8088/cluster/nodes

運行下面的測試程序,看是否報錯:

# Find how many jars name ending with examples you have inside location /usr/lib/ $ find /usr/lib/ -name "*hadoop*examples*.jar" # To list all the class name inside jar $ find /usr/lib/ -name "hadoop-examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}' # To search for specific class name inside jar $ find /usr/lib/ -name "hadoop-examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}' | grep -i wordcount.class # 運行 randomwriter 例子 $ sudo -u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter out 

4. 安裝 Zookeeper

簡單說明:

Zookeeper 至少需要3個節點,並且節點數要求是基數,這裏在所有節點上都安裝 Zookeeper。

安裝

在每個節點上安裝zookeeper

$ yum install zookeeper* -y 

修改配置文件

設置 zookeeper 配置 /etc/zookeeper/conf/zoo.cfg

maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=cdh1:2888:3888
server.2=cdh3:2888:3888
server.3=cdh3:2888:3888 

同步配置文件

將配置文件同步到其他節點:

$ scp -r /etc/zookeeper/conf root@cdh2:/etc/zookeeper/ $ scp -r /etc/zookeeper/conf root@cdh3:/etc/zookeeper/ 

初始化並啓動服務

在每個節點上初始化並啓動 zookeeper,注意 n 的值需要和 zoo.cfg 中的編號一致。

在 cdh1 節點運行

$ service zookeeper-server init --myid=1 $ service zookeeper-server start 

在 cdh2 節點運行

$ service zookeeper-server init --myid=2 $ service zookeeper-server start 

在 cdh3 節點運行

$ service zookeeper-server init --myid=3
$ service zookeeper-server start 

測試

通過下面命令測試是否啓動成功:

$ zookeeper-client -server cdh1:2181 

5. 安裝 HBase

HBase 依賴 ntp 服務,故需要提前安裝好 ntp。

安裝前設置

1)修改系統 ulimit 參數:

在 /etc/security/limits.conf 中添加下面兩行並使其生效:

hdfs  -       nofile  32768
hbase -       nofile  32768 

2)修改 dfs.datanode.max.xcievers

在 hdfs-site.xml 中修改該參數值,將該值調整到較大的值:

 dfs.datanode.max.xcievers 8192  

安裝

在每個節點上安裝 master 和 regionserver

$ yum install hbase hbase-master hbase-regionserver -y 

如果需要你可以安裝 hbase-rest、hbase-solr-indexer、hbase-thrift

修改配置文件

修改 hbase-site.xml文件,關鍵幾個參數及含義如下:

  • hbase.distributed:是否爲分佈式模式
  • hbase.rootdir:HBase在hdfs上的目錄路徑
  • hbase.tmp.dir:本地臨時目錄
  • hbase.zookeeper.quorum:zookeeper集羣地址,逗號分隔
  • hbase.hregion.max.filesize:hregion文件最大大小
  • hbase.hregion.memstore.flush.size:memstore文件最大大小

另外,在CDH5中建議關掉Checksums(見Upgrading HBase)以提高性能,修改爲如下:

  hbase.regionserver.checksum.verify false   hbase.hstore.checksum.algorithm NULL  

最後的配置如下,供參考:

  hbase.cluster.distributed true   hbase.rootdir hdfs://cdh1:8020/hbase   hbase.tmp.dir /data/hbase   hbase.zookeeper.quorum cdh1,cdh2,cdh3   hbase.hregion.max.filesize 536870912   hbase.hregion.memstore.flush.size 67108864   hbase.regionserver.lease.period 600000   hbase.client.retries.number 3   hbase.regionserver.handler.count 100   hbase.hstore.compactionThreshold 10   hbase.hstore.blockingStoreFiles 30   hbase.regionserver.checksum.verify false   hbase.hstore.checksum.algorithm NULL   

在 hdfs 中創建 /hbase 目錄

$ sudo -u hdfs hadoop fs -mkdir /hbase $ sudo -u hdfs hadoop fs -chown hbase:hbase /hbase 

設置 crontab 定時刪除日誌:

$ crontab -e
* 10 * * * cd /var/log/hbase/; rm -rf `ls /var/log/hbase/|grep -P 'hbase\-hbase\-.+\.log\.[0-9]'\`>> /dev/null & 

同步配置文件

將配置文件同步到其他節點:

$ scp -r /etc/hbase/conf root@cdh2:/etc/hbase/ $ scp -r /etc/hbase/conf root@cdh3:/etc/hbase/ 

創建本地目錄

在 hbase-site.xml 配置文件中配置了 hbase.tmp.dir 值爲 /data/hbase,現在需要在每個 hbase 節點創建該目錄並設置權限:

$ mkdir /data/hbase $ chown -R hbase:hbase /data/hbase/ 

啓動HBase

$ for x in `ls /etc/init.d/|grep hbase` ; do service $x start ; done 

訪問web

通過 http://cdh1:60030/ 可以訪問 RegionServer 頁面,然後通過該頁面可以知道哪個節點爲 Master,然後再通過 60010 端口訪問 Master 管理界面。

6. 安裝hive

在一個 NameNode 節點上安裝 hive:

$ yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase  -y 

在其他 DataNode 上安裝:

$ yum install hive hive-server2 hive-jdbc hive-hbase -y 

安裝postgresql

這裏使用 postgresq l數據庫來存儲元數據,如果你想使用 mysql 數據庫,請參考下文。

手動安裝、配置 postgresql 數據庫,請參考 手動安裝Cloudera Hive CDH

yum 方式安裝:

$ yum install postgresql-server -y 

初始化數據庫:

$ service postgresql initdb 

修改配置文件postgresql.conf,修改完後內容如下:

$ cat /var/lib/pgsql/data/postgresql.conf | grep -e listen -e standard_conforming_strings listen_addresses = '*' standard_conforming_strings = off 

修改 /var/lib/pgsql/data/pg_hba.conf,添加以下一行內容:

 host    all         all         0.0.0.0/0                     trust 

啓動數據庫

#配置開啓啓動 $ chkconfig postgresql on $ service postgresql start 

安裝jdbc驅動

$ yum install postgresql-jdbc -y $ ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/hive/lib/postgresql-jdbc.jar 

創建數據庫和用戶

 bash# su postgres
    bash$ psql postgres=# CREATE USER hiveuser WITH PASSWORD 'redhat'; postgres=# CREATE DATABASE metastore owner=hiveuser; postgres=# GRANT ALL privileges ON DATABASE metastore TO hiveuser; postgres=# \q; bash$ psql  -U hiveuser -d metastore postgres=# \i /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-0.13.0.postgres.sql SET
    SET
    .. 

注意:
創建的用戶爲hiveuser,密碼爲redhat,你可以按自己需要進行修改。
初始化數據庫的 sql 文件請根據 cdh 版本進行修改,這裏我的 cdh 版本是5.2.0,對應的文件是 ive-schema-0.13.0.postgres.sql

這時候的hive-site.xml文件內容如下:

  javax.jdo.option.ConnectionURL jdbc:postgresql://localhost/metastore   javax.jdo.option.ConnectionDriverName org.postgresql.Driver   javax.jdo.option.ConnectionUserName hiveuser   javax.jdo.option.ConnectionPassword redhat   datanucleus.autoCreateSchema false   mapreduce.framework.name yarn   yarn.resourcemanager.resource-tracker.address cdh1:8031   hive.files.umask.value 0002   hive.exec.reducers.max 999   hive.auto.convert.join true   hive.metastore.schema.verification true   hive.metastore.warehouse.dir /user/hive/warehouse   hive.warehouse.subdir.inherit.perms true   hive.metastore.uris thrift://cdh1:9083   hive.metastore.server.min.threads 200   hive.metastore.server.max.threads 100000   hive.metastore.client.socket.timeout 3600   hive.support.concurrency true   hive.zookeeper.quorum cdh1,cdh2,cdh3   hive.server2.thrift.min.worker.threads 5   hive.server2.thrift.max.worker.threads 100   

默認情況下,hive-server和 hive-server2 的 thrift 端口都未10000,如果要修改 hive-server2 thrift 端口,請添加:

 hive.server2.thrift.port 10001  

如果要設置運行 hive 的用戶爲連接的用戶而不是啓動用戶,則添加:

 hive.server2.enable.impersonation true  

並在 core-site.xml 中添加:

 hadoop.proxyuser.hive.hosts *   hadoop.proxyuser.hive.groups *  

安裝mysql

yum方式安裝mysql:

$ yum install mysql mysql-devel mysql-server mysql-libs -y 

啓動數據庫:

#配置開啓啓動 $ chkconfig mysqld on $ service mysqld start 

安裝jdbc驅動:

$ yum install mysql-connector-java $ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar 

我是在 cdh1 節點上創建 mysql 數據庫和用戶:

$ mysql -e "  CREATE DATABASE metastore;  USE metastore;  SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.13.0.mysql.sql;  CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'redhat';  GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'localhost';  GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'cdh1';  FLUSH PRIVILEGES; " 

注意:創建的用戶爲 hiveuser,密碼爲 redhat ,你可以按自己需要進行修改。

修改 hive-site.xml 文件中以下內容:

  javax.jdo.option.ConnectionURL jdbc:mysql://cdh1:3306/metastore?useUnicode=true&characterEncoding=UTF-8   javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver  

配置hive

修改/etc/hadoop/conf/hadoop-env.sh,添加環境變量 HADOOP_MAPRED_HOME,如果不添加,則當你使用 yarn 運行 mapreduce 時候會出現 UNKOWN RPC TYPE 的異常

export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce 

在 hdfs 中創建 hive 數據倉庫目錄:

  • hive 的數據倉庫在 hdfs 中默認爲 /user/hive/warehouse,建議修改其訪問權限爲 1777,以便其他所有用戶都可以創建、訪問表,但不能刪除不屬於他的表。
  • 每一個查詢 hive 的用戶都必須有一個 hdfs 的 home 目錄( /user 目錄下,如 root 用戶的爲 /user/root)
  • hive 所在節點的 /tmp 必須是 world-writable 權限的。

創建目錄並設置權限:

$ sudo -u hdfs hadoop fs -mkdir /user/hive $ sudo -u hdfs hadoop fs -chown hive /user/hive $ sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse $ sudo -u hdfs hadoop fs -chmod 1777 /user/hive/warehouse $ sudo -u hdfs hadoop fs -chown hive /user/hive/warehouse 

啓動hive-server和metastore:

$ service hive-metastore start $ service hive-server start $ service hive-server2 start 

測試:

$ hive -e 'create table t(id int);' $ hive -e 'select * from t limit 2;' $ hive -e 'select id from t;' 

訪問beeline:

$ /usr/lib/hive/bin/beeline
    beeline> !connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver
    0: jdbc:hive2://localhost:10000> SHOW TABLES; show tables; +-----------+ | tab_name | +-----------+
    +-----------+
    No rows selected (0.238 seconds) 0: jdbc:hive2://localhost:10000> 

其 sql語法參考SQLLine CLI,在這裏,你不能使用HiveServer的sql語句

與hbase集成

先安裝 hive-hbase:

$ yum install hive-hbase -y 

如果你是使用的 cdh4,則需要在 hive shell 裏執行以下命令添加 jar:

$ ADD JAR /usr/lib/hive/lib/zookeeper.jar; $ ADD JAR /usr/lib/hive/lib/hbase.jar; $ ADD JAR /usr/lib/hive/lib/hive-hbase-handler-.jar $ ADD JAR /usr/lib/hive/lib/guava-11.0.2.jar; 

說明: guava 包的版本以實際版本爲準。

如果你是使用的 cdh5,則需要在 hive shell 裏執行以下命令添加 jar:

ADD JAR /usr/lib/hive/lib/zookeeper.jar;
ADD JAR /usr/lib/hive/lib/hive-hbase-handler.jar;
ADD JAR /usr/lib/hbase/lib/guava-12.0.1.jar;
ADD JAR /usr/lib/hbase/hbase-client.jar;
ADD JAR /usr/lib/hbase/hbase-common.jar;
ADD JAR /usr/lib/hbase/hbase-hadoop-compat.jar;
ADD JAR /usr/lib/hbase/hbase-hadoop2-compat.jar;
ADD JAR /usr/lib/hbase/hbase-protocol.jar;
ADD JAR /usr/lib/hbase/hbase-server.jar; 

以上你也可以在 hive-site.xml 中通過 hive.aux.jars.path 參數來配置,或者你也可以在 hive-env.sh 中通過 export HIVE_AUX_JARS_PATH= 來設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章