使用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
- 在/etc/hadoop/conf/core-site.xml中設置fs.defaultFS屬性值,該屬性指定NameNode是哪一個節點以及使用的文件系統是file還是hdfs,格式:hdfs://:/,默認的文件系統是file:///
- 在/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/:
- 如果你安裝的是 CDH4,請下載Red Hat/CentOS 6
- 如果你安裝的是 CDH5,請下載Red Hat/CentOS 6
然後,安裝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= 來設置。