使用yum安裝CDH Hadoop集羣

原文:http://blog.javachen.com/2013/04/06/install-cloudera-cdh-by-yum.htmlhtml

本文主要是記錄使用yum安裝CDH Hadoop集羣的過程,包括HDFS、Yarn、Hive和HBase。本文使用CDH5.4版本進行安裝,故下文中的過程都是針對CDH5.4版本的java

0. 環境說明

系統環境:node

  • 操做系統:CentOs 6.6
  • Hadoop版本:CDH5.4
  • JDK版本:1.7.0_71
  • 運行用戶:root

集羣各節點角色規劃爲:mysql

192.168.56.121        cdh1     NameNode、ResourceManager、HBase、Hive metastore、Impala Catalog、Impala statestore、Sentry 
192.168.56.122        cdh2     DataNode、SecondaryNameNode、NodeManager、HBase、Hive Server二、Impala Server
192.168.56.123        cdh3     DataNode、HBase、NodeManager、Hive Server二、Impala Server

cdh1做爲master節點,其餘節點做爲slave節點。linux

1. 準備工做

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

1.1 配置hosts

CDH 要求使用 IPv4,IPv6 不支持,禁用IPv6方法:sql

bash$ 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

使其生效:shell

bash$ sysctl -p

最後確認是否已禁用:數據庫

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

一、設置hostname,以cdh1爲例:apache

bash$ hostname cdh1

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

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

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

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

bash$ 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:

bash$ 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命令:

bash$ yum install bind-utils -y

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

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

五、hadoop的全部配置文件中配置節點名稱時,請使用hostname和不是ip

1.2 關閉防火牆

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

#清空iptables
$ iptables -F

1.3 時鐘同步

搭建時鐘同步服務器

這裏選擇 cdh1 節點爲時鐘同步服務器,其餘節點爲客戶端同步時間到該節點。安裝ntp:

bash$ 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:

bash#設置開機啓動
$ chkconfig ntpd on

$ service ntpd start

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節點上執行下面操做:

bash$ ntpdate cdh1

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

若是想定時進行時間校準,可使用crond服務來定時執行。

bash# 天天 1:00 Linux 系統就會自動的進行網絡時間校準
00 1 * * * root /usr/sbin/ntpdate 192.168.56.121 >> /root/ntpdate.log 2>&1

1.4 安裝jdk

CDH5.4要求使用JDK1.7,JDK的安裝過程請參考網上文章。

1.5 設置本地yum源

CDH官方的yum源地址在 http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/cloudera-cdh4.rep...http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.rep... ,請根據你安裝的cdh版本修改該文件中baseurl的路徑。

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

由於我是使用的centos操做系統,故我這裏下載的是cdh5的centos6壓縮包,將其下載以後解壓到ftp服務的路徑下,而後配置cdh的本地yum源:

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

操做系統的yum源,建議你經過下載 centos 的 dvd 而後配置一個本地的 yum 源。

2. 安裝和配置HDFS

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

在 cdh1 節點安裝 hadoop-hdfs-namenode:

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

在 cdh2 節點安裝 hadoop-hdfs-secondarynamenode

bash$ yum install hadoop-hdfs-secondarynamenode -y

在 cdh二、cdh3節點安裝 hadoop-hdfs-datanode

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

NameNode HA 的配置過程請參考CDH中配置HDFS HA,建議暫時不用配置。

2.1 修改hadoop配置文件

/etc/hadoop/conf/core-site.xml中設置fs.defaultFS屬性值,該屬性指定NameNode是哪個節點以及使用的文件系統是file仍是hdfs,格式:hdfs://<namenode host>:<namenode port>/,默認的文件系統是file:///

xml<property>
 <name>fs.defaultFS</name>
 <value>hdfs://cdh1:8020</value>
</property>

/etc/hadoop/conf/hdfs-site.xml中設置dfs.permissions.superusergroup屬性,該屬性指定hdfs的超級用戶,默認爲hdfs,你能夠修改成hadoop:

xml<property>
 <name>dfs.permissions.superusergroup</name>
 <value>hadoop</value>
</property>

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

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.xm l中只配置hadoop.tmp.dir,也能夠分別配置上面的路徑。這裏使用分別配置的方式,hdfs-site.xml中配置以下:

xml<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/dfs/nn</value>
</property>

<property>
 <name>dfs.datanode.data.dir</name>
<value>file:///data/dfs/dn</value>
</property>

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

bash$ mkdir -p /data/dfs/nn

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

bash$ mkdir -p /data/dfs/dn

修改上面目錄全部者:

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

hadoop的進程會自動設置 dfs.data.dirdfs.datanode.data.dir,可是 dfs.name.dirdfs.namenode.name.dir 的權限默認爲755,須要手動設置爲700:

bash$ chmod 700 /data/dfs/nn

# 或者
$ chmod go-rx /data/dfs/nn

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

2.3 配置 SecondaryNameNode

配置 SecondaryNameNode 須要在 /etc/hadoop/conf/hdfs-site.xml 中添加如下參數:

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

/etc/hadoop/conf/hdfs-site.xml 中加入以下配置,將cdh2設置爲 SecondaryNameNode:

xml<property>
  <name>dfs.secondary.http.address</name>
  <value>cdh2:50090</value>
</property>

設置多個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 中配置如下三個參數:

  • 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

詳細說明,請參考 Optionally configure DataNode storage balancing

2.6 開啓WebHDFS

在NameNode節點上安裝:

bash$ yum install hadoop-httpfs -y

而後修改 /etc/hadoop/conf/core-site.xml配置代理用戶:

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

2.7 配置LZO

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

而後,安裝lzo:

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

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

xml<property>
  <name>io.compression.codecs</name>
  <value>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</value>
</property>
<property>
  <name>io.compression.codec.lzo.class</name>
  <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

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

2.8 (可選)配置Snappy

cdh 的 rpm 源中默認已經包含了 snappy ,直接在每一個節點安裝Snappy:

bash$ yum install snappy snappy-devel  -y

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

使 snappy 對 hadoop 可用:

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

2.9 啓動HDFS

將cdh1上的配置文件同步到每個節點:

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

在cdh1節點格式化NameNode:

bash$ sudo -u hdfs hadoop namenode -format

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

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

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

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

若是安裝了HttpFS,則啓動 HttpFS 服務:

bash$ service hadoop-httpfs start

2.10 測試

經過 http://cdh1:50070/ 能夠訪問 NameNode 頁面。使用 curl 運行下面命令,能夠測試 webhdfs 並查看執行結果:

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

更多的 API,請參考 WebHDFS REST API

3. 安裝和配置YARN

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

3.1 安裝服務

在 cdh1 節點安裝:

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

#安裝 historyserver
$ yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver -y

在 cdh二、cdh3 節點安裝:

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

3.2 修改配置參數

要想使用YARN,須要在 /etc/hadoop/conf/mapred-site.xml 中作以下配置:

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

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

xml<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>cdh1:8031</value>
</property>
<property>
    <name>yarn.resourcemanager.address</name>
    <value>cdh1:8032</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>cdh1:8030</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>cdh1:8033</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>cdh1:8088</value>
</property>

/etc/hadoop/conf/yarn-site.xml 中添加以下配置:

xml<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>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <name>yarn.application.classpath</name>
   <value>
    $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/*
    </value>
</property>
<property>
    <name>yarn.log.aggregation.enable</name>
    <value>true</value>
</property>

注意:

  • 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參數

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

bashexport 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 文件中添加以下配置:

xml<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/yarn/local</value>
</property>
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/yarn/logs</value>
</property>
<property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/yarn/apps</value>
</property>

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

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

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

bash$ 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

/etc/hadoop/conf/mapred-site.xml 中配置 MapReduce History Server:

xml<property>
    <name>mapreduce.jobhistory.address</name>
    <value>cdh1:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>cdh1:19888</value>
</property>

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

xml<property>
    <name>hadoop.proxyuser.mapred.groups</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.mapred.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.yarn.groups</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.yarn.hosts</name>
    <value>*</value>
</property>

配置 Staging 目錄:

xml<property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/user</value>
</property>

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

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

可選的,你能夠在 /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 上建立目錄並設置權限:

bash$ 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

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

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

3.4 驗證 HDFS 結構:

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

你應該看到以下結構:

bashdrwxrwxrwt   - 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

3.5 同步配置文件

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

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

3.6 啓動服務

在每一個節點啓動 YARN :

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

在 cdh1 節點啓動 mapred-historyserver :

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

爲每一個 MapReduce 用戶建立主目錄,好比說 hive 用戶或者當前用戶:

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

3.7 測試

經過 http://cdh1:8088/ 能夠訪問 Yarn 的管理頁面,經過 http://cdh1:19888/ 能夠訪問 JobHistory 的管理頁面,查看在線的節點:http://cdh1:8088/cluster/nodes

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

bash# 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。

4.1 安裝

在每一個節點上安裝zookeeper:

bash$ yum install zookeeper* -y

4.2 修改配置文件

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

propertiesmaxClientCnxns=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

4.3 同步配置文件

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

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

4.4 初始化並啓動服務

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

在 cdh1 節點運行:

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

在 cdh2 節點運行:

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

在 cdh3 節點運行:

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

4.5 測試

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

bash$ zookeeper-client -server cdh1:2181

5. 安裝 HBase

HBase 依賴 ntp 服務,故須要提早安裝好 ntp。

5.1 安裝前設置

1)修改系統 ulimit 參數,在 /etc/security/limits.conf 中添加下面兩行並使其生效:

hdfs  -       nofile  32768
hbase -       nofile  32768

2)修改 dfs.datanode.max.xcievers,在 hdfs-site.xml 中修改該參數值,將該值調整到較大的值:

xml<property>
  <name>dfs.datanode.max.xcievers</name>
  <value>8192</value>
</property>

5.2 安裝

在每一個節點上安裝 master 和 regionserver,若是須要你能夠安裝 hbase-rest、hbase-solr-indexer、hbase-thrift

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

5.3 修改配置文件

修改 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)以提升性能,最後的配置以下:

xml<configuration>
  <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
  </property>
  <property>
      <name>hbase.rootdir</name>
      <value>hdfs://cdh1:8020/hbase</value>
  </property>
  <property>
      <name>hbase.tmp.dir</name>
      <value>/data/hbase</value>
  </property>
  <property>
      <name>hbase.zookeeper.quorum</name>
      <value>cdh1,cdh2,cdh3</value>
  </property>
  <property>
    <name>hbase.hregion.max.filesize</name>
    <value>536870912</value>
  </property>
  <property>
    <name>hbase.hregion.memstore.flush.size</name>
    <value>67108864</value>
  </property>
  <property>
    <name>hbase.regionserver.lease.period</name>
    <value>600000</value>
  </property>
  <property>
    <name>hbase.client.retries.number</name>
    <value>3</value>
  </property>
  <property>
    <name>hbase.regionserver.handler.count</name>
    <value>100</value>
  </property>
  <property>
    <name>hbase.hstore.compactionThreshold</name>
    <value>10</value>
  </property>
  <property>
    <name>hbase.hstore.blockingStoreFiles</name>
    <value>30</value>
  </property>

  <property>
    <name>hbase.regionserver.checksum.verify</name>
    <value>false</value>
  </property>
  <property>
    <name>hbase.hstore.checksum.algorithm</name>
    <value>NULL</value>
  </property>
</configuration>

在 hdfs 中建立 /hbase 目錄

bash$ 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 &

5.4 同步配置文件

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

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

5.5 建立本地目錄

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

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

5.6 啓動HBase

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

5.7 測試

經過 http://cdh1:60030/ 能夠訪問 RegionServer 頁面,而後經過該頁面能夠知道哪一個節點爲 Master,而後再經過 60010 端口訪問 Master 管理界面。

6. 安裝hive

在一個 NameNode 節點上安裝 hive:

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

在其餘 DataNode 上安裝:

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

安裝postgresql

這裏使用 postgresq l數據庫來存儲元數據,若是你想使用 mysql 數據庫,請參考下文。手動安裝、配置 postgresql 數據庫,請參考 手動安裝Cloudera Hive CDH

yum 方式安裝:

$ yum install postgresql-server -y

初始化數據庫:

bash$ service postgresql initdb

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

bash$ 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

啓動數據庫:

bash#配置開啓啓動
$ chkconfig postgresql on

$ service postgresql start

安裝jdbc驅動:

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

建立數據庫和用戶:

bashbash# 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文件內容以下:

xml<configuration>
        <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:postgresql://localhost/metastore</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>org.postgresql.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hiveuser</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>redhat</value>
    </property>
    <property>
        <name>datanucleus.autoCreateSchema</name>
        <value>false</value>
    </property>

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>cdh1:8031</value>
    </property>

    <property>
        <name>hive.files.umask.value</name>
        <value>0002</value>
    </property>
    <property>
        <name>hive.exec.reducers.max</name>
        <value>999</value>
    </property>
    <property>
        <name>hive.auto.convert.join</name>
        <value>true</value>
    </property>

    <property>
        <name>hive.metastore.schema.verification</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.warehouse.subdir.inherit.perms</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://cdh1:9083</value>
    </property>
    <property>
        <name>hive.metastore.server.min.threads</name>
        <value>200</value>
    </property>
    <property>
        <name>hive.metastore.server.max.threads</name>
        <value>100000</value>
    </property>
    <property>
        <name>hive.metastore.client.socket.timeout</name>
        <value>3600</value>
    </property>

    <property>
        <name>hive.support.concurrency</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.zookeeper.quorum</name>
        <value>cdh1,cdh2,cdh3</value>
    </property>
    <property>
        <name>hive.server2.thrift.min.worker.threads</name>
        <value>5</value>
    </property>
    <property>
        <name>hive.server2.thrift.max.worker.threads</name>
        <value>100</value>
    </property>
</configuration>

默認狀況下,hive-server和 hive-server2 的 thrift 端口都未10000,若是要修改 hive-server2 thrift 端口,請修改 hive.server2.thrift.port 參數的值:

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

xml<property>
    <name>hive.server2.enable.impersonation</name>
    <value>true</value>
</property>

並在 core-site.xml 中添加:

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

安裝mysql

yum方式安裝mysql:

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

啓動數據庫:

bash#配置開啓啓動
$ chkconfig mysqld on

$ service mysqld start

安裝jdbc驅動:

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

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

bash$ 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 文件中如下內容:

xml<property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://cdh1:3306/metastore?useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>

配置hive

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

bashexport 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 權限的。

建立目錄並設置權限:

bash$ 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:

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

測試

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

訪問beeline:

bash$ beeline
beeline> !connect jdbc:hive2://localhost:10000 hive hive org.apache.hive.jdbc.HiveDriver

與hbase集成

先安裝 hive-hbase:

bash$ yum install hive-hbase -y

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

bash$ 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-<hive_version>.jar
# guava 包的版本以實際版本爲準。
$ ADD JAR /usr/lib/hive/lib/guava-11.0.2.jar;

若是你是使用的 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= 來設置。

7. 參考文章

相關文章
相關標籤/搜索